310 lines
10 KiB
Diff
310 lines
10 KiB
Diff
From 8db312d415bab144c9e5b6fd41ced3c020fcaa82 Mon Sep 17 00:00:00 2001
|
|
From: Alexandre Cassen <acassen@gmail.com>
|
|
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
|
|
|