From 8db312d415bab144c9e5b6fd41ced3c020fcaa82 Mon Sep 17 00:00:00 2001 From: Alexandre Cassen Date: Tue, 7 Jan 2014 15:58:12 +0100 Subject: [PATCH 5/7] lib: cosmetics at command.c Extend command framework to support logger and remove some dead code. some cosmetics too. --- lib/command.c | 86 +++++++++++++++++++++-------------------------------------- lib/command.h | 24 +++++------------ 2 files changed, 37 insertions(+), 73 deletions(-) diff --git a/lib/command.c b/lib/command.c index 4814594..04079b5 100644 --- a/lib/command.c +++ b/lib/command.c @@ -33,6 +33,7 @@ #include "vty.h" #include "command.h" #include "timer.h" +#include "logger.h" /* Command vector which includes some level of command lists. Normally * each daemon maintains its own cmdvec. */ @@ -310,8 +311,8 @@ cmd_make_descvec(const char *string, const char *descstr) if (*cp == '|') { if (!multiple) { - fprintf (stderr, "Command parse error!: %s\n", string); - exit (1); + log_message(LOG_ERR, "Command parse error!: %s\n", string); + exit(1); } cp++; } @@ -407,9 +408,9 @@ install_element(node_type_t ntype, cmd_element_t *cmd) cnode = vector_slot(cmdvec, ntype); if (cnode == NULL) { - fprintf (stderr, "Command node %d doesn't exist, please check it\n", - ntype); - exit (1); + log_message(LOG_ERR, "Command node %d doesn't exist, please check it\n" + , ntype); + exit(1); } vector_set(cnode->cmd_vector, cmd); @@ -417,7 +418,7 @@ install_element(node_type_t ntype, cmd_element_t *cmd) if (cmd->strvec == NULL) cmd->strvec = cmd_make_descvec(cmd->string, cmd->doc); - cmd->cmdsize = cmd_cmdsize (cmd->strvec); + cmd->cmdsize = cmd_cmdsize(cmd->strvec); } static const unsigned char itoa64[] = @@ -489,9 +490,9 @@ config_write_host(vty_t *vty) static vector_t * cmd_node_vector(vector_t *v, node_type_t ntype) { - cmd_node_t *cnode = vector_slot(v, ntype); + cmd_node_t *cnode = vector_slot(v, ntype); - return cnode->cmd_vector; + return cnode->cmd_vector; } /* Completion match types. */ @@ -825,8 +826,8 @@ cmd_filter_by_completion(char *command, vector_t *v, unsigned int index) /* If command and cmd_element string does not match set NULL to vector */ for (i = 0; i < vector_active (v); i++) { - if ((cmd_element = vector_slot (v, i)) != NULL) { - if (index >= vector_active (cmd_element->strvec)) { + if ((cmd_element = vector_slot(v, i)) != NULL) { + if (index >= vector_active(cmd_element->strvec)) { vector_slot(v, i) = NULL; } else { unsigned int j; @@ -911,12 +912,12 @@ cmd_filter_by_string(char *command, vector_t *v, unsigned int index) match_type = no_match; /* If command and cmd_element string does not match set NULL to vector */ - for (i = 0; i < vector_active (v); i++) { + for (i = 0; i < vector_active(v); i++) { if ((cmd_element = vector_slot (v, i)) != NULL) { /* If given index is bigger than max string vector of command, * set NULL */ - if (index >= vector_active (cmd_element->strvec)) { - vector_slot (v, i) = NULL; + if (index >= vector_active(cmd_element->strvec)) { + vector_slot(v, i) = NULL; } else { unsigned int j; int matched = 0; @@ -1161,9 +1162,9 @@ cmd_unique_string(vector_t *v, const char *str) unsigned int i; char *match; - for (i = 0; i < vector_active (v); i++) { - if ((match = vector_slot (v, i)) != NULL) { - if (strcmp (match, str) == 0) { + for (i = 0; i < vector_active(v); i++) { + if ((match = vector_slot(v, i)) != NULL) { + if (strcmp(match, str) == 0) { return 0; } } @@ -1180,9 +1181,9 @@ desc_unique_string(vector_t *v, const char *str) unsigned int i; desc_t *desc; - for (i = 0; i < vector_active (v); i++) { - if ((desc = vector_slot (v, i)) != NULL) { - if (strcmp (desc->cmd, str) == 0) { + for (i = 0; i < vector_active(v); i++) { + if ((desc = vector_slot(v, i)) != NULL) { + if (strcmp(desc->cmd, str) == 0) { return 1; } } @@ -1418,7 +1419,7 @@ cmd_complete_command_real(vector_t *vline, vty_t *vty, int *status) int ret; /* First try completion match, if there is exactly match return 1 */ - match = cmd_filter_by_completion (command, cmd_vector, i); + match = cmd_filter_by_completion(command, cmd_vector, i); /* If there is exact match then filter ambiguous match else check * ambiguousness. */ @@ -1434,8 +1435,8 @@ cmd_complete_command_real(vector_t *vline, vty_t *vty, int *status) matchvec = vector_init(INIT_MATCHVEC_SIZE); /* Now we got into completion */ - for (i = 0; i < vector_active (cmd_vector); i++) { - if ((cmd_element = vector_slot (cmd_vector, i))) { + for (i = 0; i < vector_active(cmd_vector); i++) { + if ((cmd_element = vector_slot(cmd_vector, i))) { const char *string; vector_t *strvec = cmd_element->strvec; @@ -1560,28 +1561,6 @@ cmd_complete_command(vector_t *vline, vty_t *vty, int *status) node_type_t node_parent(node_type_t node) { -#if 0 - node_type_t ret; - - assert(node > CONFIG_NODE); - - switch (node) { - case BGP_VPNV4_NODE: - case BGP_IPV4_NODE: - case BGP_IPV4M_NODE: - case BGP_IPV6_NODE: - case BGP_IPV6M_NODE: - ret = BGP_NODE; - break; - case KEYCHAIN_KEY_NODE: - ret = KEYCHAIN_NODE; - break; - default: - ret = CONFIG_NODE; - } - - return ret; -#endif return CONFIG_NODE; } @@ -1628,8 +1607,8 @@ cmd_execute_command_real(vector_t *vline, vty_t *vty, cmd_element_t **cmd) matched_count = 0; incomplete_count = 0; - for (i = 0; i < vector_active (cmd_vector); i++) { - if ((cmd_element = vector_slot (cmd_vector, i))) { + for (i = 0; i < vector_active(cmd_vector); i++) { + if ((cmd_element = vector_slot(cmd_vector, i))) { if (match == vararg_match || index >= cmd_element->cmdsize) { matched_element = cmd_element; matched_count++; @@ -1718,7 +1697,7 @@ cmd_execute_command(vector_t *vline, vty_t *vty, cmd_element_t **cmd, int vtysh) } - saved_ret = ret = cmd_execute_command_real (vline, vty, cmd); + saved_ret = ret = cmd_execute_command_real(vline, vty, cmd); if (vtysh) return saved_ret; @@ -1957,10 +1936,10 @@ DEFUN(config_exit, } /* quit is alias of exit. */ -ALIAS (config_exit, - config_quit_cmd, - "quit", - "Exit current mode and down to previous mode\n") +ALIAS(config_exit, + config_quit_cmd, + "quit", + "Exit current mode and down to previous mode\n") /* End of configuration. */ DEFUN(config_end, @@ -2038,7 +2017,7 @@ DEFUN(config_list, for (i = 0; i < vector_active (cnode->cmd_vector); i++) if ((cmd = vector_slot (cnode->cmd_vector, i)) != NULL && - !(cmd->attr == CMD_ATTR_DEPRECATED || cmd->attr == CMD_ATTR_HIDDEN)) + cmd->attr != CMD_ATTR_HIDDEN) vty_out(vty, " %s%s", cmd->string, VTY_NEWLINE); return CMD_SUCCESS; @@ -2612,7 +2591,6 @@ cmd_init(void) install_element(VIEW_NODE, &config_terminal_no_length_cmd); install_element(VIEW_NODE, &echo_cmd); -// install_element(ENABLE_NODE, &config_exit_cmd); install_default(ENABLE_NODE); install_element(ENABLE_NODE, &config_disable_cmd); install_element(ENABLE_NODE, &config_terminal_cmd); @@ -2626,8 +2604,6 @@ cmd_init(void) install_element(ENABLE_NODE, &echo_cmd); install_default(CONFIG_NODE); -// install_element(CONFIG_NODE, &config_exit_cmd); - install_element(CONFIG_NODE, &hostname_cmd); install_element(CONFIG_NODE, &no_hostname_cmd); diff --git a/lib/command.h b/lib/command.h index 34091a9..71191a1 100644 --- a/lib/command.h +++ b/lib/command.h @@ -64,6 +64,7 @@ typedef enum _node_type { VTY_NODE, /* Vty node. */ + GLOBAL_NODE, /* Global daemon commands. */ CHECK_NODE, /* Checker framework commands. */ VRRP_NODE, /* VRRP framework commands. */ } node_type_t; @@ -118,8 +119,7 @@ typedef struct _desc { */ enum { - CMD_ATTR_DEPRECATED = 1, - CMD_ATTR_HIDDEN, + CMD_ATTR_HIDDEN = 1, }; #define CMD_SUCCESS 0 @@ -187,9 +187,6 @@ enum { #define DEFUN_HIDDEN(funcname, cmdname, cmdstr, helpstr) \ DEFUN_ATTR (funcname, cmdname, cmdstr, helpstr, CMD_ATTR_HIDDEN) -#define DEFUN_DEPRECATED(funcname, cmdname, cmdstr, helpstr) \ - DEFUN_ATTR (funcname, cmdname, cmdstr, helpstr, CMD_ATTR_DEPRECATED) - /* DEFUN_NOSH for commands that vtysh should ignore */ #define DEFUN_NOSH(funcname, cmdname, cmdstr, helpstr) \ DEFUN(funcname, cmdname, cmdstr, helpstr) @@ -213,9 +210,6 @@ enum { #define DEFUNSH_HIDDEN(daemon, funcname, cmdname, cmdstr, helpstr) \ DEFUNSH_ATTR (daemon, funcname, cmdname, cmdstr, helpstr, CMD_ATTR_HIDDEN) -#define DEFUNSH_DEPRECATED(daemon, funcname, cmdname, cmdstr, helpstr) \ - DEFUNSH_ATTR (daemon, funcname, cmdname, cmdstr, helpstr, CMD_ATTR_DEPRECATED) - /* ALIAS macro which define existing command's alias. */ #define ALIAS(funcname, cmdname, cmdstr, helpstr) \ DEFUN_CMD_ELEMENT(funcname, cmdname, cmdstr, helpstr, 0, 0) @@ -226,27 +220,21 @@ enum { #define ALIAS_HIDDEN(funcname, cmdname, cmdstr, helpstr) \ DEFUN_CMD_ELEMENT(funcname, cmdname, cmdstr, helpstr, CMD_ATTR_HIDDEN, 0) -#define ALIAS_DEPRECATED(funcname, cmdname, cmdstr, helpstr) \ - DEFUN_CMD_ELEMENT(funcname, cmdname, cmdstr, helpstr, CMD_ATTR_DEPRECATED, 0) - #define ALIAS_SH(daemon, funcname, cmdname, cmdstr, helpstr) \ DEFUN_CMD_ELEMENT(funcname, cmdname, cmdstr, helpstr, 0, daemon) #define ALIAS_SH_HIDDEN(daemon, funcname, cmdname, cmdstr, helpstr) \ DEFUN_CMD_ELEMENT(funcname, cmdname, cmdstr, helpstr, CMD_ATTR_HIDDEN, daemon) -#define ALIAS_SH_DEPRECATED(daemon, funcname, cmdname, cmdstr, helpstr) \ - DEFUN_CMD_ELEMENT(funcname, cmdname, cmdstr, helpstr, CMD_ATTR_DEPRECATED, daemon) - #define CMD_OPTION(S) ((S[0]) == '[') #define CMD_VARIABLE(S) (((S[0]) >= 'A' && (S[0]) <= 'Z') || ((S[0]) == '<')) #define CMD_VARARG(S) ((S[0]) == '.') #define CMD_RANGE(S) ((S[0] == '<')) -#define CMD_IPV4(S) ((strcmp ((S), "A.B.C.D") == 0)) -#define CMD_IPV4_PREFIX(S) ((strcmp ((S), "A.B.C.D/M") == 0)) -#define CMD_IPV6(S) ((strcmp ((S), "X:X::X:X") == 0)) -#define CMD_IPV6_PREFIX(S) ((strcmp ((S), "X:X::X:X/M") == 0)) +#define CMD_IPV4(S) ((strcmp((S), "A.B.C.D") == 0)) +#define CMD_IPV4_PREFIX(S) ((strcmp((S), "A.B.C.D/M") == 0)) +#define CMD_IPV6(S) ((strcmp((S), "X:X::X:X") == 0)) +#define CMD_IPV6_PREFIX(S) ((strcmp((S), "X:X::X:X/M") == 0)) /* Common descriptions. */ #define SHOW_STR "Show running system information\n" -- 1.8.1.4