X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvlib%2Fcli.h;h=a2f9c24d2ec865933e93511d133ed734dbfd4ab8;hb=607eb203b1e954ac3f7ed82bd7bde3cf3aad60cf;hp=13216dc40252cecbeb09c18b034c4cda5113ef73;hpb=72d8758fdc2266b9f4cd53063da2d23f0855c1df;p=vpp.git diff --git a/src/vlib/cli.h b/src/vlib/cli.h index 13216dc4025..a2f9c24d2ec 100644 --- a/src/vlib/cli.h +++ b/src/vlib/cli.h @@ -41,6 +41,7 @@ #define included_vlib_cli_h #include +#include 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