vcl: refactor want deq ntf checks for null fifos
[vpp.git] / src / vlib / cli.h
index 13216dc..a2f9c24 100644 (file)
@@ -41,6 +41,7 @@
 #define included_vlib_cli_h
 
 #include <vppinfra/format.h>
+#include <vlib/log.h>
 
 struct vlib_cli_command_t;
 
@@ -126,11 +127,13 @@ typedef struct vlib_cli_command_t
   /* List of CLI commands, built by constructors */
   struct vlib_cli_command_t *next_cli_command;
 
+  /* Hit counter */
+  u32 hit_counter;
 } vlib_cli_command_t;
 
 typedef void (vlib_cli_output_function_t) (uword arg,
                                           u8 * buffer, uword buffer_bytes);
-typedef struct
+typedef struct vlib_cli_main_t
 {
   /* Vector of all known commands. */
   vlib_cli_command_t *commands;
@@ -138,41 +141,46 @@ typedef struct
   /* Hash table mapping normalized path to index into all_commands. */
   uword *command_index_by_path;
 
-  /* Vector of all known parse rules. */
-  vlib_cli_parse_rule_t *parse_rules;
+  /* registration list added by constructors */
+  vlib_cli_command_t *cli_command_registrations;
 
-  /* Hash table mapping parse rule name to index into parse_rule vector. */
-  uword *parse_rule_index_by_name;
+  /* index vector, to sort commands, etc. */
+  u32 *sort_vector;
 
-  /* Data parsed for rules. */
-  void **parse_rule_data;
 
-  /* registration list added by constructors */
-  vlib_cli_command_t *cli_command_registrations;
+  /* performance counter callback */
+  void (**perf_counter_cbs)
+    (struct vlib_cli_main_t *, u32 id, int before_or_after);
+  void (**perf_counter_cbs_tmp)
+    (struct vlib_cli_main_t *, u32 id, int before_or_after);
+
+  /* cli log */
+  vlib_log_class_t log;
+
 } vlib_cli_main_t;
 
 #ifndef CLIB_MARCH_VARIANT
-#define VLIB_CLI_COMMAND(x,...)                                         \
-    __VA_ARGS__ vlib_cli_command_t x;                                   \
-static void __vlib_cli_command_registration_##x (void)                  \
-    __attribute__((__constructor__)) ;                                  \
-static void __vlib_cli_command_registration_##x (void)                  \
-{                                                                       \
-    vlib_main_t * vm = vlib_get_main();                                 \
-    vlib_cli_main_t *cm = &vm->cli_main;                                \
-    x.next_cli_command = cm->cli_command_registrations;                 \
-    cm->cli_command_registrations = &x;                                 \
-}                                                                       \
-static void __vlib_cli_command_unregistration_##x (void)                \
-    __attribute__((__destructor__)) ;                                   \
-static void __vlib_cli_command_unregistration_##x (void)                \
-{                                                                       \
-    vlib_main_t * vm = vlib_get_main();                                 \
-    vlib_cli_main_t *cm = &vm->cli_main;                                \
-    VLIB_REMOVE_FROM_LINKED_LIST (cm->cli_command_registrations, &x,    \
-                                  next_cli_command);                    \
-}                                                                       \
-__VA_ARGS__ vlib_cli_command_t x
+#define VLIB_CLI_COMMAND(x, ...)                                              \
+  __VA_ARGS__ vlib_cli_command_t x;                                           \
+  static void __vlib_cli_command_registration_##x (void)                      \
+    __attribute__ ((__constructor__));                                        \
+  static void __vlib_cli_command_registration_##x (void)                      \
+  {                                                                           \
+    vlib_global_main_t *vgm = vlib_get_global_main ();                        \
+    vlib_cli_main_t *cm = &vgm->cli_main;                                     \
+    x.next_cli_command = cm->cli_command_registrations;                       \
+    cm->cli_command_registrations = &x;                                       \
+  }                                                                           \
+  static void __vlib_cli_command_unregistration_##x (void)                    \
+    __attribute__ ((__destructor__));                                         \
+  static void __vlib_cli_command_unregistration_##x (void)                    \
+  {                                                                           \
+    vlib_global_main_t *vgm = vlib_get_global_main ();                        \
+    vlib_cli_main_t *cm = &vgm->cli_main;                                     \
+    VLIB_REMOVE_FROM_LINKED_LIST (cm->cli_command_registrations, &x,          \
+                                 next_cli_command);                          \
+  }                                                                           \
+  __VA_ARGS__ vlib_cli_command_t x
 #else
 /* create unused pointer to silence compiler warnings and get whole
    function optimized out */
@@ -196,6 +204,7 @@ clib_error_t *vlib_cli_register (struct vlib_main_t *vm,
 clib_error_t *vlib_cli_register_parse_rule (struct vlib_main_t *vm,
                                            vlib_cli_parse_rule_t * c);
 
+unformat_function_t unformat_vlib_cli_line;
 uword unformat_vlib_cli_sub_input (unformat_input_t * i, va_list * args);
 
 /* Return an vector of strings consisting of possible auto-completions