X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Fevent-rule%2Fkernel-tracepoint.c;h=0c62308f5045fc95f5c409461603c4a09d471721;hp=11b34045fa19656866a34fb59d3c4ad757837ea0;hb=0f7c296359bf90005e1dadf2d7a02a4b223a8031;hpb=1575be4a0f558cd7bb6e5d0a3e9410c4640c9ee5 diff --git a/src/common/event-rule/kernel-tracepoint.c b/src/common/event-rule/kernel-tracepoint.c index 11b34045f..0c62308f5 100644 --- a/src/common/event-rule/kernel-tracepoint.c +++ b/src/common/event-rule/kernel-tracepoint.c @@ -8,13 +8,14 @@ #include #include #include +#include +#include #include +#include #include -#include #include +#include #include -#include -#include #include #include #include @@ -266,6 +267,67 @@ static unsigned long lttng_event_rule_kernel_tracepoint_hash( return hash; } +static enum lttng_error_code lttng_event_rule_kernel_tracepoint_mi_serialize( + const struct lttng_event_rule *rule, struct mi_writer *writer) +{ + int ret; + enum lttng_error_code ret_code; + enum lttng_event_rule_status status; + const char *filter = NULL; + const char *name_pattern = NULL; + + assert(rule); + assert(writer); + assert(IS_KERNEL_TRACEPOINT_EVENT_RULE(rule)); + + status = lttng_event_rule_kernel_tracepoint_get_name_pattern( + rule, &name_pattern); + assert(status == LTTNG_EVENT_RULE_STATUS_OK); + assert(name_pattern); + + status = lttng_event_rule_kernel_tracepoint_get_filter(rule, &filter); + assert(status == LTTNG_EVENT_RULE_STATUS_OK || + status == LTTNG_EVENT_RULE_STATUS_UNSET); + + /* Open event rule kernel tracepoint element. */ + ret = mi_lttng_writer_open_element( + writer, mi_lttng_element_event_rule_kernel_tracepoint); + if (ret) { + goto mi_error; + } + + /* Name pattern. */ + ret = mi_lttng_writer_write_element_string(writer, + mi_lttng_element_event_rule_name_pattern, name_pattern); + if (ret) { + goto mi_error; + } + + /* Filter. */ + if (filter != NULL) { + ret = mi_lttng_writer_write_element_string(writer, + mi_lttng_element_event_rule_filter_expression, + filter); + if (ret) { + goto mi_error; + } + } + + /* Close event rule kernel tracepoint element. */ + ret = mi_lttng_writer_close_element(writer); + if (ret) { + goto mi_error; + } + + ret_code = LTTNG_OK; + goto end; + +mi_error: + ret_code = LTTNG_ERR_MI_IO_FAIL; +end: + return ret_code; +} + struct lttng_event_rule *lttng_event_rule_kernel_tracepoint_create(void) { struct lttng_event_rule *rule = NULL; @@ -292,6 +354,7 @@ struct lttng_event_rule *lttng_event_rule_kernel_tracepoint_create(void) tp_rule->parent.generate_exclusions = lttng_event_rule_kernel_tracepoint_generate_exclusions; tp_rule->parent.hash = lttng_event_rule_kernel_tracepoint_hash; + tp_rule->parent.mi_serialize = lttng_event_rule_kernel_tracepoint_mi_serialize; /* Not necessary for now. */ tp_rule->parent.generate_lttng_event = NULL;