diff options
author | Vladislav Grishenko <themiron@yandex-team.ru> | 2024-03-02 21:04:14 +0500 |
---|---|---|
committer | Mohammed HAWARI <momohawari@gmail.com> | 2024-03-04 09:29:12 +0000 |
commit | 5be4b869a450530052f31e3325dfcfee49ac2178 (patch) | |
tree | 22b30d0a8bd39412bbd005b9be776a3cffdb2be2 /src/plugins/bpf_trace_filter/cli.c | |
parent | 4b6614030f384f7c8d847360cacf5c7f7560c6be (diff) |
bpf_trace_filter: support bpf filter optimization and dump
BPF filter w/o optimization can take x2 - x3 more instructions,
causing significant slow down in fast path.
Enable pcap optimization by default via cli and introduce api v2
with pcap optimization control, keep v1 for a while as it exists
in previous release already.
Intriduce bpf filter cli dump, similar to tcpdump -d.
Also fix memleak, function name typo, cli pcap format hint and
add related tests.
Type: improvement
Signed-off-by: Vladislav Grishenko <themiron@yandex-team.ru>
Change-Id: I92b2b519e92326f1b8e1a4dda6a3e3edc52f87ad
Diffstat (limited to 'src/plugins/bpf_trace_filter/cli.c')
-rw-r--r-- | src/plugins/bpf_trace_filter/cli.c | 43 |
1 files changed, 37 insertions, 6 deletions
diff --git a/src/plugins/bpf_trace_filter/cli.c b/src/plugins/bpf_trace_filter/cli.c index 906ca71d5f3..f340b1667e1 100644 --- a/src/plugins/bpf_trace_filter/cli.c +++ b/src/plugins/bpf_trace_filter/cli.c @@ -21,7 +21,6 @@ #include <vlib/vlib.h> #include <bpf_trace_filter/bpf_trace_filter.h> -#include <pcap.h> static clib_error_t * set_bpf_trace_filter_command_fn (vlib_main_t *vm, unformat_input_t *input, @@ -30,6 +29,7 @@ set_bpf_trace_filter_command_fn (vlib_main_t *vm, unformat_input_t *input, unformat_input_t _line_input, *line_input = &_line_input; u8 *bpf_expr = 0; u8 is_del = 0; + u8 optimize = 1; clib_error_t *err = 0; /* Get a line of input. */ @@ -40,25 +40,56 @@ set_bpf_trace_filter_command_fn (vlib_main_t *vm, unformat_input_t *input, { if (unformat (line_input, "del")) is_del = 1; + else if (unformat (line_input, "no-optimize")) + optimize = 0; else if (unformat (line_input, "%s", &bpf_expr)) ; else - return clib_error_return (0, "unknown input `%U'", - format_unformat_error, input); + { + err = clib_error_return (0, "unknown input `%U'", + format_unformat_error, input); + break; + } } - - err = bpf_trace_filter_set_unset ((char *) bpf_expr, is_del); unformat_free (line_input); + if (err != 0) + return err; + + err = bpf_trace_filter_set_unset ((char *) bpf_expr, is_del, optimize); + return err; } VLIB_CLI_COMMAND (set_bpf_trace_filter, static) = { .path = "set bpf trace filter", - .short_help = "set bpf trace filter {<pcap string>}", + .short_help = "set bpf trace filter [del] [no-optimize] {<pcap string>}", .function = set_bpf_trace_filter_command_fn, }; +static clib_error_t * +show_bpf_trace_filter_command_fn (vlib_main_t *vm, unformat_input_t *input, + vlib_cli_command_t *cmd) +{ + bpf_trace_filter_main_t *btm = &bpf_trace_filter_main; + + if (unformat_check_input (input) != UNFORMAT_END_OF_INPUT) + { + return (clib_error_return (0, "unknown input '%U'", + format_unformat_error, input)); + } + + vlib_cli_output (vm, "%U", format_bpf_trace_filter, btm); + + return 0; +} + +VLIB_CLI_COMMAND (show_bpf_trace_filter, static) = { + .path = "show bpf trace filter", + .short_help = "show bpf trace filter", + .function = show_bpf_trace_filter_command_fn, +}; + /* * fd.io coding-style-patch-verification: ON * |