bpf_trace_filter: support bpf filter optimization and dump
[vpp.git] / src / plugins / bpf_trace_filter / cli.c
index 906ca71..f340b16 100644 (file)
@@ -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
  *