X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Fmi-lttng.c;h=f9f1e225aec32f1b383022e4a2afb55b2e9f90da;hp=69b3cc041de0d42c44333d7ab8c84d5ff7e52473;hb=f5112e978f61eb82bf487cfa9efa2de359d37661;hpb=87597c2c3bbaa1502ad2025cbf16704829f3b464 diff --git a/src/common/mi-lttng.c b/src/common/mi-lttng.c index 69b3cc041..f9f1e225a 100644 --- a/src/common/mi-lttng.c +++ b/src/common/mi-lttng.c @@ -1,26 +1,17 @@ /* - * Copyright (C) 2014 - Jonathan Rajotte - * - Olivier Cotte - * Copyright (C) 2016 - Jérémie Galarneau + * Copyright (C) 2014 Jonathan Rajotte + * Copyright (C) 2014 Olivier Cotte + * Copyright (C) 2016 Jérémie Galarneau * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License, version 2 only, as - * published by the Free Software Foundation. + * SPDX-License-Identifier: GPL-2.0-only * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 51 - * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #define _LGPL_SOURCE #include #include #include +#include #include #include "mi-lttng.h" @@ -74,9 +65,10 @@ const char * const mi_lttng_element_command_success = "success"; const char * const mi_lttng_element_command_track = "track"; const char * const mi_lttng_element_command_untrack = "untrack"; const char * const mi_lttng_element_command_version = "version"; -const char * const mi_lttng_element_command_rotate = "rotate"; -const char * const mi_lttng_element_command_enable_rotation = "enable-rotation"; -const char * const mi_lttng_element_command_disable_rotation = "disable-rotation"; +LTTNG_HIDDEN const char * const mi_lttng_element_command_rotate = "rotate"; +LTTNG_HIDDEN const char * const mi_lttng_element_command_enable_rotation = "enable-rotation"; +LTTNG_HIDDEN const char * const mi_lttng_element_command_disable_rotation = "disable-rotation"; +LTTNG_HIDDEN const char * const mi_lttng_element_command_clear = "clear"; /* Strings related to version command */ const char * const mi_lttng_element_version = "version"; @@ -363,7 +355,7 @@ const char *mi_lttng_logleveltype_string(enum lttng_loglevel_type value) } } -LTTNG_HIDDEN +static const char *mi_lttng_eventtype_string(enum lttng_event_type value) { switch (value) { @@ -428,6 +420,44 @@ const char *mi_lttng_event_contexttype_string(enum lttng_event_context_type val) return config_event_context_callstack_user; case LTTNG_EVENT_CONTEXT_CALLSTACK_KERNEL: return config_event_context_callstack_kernel; + case LTTNG_EVENT_CONTEXT_CGROUP_NS: + return config_event_context_cgroup_ns; + case LTTNG_EVENT_CONTEXT_IPC_NS: + return config_event_context_ipc_ns; + case LTTNG_EVENT_CONTEXT_MNT_NS: + return config_event_context_mnt_ns; + case LTTNG_EVENT_CONTEXT_NET_NS: + return config_event_context_net_ns; + case LTTNG_EVENT_CONTEXT_PID_NS: + return config_event_context_pid_ns; + case LTTNG_EVENT_CONTEXT_USER_NS: + return config_event_context_user_ns; + case LTTNG_EVENT_CONTEXT_UTS_NS: + return config_event_context_uts_ns; + case LTTNG_EVENT_CONTEXT_UID: + return config_event_context_uid; + case LTTNG_EVENT_CONTEXT_EUID: + return config_event_context_euid; + case LTTNG_EVENT_CONTEXT_SUID: + return config_event_context_suid; + case LTTNG_EVENT_CONTEXT_GID: + return config_event_context_gid; + case LTTNG_EVENT_CONTEXT_EGID: + return config_event_context_egid; + case LTTNG_EVENT_CONTEXT_SGID: + return config_event_context_sgid; + case LTTNG_EVENT_CONTEXT_VUID: + return config_event_context_vuid; + case LTTNG_EVENT_CONTEXT_VEUID: + return config_event_context_veuid; + case LTTNG_EVENT_CONTEXT_VSUID: + return config_event_context_vsuid; + case LTTNG_EVENT_CONTEXT_VGID: + return config_event_context_vgid; + case LTTNG_EVENT_CONTEXT_VEGID: + return config_event_context_vegid; + case LTTNG_EVENT_CONTEXT_VSGID: + return config_event_context_vsgid; default: return NULL; } @@ -1275,7 +1305,7 @@ end: return ret; } -LTTNG_HIDDEN +static int mi_lttng_event_userspace_probe(struct mi_writer *writer, struct lttng_event *event) { @@ -1501,13 +1531,58 @@ int mi_lttng_trackers_open(struct mi_writer *writer) return mi_lttng_writer_open_element(writer, config_element_trackers); } +static int get_tracker_elements(enum lttng_tracker_type tracker_type, + const char **element_id_tracker, + const char **element_target_id) +{ + int ret = 0; + + switch (tracker_type) { + case LTTNG_TRACKER_PID: + *element_id_tracker = config_element_pid_tracker; + *element_target_id = config_element_target_pid; + break; + case LTTNG_TRACKER_VPID: + *element_id_tracker = config_element_vpid_tracker; + *element_target_id = config_element_target_vpid; + break; + case LTTNG_TRACKER_UID: + *element_id_tracker = config_element_uid_tracker; + *element_target_id = config_element_target_uid; + break; + case LTTNG_TRACKER_VUID: + *element_id_tracker = config_element_vuid_tracker; + *element_target_id = config_element_target_vuid; + break; + case LTTNG_TRACKER_GID: + *element_id_tracker = config_element_gid_tracker; + *element_target_id = config_element_target_gid; + break; + case LTTNG_TRACKER_VGID: + *element_id_tracker = config_element_vgid_tracker; + *element_target_id = config_element_target_vgid; + break; + default: + ret = LTTNG_ERR_SAVE_IO_FAIL; + } + return ret; +} + LTTNG_HIDDEN -int mi_lttng_pid_tracker_open(struct mi_writer *writer) +int mi_lttng_id_tracker_open( + struct mi_writer *writer, enum lttng_tracker_type tracker_type) { int ret; + const char *element_id_tracker, *element_target_id; + + ret = get_tracker_elements( + tracker_type, &element_id_tracker, &element_target_id); + if (ret) { + return ret; + } - /* Open element pid_tracker */ - ret = mi_lttng_writer_open_element(writer, config_element_pid_tracker); + /* Open element $id_tracker */ + ret = mi_lttng_writer_open_element(writer, element_id_tracker); if (ret) { goto end; } @@ -1529,7 +1604,9 @@ int mi_lttng_pids_open(struct mi_writer *writer) * mi api bump. The use of process element break the mi api. */ LTTNG_HIDDEN -int mi_lttng_pid(struct mi_writer *writer, pid_t pid , const char *name, +int mi_lttng_pid(struct mi_writer *writer, + pid_t pid, + const char *name, int is_open) { int ret; @@ -1573,29 +1650,97 @@ int mi_lttng_targets_open(struct mi_writer *writer) } LTTNG_HIDDEN -int mi_lttng_pid_target(struct mi_writer *writer, pid_t pid, int is_open) +int mi_lttng_id_target(struct mi_writer *writer, + enum lttng_tracker_type tracker_type, + const struct lttng_tracker_id *id, + int is_open) { int ret; + const char *element_id_tracker, *element_target_id; + enum lttng_tracker_id_status status; + int value; + const char *string; - ret = mi_lttng_writer_open_element(writer, - config_element_target_pid); + ret = get_tracker_elements( + tracker_type, &element_id_tracker, &element_target_id); if (ret) { - goto end; + return ret; } - /* Writing pid number - * Special case for element all on track untrack command - * All pid is represented as wildcard * - */ - if ((int) pid == -1) { - ret = mi_lttng_writer_write_element_string(writer, - config_element_pid, - mi_lttng_element_track_untrack_all_wildcard); - } else { - ret = mi_lttng_writer_write_element_signed_int(writer, - config_element_pid, (int) pid); - } - if (ret) { + switch (lttng_tracker_id_get_type(id)) { + case LTTNG_ID_ALL: + ret = mi_lttng_writer_open_element(writer, element_target_id); + if (ret) { + goto end; + } + ret = mi_lttng_writer_open_element(writer, config_element_type); + if (ret) { + goto end; + } + ret = mi_lttng_writer_write_element_bool( + writer, config_element_all, 1); + if (ret) { + goto end; + } + ret = mi_lttng_writer_close_element(writer); + if (ret) { + goto end; + } + break; + case LTTNG_ID_VALUE: + ret = mi_lttng_writer_open_element(writer, element_target_id); + if (ret) { + goto end; + } + ret = mi_lttng_writer_open_element(writer, config_element_type); + if (ret) { + goto end; + } + + status = lttng_tracker_id_get_value(id, &value); + if (status != LTTNG_TRACKER_ID_STATUS_OK) { + ret = -1; + goto end; + } + + ret = mi_lttng_writer_write_element_signed_int( + writer, config_element_id, value); + if (ret) { + goto end; + } + ret = mi_lttng_writer_close_element(writer); + if (ret) { + goto end; + } + break; + case LTTNG_ID_STRING: + ret = mi_lttng_writer_open_element(writer, element_target_id); + if (ret) { + goto end; + } + ret = mi_lttng_writer_open_element(writer, config_element_type); + if (ret) { + goto end; + } + + status = lttng_tracker_id_get_string(id, &string); + if (status != LTTNG_TRACKER_ID_STATUS_OK) { + ret = -1; + goto end; + } + + ret = mi_lttng_writer_write_element_string( + writer, config_element_name, string); + if (ret) { + goto end; + } + ret = mi_lttng_writer_close_element(writer); + if (ret) { + goto end; + } + break; + case LTTNG_ID_UNKNOWN: + ret = -LTTNG_ERR_INVALID; goto end; }