isisd: scrub argc CHECK ME's, refactor general

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
This commit is contained in:
Quentin Young 2016-09-29 23:24:52 +00:00
parent abddf07563
commit d8bd2affd3
3 changed files with 57 additions and 51 deletions

View File

@ -635,16 +635,11 @@ DEFUN (no_isis_redistribute,
if (!afi) if (!afi)
return CMD_WARNING; return CMD_WARNING;
type = proto_redistnum(afi, argv[idx_protocol]->arg); type = proto_redistnum(afi, argv[idx_protocol]->text);
if (type < 0 || type == ZEBRA_ROUTE_ISIS) if (type < 0 || type == ZEBRA_ROUTE_ISIS)
return CMD_WARNING; return CMD_WARNING;
if (!strcmp("level-1", argv[idx_level]->arg)) level = strmatch ("level-1", argv[idx_level]->text) ? 1 : 2;
level = 1;
else if (!strcmp("level-2", argv[idx_level]->arg))
level = 2;
else
return CMD_WARNING;
isis_redist_unset(area, level, family, type); isis_redist_unset(area, level, family, type);
return 0; return 0;
@ -652,7 +647,7 @@ DEFUN (no_isis_redistribute,
DEFUN (isis_default_originate, DEFUN (isis_default_originate,
isis_default_originate_cmd, isis_default_originate_cmd,
"default-information originate <ipv4|ipv6> <level-1|level-2> [always|metric (0-16777215)|route-map WORD]", "default-information originate <ipv4|ipv6> <level-1|level-2> [<always|metric (0-16777215)|route-map WORD>]",
"Control distribution of default information\n" "Control distribution of default information\n"
"Distribute a default route\n" "Distribute a default route\n"
"Distribute default route for IPv4\n" "Distribute default route for IPv4\n"
@ -670,21 +665,16 @@ DEFUN (isis_default_originate,
int idx_metric_rmap = 4; int idx_metric_rmap = 4;
struct isis_area *area = vty->index; struct isis_area *area = vty->index;
int family; int family;
int originate_type; int originate_type = DEFAULT_ORIGINATE;
int level; int level;
unsigned long metric; unsigned long metric = 0xffffffff;
const char *routemap; const char *routemap = NULL;
family = str2family(argv[idx_afi]->arg); family = str2family(argv[idx_afi]->text);
if (family < 0) if (family < 0)
return CMD_WARNING; return CMD_WARNING;
if (!strcmp("level-1", argv[idx_level]->arg)) level = strmatch ("level-1", argv[idx_level]->text) ? 1 : 2;
level = 1;
else if (!strcmp("level-2", argv[idx_level]->arg))
level = 2;
else
return CMD_WARNING;
if ((area->is_type & level) != level) if ((area->is_type & level) != level)
{ {
@ -692,10 +682,15 @@ DEFUN (isis_default_originate,
return CMD_WARNING; return CMD_WARNING;
} }
if (argv[idx_metric_rmap]->arg && *argv[idx_metric_rmap]->arg != '\0') if (argc > 4)
{
if (strmatch (argv[idx_metric_rmap]->text, "always"))
originate_type = DEFAULT_ORIGINATE_ALWAYS; originate_type = DEFAULT_ORIGINATE_ALWAYS;
else if (strmatch(argv[idx_metric_rmap]->text, "metric"))
metric = strtoul(argv[idx_metric_rmap + 1]->arg, NULL, 10);
else else
originate_type = DEFAULT_ORIGINATE; routemap = argv[idx_metric_rmap + 1]->arg;
}
if (family == AF_INET6 && originate_type != DEFAULT_ORIGINATE_ALWAYS) if (family == AF_INET6 && originate_type != DEFAULT_ORIGINATE_ALWAYS)
{ {
@ -703,21 +698,6 @@ DEFUN (isis_default_originate,
vty_out(vty, "so use with care or use default-originate always.%s", VTY_NEWLINE); vty_out(vty, "so use with care or use default-originate always.%s", VTY_NEWLINE);
} }
if (strmatch(argv[idx_metric_rmap]->text, "metric"))
{
char *endp;
metric = strtoul(argv[idx_metric_rmap + 1]->arg, &endp, 10);
routemap = NULL;
if (argv[idx_metric_rmap]->arg[0] == '\0' || *endp != '\0')
return CMD_WARNING;
}
else
{
routemap = argv[idx_metric_rmap + 1]->arg;
metric = 0xffffffff;
}
isis_redist_set(area, level, family, DEFAULT_ROUTE, metric, routemap, originate_type); isis_redist_set(area, level, family, DEFAULT_ROUTE, metric, routemap, originate_type);
return 0; return 0;
} }
@ -740,13 +720,13 @@ DEFUN (no_isis_default_originate,
int family; int family;
int level; int level;
family = str2family(argv[idx_afi]->arg); family = str2family(argv[idx_afi]->text);
if (family < 0) if (family < 0)
return CMD_WARNING; return CMD_WARNING;
if (!strcmp("level-1", argv[idx_level]->arg)) if (strmatch ("level-1", argv[idx_level]->text))
level = 1; level = 1;
else if (!strcmp("level-2", argv[idx_level]->arg)) else if (strmatch ("level-2", argv[idx_level]->text))
level = 2; level = 2;
else else
return CMD_WARNING; return CMD_WARNING;

View File

@ -371,7 +371,7 @@ DEFUN (no_match_ip_address,
"IP Access-list name\n") "IP Access-list name\n")
{ {
int idx_acl = 4; int idx_acl = 4;
if (argc <= idx_acl) if (argc == 4)
return isis_route_match_delete(vty, vty->index, "ip address", NULL); return isis_route_match_delete(vty, vty->index, "ip address", NULL);
return isis_route_match_delete(vty, vty->index, "ip address", argv[idx_acl]->arg); return isis_route_match_delete(vty, vty->index, "ip address", argv[idx_acl]->arg);
} }
@ -404,7 +404,7 @@ DEFUN (no_match_ip_address_prefix_list,
"IP prefix-list name\n") "IP prefix-list name\n")
{ {
int idx_word = 5; int idx_word = 5;
if (argc <= idx_word) if (argc == 5)
return isis_route_match_delete (vty, vty->index, "ip address prefix-list", NULL); return isis_route_match_delete (vty, vty->index, "ip address prefix-list", NULL);
return isis_route_match_delete (vty, vty->index, "ip address prefix-list", argv[idx_word]->arg); return isis_route_match_delete (vty, vty->index, "ip address prefix-list", argv[idx_word]->arg);
} }
@ -435,7 +435,7 @@ DEFUN (no_match_ipv6_address,
"IPv6 access-list name\n") "IPv6 access-list name\n")
{ {
int idx_word = 4; int idx_word = 4;
if (argc <= idx_word) if (argc == 4)
return isis_route_match_delete(vty, vty->index, "ipv6 address", NULL); return isis_route_match_delete(vty, vty->index, "ipv6 address", NULL);
return isis_route_match_delete(vty, vty->index, "ipv6 address", argv[idx_word]->arg); return isis_route_match_delete(vty, vty->index, "ipv6 address", argv[idx_word]->arg);
} }
@ -467,7 +467,7 @@ DEFUN (no_match_ipv6_address_prefix_list,
"IP prefix-list name\n") "IP prefix-list name\n")
{ {
int idx_word = 5; int idx_word = 5;
if (argc <= idx_word) if (argc == 5)
return isis_route_match_delete (vty, vty->index, "ipv6 address prefix-list", NULL); return isis_route_match_delete (vty, vty->index, "ipv6 address prefix-list", NULL);
return isis_route_match_delete (vty, vty->index, "ipv6 address prefix-list", argv[idx_word]->arg); return isis_route_match_delete (vty, vty->index, "ipv6 address prefix-list", argv[idx_word]->arg);
} }
@ -498,7 +498,7 @@ DEFUN (no_set_metric,
"Metric value\n") "Metric value\n")
{ {
int idx_number = 3; int idx_number = 3;
if (argc <= idx_number) if (argc == 3)
return isis_route_set_delete(vty, vty->index, "metric", NULL); return isis_route_set_delete(vty, vty->index, "metric", NULL);
return isis_route_set_delete(vty, vty->index, "metric", argv[idx_number]->arg); return isis_route_set_delete(vty, vty->index, "metric", argv[idx_number]->arg);
} }

View File

@ -2057,9 +2057,8 @@ area_passwd_set(struct vty *vty, int level,
DEFUN (area_passwd_md5, DEFUN (area_passwd_md5,
area_passwd_md5_cmd, area_passwd_md5_cmd,
"<area-password|domain-password> md5 WORD [authenticate snp <send-only|validate>]", "area-password md5 WORD [authenticate snp <send-only|validate>]",
"Configure the authentication password for an area\n" "Configure the authentication password for an area\n"
"Set the authentication password for a routing domain\n"
"Authentication type\n" "Authentication type\n"
"Level-wide password\n" "Level-wide password\n"
"Authentication\n" "Authentication\n"
@ -2084,12 +2083,24 @@ DEFUN (area_passwd_md5,
argv[idx_word]->arg, snp_auth); argv[idx_word]->arg, snp_auth);
} }
DEFUN (domain_passwd_md5,
domain_passwd_md5_cmd,
"domain-password md5 WORD [authenticate snp <send-only|validate>]",
"Set the authentication password for a routing domain\n"
"Authentication type\n"
"Level-wide password\n"
"Authentication\n"
"SNP PDUs\n"
"Send but do not check PDUs on receiving\n"
"Send and check PDUs on receiving\n")
{
return area_passwd_md5 (self, vty, argc, argv);
}
DEFUN (area_passwd_clear, DEFUN (area_passwd_clear,
area_passwd_clear_cmd, area_passwd_clear_cmd,
"<area-password|domain-password> clear WORD [authenticate snp <send-only|validate>]", "area-password clear WORD [authenticate snp <send-only|validate>]",
"Configure the authentication password for an area\n" "Configure the authentication password for an area\n"
"Set the authentication password for a routing domain\n"
"Authentication type\n" "Authentication type\n"
"Area password\n" "Area password\n"
"Authentication\n" "Authentication\n"
@ -2106,7 +2117,7 @@ DEFUN (area_passwd_clear,
if (argc > 3) if (argc > 3)
{ {
snp_auth = SNP_AUTH_SEND; snp_auth = SNP_AUTH_SEND;
if (strmatch(argv[idx_type]->arg, "validate")) if (strmatch (argv[idx_type]->text, "validate"))
snp_auth |= SNP_AUTH_RECV; snp_auth |= SNP_AUTH_RECV;
} }
@ -2114,6 +2125,19 @@ DEFUN (area_passwd_clear,
argv[idx_word]->arg, snp_auth); argv[idx_word]->arg, snp_auth);
} }
DEFUN (domain_passwd_clear,
domain_passwd_clear_cmd,
"domain-password clear WORD [authenticate snp <send-only|validate>]",
"Set the authentication password for a routing domain\n"
"Authentication type\n"
"Area password\n"
"Authentication\n"
"SNP PDUs\n"
"Send but do not check PDUs on receiving\n"
"Send and check PDUs on receiving\n")
{
return area_passwd_clear (self, vty, argc, argv);
}
DEFUN (no_area_passwd, DEFUN (no_area_passwd,
no_area_passwd_cmd, no_area_passwd_cmd,
@ -2123,7 +2147,7 @@ DEFUN (no_area_passwd,
"Set the authentication password for a routing domain\n") "Set the authentication password for a routing domain\n")
{ {
int idx_password = 1; int idx_password = 1;
int level = (argv[idx_password]->arg[0] == 'd') ? IS_LEVEL_2 : IS_LEVEL_1; int level = strmatch (argv[idx_password]->text, "domain-password") ? IS_LEVEL_2 : IS_LEVEL_1;
struct isis_area *area = vty->index; struct isis_area *area = vty->index;
if (!area) if (!area)
@ -2246,5 +2270,7 @@ isis_vty_init (void)
install_element (ISIS_NODE, &area_passwd_md5_cmd); install_element (ISIS_NODE, &area_passwd_md5_cmd);
install_element (ISIS_NODE, &area_passwd_clear_cmd); install_element (ISIS_NODE, &area_passwd_clear_cmd);
install_element (ISIS_NODE, &domain_passwd_md5_cmd);
install_element (ISIS_NODE, &domain_passwd_clear_cmd);
install_element (ISIS_NODE, &no_area_passwd_cmd); install_element (ISIS_NODE, &no_area_passwd_cmd);
} }