X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Flib%2Flttng-ctl%2Flttng-ctl.cpp;h=bbc94828e6c828e7b7a9acbe90080654d714202a;hb=HEAD;hp=b9311a07ef2051bfeb6243e071f381aef3f90379;hpb=cd9adb8b829564212158943a0d279bb35322ab30;p=lttng-tools.git diff --git a/src/lib/lttng-ctl/lttng-ctl.cpp b/src/lib/lttng-ctl/lttng-ctl.cpp index b9311a07e..c5c04c262 100644 --- a/src/lib/lttng-ctl/lttng-ctl.cpp +++ b/src/lib/lttng-ctl/lttng-ctl.cpp @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -52,12 +53,12 @@ #include #include -#define COPY_DOMAIN_PACKED(dst, src) \ - do { \ - struct lttng_domain _tmp_domain; \ - \ - lttng_ctl_copy_lttng_domain(&_tmp_domain, &src); \ - dst = _tmp_domain; \ +#define COPY_DOMAIN_PACKED(dst, src) \ + do { \ + struct lttng_domain _tmp_domain; \ + \ + lttng_ctl_copy_lttng_domain(&_tmp_domain, &(src)); \ + (dst) = _tmp_domain; \ } while (0) /* Socket to session daemon for communication */ @@ -92,6 +93,7 @@ void lttng_ctl_copy_lttng_domain(struct lttng_domain *dst, struct lttng_domain * case LTTNG_DOMAIN_UST: case LTTNG_DOMAIN_JUL: case LTTNG_DOMAIN_LOG4J: + case LTTNG_DOMAIN_LOG4J2: case LTTNG_DOMAIN_PYTHON: memcpy(dst, src, sizeof(struct lttng_domain)); break; @@ -1010,12 +1012,14 @@ int lttng_enable_event_with_filter(struct lttng_handle *handle, * * An event with NO loglevel and the name is * will return NULL. */ -static char *set_agent_filter(const char *filter, struct lttng_event *ev) +static char * +set_agent_filter(const char *filter, struct lttng_event *ev, struct lttng_domain *domain) { int err; char *agent_filter = nullptr; LTTNG_ASSERT(ev); + LTTNG_ASSERT(domain); /* Don't add filter for the '*' event. */ if (strcmp(ev->name, "*") != 0) { @@ -1031,12 +1035,20 @@ static char *set_agent_filter(const char *filter, struct lttng_event *ev) } } - /* Add loglevel filtering if any for the JUL domain. */ + /* Add loglevel filtering if any for the agent domains. */ if (ev->loglevel_type != LTTNG_EVENT_LOGLEVEL_ALL) { const char *op; if (ev->loglevel_type == LTTNG_EVENT_LOGLEVEL_RANGE) { - op = ">="; + /* + * Log4j2 is the only agent domain for which more severe + * logging levels have a lower numerical value. + */ + if (domain->type == LTTNG_DOMAIN_LOG4J2) { + op = "<="; + } else { + op = ">="; + } } else { op = "=="; } @@ -1133,18 +1145,20 @@ int lttng_enable_event_with_exclusions(struct lttng_handle *handle, /* Parse filter expression. */ if (filter_expression != nullptr || handle->domain.type == LTTNG_DOMAIN_JUL || handle->domain.type == LTTNG_DOMAIN_LOG4J || + handle->domain.type == LTTNG_DOMAIN_LOG4J2 || handle->domain.type == LTTNG_DOMAIN_PYTHON) { if (handle->domain.type == LTTNG_DOMAIN_JUL || handle->domain.type == LTTNG_DOMAIN_LOG4J || + handle->domain.type == LTTNG_DOMAIN_LOG4J2 || handle->domain.type == LTTNG_DOMAIN_PYTHON) { char *agent_filter; /* Setup agent filter if needed. */ - agent_filter = set_agent_filter(filter_expression, ev); + agent_filter = set_agent_filter(filter_expression, ev, &handle->domain); if (!agent_filter) { if (!filter_expression) { /* - * No JUL and no filter, just skip + * No agent and no filter, just skip * everything below. */ goto serialize; @@ -1213,7 +1227,7 @@ serialize: { struct lttng_payload_view view = lttng_payload_view_from_payload(&payload, 0, -1); - int fd_count = lttng_payload_view_get_fd_handle_count(&view); + const int fd_count = lttng_payload_view_get_fd_handle_count(&view); int fd_to_send; if (fd_count < 0) { @@ -1316,14 +1330,16 @@ int lttng_disable_event_ext(struct lttng_handle *handle, /* Parse filter expression. */ if (filter_expression != nullptr || handle->domain.type == LTTNG_DOMAIN_JUL || handle->domain.type == LTTNG_DOMAIN_LOG4J || + handle->domain.type == LTTNG_DOMAIN_LOG4J2 || handle->domain.type == LTTNG_DOMAIN_PYTHON) { if (handle->domain.type == LTTNG_DOMAIN_JUL || handle->domain.type == LTTNG_DOMAIN_LOG4J || + handle->domain.type == LTTNG_DOMAIN_LOG4J2 || handle->domain.type == LTTNG_DOMAIN_PYTHON) { char *agent_filter; /* Setup agent filter if needed. */ - agent_filter = set_agent_filter(filter_expression, ev); + agent_filter = set_agent_filter(filter_expression, ev, &handle->domain); if (!agent_filter) { if (!filter_expression) { /* @@ -1396,7 +1412,7 @@ serialize: { struct lttng_payload_view view = lttng_payload_view_from_payload(&payload, 0, -1); - int fd_count = lttng_payload_view_get_fd_handle_count(&view); + const int fd_count = lttng_payload_view_get_fd_handle_count(&view); int fd_to_send; if (fd_count < 0) { @@ -1701,7 +1717,7 @@ int lttng_list_tracepoints(struct lttng_handle *handle, struct lttng_event **eve nb_events = (unsigned int) cmd_header->count; { - struct lttng_buffer_view events_view = + const lttng_buffer_view events_view = lttng_buffer_view_init(reception_buffer, 0, total_payload_received); struct lttng_payload_view events_payload_view = lttng_payload_view_from_buffer_view(&events_view, 0, -1); @@ -1911,7 +1927,7 @@ enum lttng_error_code lttng_create_session_ext(struct lttng_session_descriptor * !lttng_session_descriptor_is_output_destination_initialized(session_descriptor); if (sessiond_must_generate_ouput) { const char *home_dir = utils_get_home_dir(); - size_t home_dir_len = home_dir ? strlen(home_dir) + 1 : 0; + const size_t home_dir_len = home_dir ? strlen(home_dir) + 1 : 0; if (!home_dir || home_dir_len > LTTNG_PATH_MAX) { ret_code = LTTNG_ERR_FATAL; @@ -2877,6 +2893,34 @@ end: return ret; } +/* + * Get the status of the kernel tracer + * + * Sets the value of the argument + */ +enum lttng_error_code lttng_get_kernel_tracer_status(enum lttng_kernel_tracer_status *out_status) +{ + if (out_status == nullptr) { + return LTTNG_ERR_INVALID; + } + + struct lttcomm_session_msg lsm = {}; + lsm.cmd_type = LTTCOMM_SESSIOND_COMMAND_KERNEL_TRACER_STATUS; + + uint32_t *raw_tracer_status = nullptr; + const auto ask_ret = lttng_ctl_ask_sessiond(&lsm, (void **) &raw_tracer_status); + + const auto tracer_status = + lttng::make_unique_wrapper(raw_tracer_status); + + if (ask_ret != 4) { + return LTTNG_ERR_INVALID; + } + + *out_status = (enum lttng_kernel_tracer_status) * tracer_status; + return LTTNG_OK; +} + /* * Regenerate the metadata for a session. * Return 0 on success, a negative error code on error.