* Copyright (C) 2011 - David Goulet <david.goulet@polymtl.ca>
*
* This library is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as published by the
- * Free Software Foundation; only version 2.1 of the License.
+ * under the terms of the GNU Lesser General Public License, version 2.1 only,
+ * as published by the Free Software Foundation.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
#define _LTTNG_H
#include <limits.h>
+#include <netinet/in.h>
#include <stdint.h>
#include <sys/types.h>
*/
#define LTTNG_SYMBOL_NAME_LEN 256
+/*
+ * Maximum length of a domain name. This is the limit for the total length of a
+ * domain name specified by the RFC 1035 (https://www.ietf.org/rfc/rfc1035.txt)
+ */
+#define LTTNG_MAX_DNNAME 255
+
/*
* Every lttng_event_* structure both apply to kernel event and user-space
* event.
* Available loglevels.
*/
enum lttng_loglevel {
- LTTNG_LOGLEVEL_EMERG = 0,
- LTTNG_LOGLEVEL_ALERT = 1,
- LTTNG_LOGLEVEL_CRIT = 2,
- LTTNG_LOGLEVEL_ERR = 3,
- LTTNG_LOGLEVEL_WARNING = 4,
- LTTNG_LOGLEVEL_NOTICE = 5,
- LTTNG_LOGLEVEL_INFO = 6,
- LTTNG_LOGLEVEL_DEBUG_SYSTEM = 7,
- LTTNG_LOGLEVEL_DEBUG_PROGRAM = 8,
- LTTNG_LOGLEVEL_DEBUG_PROCESS = 9,
- LTTNG_LOGLEVEL_DEBUG_MODULE = 10,
- LTTNG_LOGLEVEL_DEBUG_UNIT = 11,
- LTTNG_LOGLEVEL_DEBUG_FUNCTION = 12,
- LTTNG_LOGLEVEL_DEBUG_LINE = 13,
- LTTNG_LOGLEVEL_DEBUG = 14,
+ LTTNG_LOGLEVEL_EMERG = 0,
+ LTTNG_LOGLEVEL_ALERT = 1,
+ LTTNG_LOGLEVEL_CRIT = 2,
+ LTTNG_LOGLEVEL_ERR = 3,
+ LTTNG_LOGLEVEL_WARNING = 4,
+ LTTNG_LOGLEVEL_NOTICE = 5,
+ LTTNG_LOGLEVEL_INFO = 6,
+ LTTNG_LOGLEVEL_DEBUG_SYSTEM = 7,
+ LTTNG_LOGLEVEL_DEBUG_PROGRAM = 8,
+ LTTNG_LOGLEVEL_DEBUG_PROCESS = 9,
+ LTTNG_LOGLEVEL_DEBUG_MODULE = 10,
+ LTTNG_LOGLEVEL_DEBUG_UNIT = 11,
+ LTTNG_LOGLEVEL_DEBUG_FUNCTION = 12,
+ LTTNG_LOGLEVEL_DEBUG_LINE = 13,
+ LTTNG_LOGLEVEL_DEBUG = 14,
};
/*
LTTNG_CALIBRATE_FUNCTION = 0,
};
+/* Destination type of lttng URI */
+enum lttng_dst_type {
+ LTTNG_DST_IPV4 = 1,
+ LTTNG_DST_IPV6 = 2,
+ LTTNG_DST_PATH = 3,
+};
+
+/* Type of lttng URI where it is a final destination or a hop */
+enum lttng_uri_type {
+ LTTNG_URI_DST, /* The URI is a final destination */
+ /*
+ * Hop are not supported yet but planned for a future release.
+ *
+ LTTNG_URI_HOP,
+ */
+};
+
+/* Communication stream type of a lttng URI */
+enum lttng_stream_type {
+ LTTNG_STREAM_CONTROL,
+ LTTNG_STREAM_DATA,
+};
+
+/*
+ * Protocol type of a lttng URI. The value 0 indicate that the proto_type field
+ * should be ignored.
+ */
+enum lttng_proto_type {
+ LTTNG_TCP = 1,
+ /*
+ * UDP protocol is not supported for now.
+ *
+ LTTNG_UDP = 2,
+ */
+};
+
+/*
+ * Structure representing an URI supported by lttng.
+ */
+#define LTTNG_URI_PADDING1_LEN 16
+#define LTTNG_URI_PADDING2_LEN LTTNG_SYMBOL_NAME_LEN + 32
+struct lttng_uri {
+ enum lttng_dst_type dtype;
+ enum lttng_uri_type utype;
+ enum lttng_stream_type stype;
+ enum lttng_proto_type proto;
+ in_port_t port;
+ char padding[LTTNG_URI_PADDING1_LEN];
+ char subdir[PATH_MAX];
+ union {
+ char ipv4[INET_ADDRSTRLEN];
+ char ipv6[INET6_ADDRSTRLEN];
+ char path[PATH_MAX];
+ char padding[LTTNG_URI_PADDING2_LEN];
+ } dst;
+};
+
+/*
+ * The structures should be initialized to zero before use.
+ */
#define LTTNG_DOMAIN_PADDING1 16
#define LTTNG_DOMAIN_PADDING2 LTTNG_SYMBOL_NAME_LEN + 32
struct lttng_domain {
} attr;
};
-/* Perf counter attributes */
+/*
+ * Perf counter attributes
+ *
+ * The structures should be initialized to zero before use.
+ */
#define LTTNG_PERF_EVENT_PADDING1 16
struct lttng_event_perf_counter_ctx {
uint32_t type;
char padding[LTTNG_PERF_EVENT_PADDING1];
};
-/* Event/Channel context */
+/*
+ * Event/channel context
+ *
+ * The structures should be initialized to zero before use.
+ */
#define LTTNG_EVENT_CONTEXT_PADDING1 16
#define LTTNG_EVENT_CONTEXT_PADDING2 LTTNG_SYMBOL_NAME_LEN + 32
struct lttng_event_context {
* Event probe.
*
* Either addr is used or symbol_name and offset.
+ *
+ * The structures should be initialized to zero before use.
*/
#define LTTNG_EVENT_PROBE_PADDING1 16
struct lttng_event_probe_attr {
/*
* Function tracer
+ *
+ * The structures should be initialized to zero before use.
*/
#define LTTNG_EVENT_FUNCTION_PADDING1 16
struct lttng_event_function_attr {
/*
* Generic lttng event
+ *
+ * The structures should be initialized to zero before use.
*/
-#define LTTNG_EVENT_PADDING1 16
+#define LTTNG_EVENT_PADDING1 15
#define LTTNG_EVENT_PADDING2 LTTNG_SYMBOL_NAME_LEN + 32
struct lttng_event {
enum lttng_event_type type;
enum lttng_loglevel_type loglevel_type;
int loglevel;
- uint32_t enabled;
+ int32_t enabled; /* Does not apply: -1 */
pid_t pid;
+ unsigned char filter; /* filter enabled ? */
char padding[LTTNG_EVENT_PADDING1];
} attr;
};
+enum lttng_event_field_type {
+ LTTNG_EVENT_FIELD_OTHER = 0,
+ LTTNG_EVENT_FIELD_INTEGER = 1,
+ LTTNG_EVENT_FIELD_ENUM = 2,
+ LTTNG_EVENT_FIELD_FLOAT = 3,
+ LTTNG_EVENT_FIELD_STRING = 4,
+};
+
+#define LTTNG_EVENT_FIELD_PADDING LTTNG_SYMBOL_NAME_LEN + 32
+struct lttng_event_field {
+ char field_name[LTTNG_SYMBOL_NAME_LEN];
+ enum lttng_event_field_type type;
+ char padding[LTTNG_EVENT_FIELD_PADDING];
+ struct lttng_event event;
+};
+
/*
* Tracer channel attributes. For both kernel and user-space.
+ *
+ * The structures should be initialized to zero before use.
*/
#define LTTNG_CHANNEL_ATTR_PADDING1 LTTNG_SYMBOL_NAME_LEN + 32
struct lttng_channel_attr {
/*
* Channel information structure. For both kernel and user-space.
+ *
+ * The structures should be initialized to zero before use.
*/
#define LTTNG_CHANNEL_PADDING1 16
struct lttng_channel {
* This is an 'output data' meaning that it only comes *from* the session
* daemon *to* the lttng client. It's basically a 'human' representation of
* tracing entities (here a session).
+ *
+ * The structures should be initialized to zero before use.
*/
#define LTTNG_SESSION_PADDING1 16
struct lttng_session {
/*
* Handle used as a context for commands.
+ *
+ * The structures should be initialized to zero before use.
*/
#define LTTNG_HANDLE_PADDING1 16
struct lttng_handle {
*/
extern int lttng_create_session(const char *name, const char *path);
+/*
+ * Create a tracing sessioin using a name, URIs and a consumer enable flag.
+ * The control URI is mandatory for consumer local or network.
+ */
+extern int lttng_create_session_uri(const char *name,
+ struct lttng_uri *ctrl_uri, struct lttng_uri *data_uri,
+ unsigned int enable_consumer);
+
/*
* Destroy a tracing session.
*
extern int lttng_list_tracepoints(struct lttng_handle *handle,
struct lttng_event **events);
+/*
+ * List the available tracepoints fields of a specific lttng domain.
+ *
+ * Return the size (number of entries) of the "lttng_event_field" array.
+ * Caller must free(3).
+ */
+extern int lttng_list_tracepoint_fields(struct lttng_handle *handle,
+ struct lttng_event_field **fields);
+
/*
* Check if a session daemon is alive.
*
extern int lttng_enable_event(struct lttng_handle *handle,
struct lttng_event *ev, const char *channel_name);
+/*
+ * Apply a filter expression to an event.
+ *
+ * If event_name is NULL, the filter is applied to all events of the channel.
+ * If channel_name is NULL, a lookup of the event's channel is done.
+ * If both are NULL, the filter is applied to all events of all channels.
+ */
+extern int lttng_set_event_filter(struct lttng_handle *handle,
+ const char *event_name,
+ const char *channel_name,
+ const char *filter_expression);
/*
* Create or enable a channel.
* The channel name cannot be NULL.
extern void lttng_channel_set_default_attr(struct lttng_domain *domain,
struct lttng_channel_attr *attr);
+/*
+ * Set URI for a consumer for a session and domain.
+ *
+ * For network streaming, both data and control stream type MUST be defined
+ * with a specific URIs. Default port are 5342 and 5343 respectively for
+ * control and data which uses the TCP protocol.
+ */
+extern int lttng_set_consumer_uri(struct lttng_handle *handle,
+ struct lttng_uri *uri);
+
+/*
+ * Enable the consumer for a session and domain.
+ */
+extern int lttng_enable_consumer(struct lttng_handle *handle);
+
+/*
+ * Disable consumer for a session and domain.
+ */
+extern int lttng_disable_consumer(struct lttng_handle *handle);
+
#endif /* _LTTNG_H */