X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=include%2Flttng%2Flttng.h;h=f0be224b53c1b2343c2e34961bf7a5f18dd3982c;hb=cde3e505b7948c15880114268534d21fb1f10a1c;hp=6077047642fe628530a1b7803f40b69dcb9be3f0;hpb=785d2d0dc3aec3a4e44fcf677155dd07e8e4cc1f;p=lttng-tools.git diff --git a/include/lttng/lttng.h b/include/lttng/lttng.h index 607704764..f0be224b5 100644 --- a/include/lttng/lttng.h +++ b/include/lttng/lttng.h @@ -23,7 +23,17 @@ #define LTTNG_H #include +/* + * Necessary to include the fixed width type limits on glibc versions older + * than 2.18 when building with a C++ compiler. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS #include +#undef __STDC_LIMIT_MACROS +#else /* #ifndef __STDC_LIMIT_MACROS */ +#include +#endif /* #else #ifndef __STDC_LIMIT_MACROS */ #include /* Error codes that can be returned by API calls */ @@ -47,18 +57,9 @@ extern "C" { * Domain types: the different possible tracers. */ enum lttng_domain_type { - LTTNG_DOMAIN_KERNEL = 1, - LTTNG_DOMAIN_UST = 2, - - /* - * For now, the domains below are not implemented. However, we keep them - * here in order to retain their enum values for future development. Note - * that it is on the roadmap to implement them. - * - LTTNG_DOMAIN_UST_EXEC_NAME = 3, - LTTNG_DOMAIN_UST_PID = 4, - LTTNG_DOMAIN_UST_PID_FOLLOW_CHILDREN = 5, - */ + LTTNG_DOMAIN_KERNEL = 1, /* Linux Kernel tracer. */ + LTTNG_DOMAIN_UST = 2, /* Global Userspace tracer. */ + LTTNG_DOMAIN_JUL = 3, /* Java Util Logging. */ }; /* @@ -104,6 +105,22 @@ enum lttng_loglevel { LTTNG_LOGLEVEL_DEBUG = 14, }; +/* + * Available loglevels for the JUL domain. Those are an exact map from the + * class java.util.logging.Level. + */ +enum lttng_loglevel_jul { + LTTNG_LOGLEVEL_JUL_OFF = INT32_MAX, + LTTNG_LOGLEVEL_JUL_SEVERE = 1000, + LTTNG_LOGLEVEL_JUL_WARNING = 900, + LTTNG_LOGLEVEL_JUL_INFO = 800, + LTTNG_LOGLEVEL_JUL_CONFIG = 700, + LTTNG_LOGLEVEL_JUL_FINE = 500, + LTTNG_LOGLEVEL_JUL_FINER = 400, + LTTNG_LOGLEVEL_JUL_FINEST = 300, + LTTNG_LOGLEVEL_JUL_ALL = INT32_MIN, +}; + /* * LTTng consumer mode */ @@ -126,6 +143,7 @@ enum lttng_event_context_type { LTTNG_EVENT_CONTEXT_VPPID = 9, LTTNG_EVENT_CONTEXT_PTHREAD_ID = 10, LTTNG_EVENT_CONTEXT_HOSTNAME = 11, + LTTNG_EVENT_CONTEXT_IP = 12, }; enum lttng_calibrate_type { @@ -139,16 +157,27 @@ enum lttng_health_component { LTTNG_HEALTH_APP_REG, LTTNG_HEALTH_KERNEL, LTTNG_HEALTH_CONSUMER, + LTTNG_HEALTH_HT_CLEANUP, + LTTNG_HEALTH_APP_MANAGE_NOTIFY, + LTTNG_HEALTH_APP_REG_DISPATCH, LTTNG_HEALTH_ALL, }; +/* Buffer type for a specific domain. */ +enum lttng_buffer_type { + LTTNG_BUFFER_PER_PID, /* Only supported by UST being the default. */ + LTTNG_BUFFER_PER_UID, /* Only supported by UST. */ + LTTNG_BUFFER_GLOBAL, /* Only supported by the Kernel. */ +}; + /* * The structures should be initialized to zero before use. */ -#define LTTNG_DOMAIN_PADDING1 16 +#define LTTNG_DOMAIN_PADDING1 12 #define LTTNG_DOMAIN_PADDING2 LTTNG_SYMBOL_NAME_LEN + 32 struct lttng_domain { enum lttng_domain_type type; + enum lttng_buffer_type buf_type; char padding[LTTNG_DOMAIN_PADDING1]; union { @@ -223,7 +252,7 @@ struct lttng_event_function_attr { * * The structures should be initialized to zero before use. */ -#define LTTNG_EVENT_PADDING1 15 +#define LTTNG_EVENT_PADDING1 14 #define LTTNG_EVENT_PADDING2 LTTNG_SYMBOL_NAME_LEN + 32 struct lttng_event { enum lttng_event_type type; @@ -235,6 +264,7 @@ struct lttng_event { int32_t enabled; /* Does not apply: -1 */ pid_t pid; unsigned char filter; /* filter enabled ? */ + unsigned char exclusion; /* exclusions added ? */ char padding[LTTNG_EVENT_PADDING1]; @@ -269,7 +299,7 @@ struct lttng_event_field { * * The structures should be initialized to zero before use. */ -#define LTTNG_CHANNEL_ATTR_PADDING1 LTTNG_SYMBOL_NAME_LEN + 32 +#define LTTNG_CHANNEL_ATTR_PADDING1 LTTNG_SYMBOL_NAME_LEN + 12 struct lttng_channel_attr { int overwrite; /* 1: overwrite, 0: discard */ uint64_t subbuf_size; /* bytes */ @@ -277,6 +307,11 @@ struct lttng_channel_attr { unsigned int switch_timer_interval; /* usec */ unsigned int read_timer_interval; /* usec */ enum lttng_event_output output; /* splice, mmap */ + /* LTTng 2.1 padding limit */ + uint64_t tracefile_size; /* bytes */ + uint64_t tracefile_count; /* number of tracefiles */ + /* LTTng 2.3 padding limit */ + unsigned int live_timer_interval; /* usec */ char padding[LTTNG_CHANNEL_ATTR_PADDING1]; }; @@ -311,12 +346,14 @@ struct lttng_calibrate { * * The structures should be initialized to zero before use. */ -#define LTTNG_SESSION_PADDING1 16 +#define LTTNG_SESSION_PADDING1 12 struct lttng_session { char name[NAME_MAX]; /* The path where traces are written */ char path[PATH_MAX]; uint32_t enabled; /* enabled/started: 1, disabled/stopped: 0 */ + uint32_t snapshot_mode; + unsigned int live_timer_interval; /* usec */ char padding[LTTNG_SESSION_PADDING1]; }; @@ -375,6 +412,34 @@ extern void lttng_destroy_handle(struct lttng_handle *handle); */ extern int lttng_create_session(const char *name, const char *url); +/* + * Create a tracing session that will exclusively be used for snapshot meaning + * the session will be in no output mode and every channel enabled for that + * session will be set in overwrite mode and in mmap output since splice is not + * supported. + * + * If an url is given, it will be used to create a default snapshot output + * using it as a destination. If NULL, no output will be defined and an + * add-output call will be needed. + * + * Name can't be NULL. + */ +extern int lttng_create_session_snapshot(const char *name, + const char *snapshot_url); + +/* + * Create a session exclusively used for live reading. + * + * In this mode, the switch-timer parameter is forced for each UST channel, a + * live-switch-timer is enabled for kernel channels, manually setting + * switch-timer is forbidden. Synchronization beacons are sent to the relayd, + * indexes are sent and metadata is checked for each packet. + * + * Returns LTTNG_OK on success or a negative error code. + */ +extern int lttng_create_session_live(const char *name, const char *url, + unsigned int timer_interval); + /* * Destroy a tracing session. * @@ -534,6 +599,23 @@ extern int lttng_enable_event_with_filter(struct lttng_handle *handle, struct lttng_event *event, const char *channel_name, const char *filter_expression); +/* + * Create or enable an event with a filter and/or exclusions. + * + * If the event you are trying to enable does not exist, it will be created, + * else it is enabled. + * If ev is NULL, all events are enabled with the filter and exclusion options. + * If channel_name is NULL, the default channel is used (channel0) and created + * if not found. + * If filter_expression is NULL, an event without associated filter is + * created. + * If exclusion count is zero, the event will be created without exclusions. + */ +extern int lttng_enable_event_with_exclusions(struct lttng_handle *handle, + struct lttng_event *event, const char *channel_name, + const char *filter_expression, + int exclusion_count, char **exclusion_names); + /* * Create or enable a channel. * @@ -590,13 +672,13 @@ extern int lttng_set_consumer_url(struct lttng_handle *handle, /* * Enable the consumer for a session and domain. */ -extern LTTNG_DEPRECATED("This call is now obselete.") +extern LTTNG_DEPRECATED("This call is now obsolete.") int lttng_enable_consumer(struct lttng_handle *handle); /* * Disable consumer for a session and domain. */ -extern LTTNG_DEPRECATED("This call is now obselete.") +extern LTTNG_DEPRECATED("This call is now obsolete.") int lttng_disable_consumer(struct lttng_handle *handle); /* @@ -611,7 +693,8 @@ int lttng_disable_consumer(struct lttng_handle *handle); * * Please see lttng-health-check(3) man page for more information. */ -extern int lttng_health_check(enum lttng_health_component c); +extern LTTNG_DEPRECATED("This call is now obsolete.") +int lttng_health_check(enum lttng_health_component c); /* * For a given session name, this call checks if the data is ready to be read