ripd, ripngd: cli refactor

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
This commit is contained in:
Quentin Young 2016-09-27 00:10:31 +00:00
parent 39573b33cb
commit 55c727dd75
4 changed files with 79 additions and 221 deletions

View File

@ -1398,26 +1398,16 @@ DEFUN (ip_rip_receive_version_2,
return CMD_SUCCESS; return CMD_SUCCESS;
} }
/*
* CHECK ME - The following ALIASes need to be implemented in this DEFUN
* "no ip rip receive version (1|2)",
* NO_STR
* IP_STR
* "Routing Information Protocol\n"
* "Advertisement reception\n"
* "Version control\n"
* "Version 1\n"
* "Version 2\n"
*
*/
DEFUN (no_ip_rip_receive_version, DEFUN (no_ip_rip_receive_version,
no_ip_rip_receive_version_cmd, no_ip_rip_receive_version_cmd,
"no ip rip receive version", "no ip rip receive version [(1-1)|(2-2)]",
NO_STR NO_STR
IP_STR IP_STR
"Routing Information Protocol\n" "Routing Information Protocol\n"
"Advertisement reception\n" "Advertisement reception\n"
"Version control\n") "Version control\n"
"Version 1\n"
"Version 2\n")
{ {
struct interface *ifp; struct interface *ifp;
struct rip_interface *ri; struct rip_interface *ri;
@ -1503,26 +1493,16 @@ DEFUN (ip_rip_send_version_2,
return CMD_SUCCESS; return CMD_SUCCESS;
} }
/*
* CHECK ME - The following ALIASes need to be implemented in this DEFUN
* "no ip rip send version (1|2)",
* NO_STR
* IP_STR
* "Routing Information Protocol\n"
* "Advertisement transmission\n"
* "Version control\n"
* "Version 1\n"
* "Version 2\n"
*
*/
DEFUN (no_ip_rip_send_version, DEFUN (no_ip_rip_send_version,
no_ip_rip_send_version_cmd, no_ip_rip_send_version_cmd,
"no ip rip send version", "no ip rip send version [(1-1)|(2-2)]",
NO_STR NO_STR
IP_STR IP_STR
"Routing Information Protocol\n" "Routing Information Protocol\n"
"Advertisement transmission\n" "Advertisement transmission\n"
"Version control\n") "Version control\n"
"Version 1\n"
"Version 2\n")
{ {
struct interface *ifp; struct interface *ifp;
struct rip_interface *ri; struct rip_interface *ri;
@ -1535,31 +1515,21 @@ DEFUN (no_ip_rip_send_version,
} }
/*
* CHECK ME - The following ALIASes need to be implemented in this DEFUN
* "ip rip authentication mode (md5|text) auth-length (rfc|old-ripd)",
* IP_STR
* "Routing Information Protocol\n"
* "Authentication control\n"
* "Authentication mode\n"
* "Keyed message digest\n"
* "Clear text authentication\n"
* "MD5 authentication data length\n"
* "RFC compatible\n"
* "Old ripd compatible\n"
*
*/
DEFUN (ip_rip_authentication_mode, DEFUN (ip_rip_authentication_mode,
ip_rip_authentication_mode_cmd, ip_rip_authentication_mode_cmd,
"ip rip authentication mode <md5|text>", "ip rip authentication mode <md5|text> [auth-length <rfc|old-ripd>]",
IP_STR IP_STR
"Routing Information Protocol\n" "Routing Information Protocol\n"
"Authentication control\n" "Authentication control\n"
"Authentication mode\n" "Authentication mode\n"
"Keyed message digest\n" "Keyed message digest\n"
"Clear text authentication\n") "Clear text authentication\n"
"MD5 authentication data length\n"
"RFC compatible\n"
"Old ripd compatible\n")
{ {
int idx_encryption = 4; char *cryptmode = argv[4]->text;
char *authlen = (argc > 5) ? argv[6]->text : NULL;
struct interface *ifp; struct interface *ifp;
struct rip_interface *ri; struct rip_interface *ri;
int auth_type; int auth_type;
@ -1567,79 +1537,47 @@ DEFUN (ip_rip_authentication_mode,
ifp = (struct interface *)vty->index; ifp = (struct interface *)vty->index;
ri = ifp->info; ri = ifp->info;
if ( (argc < 1) || (argc > 2) ) if (strmatch ("md5", cryptmode))
{
vty_out (vty, "incorrect argument count%s", VTY_NEWLINE);
return CMD_WARNING;
}
if (strncmp ("md5", argv[idx_encryption]->arg, strlen (argv[idx_encryption]->arg)) == 0)
auth_type = RIP_AUTH_MD5; auth_type = RIP_AUTH_MD5;
else if (strncmp ("text", argv[idx_encryption]->arg, strlen (argv[idx_encryption]->arg)) == 0) else {
assert (strmatch ("text", cryptmode));
auth_type = RIP_AUTH_SIMPLE_PASSWORD; auth_type = RIP_AUTH_SIMPLE_PASSWORD;
else }
{
vty_out (vty, "mode should be md5 or text%s", VTY_NEWLINE);
return CMD_WARNING;
}
if (argc == 1) ri->auth_type = auth_type;
{
ri->auth_type = auth_type;
return CMD_SUCCESS;
}
if ( (argc == 2) && (auth_type != RIP_AUTH_MD5) ) if (argc > 5)
{
if (auth_type != RIP_AUTH_MD5)
{ {
vty_out (vty, "auth length argument only valid for md5%s", VTY_NEWLINE); vty_out (vty, "auth length argument only valid for md5%s", VTY_NEWLINE);
return CMD_WARNING; return CMD_WARNING;
} }
if (strmatch ("rfc", authlen))
if (strncmp ("r", argv[6]->arg, 1) == 0) ri->md5_auth_len = RIP_AUTH_MD5_SIZE;
ri->md5_auth_len = RIP_AUTH_MD5_SIZE; else
else if (strncmp ("o", argv[6]->arg, 1) == 0) {
ri->md5_auth_len = RIP_AUTH_MD5_COMPAT_SIZE; assert (strmatch ("old-ripd", authlen));
else ri->md5_auth_len = RIP_AUTH_MD5_COMPAT_SIZE;
return CMD_WARNING; }
}
ri->auth_type = auth_type;
return CMD_SUCCESS; return CMD_SUCCESS;
} }
/*
* CHECK ME - The following ALIASes need to be implemented in this DEFUN
* "no ip rip authentication mode (md5|text)",
* NO_STR
* IP_STR
* "Routing Information Protocol\n"
* "Authentication control\n"
* "Authentication mode\n"
* "Keyed message digest\n"
* "Clear text authentication\n"
*
* "no ip rip authentication mode (md5|text) auth-length (rfc|old-ripd)",
* NO_STR
* IP_STR
* "Routing Information Protocol\n"
* "Authentication control\n"
* "Authentication mode\n"
* "Keyed message digest\n"
* "Clear text authentication\n"
* "MD5 authentication data length\n"
* "RFC compatible\n"
* "Old ripd compatible\n"
*
*/
DEFUN (no_ip_rip_authentication_mode, DEFUN (no_ip_rip_authentication_mode,
no_ip_rip_authentication_mode_cmd, no_ip_rip_authentication_mode_cmd,
"no ip rip authentication mode", "no ip rip authentication mode [<md5|text> [auth-length <rfc|old-ripd>]]",
NO_STR NO_STR
IP_STR IP_STR
"Routing Information Protocol\n" "Routing Information Protocol\n"
"Authentication control\n" "Authentication control\n"
"Authentication mode\n") "Authentication mode\n"
"Keyed message digest\n"
"Clear text authentication\n"
"MD5 authentication data length\n"
"RFC compatible\n"
"Old ripd compatible\n")
{ {
struct interface *ifp; struct interface *ifp;
struct rip_interface *ri; struct rip_interface *ri;
@ -1653,8 +1591,6 @@ DEFUN (no_ip_rip_authentication_mode,
return CMD_SUCCESS; return CMD_SUCCESS;
} }
DEFUN (ip_rip_authentication_string, DEFUN (ip_rip_authentication_string,
ip_rip_authentication_string_cmd, ip_rip_authentication_string_cmd,
"ip rip authentication string LINE", "ip rip authentication string LINE",
@ -1692,24 +1628,14 @@ DEFUN (ip_rip_authentication_string,
return CMD_SUCCESS; return CMD_SUCCESS;
} }
/*
* CHECK ME - The following ALIASes need to be implemented in this DEFUN
* "no ip rip authentication string LINE",
* NO_STR
* IP_STR
* "Routing Information Protocol\n"
* "Authentication control\n"
* "Authentication string\n"
* "Authentication string\n"
*
*/
DEFUN (no_ip_rip_authentication_string, DEFUN (no_ip_rip_authentication_string,
no_ip_rip_authentication_string_cmd, no_ip_rip_authentication_string_cmd,
"no ip rip authentication string", "no ip rip authentication string [LINE]",
NO_STR NO_STR
IP_STR IP_STR
"Routing Information Protocol\n" "Routing Information Protocol\n"
"Authentication control\n" "Authentication control\n"
"Authentication string\n"
"Authentication string\n") "Authentication string\n")
{ {
struct interface *ifp; struct interface *ifp;
@ -1758,25 +1684,15 @@ DEFUN (ip_rip_authentication_key_chain,
return CMD_SUCCESS; return CMD_SUCCESS;
} }
/*
* CHECK ME - The following ALIASes need to be implemented in this DEFUN
* "no ip rip authentication key-chain LINE",
* NO_STR
* IP_STR
* "Routing Information Protocol\n"
* "Authentication control\n"
* "Authentication key-chain\n"
* "name of key-chain\n"
*
*/
DEFUN (no_ip_rip_authentication_key_chain, DEFUN (no_ip_rip_authentication_key_chain,
no_ip_rip_authentication_key_chain_cmd, no_ip_rip_authentication_key_chain_cmd,
"no ip rip authentication key-chain", "no ip rip authentication key-chain [LINE]",
NO_STR NO_STR
IP_STR IP_STR
"Routing Information Protocol\n" "Routing Information Protocol\n"
"Authentication control\n" "Authentication control\n"
"Authentication key-chain\n") "Authentication key-chain\n"
"name of key-chain\n")
{ {
struct interface *ifp; struct interface *ifp;
struct rip_interface *ri; struct rip_interface *ri;
@ -1871,10 +1787,10 @@ DEFUN (no_ip_rip_split_horizon_poisoned_reverse,
switch( ri->split_horizon ) switch( ri->split_horizon )
{ {
case RIP_SPLIT_HORIZON_POISONED_REVERSE: case RIP_SPLIT_HORIZON_POISONED_REVERSE:
ri->split_horizon = RIP_SPLIT_HORIZON; ri->split_horizon = RIP_SPLIT_HORIZON;
default: default:
break; break;
} }
return CMD_SUCCESS; return CMD_SUCCESS;
@ -1887,18 +1803,15 @@ DEFUN (rip_passive_interface,
"Interface name\n" "Interface name\n"
"default for all interfaces\n") "default for all interfaces\n")
{ {
int idx_ifname = 1; if (argv[1]->type == WORD_TKN) { // user passed 'default'
const char *ifname = argv[idx_ifname]->arg;
if (!strcmp(ifname,"default")) {
passive_default = 1; passive_default = 1;
rip_passive_nondefault_clean(); rip_passive_nondefault_clean();
return CMD_SUCCESS; return CMD_SUCCESS;
} }
if (passive_default) if (passive_default)
return rip_passive_nondefault_unset (vty, ifname); return rip_passive_nondefault_unset (vty, argv[1]->arg);
else else
return rip_passive_nondefault_set (vty, ifname); return rip_passive_nondefault_set (vty, argv[1]->arg);
} }
DEFUN (no_rip_passive_interface, DEFUN (no_rip_passive_interface,
@ -1909,18 +1822,15 @@ DEFUN (no_rip_passive_interface,
"Interface name\n" "Interface name\n"
"default for all interfaces\n") "default for all interfaces\n")
{ {
int idx_ifname = 2; if (argv[2]->type == WORD_TKN) {
const char *ifname = argv[idx_ifname]->arg;
if (!strcmp(ifname,"default")) {
passive_default = 0; passive_default = 0;
rip_passive_nondefault_clean(); rip_passive_nondefault_clean();
return CMD_SUCCESS; return CMD_SUCCESS;
} }
if (passive_default) if (passive_default)
return rip_passive_nondefault_set (vty, ifname); return rip_passive_nondefault_set (vty, argv[2]->arg);
else else
return rip_passive_nondefault_unset (vty, ifname); return rip_passive_nondefault_unset (vty, argv[2]->arg);
} }
/* Write rip configuration of each interface. */ /* Write rip configuration of each interface. */

View File

@ -2963,19 +2963,12 @@ DEFUN (rip_version,
return CMD_SUCCESS; return CMD_SUCCESS;
} }
/*
* CHECK ME - The following ALIASes need to be implemented in this DEFUN
* "no version <1-2>",
* NO_STR
* "Set routing protocol version\n"
* "version\n"
*
*/
DEFUN (no_rip_version, DEFUN (no_rip_version,
no_rip_version_cmd, no_rip_version_cmd,
"no version", "no version [(1-2)]",
NO_STR NO_STR
"Set routing protocol version\n") "Set routing protocol version\n"
"Version\n")
{ {
/* Set RIP version to the default. */ /* Set RIP version to the default. */
rip->version_send = RI_RIP_VERSION_2; rip->version_send = RI_RIP_VERSION_2;
@ -3091,17 +3084,9 @@ DEFUN (rip_default_metric,
return CMD_SUCCESS; return CMD_SUCCESS;
} }
/*
* CHECK ME - The following ALIASes need to be implemented in this DEFUN
* "no default-metric <1-16>",
* NO_STR
* "Set a metric of redistribute routes\n"
* "Default metric\n"
*
*/
DEFUN (no_rip_default_metric, DEFUN (no_rip_default_metric,
no_rip_default_metric_cmd, no_rip_default_metric_cmd,
"no default-metric", "no default-metric [(1-16)]",
NO_STR NO_STR
"Set a metric of redistribute routes\n" "Set a metric of redistribute routes\n"
"Default metric\n") "Default metric\n")
@ -3166,23 +3151,15 @@ DEFUN (rip_timers,
return CMD_SUCCESS; return CMD_SUCCESS;
} }
/*
* CHECK ME - The following ALIASes need to be implemented in this DEFUN
* "no timers basic <0-65535> <0-65535> <0-65535>",
* NO_STR
* "Adjust routing timers\n"
* "Basic routing protocol update timers\n"
* "Routing table update timer value in second. Default is 30.\n"
* "Routing information timeout timer. Default is 180.\n"
* "Garbage collection timer. Default is 120.\n"
*
*/
DEFUN (no_rip_timers, DEFUN (no_rip_timers,
no_rip_timers_cmd, no_rip_timers_cmd,
"no timers basic", "no timers basic [(0-65535) (0-65535) (0-65535)]",
NO_STR NO_STR
"Adjust routing timers\n" "Adjust routing timers\n"
"Basic routing protocol update timers\n") "Basic routing protocol update timers\n"
"Routing table update timer value in second. Default is 30.\n"
"Routing information timeout timer. Default is 180.\n"
"Garbage collection timer. Default is 120.\n")
{ {
/* Set each timer value to the default. */ /* Set each timer value to the default. */
rip->update_time = RIP_UPDATE_TIMER_DEFAULT; rip->update_time = RIP_UPDATE_TIMER_DEFAULT;

View File

@ -345,44 +345,23 @@ DEFUN (ripng_redistribute_type,
return CMD_SUCCESS; return CMD_SUCCESS;
} }
/*
* CHECK ME - The following ALIASes need to be implemented in this DEFUN
* "no redistribute <kernel|connected|static|ospf6|isis|bgp|table> metric <0-16> route-map WORD",
* NO_STR
* "Redistribute\n"
* QUAGGA_REDIST_HELP_STR_RIPNGD
* "Route map reference\n"
* "Pointer to route-map entries\n"
*
* "no redistribute <kernel|connected|static|ospf6|isis|bgp|table> metric <0-16>",
* NO_STR
* "Redistribute\n"
* QUAGGA_REDIST_HELP_STR_RIPNGD
* "Metric\n"
* "Metric value\n"
*
* "no redistribute <kernel|connected|static|ospf6|isis|bgp|table> route-map WORD",
* NO_STR
* "Redistribute\n"
* QUAGGA_REDIST_HELP_STR_RIPNGD
* "Route map reference\n"
* "Pointer to route-map entries\n"
*
*/
DEFUN (no_ripng_redistribute_type, DEFUN (no_ripng_redistribute_type,
no_ripng_redistribute_type_cmd, no_ripng_redistribute_type_cmd,
"no redistribute <kernel|connected|static|ospf6|isis|bgp|table>", "no redistribute <kernel|connected|static|ospf6|isis|bgp|table> [metric (0-16)] [route-map WORD]",
NO_STR NO_STR
"Redistribute\n" "Redistribute\n"
QUAGGA_REDIST_HELP_STR_RIPNGD) QUAGGA_REDIST_HELP_STR_RIPNGD
"Metric\n"
"Metric value\n"
"Route map reference\n"
"Pointer to route-map entries\n")
{ {
int type; int type;
type = proto_redistnum(AFI_IP6, argv[2]->text);
type = proto_redistnum(AFI_IP6, argv[3]->arg);
if (type < 0) if (type < 0)
{ {
vty_out(vty, "Invalid type %s%s", argv[3]->arg, VTY_NEWLINE); vty_out(vty, "Invalid type %s%s", argv[2]->text, VTY_NEWLINE);
return CMD_WARNING; return CMD_WARNING;
} }
@ -406,11 +385,11 @@ DEFUN (ripng_redistribute_type_metric,
int metric; int metric;
metric = atoi (argv[idx_number]->arg); metric = atoi (argv[idx_number]->arg);
type = proto_redistnum(AFI_IP6, argv[idx_protocol]->arg); type = proto_redistnum(AFI_IP6, argv[idx_protocol]->text);
if (type < 0) if (type < 0)
{ {
vty_out(vty, "Invalid type %s%s", argv[idx_protocol]->arg, VTY_NEWLINE); vty_out(vty, "Invalid type %s%s", argv[idx_protocol]->text, VTY_NEWLINE);
return CMD_WARNING; return CMD_WARNING;
} }
@ -433,15 +412,15 @@ DEFUN (ripng_redistribute_type_routemap,
int idx_word = 3; int idx_word = 3;
int type; int type;
type = proto_redistnum(AFI_IP6, argv[idx_protocol]->arg); type = proto_redistnum(AFI_IP6, argv[idx_protocol]->text);
if (type < 0) if (type < 0)
{ {
vty_out(vty, "Invalid type %s%s", argv[idx_protocol]->arg, VTY_NEWLINE); vty_out(vty, "Invalid type %s%s", argv[idx_protocol]->text, VTY_NEWLINE);
return CMD_WARNING; return CMD_WARNING;
} }
ripng_redistribute_routemap_set (type, argv[idx_word]->arg); ripng_redistribute_routemap_set (type, argv[idx_word]->text);
zclient_redistribute (ZEBRA_REDISTRIBUTE_ADD, zclient, AFI_IP6, type, 0, zclient_redistribute (ZEBRA_REDISTRIBUTE_ADD, zclient, AFI_IP6, type, 0,
VRF_DEFAULT); VRF_DEFAULT);
return CMD_SUCCESS; return CMD_SUCCESS;
@ -464,17 +443,17 @@ DEFUN (ripng_redistribute_type_metric_routemap,
int type; int type;
int metric; int metric;
type = proto_redistnum(AFI_IP6, argv[idx_protocol]->arg); type = proto_redistnum(AFI_IP6, argv[idx_protocol]->text);
metric = atoi (argv[idx_number]->arg); metric = atoi (argv[idx_number]->arg);
if (type < 0) if (type < 0)
{ {
vty_out(vty, "Invalid type %s%s", argv[idx_protocol]->arg, VTY_NEWLINE); vty_out(vty, "Invalid type %s%s", argv[idx_protocol]->text, VTY_NEWLINE);
return CMD_WARNING; return CMD_WARNING;
} }
ripng_redistribute_metric_set (type, metric); ripng_redistribute_metric_set (type, metric);
ripng_redistribute_routemap_set (type, argv[idx_word]->arg); ripng_redistribute_routemap_set (type, argv[idx_word]->text);
zclient_redistribute (ZEBRA_REDISTRIBUTE_ADD, zclient, AFI_IP6, type, 0, VRF_DEFAULT); zclient_redistribute (ZEBRA_REDISTRIBUTE_ADD, zclient, AFI_IP6, type, 0, VRF_DEFAULT);
return CMD_SUCCESS; return CMD_SUCCESS;
} }

View File

@ -2405,17 +2405,9 @@ DEFUN (ripng_default_metric,
return CMD_SUCCESS; return CMD_SUCCESS;
} }
/*
* CHECK ME - The following ALIASes need to be implemented in this DEFUN
* "no default-metric <1-16>",
* NO_STR
* "Set a metric of redistribute routes\n"
* "Default metric\n"
*
*/
DEFUN (no_ripng_default_metric, DEFUN (no_ripng_default_metric,
no_ripng_default_metric_cmd, no_ripng_default_metric_cmd,
"no default-metric", "no default-metric [(1-16)]",
NO_STR NO_STR
"Set a metric of redistribute routes\n" "Set a metric of redistribute routes\n"
"Default metric\n") "Default metric\n")