| libtraceevent(3) |
| ================ |
| |
| NAME |
| ---- |
| tep_filter_alloc, tep_filter_free, tep_filter_reset, tep_filter_make_string, |
| tep_filter_copy, tep_filter_compare, tep_filter_match, tep_event_filtered, |
| tep_filter_remove_event, tep_filter_strerror, tep_filter_add_filter_str - |
| Event filter related APIs. |
| |
| SYNOPSIS |
| -------- |
| [verse] |
| -- |
| *#include <event-parse.h>* |
| |
| struct tep_event_filter pass:[*]*tep_filter_alloc*(struct tep_handle pass:[*]_tep_); |
| void *tep_filter_free*(struct tep_event_filter pass:[*]_filter_); |
| void *tep_filter_reset*(struct tep_event_filter pass:[*]_filter_); |
| enum tep_errno *tep_filter_add_filter_str*(struct tep_event_filter pass:[*]_filter_, const char pass:[*]_filter_str_); |
| int *tep_event_filtered*(struct tep_event_filter pass:[*]_filter_, int _event_id_); |
| int *tep_filter_remove_event*(struct tep_event_filter pass:[*]_filter_, int _event_id_); |
| enum tep_errno *tep_filter_match*(struct tep_event_filter pass:[*]_filter_, struct tep_record pass:[*]_record_); |
| int *tep_filter_copy*(struct tep_event_filter pass:[*]_dest_, struct tep_event_filter pass:[*]_source_); |
| int *tep_filter_compare*(struct tep_event_filter pass:[*]_filter1_, struct tep_event_filter pass:[*]_filter2_); |
| char pass:[*]*tep_filter_make_string*(struct tep_event_filter pass:[*]_filter_, int _event_id_); |
| int *tep_filter_strerror*(struct tep_event_filter pass:[*]_filter_, enum tep_errno _err_, char pass:[*]buf, size_t _buflen_); |
| -- |
| |
| DESCRIPTION |
| ----------- |
| Filters can be attached to traced events. They can be used to filter out various |
| events when outputting them. Each event can be filtered based on its parameters, |
| described in the event's format file. This set of functions can be used to |
| create, delete, modify and attach event filters. |
| |
| The _tep_filter_alloc()_ function creates a new event filter. The _tep_ argument |
| is the trace event parser context. |
| |
| The _tep_filter_free()_ function frees an event filter and all resources that it |
| had used. |
| |
| The _tep_filter_reset()_ function removes all rules from an event filter and |
| resets it. |
| |
| The _tep_filter_add_filter_str()_ function adds a new rule to the _filter_. The |
| _filter_str_ argument is the filter string, that contains the rule. |
| |
| The _tep_event_filtered()_ function checks if the event with _event_id_ has |
| _filter_. |
| |
| The _tep_filter_remove_event()_ function removes a _filter_ for an event with |
| _event_id_. |
| |
| The _tep_filter_match()_ function tests if a _record_ matches given _filter_. |
| |
| The _tep_filter_copy()_ function copies a _source_ filter into a _dest_ filter. |
| |
| The _tep_filter_compare()_ function compares two filers - _filter1_ and _filter2_. |
| |
| The _tep_filter_make_string()_ function constructs a string, displaying |
| the _filter_ contents for given _event_id_. |
| |
| The _tep_filter_strerror()_ function copies the _filter_ error buffer into the |
| given _buf_ with the size _buflen_. If the error buffer is empty, in the _buf_ |
| is copied a string, describing the error _err_. |
| |
| RETURN VALUE |
| ------------ |
| The _tep_filter_alloc()_ function returns a pointer to the newly created event |
| filter, or NULL in case of an error. |
| |
| The _tep_filter_add_filter_str()_ function returns 0 if the rule was |
| successfully added or a negative error code. Use _tep_filter_strerror()_ to see |
| actual error message in case of an error. |
| |
| The _tep_event_filtered()_ function returns 1 if the filter is found for given |
| event, or 0 otherwise. |
| |
| The _tep_filter_remove_event()_ function returns 1 if the vent was removed, or |
| 0 if the event was not found. |
| |
| The _tep_filter_match()_ function returns _tep_errno_, according to the result: |
| [verse] |
| -- |
| _pass:[TEP_ERRNO__FILTER_MATCH]_ - filter found for event, the record matches. |
| _pass:[TEP_ERRNO__FILTER_MISS]_ - filter found for event, the record does not match. |
| _pass:[TEP_ERRNO__FILTER_NOT_FOUND]_ - no filter found for record's event. |
| _pass:[TEP_ERRNO__NO_FILTER]_ - no rules in the filter. |
| -- |
| or any other _tep_errno_, if an error occurred during the test. |
| |
| The _tep_filter_copy()_ function returns 0 on success or -1 if not all rules |
| were copied. |
| |
| The _tep_filter_compare()_ function returns 1 if the two filters hold the same |
| content, or 0 if they do not. |
| |
| The _tep_filter_make_string()_ function returns a string, which must be freed |
| with free(), or NULL in case of an error. |
| |
| The _tep_filter_strerror()_ function returns 0 if message was filled |
| successfully, or -1 in case of an error. |
| |
| EXAMPLE |
| ------- |
| [source,c] |
| -- |
| #include <event-parse.h> |
| ... |
| struct tep_handle *tep = tep_alloc(); |
| ... |
| char errstr[200]; |
| int ret; |
| |
| struct tep_event_filter *filter = tep_filter_alloc(tep); |
| struct tep_event_filter *filter1 = tep_filter_alloc(tep); |
| ret = tep_filter_add_filter_str(filter, "sched/sched_wakeup:target_cpu==1"); |
| if(ret < 0) { |
| tep_filter_strerror(filter, ret, errstr, sizeof(errstr)); |
| /* Failed to add a new rule to the filter, the error string is in errstr */ |
| } |
| if (tep_filter_copy(filter1, filter) != 0) { |
| /* Failed to copy filter in filter1 */ |
| } |
| ... |
| if (tep_filter_compare(filter, filter1) != 1) { |
| /* Both filters are different */ |
| } |
| ... |
| void process_record(struct tep_handle *tep, struct tep_record *record) |
| { |
| struct tep_event *event; |
| char *fstring; |
| |
| event = tep_find_event_by_record(tep, record); |
| |
| if (tep_event_filtered(filter, event->id) == 1) { |
| /* The event has filter */ |
| fstring = tep_filter_make_string(filter, event->id); |
| if (fstring != NULL) { |
| /* The filter for the event is in fstring */ |
| free(fstring); |
| } |
| } |
| |
| switch (tep_filter_match(filter, record)) { |
| case TEP_ERRNO__FILTER_MATCH: |
| /* The filter matches the record */ |
| break; |
| case TEP_ERRNO__FILTER_MISS: |
| /* The filter does not match the record */ |
| break; |
| case TEP_ERRNO__FILTER_NOT_FOUND: |
| /* No filter found for record's event */ |
| break; |
| case TEP_ERRNO__NO_FILTER: |
| /* There are no rules in the filter */ |
| break |
| default: |
| /* An error occurred during the test */ |
| break; |
| } |
| |
| if (tep_filter_remove_event(filter, event->id) == 1) { |
| /* The event was removed from the filter */ |
| } |
| } |
| |
| ... |
| tep_filter_reset(filter); |
| ... |
| tep_filter_free(filter); |
| tep_filter_free(filter1); |
| ... |
| -- |
| |
| FILES |
| ----- |
| [verse] |
| -- |
| *event-parse.h* |
| Header file to include in order to have access to the library APIs. |
| *-ltraceevent* |
| Linker switch to add when building a program that uses the library. |
| -- |
| |
| SEE ALSO |
| -------- |
| _libtraceevent(3)_, _trace-cmd(1)_ |
| |
| AUTHOR |
| ------ |
| [verse] |
| -- |
| *Steven Rostedt* <rostedt@goodmis.org>, author of *libtraceevent*. |
| *Tzvetomir Stoyanov* <tz.stoyanov@gmail.com>, author of this man page. |
| -- |
| REPORTING BUGS |
| -------------- |
| Report bugs to <linux-trace-devel@vger.kernel.org> |
| |
| LICENSE |
| ------- |
| libtraceevent is Free Software licensed under the GNU LGPL 2.1 |
| |
| RESOURCES |
| --------- |
| https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git |