X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Fsessiond-comm%2Fsessiond-comm.h;h=59f7482eb729915ff6aceed83750a4732882d1c1;hp=344ba508dc0d109608506aafc25f97f1abef927d;hb=e098433c90550d74288498f8c4474ef4c2daea68;hpb=93ec662e687dc15a3601704a1e0c96c51ad228c9 diff --git a/src/common/sessiond-comm/sessiond-comm.h b/src/common/sessiond-comm/sessiond-comm.h index 344ba508d..59f7482eb 100644 --- a/src/common/sessiond-comm/sessiond-comm.h +++ b/src/common/sessiond-comm/sessiond-comm.h @@ -29,6 +29,9 @@ #include #include #include +#include +#include +#include #include #include #include @@ -40,7 +43,7 @@ #include "inet.h" #include "inet6.h" -#include "unix.h" +#include /* Queue size of listen(2) */ #define LTTNG_SESSIOND_COMM_MAX_LISTEN 64 @@ -56,7 +59,7 @@ enum lttcomm_sessiond_command { /* Tracer command */ LTTNG_ADD_CONTEXT = 0, - LTTNG_CALIBRATE = 1, + /* LTTNG_CALIBRATE used to be here */ LTTNG_DISABLE_CHANNEL = 2, LTTNG_DISABLE_EVENT = 3, LTTNG_LIST_SYSCALLS = 4, @@ -94,7 +97,16 @@ enum lttcomm_sessiond_command { LTTNG_UNTRACK_PID = 33, LTTNG_LIST_TRACKER_PIDS = 34, LTTNG_SET_SESSION_SHM_PATH = 40, - LTTNG_METADATA_REGENERATE = 41, + LTTNG_REGENERATE_METADATA = 41, + LTTNG_REGENERATE_STATEDUMP = 42, + LTTNG_REGISTER_TRIGGER = 43, + LTTNG_UNREGISTER_TRIGGER = 44, + LTTNG_ROTATE_SESSION = 45, + LTTNG_ROTATION_GET_INFO = 46, + LTTNG_ROTATION_SET_SCHEDULE = 47, + LTTNG_SESSION_GET_CURRENT_OUTPUT = 48, + LTTNG_ROTATION_SCHEDULE_GET_TIMER_PERIOD = 49, + LTTNG_ROTATION_SCHEDULE_GET_SIZE = 50, }; enum lttcomm_relayd_command { @@ -118,6 +130,14 @@ enum lttcomm_relayd_command { RELAYD_STREAMS_SENT = 16, /* Ask the relay to reset the metadata trace file (2.8+) */ RELAYD_RESET_METADATA = 17, + /* Ask the relay to rotate a stream file (2.11+) */ + RELAYD_ROTATE_STREAM = 18, + /* Rename a chunk after the rotation is completed (2.11+) */ + RELAYD_ROTATE_RENAME = 19, + /* Check if a chunk has data pending (2.11+) */ + RELAYD_ROTATE_PENDING = 20, + /* Create a folder on the relayd FS (2.11+) */ + RELAYD_MKDIR = 21, }; /* @@ -145,6 +165,7 @@ enum lttcomm_return_code { LTTCOMM_CONSUMERD_RELAYD_FAIL, /* Error on remote relayd */ LTTCOMM_CONSUMERD_CHANNEL_FAIL, /* Channel creation failed. */ LTTCOMM_CONSUMERD_CHAN_NOT_FOUND, /* Channel not found. */ + LTTCOMM_CONSUMERD_ALREADY_SET, /* Resource already set. */ /* MUST be last element */ LTTCOMM_NR, /* Last element */ @@ -268,6 +289,8 @@ struct lttcomm_session_msg { /* Create channel */ struct { struct lttng_channel chan LTTNG_PACKED; + /* struct lttng_channel_extended is already packed. */ + struct lttng_channel_extended extended; } LTTNG_PACKED channel; /* Context */ struct { @@ -310,6 +333,16 @@ struct lttcomm_session_msg { struct { uint32_t pid; } LTTNG_PACKED pid_tracker; + struct { + uint32_t length; + } LTTNG_PACKED trigger; + struct { + uint64_t rotation_id; + } LTTNG_PACKED get_rotation_info; + struct { + uint64_t timer_us; + uint64_t size; + } LTTNG_PACKED rotate_setup; } u; } LTTNG_PACKED; @@ -372,14 +405,6 @@ struct lttcomm_event_extended_header { uint32_t nb_exclusions; } LTTNG_PACKED; -/* - * Channel extended info. - */ -struct lttcomm_channel_extended { - uint64_t discarded_events; - uint64_t lost_packets; -} LTTNG_PACKED; - /* * Data structure for the response from sessiond to the lttng client. */ @@ -422,6 +447,8 @@ struct lttcomm_consumer_msg { uint32_t monitor; /* timer to check the streams usage in live mode (usec). */ unsigned int live_timer_interval; + /* timer to sample a channel's positions (usec). */ + unsigned int monitor_timer_interval; } LTTNG_PACKED channel; /* Only used by Kernel. */ struct { uint64_t stream_key; @@ -429,6 +456,13 @@ struct lttcomm_consumer_msg { int32_t cpu; /* On which CPU this stream is assigned. */ /* Tells the consumer if the stream should be or not monitored. */ uint32_t no_monitor; + /* + * The archive id that was "current" at the time this + * stream was created. This is used to determine + * whether a rotation request was sent before or after + * the creation of a stream. + */ + uint64_t trace_archive_id; } LTTNG_PACKED stream; /* Only used by Kernel. */ struct { uint64_t net_index; @@ -452,7 +486,8 @@ struct lttcomm_consumer_msg { int32_t overwrite; /* 1: overwrite, 0: discard */ uint32_t switch_timer_interval; /* usec */ uint32_t read_timer_interval; /* usec */ - unsigned int live_timer_interval; /* usec */ + unsigned int live_timer_interval; /* usec */ + uint32_t monitor_timer_interval; /* usec */ int32_t output; /* splice, mmap */ int32_t type; /* metadata or per_cpu */ uint64_t session_id; /* Tracing session id */ @@ -476,6 +511,14 @@ struct lttcomm_consumer_msg { * because the application can be in the tracing for instance. */ uint32_t ust_app_uid; + int64_t blocking_timeout; + /* + * The archive id that was "current" at the time this + * channel was created. This is used to determine + * whether a rotation request was sent before or after + * the creation of a channel. + */ + uint64_t trace_archive_id; char root_shm_path[PATH_MAX]; char shm_path[PATH_MAX]; } LTTNG_PACKED ask_channel; @@ -500,6 +543,9 @@ struct lttcomm_consumer_msg { struct { uint64_t key; /* Channel key. */ } LTTNG_PACKED flush_channel; + struct { + uint64_t key; /* Channel key. */ + } LTTNG_PACKED clear_quiescent_channel; struct { char pathname[PATH_MAX]; /* Indicate if the snapshot goes on the relayd or locally. */ @@ -508,6 +554,12 @@ struct lttcomm_consumer_msg { uint64_t relayd_id; /* Relayd id if apply. */ uint64_t key; uint64_t nb_packets_per_stream; + /* + * The session's current trace archive id is propagated + * since a snapshot triggers the creation of an + * ephemeral metadata stream. + */ + uint64_t trace_archive_id; } LTTNG_PACKED snapshot_channel; struct { uint64_t channel_key; @@ -523,10 +575,54 @@ struct lttcomm_consumer_msg { } LTTNG_PACKED lost_packets; struct { uint64_t session_id; - } LTTNG_PACKED metadata_regenerate; + } LTTNG_PACKED regenerate_metadata; + struct { + char pathname[PATH_MAX]; + uint32_t metadata; /* This is a metadata channel. */ + uint64_t relayd_id; /* Relayd id if apply. */ + uint64_t key; + uint64_t new_chunk_id; + } LTTNG_PACKED rotate_channel; + struct { + char old_path[LTTNG_PATH_MAX]; + char new_path[LTTNG_PATH_MAX]; + uint64_t relayd_id; /* Relayd id if apply. */ + uint64_t session_id; + uint32_t uid; + uint32_t gid; + } LTTNG_PACKED rotate_rename; + struct { + uint64_t relayd_id; + uint64_t session_id; + uint64_t chunk_id; + } LTTNG_PACKED rotate_pending_relay; + struct { + char path[LTTNG_PATH_MAX]; + uint64_t relayd_id; /* Relayd id if apply. */ + uint64_t session_id; + uint32_t uid; + uint32_t gid; + } LTTNG_PACKED mkdir; } u; } LTTNG_PACKED; +/* + * Channel monitoring message returned to the session daemon on every + * monitor timer expiration. + */ +struct lttcomm_consumer_channel_monitor_msg { + /* Key of the sampled channel. */ + uint64_t key; + /* + * Lowest and highest usage (bytes) at the moment the sample was taken. + */ + uint64_t lowest, highest; + /* + * Sum of all the consumed positions for a channel. + */ + uint64_t total_consumed; +} LTTNG_PACKED; + /* * Status message returned to the sessiond after a received command. */ @@ -581,30 +677,38 @@ struct lttcomm_ust_reply { #endif /* HAVE_LIBLTTNG_UST_CTL */ -extern const char *lttcomm_get_readable_code(enum lttcomm_return_code code); +LTTNG_HIDDEN const char *lttcomm_get_readable_code(enum lttcomm_return_code code); -extern int lttcomm_init_inet_sockaddr(struct lttcomm_sockaddr *sockaddr, +LTTNG_HIDDEN int lttcomm_init_inet_sockaddr(struct lttcomm_sockaddr *sockaddr, const char *ip, unsigned int port); -extern int lttcomm_init_inet6_sockaddr(struct lttcomm_sockaddr *sockaddr, +LTTNG_HIDDEN int lttcomm_init_inet6_sockaddr(struct lttcomm_sockaddr *sockaddr, const char *ip, unsigned int port); -extern struct lttcomm_sock *lttcomm_alloc_sock(enum lttcomm_sock_proto proto); -extern int lttcomm_create_sock(struct lttcomm_sock *sock); -extern struct lttcomm_sock *lttcomm_alloc_sock_from_uri(struct lttng_uri *uri); -extern void lttcomm_destroy_sock(struct lttcomm_sock *sock); -extern struct lttcomm_sock *lttcomm_alloc_copy_sock(struct lttcomm_sock *src); -extern void lttcomm_copy_sock(struct lttcomm_sock *dst, +LTTNG_HIDDEN struct lttcomm_sock *lttcomm_alloc_sock(enum lttcomm_sock_proto proto); +LTTNG_HIDDEN int lttcomm_create_sock(struct lttcomm_sock *sock); +LTTNG_HIDDEN struct lttcomm_sock *lttcomm_alloc_sock_from_uri(struct lttng_uri *uri); +LTTNG_HIDDEN void lttcomm_destroy_sock(struct lttcomm_sock *sock); +LTTNG_HIDDEN struct lttcomm_sock *lttcomm_alloc_copy_sock(struct lttcomm_sock *src); +LTTNG_HIDDEN void lttcomm_copy_sock(struct lttcomm_sock *dst, struct lttcomm_sock *src); /* Relayd socket object. */ -extern struct lttcomm_relayd_sock *lttcomm_alloc_relayd_sock( +LTTNG_HIDDEN struct lttcomm_relayd_sock *lttcomm_alloc_relayd_sock( struct lttng_uri *uri, uint32_t major, uint32_t minor); -extern int lttcomm_setsockopt_rcv_timeout(int sock, unsigned int msec); -extern int lttcomm_setsockopt_snd_timeout(int sock, unsigned int msec); +LTTNG_HIDDEN int lttcomm_setsockopt_rcv_timeout(int sock, unsigned int msec); +LTTNG_HIDDEN int lttcomm_setsockopt_snd_timeout(int sock, unsigned int msec); + +LTTNG_HIDDEN int lttcomm_sock_get_port(const struct lttcomm_sock *sock, + uint16_t *port); +/* + * Set a port to an lttcomm_sock. This will have no effect is the socket is + * already bound. + */ +LTTNG_HIDDEN int lttcomm_sock_set_port(struct lttcomm_sock *sock, uint16_t port); -extern void lttcomm_init(void); +LTTNG_HIDDEN void lttcomm_init(void); /* Get network timeout, in milliseconds */ -extern unsigned long lttcomm_get_network_timeout(void); +LTTNG_HIDDEN unsigned long lttcomm_get_network_timeout(void); #endif /* _LTTNG_SESSIOND_COMM_H */