+enum lttng_event_type {
+ LTTNG_EVENT_ALL = -1,
+ LTTNG_EVENT_TRACEPOINT = 0,
+ LTTNG_EVENT_PROBE = 1,
+ LTTNG_EVENT_FUNCTION = 2,
+ LTTNG_EVENT_FUNCTION_ENTRY = 3,
+ LTTNG_EVENT_NOOP = 4,
+ LTTNG_EVENT_SYSCALL = 5,
+};
+
+/*
+ * Loglevel information.
+ */
+enum lttng_loglevel_type {
+ LTTNG_EVENT_LOGLEVEL_ALL = 0,
+ LTTNG_EVENT_LOGLEVEL_RANGE = 1,
+ LTTNG_EVENT_LOGLEVEL_SINGLE = 2,
+};
+
+/*
+ * 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 consumer mode
+ */
+enum lttng_event_output {
+ LTTNG_EVENT_SPLICE = 0,
+ LTTNG_EVENT_MMAP = 1,
+};
+
+/* Event context possible type */
+enum lttng_event_context_type {
+ LTTNG_EVENT_CONTEXT_PID = 0,
+ LTTNG_EVENT_CONTEXT_PERF_COUNTER = 1,
+ LTTNG_EVENT_CONTEXT_PROCNAME = 2,
+ LTTNG_EVENT_CONTEXT_PRIO = 3,
+ LTTNG_EVENT_CONTEXT_NICE = 4,
+ LTTNG_EVENT_CONTEXT_VPID = 5,
+ LTTNG_EVENT_CONTEXT_TID = 6,
+ LTTNG_EVENT_CONTEXT_VTID = 7,
+ LTTNG_EVENT_CONTEXT_PPID = 8,
+ LTTNG_EVENT_CONTEXT_VPPID = 9,
+ LTTNG_EVENT_CONTEXT_PTHREAD_ID = 10,
+};
+
+enum lttng_calibrate_type {
+ LTTNG_CALIBRATE_FUNCTION = 0,
+};
+
+/* Destination type of lttng URI */
+enum lttng_dst_type {
+ LTTNG_DST_IPV4, /* IPv4 protocol */
+ LTTNG_DST_IPV6, /* IPv6 protocol */
+ LTTNG_DST_PATH, /* Local file system */
+};
+
+/* 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];
+ 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 {
+ enum lttng_domain_type type;
+ char padding[LTTNG_DOMAIN_PADDING1];
+
+ union {
+ pid_t pid;
+ char exec_name[NAME_MAX];
+ char padding[LTTNG_DOMAIN_PADDING2];
+ } attr;
+};
+
+/*
+ * 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;
+ uint64_t config;
+ char name[LTTNG_SYMBOL_NAME_LEN];
+
+ char padding[LTTNG_PERF_EVENT_PADDING1];
+};
+
+/*
+ * 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 {
+ enum lttng_event_context_type ctx;
+ char padding[LTTNG_EVENT_CONTEXT_PADDING1];
+
+ union {
+ struct lttng_event_perf_counter_ctx perf_counter;
+ char padding[LTTNG_EVENT_CONTEXT_PADDING2];
+ } u;
+};
+
+/*
+ * 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 {
+ uint64_t addr;
+
+ uint64_t offset;
+ char symbol_name[LTTNG_SYMBOL_NAME_LEN];
+
+ char padding[LTTNG_EVENT_PROBE_PADDING1];
+};
+
+/*
+ * Function tracer
+ *
+ * The structures should be initialized to zero before use.
+ */
+#define LTTNG_EVENT_FUNCTION_PADDING1 16
+struct lttng_event_function_attr {
+ char symbol_name[LTTNG_SYMBOL_NAME_LEN];
+
+ char padding[LTTNG_EVENT_FUNCTION_PADDING1];
+};
+
+/*
+ * Generic lttng event
+ *
+ * The structures should be initialized to zero before use.
+ */
+#define LTTNG_EVENT_PADDING1 16
+#define LTTNG_EVENT_PADDING2 LTTNG_SYMBOL_NAME_LEN + 32
+struct lttng_event {
+ enum lttng_event_type type;
+ char name[LTTNG_SYMBOL_NAME_LEN];
+
+ enum lttng_loglevel_type loglevel_type;
+ int loglevel;
+
+ int32_t enabled; /* Does not apply: -1 */
+ pid_t pid;
+
+ char padding[LTTNG_EVENT_PADDING1];
+
+ /* Per event type configuration */
+ union {
+ struct lttng_event_probe_attr probe;
+ struct lttng_event_function_attr ftrace;
+
+ char padding[LTTNG_EVENT_PADDING2];
+ } 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 {
+ int overwrite; /* 1: overwrite, 0: discard */
+ uint64_t subbuf_size; /* bytes */
+ uint64_t num_subbuf; /* power of 2 */
+ unsigned int switch_timer_interval; /* usec */
+ unsigned int read_timer_interval; /* usec */
+ enum lttng_event_output output; /* splice, mmap */
+
+ char padding[LTTNG_CHANNEL_ATTR_PADDING1];
+};
+
+/*
+ * 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 {
+ char name[LTTNG_SYMBOL_NAME_LEN];
+ uint32_t enabled;
+ struct lttng_channel_attr attr;
+
+ char padding[LTTNG_CHANNEL_PADDING1];
+};
+
+#define LTTNG_CALIBRATE_PADDING1 16
+struct lttng_calibrate {
+ enum lttng_calibrate_type type;
+
+ char padding[LTTNG_CALIBRATE_PADDING1];