"RIP receive packet\n"
"RIP send packet\n")
{
+ int idx_recv_send = 3;
rip_debug_packet |= RIP_DEBUG_PACKET;
- if (strncmp ("send", argv[3]->arg, strlen (argv[3]->arg)) == 0)
+ if (strncmp ("send", argv[idx_recv_send]->arg, strlen (argv[idx_recv_send]->arg)) == 0)
rip_debug_packet |= RIP_DEBUG_SEND;
- if (strncmp ("recv", argv[3]->arg, strlen (argv[3]->arg)) == 0)
+ if (strncmp ("recv", argv[idx_recv_send]->arg, strlen (argv[idx_recv_send]->arg)) == 0)
rip_debug_packet |= RIP_DEBUG_RECV;
return CMD_SUCCESS;
}
"RIP option set for receive packet\n"
"RIP option set for send packet\n")
{
- if (strncmp ("send", argv[4]->arg, strlen (argv[4]->arg)) == 0)
+ int idx_recv_send = 4;
+ if (strncmp ("send", argv[idx_recv_send]->arg, strlen (argv[idx_recv_send]->arg)) == 0)
{
if (IS_RIP_DEBUG_RECV)
rip_debug_packet &= ~RIP_DEBUG_SEND;
else
rip_debug_packet = 0;
}
- else if (strncmp ("recv", argv[4]->arg, strlen (argv[4]->arg)) == 0)
+ else if (strncmp ("recv", argv[idx_recv_send]->arg, strlen (argv[idx_recv_send]->arg)) == 0)
{
if (IS_RIP_DEBUG_SEND)
rip_debug_packet &= ~RIP_DEBUG_RECV;
"IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
"Interface name\n")
{
+ int idx_ipv4_word = 1;
int ret;
struct prefix_ipv4 p;
- ret = str2prefix_ipv4 (argv[1]->arg, &p);
+ ret = str2prefix_ipv4 (argv[idx_ipv4_word]->arg, &p);
if (ret)
ret = rip_enable_network_add ((struct prefix *) &p);
else
- ret = rip_enable_if_add (argv[1]->arg);
+ ret = rip_enable_if_add (argv[idx_ipv4_word]->arg);
if (ret < 0)
{
- vty_out (vty, "There is a same network configuration %s%s", argv[1]->arg,
+ vty_out (vty, "There is a same network configuration %s%s", argv[idx_ipv4_word]->arg,
VTY_NEWLINE);
return CMD_WARNING;
}
"IP prefix <network>/<length>, e.g., 35.0.0.0/8\n"
"Interface name\n")
{
+ int idx_ipv4_word = 2;
int ret;
struct prefix_ipv4 p;
- ret = str2prefix_ipv4 (argv[2]->arg, &p);
+ ret = str2prefix_ipv4 (argv[idx_ipv4_word]->arg, &p);
if (ret)
ret = rip_enable_network_delete ((struct prefix *) &p);
else
- ret = rip_enable_if_delete (argv[2]->arg);
+ ret = rip_enable_if_delete (argv[idx_ipv4_word]->arg);
if (ret < 0)
{
- vty_out (vty, "Can't find network configuration %s%s", argv[2]->arg,
+ vty_out (vty, "Can't find network configuration %s%s", argv[idx_ipv4_word]->arg,
VTY_NEWLINE);
return CMD_WARNING;
}
"Specify a neighbor router\n"
"Neighbor address\n")
{
+ int idx_ipv4 = 1;
int ret;
struct prefix_ipv4 p;
- ret = str2prefix_ipv4 (argv[1]->arg, &p);
+ ret = str2prefix_ipv4 (argv[idx_ipv4]->arg, &p);
if (ret <= 0)
{
"Specify a neighbor router\n"
"Neighbor address\n")
{
+ int idx_ipv4 = 2;
int ret;
struct prefix_ipv4 p;
- ret = str2prefix_ipv4 (argv[2]->arg, &p);
+ ret = str2prefix_ipv4 (argv[idx_ipv4]->arg, &p);
if (ret <= 0)
{
"RIP version 1\n"
"RIP version 2\n")
{
+ int idx_type = 4;
struct interface *ifp;
struct rip_interface *ri;
ri = ifp->info;
/* Version 1. */
- if (atoi (argv[4]->arg) == 1)
+ if (atoi (argv[idx_type]->arg) == 1)
{
ri->ri_receive = RI_RIP_VERSION_1;
return CMD_SUCCESS;
}
- if (atoi (argv[4]->arg) == 2)
+ if (atoi (argv[idx_type]->arg) == 2)
{
ri->ri_receive = RI_RIP_VERSION_2;
return CMD_SUCCESS;
"RIP version 1\n"
"RIP version 2\n")
{
+ int idx_type = 4;
struct interface *ifp;
struct rip_interface *ri;
ri = ifp->info;
/* Version 1. */
- if (atoi (argv[4]->arg) == 1)
+ if (atoi (argv[idx_type]->arg) == 1)
{
ri->ri_send = RI_RIP_VERSION_1;
return CMD_SUCCESS;
}
- if (atoi (argv[4]->arg) == 2)
+ if (atoi (argv[idx_type]->arg) == 2)
{
ri->ri_send = RI_RIP_VERSION_2;
return CMD_SUCCESS;
"Keyed message digest\n"
"Clear text authentication\n")
{
+ int idx_encryption = 4;
struct interface *ifp;
struct rip_interface *ri;
int auth_type;
return CMD_WARNING;
}
- if (strncmp ("md5", argv[4]->arg, strlen (argv[4]->arg)) == 0)
+ if (strncmp ("md5", argv[idx_encryption]->arg, strlen (argv[idx_encryption]->arg)) == 0)
auth_type = RIP_AUTH_MD5;
- else if (strncmp ("text", argv[4]->arg, strlen (argv[4]->arg)) == 0)
+ else if (strncmp ("text", argv[idx_encryption]->arg, strlen (argv[idx_encryption]->arg)) == 0)
auth_type = RIP_AUTH_SIMPLE_PASSWORD;
else
{
"Authentication string\n"
"Authentication string\n")
{
+ int idx_line = 4;
struct interface *ifp;
struct rip_interface *ri;
ifp = (struct interface *)vty->index;
ri = ifp->info;
- if (strlen (argv[4]->arg) > 16)
+ if (strlen (argv[idx_line]->arg) > 16)
{
vty_out (vty, "%% RIPv2 authentication string must be shorter than 16%s",
VTY_NEWLINE);
if (ri->auth_str)
free (ri->auth_str);
- ri->auth_str = strdup (argv[4]->arg);
+ ri->auth_str = strdup (argv[idx_line]->arg);
return CMD_SUCCESS;
}
"Authentication key-chain\n"
"name of key-chain\n")
{
+ int idx_line = 4;
struct interface *ifp;
struct rip_interface *ri;
if (ri->key_chain)
free (ri->key_chain);
- ri->key_chain = strdup (argv[4]->arg);
+ ri->key_chain = strdup (argv[idx_line]->arg);
return CMD_SUCCESS;
}
"Interface name\n"
"default for all interfaces\n")
{
- const char *ifname = argv[1]->arg;
+ int idx_ifname = 1;
+ const char *ifname = argv[idx_ifname]->arg;
if (!strcmp(ifname,"default")) {
passive_default = 1;
"Interface name\n"
"default for all interfaces\n")
{
- const char *ifname = argv[2]->arg;
+ int idx_ifname = 2;
+ const char *ifname = argv[idx_ifname]->arg;
if (!strcmp(ifname,"default")) {
passive_default = 0;
"For outgoing updates\n"
"Metric value\n")
{
- return rip_offset_list_set (vty, argv[1]->arg, argv[2]->arg, argv[3]->arg, NULL);
+ int idx_word = 1;
+ int idx_in_out = 2;
+ int idx_number = 3;
+ return rip_offset_list_set (vty, argv[idx_word]->arg, argv[idx_in_out]->arg, argv[idx_number]->arg, NULL);
}
DEFUN (rip_offset_list_ifname,
"Metric value\n"
"Interface to match\n")
{
- return rip_offset_list_set (vty, argv[1]->arg, argv[2]->arg, argv[3]->arg, argv[4]->arg);
+ int idx_word = 1;
+ int idx_in_out = 2;
+ int idx_number = 3;
+ int idx_ifname = 4;
+ return rip_offset_list_set (vty, argv[idx_word]->arg, argv[idx_in_out]->arg, argv[idx_number]->arg, argv[idx_ifname]->arg);
}
DEFUN (no_rip_offset_list,
"For outgoing updates\n"
"Metric value\n")
{
- return rip_offset_list_unset (vty, argv[2]->arg, argv[3]->arg, argv[4]->arg, NULL);
+ int idx_word = 2;
+ int idx_in_out = 3;
+ int idx_number = 4;
+ return rip_offset_list_unset (vty, argv[idx_word]->arg, argv[idx_in_out]->arg, argv[idx_number]->arg, NULL);
}
DEFUN (no_rip_offset_list_ifname,
"Metric value\n"
"Interface to match\n")
{
- return rip_offset_list_unset (vty, argv[2]->arg, argv[3]->arg, argv[4]->arg, argv[5]->arg);
+ int idx_word = 2;
+ int idx_in_out = 3;
+ int idx_number = 4;
+ int idx_ifname = 5;
+ return rip_offset_list_unset (vty, argv[idx_word]->arg, argv[idx_in_out]->arg, argv[idx_number]->arg, argv[idx_ifname]->arg);
}
static int
"Match metric of route\n"
"Metric value\n")
{
- return rip_route_match_add (vty, vty->index, "metric", argv[2]->arg);
+ int idx_number = 2;
+ return rip_route_match_add (vty, vty->index, "metric", argv[idx_number]->arg);
}
/*
"Match first hop interface of route\n"
"Interface name\n")
{
- return rip_route_match_add (vty, vty->index, "interface", argv[2]->arg);
+ int idx_word = 2;
+ return rip_route_match_add (vty, vty->index, "interface", argv[idx_word]->arg);
}
/*
"IP access-list number (expanded range)\n"
"IP Access-list name\n")
{
- return rip_route_match_add (vty, vty->index, "ip next-hop", argv[3]->arg);
+ int idx_acl = 3;
+ return rip_route_match_add (vty, vty->index, "ip next-hop", argv[idx_acl]->arg);
}
/*
"Match entries of prefix-lists\n"
"IP prefix-list name\n")
{
- return rip_route_match_add (vty, vty->index, "ip next-hop prefix-list", argv[4]->arg);
+ int idx_word = 4;
+ return rip_route_match_add (vty, vty->index, "ip next-hop prefix-list", argv[idx_word]->arg);
}
/*
"IP Access-list name\n")
{
- return rip_route_match_add (vty, vty->index, "ip address", argv[3]->arg);
+ int idx_acl = 3;
+ return rip_route_match_add (vty, vty->index, "ip address", argv[idx_acl]->arg);
}
/*
"Match entries of prefix-lists\n"
"IP prefix-list name\n")
{
- return rip_route_match_add (vty, vty->index, "ip address prefix-list", argv[4]->arg);
+ int idx_word = 4;
+ return rip_route_match_add (vty, vty->index, "ip address prefix-list", argv[idx_word]->arg);
}
/*
"Match tag of route\n"
"Metric value\n")
{
- return rip_route_match_add (vty, vty->index, "tag", argv[2]->arg);
+ int idx_number = 2;
+ return rip_route_match_add (vty, vty->index, "tag", argv[idx_number]->arg);
}
/*
"Metric value for destination routing protocol\n"
"Metric value\n")
{
- return rip_route_set_add (vty, vty->index, "metric", argv[2]->arg);
+ int idx_number = 2;
+ return rip_route_set_add (vty, vty->index, "metric", argv[idx_number]->arg);
}
"Next hop address\n"
"IP address of next hop\n")
{
+ int idx_ipv4 = 3;
union sockunion su;
int ret;
- ret = str2sockunion (argv[3]->arg, &su);
+ ret = str2sockunion (argv[idx_ipv4]->arg, &su);
if (ret < 0)
{
vty_out (vty, "%% Malformed next-hop address%s", VTY_NEWLINE);
return CMD_WARNING;
}
- return rip_route_set_add (vty, vty->index, "ip next-hop", argv[3]->arg);
+ return rip_route_set_add (vty, vty->index, "ip next-hop", argv[idx_ipv4]->arg);
}
/*
"Tag value for routing protocol\n"
"Tag value\n")
{
- return rip_route_set_add (vty, vty->index, "tag", argv[2]->arg);
+ int idx_number = 2;
+ return rip_route_set_add (vty, vty->index, "tag", argv[idx_number]->arg);
}
/*
"Route map reference\n"
"Pointer to route-map entries\n")
{
+ int idx_protocol = 1;
+ int idx_word = 3;
int i;
for (i = 0; redist_type[i].str; i++) {
- if (strncmp(redist_type[i].str, argv[1]->arg,
+ if (strncmp(redist_type[i].str, argv[idx_protocol]->arg,
redist_type[i].str_min_len) == 0)
{
- rip_routemap_set (redist_type[i].type, argv[3]->arg);
+ rip_routemap_set (redist_type[i].type, argv[idx_word]->arg);
zclient_redistribute (ZEBRA_REDISTRIBUTE_ADD, zclient, AFI_IP,
redist_type[i].type, 0, VRF_DEFAULT);
return CMD_SUCCESS;
}
}
- vty_out(vty, "Invalid type %s%s", argv[1]->arg,
+ vty_out(vty, "Invalid type %s%s", argv[idx_protocol]->arg,
VTY_NEWLINE);
return CMD_WARNING;
"Route map reference\n"
"Pointer to route-map entries\n")
{
+ int idx_protocol = 2;
+ int idx_word = 4;
int i;
for (i = 0; redist_type[i].str; i++)
{
- if (strncmp(redist_type[i].str, argv[2]->arg,
+ if (strncmp(redist_type[i].str, argv[idx_protocol]->arg,
redist_type[i].str_min_len) == 0)
{
- if (rip_routemap_unset (redist_type[i].type,argv[4]->arg))
+ if (rip_routemap_unset (redist_type[i].type,argv[idx_word]->arg))
return CMD_WARNING;
rip_redistribute_unset (redist_type[i].type);
return CMD_SUCCESS;
}
}
- vty_out(vty, "Invalid type %s%s", argv[2]->arg,
+ vty_out(vty, "Invalid type %s%s", argv[idx_protocol]->arg,
VTY_NEWLINE);
return CMD_WARNING;
"Metric\n"
"Metric value\n")
{
+ int idx_protocol = 1;
+ int idx_number = 3;
int i;
int metric;
- metric = atoi (argv[3]->arg);
+ metric = atoi (argv[idx_number]->arg);
for (i = 0; redist_type[i].str; i++) {
- if (strncmp(redist_type[i].str, argv[1]->arg,
+ if (strncmp(redist_type[i].str, argv[idx_protocol]->arg,
redist_type[i].str_min_len) == 0)
{
rip_redistribute_metric_set (redist_type[i].type, metric);
}
}
- vty_out(vty, "Invalid type %s%s", argv[1]->arg,
+ vty_out(vty, "Invalid type %s%s", argv[idx_protocol]->arg,
VTY_NEWLINE);
return CMD_WARNING;
"Metric\n"
"Metric value\n")
{
+ int idx_protocol = 2;
+ int idx_number = 4;
int i;
for (i = 0; redist_type[i].str; i++)
{
- if (strncmp(redist_type[i].str, argv[2]->arg,
+ if (strncmp(redist_type[i].str, argv[idx_protocol]->arg,
redist_type[i].str_min_len) == 0)
{
- if (rip_metric_unset (redist_type[i].type, atoi(argv[4]->arg)))
+ if (rip_metric_unset (redist_type[i].type, atoi(argv[idx_number]->arg)))
return CMD_WARNING;
rip_redistribute_unset (redist_type[i].type);
return CMD_SUCCESS;
}
}
- vty_out(vty, "Invalid type %s%s", argv[2]->arg,
+ vty_out(vty, "Invalid type %s%s", argv[idx_protocol]->arg,
VTY_NEWLINE);
return CMD_WARNING;
"Route map reference\n"
"Pointer to route-map entries\n")
{
+ int idx_protocol = 1;
+ int idx_number = 3;
+ int idx_word = 5;
int i;
int metric;
- metric = atoi (argv[3]->arg);
+ metric = atoi (argv[idx_number]->arg);
for (i = 0; redist_type[i].str; i++) {
- if (strncmp(redist_type[i].str, argv[1]->arg,
+ if (strncmp(redist_type[i].str, argv[idx_protocol]->arg,
redist_type[i].str_min_len) == 0)
{
rip_redistribute_metric_set (redist_type[i].type, metric);
- rip_routemap_set (redist_type[i].type, argv[5]->arg);
+ rip_routemap_set (redist_type[i].type, argv[idx_word]->arg);
zclient_redistribute (ZEBRA_REDISTRIBUTE_ADD, zclient, AFI_IP,
redist_type[i].type, 0, VRF_DEFAULT);
return CMD_SUCCESS;
}
}
- vty_out(vty, "Invalid type %s%s", argv[1]->arg,
+ vty_out(vty, "Invalid type %s%s", argv[idx_protocol]->arg,
VTY_NEWLINE);
return CMD_WARNING;
"Route map reference\n"
"Pointer to route-map entries\n")
{
+ int idx_protocol = 2;
+ int idx_number = 4;
+ int idx_word = 6;
int i;
for (i = 0; redist_type[i].str; i++)
{
- if (strncmp(redist_type[i].str, argv[2]->arg,
+ if (strncmp(redist_type[i].str, argv[idx_protocol]->arg,
redist_type[i].str_min_len) == 0)
{
- if (rip_metric_unset (redist_type[i].type, atoi(argv[4]->arg)))
+ if (rip_metric_unset (redist_type[i].type, atoi(argv[idx_number]->arg)))
return CMD_WARNING;
- if (rip_routemap_unset (redist_type[i].type, argv[6]->arg))
+ if (rip_routemap_unset (redist_type[i].type, argv[idx_word]->arg))
{
- rip_redistribute_metric_set(redist_type[i].type, atoi(argv[4]->arg));
+ rip_redistribute_metric_set(redist_type[i].type, atoi(argv[idx_number]->arg));
return CMD_WARNING;
}
rip_redistribute_unset (redist_type[i].type);
}
}
- vty_out(vty, "Invalid type %s%s", argv[2]->arg,
+ vty_out(vty, "Invalid type %s%s", argv[idx_protocol]->arg,
VTY_NEWLINE);
return CMD_WARNING;
"Set routing protocol version\n"
"version\n")
{
+ int idx_number = 1;
int version;
- version = atoi (argv[1]->arg);
+ version = atoi (argv[idx_number]->arg);
if (version != RIPv1 && version != RIPv2)
{
vty_out (vty, "invalid rip version %d%s", version,
rip->version_recv = version;
return CMD_SUCCESS;
-}
+}
/*
* CHECK ME - The following ALIASes need to be implemented in this DEFUN
rip->version_recv = RI_RIP_VERSION_1_AND_2;
return CMD_SUCCESS;
-}
+}
DEFUN (rip_route,
"RIP static route configuration\n"
"IP prefix <network>/<length>\n")
{
+ int idx_ipv4_prefixlen = 1;
int ret;
struct prefix_ipv4 p;
struct route_node *node;
- ret = str2prefix_ipv4 (argv[1]->arg, &p);
+ ret = str2prefix_ipv4 (argv[idx_ipv4_prefixlen]->arg, &p);
if (ret < 0)
{
vty_out (vty, "Malformed address%s", VTY_NEWLINE);
"RIP static route configuration\n"
"IP prefix <network>/<length>\n")
{
+ int idx_ipv4_prefixlen = 2;
int ret;
struct prefix_ipv4 p;
struct route_node *node;
- ret = str2prefix_ipv4 (argv[2]->arg, &p);
+ ret = str2prefix_ipv4 (argv[idx_ipv4_prefixlen]->arg, &p);
if (ret < 0)
{
vty_out (vty, "Malformed address%s", VTY_NEWLINE);
node = route_node_lookup (rip->route, (struct prefix *) &p);
if (! node)
{
- vty_out (vty, "Can't find route %s.%s", argv[2]->arg,
+ vty_out (vty, "Can't find route %s.%s", argv[idx_ipv4_prefixlen]->arg,
VTY_NEWLINE);
return CMD_WARNING;
}
"Set a metric of redistribute routes\n"
"Default metric\n")
{
+ int idx_number = 1;
if (rip)
{
- rip->default_metric = atoi (argv[1]->arg);
+ rip->default_metric = atoi (argv[idx_number]->arg);
/* rip_update_default_metric (); */
}
return CMD_SUCCESS;
"Routing information timeout timer. Default is 180.\n"
"Garbage collection timer. Default is 120.\n")
{
+ int idx_number = 2;
+ int idx_number_2 = 3;
+ int idx_number_3 = 4;
unsigned long update;
unsigned long timeout;
unsigned long garbage;
unsigned long RIP_TIMER_MAX = 2147483647;
unsigned long RIP_TIMER_MIN = 5;
- update = strtoul (argv[2]->arg, &endptr, 10);
+ update = strtoul (argv[idx_number]->arg, &endptr, 10);
if (update > RIP_TIMER_MAX || update < RIP_TIMER_MIN || *endptr != '\0')
{
vty_out (vty, "update timer value error%s", VTY_NEWLINE);
return CMD_WARNING;
}
- timeout = strtoul (argv[3]->arg, &endptr, 10);
+ timeout = strtoul (argv[idx_number_2]->arg, &endptr, 10);
if (timeout > RIP_TIMER_MAX || timeout < RIP_TIMER_MIN || *endptr != '\0')
{
vty_out (vty, "timeout timer value error%s", VTY_NEWLINE);
return CMD_WARNING;
}
- garbage = strtoul (argv[4]->arg, &endptr, 10);
+ garbage = strtoul (argv[idx_number_3]->arg, &endptr, 10);
if (garbage > RIP_TIMER_MAX || garbage < RIP_TIMER_MIN || *endptr != '\0')
{
vty_out (vty, "garbage timer value error%s", VTY_NEWLINE);
"Administrative distance\n"
"Distance value\n")
{
- rip->distance = atoi (argv[1]->arg);
+ int idx_number = 1;
+ rip->distance = atoi (argv[idx_number]->arg);
return CMD_SUCCESS;
}
"Distance value\n"
"IP source prefix\n")
{
- rip_distance_set (vty, argv[1]->arg, argv[2]->arg, NULL);
+ int idx_number = 1;
+ int idx_ipv4_prefixlen = 2;
+ rip_distance_set (vty, argv[idx_number]->arg, argv[idx_ipv4_prefixlen]->arg, NULL);
return CMD_SUCCESS;
}
"Distance value\n"
"IP source prefix\n")
{
- rip_distance_unset (vty, argv[2]->arg, argv[3]->arg, NULL);
+ int idx_number = 2;
+ int idx_ipv4_prefixlen = 3;
+ rip_distance_unset (vty, argv[idx_number]->arg, argv[idx_ipv4_prefixlen]->arg, NULL);
return CMD_SUCCESS;
}
"IP source prefix\n"
"Access list name\n")
{
- rip_distance_set (vty, argv[1]->arg, argv[2]->arg, argv[3]->arg);
+ int idx_number = 1;
+ int idx_ipv4_prefixlen = 2;
+ int idx_word = 3;
+ rip_distance_set (vty, argv[idx_number]->arg, argv[idx_ipv4_prefixlen]->arg, argv[idx_word]->arg);
return CMD_SUCCESS;
}
"IP source prefix\n"
"Access list name\n")
{
- rip_distance_unset (vty, argv[2]->arg, argv[3]->arg, argv[4]->arg);
+ int idx_number = 2;
+ int idx_ipv4_prefixlen = 3;
+ int idx_word = 4;
+ rip_distance_unset (vty, argv[idx_number]->arg, argv[idx_ipv4_prefixlen]->arg, argv[idx_word]->arg);
return CMD_SUCCESS;
}
elif token == 'both|send|receive' or token == 'send|recv':
return 'idx_send_recv'
- elif token == 'both|extended|standard':
+ elif token == 'both|extended|standard' or token == '1|2':
return 'idx_type'
- elif token == 'A.B.C.D|WORD':
+ elif token == 'A.B.C.D|WORD' or token == 'A.B.C.D/M|WORD':
return 'idx_ipv4_word'
elif token == 'advertise-queue|advertised-routes|packet-queue':
elif token == 'ipv4|ipv6' or token == 'ip|ipv6':
return 'idx_afi'
- elif token == 'md5|clear' or token == 'null|message-digest':
+ elif token == 'md5|clear' or token == 'null|message-digest' or token == 'md5|text':
return 'idx_encryption'
+ elif token == 'IFNAME|default':
+ return 'idx_ifname'
+
elif token == 'type-1|type-2':
return 'idx_external'