Merge branch 'master' of https://github.com/dwalton76/frr into bgpd-ipv4-plus-label-misc3

Conflicts:
	bgpd/bgp_route.c
	bgpd/bgp_zebra.c
This commit is contained in:
Daniel Walton 2017-07-10 13:06:19 +00:00
commit dfd8121281
25 changed files with 123 additions and 361 deletions

View File

@ -617,8 +617,7 @@ DEFUN (no_router_babel,
"no router babel", "no router babel",
NO_STR NO_STR
"Disable a routing process\n" "Disable a routing process\n"
"Remove Babel instance command\n" "Remove Babel instance command\n")
"No attributes\n")
{ {
if(babel_routing_process) if(babel_routing_process)
babel_clean_routing_process(); babel_clean_routing_process();

View File

@ -232,12 +232,6 @@ bgp_exit (int status)
vnc_zebra_destroy(); vnc_zebra_destroy();
#endif #endif
bgp_zebra_destroy(); bgp_zebra_destroy();
if (bgp_nexthop_buf)
stream_free (bgp_nexthop_buf);
if (bgp_ifindices_buf)
stream_free (bgp_ifindices_buf);
if (bgp_label_buf)
stream_free (bgp_label_buf);
/* reverse bgp_master_init */ /* reverse bgp_master_init */
if (bm->master) if (bm->master)

View File

@ -1379,7 +1379,6 @@ DEFUN (bgp_update_delay_establish_wait,
"update-delay (0-3600) (1-3600)", "update-delay (0-3600) (1-3600)",
"Force initial delay for best-path and updates\n" "Force initial delay for best-path and updates\n"
"Seconds\n" "Seconds\n"
"Wait for peers to be established\n"
"Seconds\n") "Seconds\n")
{ {
int idx_number = 1; int idx_number = 1;
@ -1394,7 +1393,7 @@ DEFUN (no_bgp_update_delay,
NO_STR NO_STR
"Force initial delay for best-path and updates\n" "Force initial delay for best-path and updates\n"
"Seconds\n" "Seconds\n"
"Wait for peers to be established\n") "Seconds\n")
{ {
return bgp_update_delay_deconfig_vty(vty); return bgp_update_delay_deconfig_vty(vty);
} }
@ -6237,11 +6236,10 @@ DEFUN_NOSH (address_family_vpnv6,
DEFUN_NOSH (address_family_evpn, DEFUN_NOSH (address_family_evpn,
address_family_evpn_cmd, address_family_evpn_cmd,
"address-family <l2vpn evpn>", "address-family l2vpn evpn",
"Enter Address Family command mode\n" "Enter Address Family command mode\n"
"EVPN Address family\n" "Address Family\n"
"Layer2 VPN Address family\n" "Address Family modifier\n")
"Ethernet Virtual Private Network Subsequent Address Family\n")
{ {
vty->node = BGP_EVPN_NODE; vty->node = BGP_EVPN_NODE;
return CMD_SUCCESS; return CMD_SUCCESS;
@ -9619,8 +9617,7 @@ DEFUN (show_bgp_updgrps_afi_adj,
"Detailed info about dynamic update groups\n" "Detailed info about dynamic update groups\n"
"Advertisement queue\n" "Advertisement queue\n"
"Announced routes\n" "Announced routes\n"
"Packet queue\n" "Packet queue\n")
"Specific subgroup info wanted for\n")
{ {
int idx_afi = 2; int idx_afi = 2;
int idx_safi = 3; int idx_safi = 3;
@ -9725,8 +9722,7 @@ DEFUN (show_bgp_updgrps_afi_adj_s,
"Specific subgroup to display info for\n" "Specific subgroup to display info for\n"
"Advertisement queue\n" "Advertisement queue\n"
"Announced routes\n" "Announced routes\n"
"Packet queue\n" "Packet queue\n")
"Specific subgroup info wanted for\n")
{ {
int idx_afi = 2; int idx_afi = 2;
int idx_safi = 3; int idx_safi = 3;
@ -12171,8 +12167,7 @@ DEFUN (ip_lcommunity_list_standard,
LCOMMUNITY_LIST_STR LCOMMUNITY_LIST_STR
"Large Community list number (standard)\n" "Large Community list number (standard)\n"
"Specify large community to reject\n" "Specify large community to reject\n"
"Specify large community to accept\n" "Specify large community to accept\n")
LCOMMUNITY_VAL_STR)
{ {
return lcommunity_list_set_vty (vty, argc, argv, LARGE_COMMUNITY_LIST_STANDARD, 0); return lcommunity_list_set_vty (vty, argc, argv, LARGE_COMMUNITY_LIST_STANDARD, 0);
} }

View File

@ -1222,8 +1222,7 @@ bgp_zebra_announce (struct bgp_node *rn, struct prefix *p, struct bgp_info *info
u_char distance; u_char distance;
struct peer *peer; struct peer *peer;
struct bgp_info *mpinfo; struct bgp_info *mpinfo;
size_t oldsize, newsize; u_int32_t metric;
u_int32_t nhcount, metric;
struct bgp_info local_info; struct bgp_info local_info;
struct bgp_info *info_cp = &local_info; struct bgp_info *info_cp = &local_info;
route_tag_t tag; route_tag_t tag;
@ -1270,8 +1269,6 @@ bgp_zebra_announce (struct bgp_node *rn, struct prefix *p, struct bgp_info *info
SET_FLAG (flags, ZEBRA_FLAG_INTERNAL); SET_FLAG (flags, ZEBRA_FLAG_INTERNAL);
nhcount = 1 + bgp_info_mpath_count (info);
if (p->family == AF_INET && !BGP_ATTR_NEXTHOP_AFI_IP6(info->attr)) if (p->family == AF_INET && !BGP_ATTR_NEXTHOP_AFI_IP6(info->attr))
{ {
struct zapi_ipv4 api; struct zapi_ipv4 api;
@ -1281,78 +1278,17 @@ bgp_zebra_announce (struct bgp_node *rn, struct prefix *p, struct bgp_info *info
int has_valid_label = 0; int has_valid_label = 0;
/* resize nexthop buffer size if necessary */ /* resize nexthop buffer size if necessary */
if ((oldsize = stream_get_size (bgp_nexthop_buf)) <
(sizeof (struct in_addr *) * nhcount))
{
newsize = sizeof (struct in_addr *) * nhcount;
newsize = stream_resize (bgp_nexthop_buf, newsize);
if (newsize == oldsize)
{
zlog_err ("can't resize nexthop buffer");
return;
}
}
stream_reset (bgp_nexthop_buf); stream_reset (bgp_nexthop_buf);
nexthop = NULL; nexthop = NULL;
/* For labeled unicast, each nexthop has a label too. Resize label stream_reset (bgp_label_buf);
* buffer, if required.
*/
if (safi == SAFI_UNICAST)
{
if ((oldsize = stream_get_size (bgp_label_buf)) <
(sizeof (unsigned int) * nhcount))
{
newsize = (sizeof (unsigned int) * nhcount);
newsize = stream_resize (bgp_label_buf, newsize);
if (newsize == oldsize)
{
zlog_err ("can't resize label buffer");
return;
}
}
stream_reset (bgp_label_buf);
}
/* Metric is currently based on the best-path only. */
metric = info->attr->med;
if (bgp->table_map[afi][safi].name) if (bgp->table_map[afi][safi].name)
{ BGP_INFO_ATTR_BUF_INIT();
BGP_INFO_ATTR_BUF_INIT();
/* Copy info and attributes, so the route-map apply doesn't modify the /* Metric is currently based on the best-path only */
BGP route info. */ metric = info->attr->med;
BGP_INFO_ATTR_BUF_COPY(info, info_cp); for (mpinfo = info ; mpinfo; mpinfo = bgp_info_mpath_next (mpinfo))
if (bgp_table_map_apply(bgp->table_map[afi][safi].map, p, info_cp))
{
metric = info_cp->attr->med;
nexthop = &info_cp->attr->nexthop;
if (info_cp->attr->extra)
tag = info_cp->attr->extra->tag;
}
BGP_INFO_ATTR_BUF_FREE(info_cp);
}
else
{
nexthop = &info->attr->nexthop;
}
if (nexthop)
{
stream_put (bgp_nexthop_buf, &nexthop, sizeof (struct in_addr *));
valid_nh_count++;
if (info->extra && bgp_is_valid_label(&info->extra->label))
{
has_valid_label = 1;
label = label_pton(&info->extra->label);
stream_put (bgp_label_buf, &label, sizeof (mpls_label_t));
}
}
for (mpinfo = bgp_info_mpath_first (info); mpinfo;
mpinfo = bgp_info_mpath_next (mpinfo))
{ {
nexthop = NULL; nexthop = NULL;
@ -1362,13 +1298,19 @@ bgp_zebra_announce (struct bgp_node *rn, struct prefix *p, struct bgp_info *info
BGP route info. */ BGP route info. */
BGP_INFO_ATTR_BUF_COPY(mpinfo, info_cp); BGP_INFO_ATTR_BUF_COPY(mpinfo, info_cp);
if (bgp_table_map_apply(bgp->table_map[afi][safi].map, p, info_cp)) if (bgp_table_map_apply(bgp->table_map[afi][safi].map, p, info_cp))
nexthop = &info_cp->attr->nexthop; {
if (mpinfo == info)
{
/* Metric is currently based on the best-path only */
metric = info_cp->attr->med;
tag = info_cp->attr->extra->tag;
}
nexthop = &info_cp->attr->nexthop;
}
BGP_INFO_ATTR_BUF_FREE(info_cp); BGP_INFO_ATTR_BUF_FREE(info_cp);
} }
else else
{ nexthop = &mpinfo->attr->nexthop;
nexthop = &mpinfo->attr->nexthop;
}
if (nexthop == NULL) if (nexthop == NULL)
continue; continue;
@ -1469,110 +1411,20 @@ bgp_zebra_announce (struct bgp_node *rn, struct prefix *p, struct bgp_info *info
char buf[2][INET6_ADDRSTRLEN]; char buf[2][INET6_ADDRSTRLEN];
int has_valid_label = 0; int has_valid_label = 0;
/* resize nexthop buffer size if necessary */
if ((oldsize = stream_get_size (bgp_nexthop_buf)) <
(sizeof (struct in6_addr *) * nhcount))
{
newsize = (sizeof (struct in6_addr *) * nhcount);
newsize = stream_resize (bgp_nexthop_buf, newsize);
if (newsize == oldsize)
{
zlog_err ("can't resize nexthop buffer");
return;
}
}
stream_reset (bgp_nexthop_buf); stream_reset (bgp_nexthop_buf);
/* resize ifindices buffer size if necessary */
if ((oldsize = stream_get_size (bgp_ifindices_buf)) <
(sizeof (unsigned int) * nhcount))
{
newsize = (sizeof (unsigned int) * nhcount);
newsize = stream_resize (bgp_ifindices_buf, newsize);
if (newsize == oldsize)
{
zlog_err ("can't resize nexthop buffer");
return;
}
}
stream_reset (bgp_ifindices_buf); stream_reset (bgp_ifindices_buf);
stream_reset (bgp_label_buf);
/* For labeled unicast, each nexthop has a label too. Resize label
* buffer, if required.
*/
if (safi == SAFI_UNICAST)
{
if ((oldsize = stream_get_size (bgp_label_buf)) <
(sizeof (unsigned int) * nhcount))
{
newsize = (sizeof (unsigned int) * nhcount);
newsize = stream_resize (bgp_label_buf, newsize);
if (newsize == oldsize)
{
zlog_err ("can't resize label buffer");
return;
}
}
stream_reset (bgp_label_buf);
}
ifindex = 0; ifindex = 0;
nexthop = NULL; nexthop = NULL;
assert (info->attr->extra); assert (info->attr->extra);
/* Metric is currently based on the best-path only. */
metric = info->attr->med;
if (bgp->table_map[afi][safi].name) if (bgp->table_map[afi][safi].name)
{ BGP_INFO_ATTR_BUF_INIT();
BGP_INFO_ATTR_BUF_INIT();
/* Copy info and attributes, so the route-map apply doesn't modify the metric = info->attr->med;
BGP route info. */ for (mpinfo = info ; mpinfo; mpinfo = bgp_info_mpath_next (mpinfo))
BGP_INFO_ATTR_BUF_COPY(info, info_cp);
if (bgp_table_map_apply(bgp->table_map[afi][safi].map, p, info_cp))
{
metric = info_cp->attr->med;
nexthop = bgp_info_to_ipv6_nexthop(info_cp);
if (info_cp->attr->extra)
tag = info_cp->attr->extra->tag;
}
BGP_INFO_ATTR_BUF_FREE(info_cp);
}
else
{
nexthop = bgp_info_to_ipv6_nexthop(info);
}
if (nexthop)
{
if (info->attr->extra->mp_nexthop_len == BGP_ATTR_NHLEN_IPV6_GLOBAL_AND_LL)
if (info->peer->nexthop.ifp)
ifindex = info->peer->nexthop.ifp->ifindex;
if (!ifindex)
{
if (info->peer->conf_if || info->peer->ifname)
ifindex = if_nametoindex (info->peer->conf_if ? info->peer->conf_if : info->peer->ifname);
else if (info->peer->nexthop.ifp)
ifindex = info->peer->nexthop.ifp->ifindex;
}
stream_put (bgp_nexthop_buf, &nexthop, sizeof (struct in6_addr *));
stream_put (bgp_ifindices_buf, &ifindex, sizeof (unsigned int));
if (info->extra && bgp_is_valid_label(&info->extra->label))
{
has_valid_label = 1;
label = label_pton(&info->extra->label);
stream_put (bgp_label_buf, &label, sizeof (mpls_label_t));
}
valid_nh_count++;
}
for (mpinfo = bgp_info_mpath_first (info); mpinfo;
mpinfo = bgp_info_mpath_next (mpinfo))
{ {
ifindex = 0; ifindex = 0;
nexthop = NULL; nexthop = NULL;
@ -1583,18 +1435,24 @@ bgp_zebra_announce (struct bgp_node *rn, struct prefix *p, struct bgp_info *info
BGP route info. */ BGP route info. */
BGP_INFO_ATTR_BUF_COPY(mpinfo, info_cp); BGP_INFO_ATTR_BUF_COPY(mpinfo, info_cp);
if (bgp_table_map_apply(bgp->table_map[afi][safi].map, p, info_cp)) if (bgp_table_map_apply(bgp->table_map[afi][safi].map, p, info_cp))
nexthop = bgp_info_to_ipv6_nexthop(info_cp); {
if (mpinfo == info)
{
metric = info_cp->attr->med;
tag = info_cp->attr->extra->tag;
}
nexthop = bgp_info_to_ipv6_nexthop(info_cp);
}
BGP_INFO_ATTR_BUF_FREE(info_cp); BGP_INFO_ATTR_BUF_FREE(info_cp);
} }
else else
{ nexthop = bgp_info_to_ipv6_nexthop(mpinfo);
nexthop = bgp_info_to_ipv6_nexthop(mpinfo);
}
if (nexthop == NULL) if (nexthop == NULL)
continue; continue;
if (mpinfo->attr->extra->mp_nexthop_len == BGP_ATTR_NHLEN_IPV6_GLOBAL_AND_LL) if ((mpinfo == info) &&
mpinfo->attr->extra->mp_nexthop_len == BGP_ATTR_NHLEN_IPV6_GLOBAL_AND_LL)
if (mpinfo->peer->nexthop.ifp) if (mpinfo->peer->nexthop.ifp)
ifindex = mpinfo->peer->nexthop.ifp->ifindex; ifindex = mpinfo->peer->nexthop.ifp->ifindex;
@ -2276,14 +2134,22 @@ bgp_zebra_init (struct thread_master *master)
zclient->import_check_update = bgp_read_import_check_update; zclient->import_check_update = bgp_read_import_check_update;
zclient->fec_update = bgp_read_fec_update; zclient->fec_update = bgp_read_fec_update;
bgp_nexthop_buf = stream_new(BGP_NEXTHOP_BUF_SIZE); bgp_nexthop_buf = stream_new(multipath_num * sizeof (struct in6_addr));
bgp_ifindices_buf = stream_new(BGP_IFINDICES_BUF_SIZE); bgp_ifindices_buf = stream_new(multipath_num * sizeof (unsigned int));
bgp_label_buf = stream_new(BGP_LABEL_BUF_SIZE); bgp_label_buf = stream_new(multipath_num * sizeof (unsigned int));
} }
void void
bgp_zebra_destroy(void) bgp_zebra_destroy(void)
{ {
if (bgp_nexthop_buf)
stream_free (bgp_nexthop_buf);
if (bgp_ifindices_buf)
stream_free (bgp_ifindices_buf);
if (bgp_label_buf)
stream_free (bgp_label_buf);
if (zclient == NULL) if (zclient == NULL)
return; return;
zclient_stop(zclient); zclient_stop(zclient);

View File

@ -21,14 +21,6 @@
#ifndef _QUAGGA_BGP_ZEBRA_H #ifndef _QUAGGA_BGP_ZEBRA_H
#define _QUAGGA_BGP_ZEBRA_H #define _QUAGGA_BGP_ZEBRA_H
#define BGP_NEXTHOP_BUF_SIZE (8 * sizeof (struct in_addr *))
#define BGP_IFINDICES_BUF_SIZE (8 * sizeof (unsigned int))
#define BGP_LABEL_BUF_SIZE (8 * sizeof (unsigned int))
extern struct stream *bgp_nexthop_buf;
extern struct stream *bgp_ifindices_buf;
extern struct stream *bgp_label_buf;
extern void bgp_zebra_init (struct thread_master *master); extern void bgp_zebra_init (struct thread_master *master);
extern void bgp_zebra_destroy (void); extern void bgp_zebra_destroy (void);
extern int bgp_if_update_all (void); extern int bgp_if_update_all (void);

View File

@ -7265,7 +7265,7 @@ bgp_config_write_family_header (struct vty *vty, afi_t afi, safi_t safi,
if (*write) if (*write)
return; return;
vty_outln (vty, " !%s address-family ", VTYNL); vty_out (vty, " !%s address-family ", VTYNL);
if (afi == AFI_IP) if (afi == AFI_IP)
{ {

View File

@ -1313,9 +1313,9 @@ DEFUN (vnc_nve_group_redist_bgpdirect_no_prefixlist,
NO_STR NO_STR
"Redistribute from other protocol\n" "Redistribute from other protocol\n"
"Redistribute from BGP directly\n" "Redistribute from BGP directly\n"
"Disable redistribute filter\n"
"IPv4 routes\n" "IPv4 routes\n"
"IPv6 routes\n" "Prefix-list for filtering redistributed routes\n") "IPv6 routes\n"
"Prefix-list for filtering redistributed routes\n")
{ {
VTY_DECLVAR_CONTEXT(bgp, bgp); VTY_DECLVAR_CONTEXT(bgp, bgp);
VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg) VTY_DECLVAR_CONTEXT_SUB(rfapi_nve_group_cfg, rfg)
@ -1412,7 +1412,6 @@ DEFUN (vnc_nve_group_redist_bgpdirect_no_routemap,
NO_STR NO_STR
"Redistribute from other protocols\n" "Redistribute from other protocols\n"
"Redistribute from BGP directly\n" "Redistribute from BGP directly\n"
"Disable redistribute filter\n"
"Route-map for filtering redistributed routes\n") "Route-map for filtering redistributed routes\n")
{ {
VTY_DECLVAR_CONTEXT(bgp, bgp); VTY_DECLVAR_CONTEXT(bgp, bgp);
@ -2076,7 +2075,6 @@ DEFUN (vnc_nve_export_prefixlist,
"Export to other protocols\n" "Export to other protocols\n"
"Export to BGP\n" "Export to BGP\n"
"Export to Zebra (experimental)\n" "Export to Zebra (experimental)\n"
"Filters, used in 'registering-nve' export mode\n"
"IPv4 prefixes\n" "IPv4 prefixes\n"
"IPv6 prefixes\n" "IPv6 prefixes\n"
"Prefix-list for filtering exported routes\n" "Prefix list name\n") "Prefix-list for filtering exported routes\n" "Prefix list name\n")
@ -2178,7 +2176,6 @@ DEFUN (vnc_nve_export_routemap,
"Export to other protocols\n" "Export to other protocols\n"
"Export to BGP\n" "Export to BGP\n"
"Export to Zebra (experimental)\n" "Export to Zebra (experimental)\n"
"Filters, used in 'registering-nve' export mode\n"
"Route-map for filtering exported routes\n" "Route map name\n") "Route-map for filtering exported routes\n" "Route map name\n")
{ {
VTY_DECLVAR_CONTEXT(bgp, bgp); VTY_DECLVAR_CONTEXT(bgp, bgp);
@ -3918,7 +3915,6 @@ DEFUN (vnc_l2_group_no_labels,
vnc_l2_group_no_labels_cmd, vnc_l2_group_no_labels_cmd,
"no labels LABELLIST...", "no labels LABELLIST...",
NO_STR NO_STR
"Remove label values associated with L2 group\n"
"Specify label values associated with L2 group\n" "Specify label values associated with L2 group\n"
"Space separated list of label values <0-1048575>\n") "Space separated list of label values <0-1048575>\n")
{ {

View File

@ -2672,8 +2672,7 @@ DEFUN (add_vnc_prefix_cost_life,
"Administrative cost [default: 255]\n" "Administrative cost [default: 255]\n"
"Administrative cost\n" "Administrative cost\n"
"Registration lifetime [default: infinite]\n" "Registration lifetime [default: infinite]\n"
"Lifetime value in seconds\n" "Lifetime value in seconds\n")
"[local-next-hop (A.B.C.D|X:X::X:X)] [local-cost <0-255>]\n")
{ {
/* pfx vn un cost life */ /* pfx vn un cost life */
return register_add (vty, argv[3], argv[5], argv[7], argv[9], argv[11], return register_add (vty, argv[3], argv[5], argv[7], argv[9], argv[11],
@ -2698,8 +2697,7 @@ DEFUN (add_vnc_prefix_life_cost,
"Registration lifetime [default: infinite]\n" "Registration lifetime [default: infinite]\n"
"Lifetime value in seconds\n" "Lifetime value in seconds\n"
"Administrative cost [default: 255]\n" "Administrative cost [default: 255]\n"
"Administrative cost\n" "Administrative cost\n")
"[local-next-hop (A.B.C.D|X:X::X:X)] [local-cost <0-255>]\n")
{ {
/* pfx vn un cost life */ /* pfx vn un cost life */
return register_add (vty, argv[3], argv[5], argv[7], argv[11], argv[9], return register_add (vty, argv[3], argv[5], argv[7], argv[11], argv[9],
@ -2722,8 +2720,7 @@ DEFUN (add_vnc_prefix_cost,
"UN IPv4 interface address\n" "UN IPv4 interface address\n"
"UN IPv6 interface address\n" "UN IPv6 interface address\n"
"Administrative cost [default: 255]\n" "Administrative cost [default: 255]\n"
"Administrative cost\n" "Administrative cost\n")
"[local-next-hop (A.B.C.D|X:X::X:X)] [local-cost <0-255>]\n")
{ {
/* pfx vn un cost life */ /* pfx vn un cost life */
return register_add (vty, argv[3], argv[5], argv[7], argv[9], NULL, return register_add (vty, argv[3], argv[5], argv[7], argv[9], NULL,
@ -2746,8 +2743,7 @@ DEFUN (add_vnc_prefix_life,
"UN IPv4 interface address\n" "UN IPv4 interface address\n"
"UN IPv6 interface address\n" "UN IPv6 interface address\n"
"Registration lifetime [default: infinite]\n" "Registration lifetime [default: infinite]\n"
"Lifetime value in seconds\n" "Lifetime value in seconds\n")
"[local-next-hop (A.B.C.D|X:X::X:X)] [local-cost <0-255>]\n")
{ {
/* pfx vn un cost life */ /* pfx vn un cost life */
return register_add (vty, argv[3], argv[5], argv[7], NULL, argv[9], return register_add (vty, argv[3], argv[5], argv[7], NULL, argv[9],
@ -2768,8 +2764,7 @@ DEFUN (add_vnc_prefix,
"VN IPv6 interface address\n" "VN IPv6 interface address\n"
"UN address of NVE\n" "UN address of NVE\n"
"UN IPv4 interface address\n" "UN IPv4 interface address\n"
"UN IPv6 interface address\n" "UN IPv6 interface address\n")
"[local-next-hop (A.B.C.D|X:X::X:X)] [local-cost <0-255>]\n")
{ {
/* pfx vn un cost life */ /* pfx vn un cost life */
return register_add (vty, argv[3], argv[5], argv[7], NULL, NULL, return register_add (vty, argv[3], argv[5], argv[7], NULL, NULL,
@ -4064,7 +4059,6 @@ DEFUN (clear_vnc_mac_vn_un,
"VNI keyword\n" "VNI keyword\n"
"Any virtual network identifier\n" "Any virtual network identifier\n"
"Virtual network identifier\n" "Virtual network identifier\n"
"Virtual network identifier\n"
"VN address of NVE\n" "VN address of NVE\n"
"All VN addresses\n" "All VN addresses\n"
"VN IPv4 interface address\n" "VN IPv4 interface address\n"

View File

@ -134,10 +134,10 @@ other settings)
### Install the init.d service ### Install the init.d service
sudo install -m 755 tools/frr /etc/init.d/frr sudo install -m 755 tools/frr /etc/init.d/frr
sudo install -m 644 cumulus/etc/frr/daemons /etc/frr/daemons sudo install -m 644 tools/etc/frr/daemons /etc/frr/daemons
sudo install -m 644 cumulus/etc/frr/daemons.conf /etc/frr/daemons.conf sudo install -m 644 tools/etc/frr/daemons.conf /etc/frr/daemons.conf
sudo install -m 644 -o frr -g frr cumulus/etc/frr/vtysh.conf /etc/frr/vtysh.conf sudo install -m 644 -o frr -g frr tools/etc/frr/vtysh.conf /etc/frr/vtysh.conf
### Enable daemons ### Enable daemons
Edit `/etc/frr/daemons` and change the value from "no" to "yes" for those daemons you want to start by systemd. Edit `/etc/frr/daemons` and change the value from "no" to "yes" for those daemons you want to start by systemd.

View File

@ -94,10 +94,10 @@ other settings)
**Reboot** or use `sysctl -p` to apply the same config to the running system **Reboot** or use `sysctl -p` to apply the same config to the running system
### Install the init.d service ### Install the init.d service
sudo install -m 755 tools/frr /etc/init.d/frr sudo install -m 755 tools/frr /etc/init.d/frr
sudo install -m 644 cumulus/etc/frr/daemons /etc/frr/daemons sudo install -m 644 tools/etc/frr/daemons /etc/frr/daemons
sudo install -m 644 cumulus/etc/frr/daemons.conf /etc/frr/daemons.conf sudo install -m 644 tools/etc/frr/daemons.conf /etc/frr/daemons.conf
sudo install -m 644 -o frr -g frr cumulus/etc/frr/vtysh.conf /etc/frr/vtysh.conf sudo install -m 644 -o frr -g frr tools/etc/frr/vtysh.conf /etc/frr/vtysh.conf
### Enable daemons ### Enable daemons

View File

@ -116,12 +116,12 @@ Add the following lines to `/etc/modules-load.d/modules.conf`:
### Install the systemd service ### Install the systemd service
sudo install -m 644 tools/frr.service /etc/systemd/system/frr.service sudo install -m 644 tools/frr.service /etc/systemd/system/frr.service
sudo install -m 644 cumulus/etc/default/frr /etc/default/frr sudo install -m 644 tools/etc/default/frr /etc/default/frr
sudo install -m 644 cumulus/etc/frr/daemons /etc/frr/daemons sudo install -m 644 tools/etc/frr/daemons /etc/frr/daemons
sudo install -m 644 tools/etc/frr/daemons.conf /etc/frr/daemons.conf sudo install -m 644 tools/etc/frr/daemons.conf /etc/frr/daemons.conf
sudo install -m 644 tools/etc/frr/frr.conf /etc/frr/frr.conf sudo install -m 644 tools/etc/frr/frr.conf /etc/frr/frr.conf
sudo install -m 644 -o frr -g frr cumulus/etc/frr/vtysh.conf /etc/frr/vtysh.conf sudo install -m 644 -o frr -g frr tools/etc/frr/vtysh.conf /etc/frr/vtysh.conf
### Enable daemons ### Enable daemons

View File

@ -673,7 +673,6 @@ DEFUN (isis_hello_interval,
"isis hello-interval (1-600)", "isis hello-interval (1-600)",
"IS-IS commands\n" "IS-IS commands\n"
"Set Hello interval\n" "Set Hello interval\n"
"Hello interval value\n"
"Holdtime 1 seconds, interval depends on multiplier\n") "Holdtime 1 seconds, interval depends on multiplier\n")
{ {
int idx_number = 2; int idx_number = 2;
@ -721,7 +720,6 @@ DEFUN (isis_hello_interval_l1,
"isis hello-interval (1-600) level-1", "isis hello-interval (1-600) level-1",
"IS-IS commands\n" "IS-IS commands\n"
"Set Hello interval\n" "Set Hello interval\n"
"Hello interval value\n"
"Holdtime 1 second, interval depends on multiplier\n" "Holdtime 1 second, interval depends on multiplier\n"
"Specify hello-interval for level-1 IIHs\n") "Specify hello-interval for level-1 IIHs\n")
{ {
@ -769,7 +767,6 @@ DEFUN (isis_hello_interval_l2,
"isis hello-interval (1-600) level-2", "isis hello-interval (1-600) level-2",
"IS-IS commands\n" "IS-IS commands\n"
"Set Hello interval\n" "Set Hello interval\n"
"Hello interval value\n"
"Holdtime 1 second, interval depends on multiplier\n" "Holdtime 1 second, interval depends on multiplier\n"
"Specify hello-interval for level-2 IIHs\n") "Specify hello-interval for level-2 IIHs\n")
{ {
@ -958,8 +955,7 @@ DEFUN (isis_hello_padding,
"isis hello padding", "isis hello padding",
"IS-IS commands\n" "IS-IS commands\n"
"Add padding to IS-IS hello packets\n" "Add padding to IS-IS hello packets\n"
"Pad hello packets\n" "Pad hello packets\n")
"<cr>\n")
{ {
struct isis_circuit *circuit = isis_circuit_lookup (vty); struct isis_circuit *circuit = isis_circuit_lookup (vty);
if (!circuit) if (!circuit)
@ -976,8 +972,7 @@ DEFUN (no_isis_hello_padding,
NO_STR NO_STR
"IS-IS commands\n" "IS-IS commands\n"
"Add padding to IS-IS hello packets\n" "Add padding to IS-IS hello packets\n"
"Pad hello packets\n" "Pad hello packets\n")
"<cr>\n")
{ {
struct isis_circuit *circuit = isis_circuit_lookup (vty); struct isis_circuit *circuit = isis_circuit_lookup (vty);
if (!circuit) if (!circuit)
@ -1431,8 +1426,7 @@ DEFUN (no_metric_style,
DEFUN (set_overload_bit, DEFUN (set_overload_bit,
set_overload_bit_cmd, set_overload_bit_cmd,
"set-overload-bit", "set-overload-bit",
"Set overload bit to avoid any transit traffic\n" "Set overload bit to avoid any transit traffic\n")
"Set overload bit\n")
{ {
VTY_DECLVAR_CONTEXT (isis_area, area); VTY_DECLVAR_CONTEXT (isis_area, area);
@ -1455,8 +1449,7 @@ DEFUN (no_set_overload_bit,
DEFUN (set_attached_bit, DEFUN (set_attached_bit,
set_attached_bit_cmd, set_attached_bit_cmd,
"set-attached-bit", "set-attached-bit",
"Set attached bit to identify as L1/L2 router for inter-area traffic\n" "Set attached bit to identify as L1/L2 router for inter-area traffic\n")
"Set attached bit\n")
{ {
VTY_DECLVAR_CONTEXT (isis_area, area); VTY_DECLVAR_CONTEXT (isis_area, area);

View File

@ -175,8 +175,7 @@ config_write_agentx (struct vty *vty)
DEFUN (agentx_enable, DEFUN (agentx_enable,
agentx_enable_cmd, agentx_enable_cmd,
"agentx", "agentx",
"SNMP AgentX protocol settings\n" "SNMP AgentX protocol settings\n")
"SNMP AgentX settings\n")
{ {
if (!agentx_enabled) if (!agentx_enabled)
{ {
@ -194,8 +193,7 @@ DEFUN (no_agentx,
no_agentx_cmd, no_agentx_cmd,
"no agentx", "no agentx",
NO_STR NO_STR
"SNMP AgentX protocol settings\n" "SNMP AgentX protocol settings\n")
"SNMP AgentX settings\n")
{ {
if (!agentx_enabled) return CMD_SUCCESS; if (!agentx_enabled) return CMD_SUCCESS;
vty_outln (vty, "SNMP AgentX support cannot be disabled once enabled"); vty_outln (vty, "SNMP AgentX support cannot be disabled once enabled");

View File

@ -2200,7 +2200,6 @@ DEFUN (no_config_log_file,
"Logging control\n" "Logging control\n"
"Cancel logging to file\n" "Cancel logging to file\n"
"Logging file name\n" "Logging file name\n"
"Logging file name\n"
"Logging level\n") "Logging level\n")
{ {
zlog_reset_file (); zlog_reset_file ();

View File

@ -443,6 +443,14 @@ terminate_graph (CMD_YYLTYPE *locp, struct parser_ctx *ctx,
struct graph_node *end_element_node = struct graph_node *end_element_node =
graph_new_node (ctx->graph, element, NULL); graph_new_node (ctx->graph, element, NULL);
if (ctx->docstr && strlen (ctx->docstr) > 1) {
zlog_debug ("Excessive docstring while parsing '%s'", ctx->el->string);
zlog_debug ("----------");
while (ctx->docstr && ctx->docstr[1] != '\0')
zlog_debug ("%s", strsep(&ctx->docstr, "\n"));
zlog_debug ("----------\n");
}
graph_add_edge (finalnode, end_token_node); graph_add_edge (finalnode, end_token_node);
graph_add_edge (end_token_node, end_element_node); graph_add_edge (end_token_node, end_element_node);
} }

View File

@ -1736,9 +1736,7 @@ DEFPY (show_ipv6_prefix_list,
PREFIX_LIST_STR PREFIX_LIST_STR
"Name of a prefix list\n" "Name of a prefix list\n"
"sequence number of an entry\n" "sequence number of an entry\n"
"Sequence number\n" "Sequence number\n")
"Lookup longer prefix\n"
"First matched prefix\n")
{ {
enum display_type dtype = normal_display; enum display_type dtype = normal_display;
if (dseq) if (dseq)

View File

@ -107,7 +107,7 @@ vty_out_variadic (struct vty *vty, const char *format, va_list args)
{ {
/* Try to write to initial buffer. */ /* Try to write to initial buffer. */
va_copy (cp, args); va_copy (cp, args);
len = vsnprintf (buf, sizeof(buf), format, args); len = vsnprintf (buf, sizeof(buf), format, cp);
va_end (cp); va_end (cp);
/* Initial buffer is not enough. */ /* Initial buffer is not enough. */
@ -124,7 +124,9 @@ vty_out_variadic (struct vty *vty, const char *format, va_list args)
if (! p) if (! p)
return -1; return -1;
len = vsnprintf (p, size, format, args); va_copy (cp, args);
len = vsnprintf (p, size, format, cp);
va_end (cp);
if (len > -1 && len < size) if (len > -1 && len < size)
break; break;

View File

@ -1729,9 +1729,7 @@ DEFUN (no_ipv6_ospf6_network,
NO_STR NO_STR
IP6_STR IP6_STR
OSPF6_STR OSPF6_STR
"Network type\n" "Set default network type\n")
"Default to whatever interface type system specifies"
)
{ {
VTY_DECLVAR_CONTEXT(interface, ifp); VTY_DECLVAR_CONTEXT(interface, ifp);
struct ospf6_interface *oi; struct ospf6_interface *oi;

View File

@ -697,7 +697,6 @@ DEFUN (ospf6_stub_router_admin,
ospf6_stub_router_admin_cmd, ospf6_stub_router_admin_cmd,
"stub-router administrative", "stub-router administrative",
"Make router a stub router\n" "Make router a stub router\n"
"Advertise inability to be a transit router\n"
"Administratively applied, for an indefinite period\n") "Administratively applied, for an indefinite period\n")
{ {
struct listnode *node; struct listnode *node;
@ -722,7 +721,6 @@ DEFUN (no_ospf6_stub_router_admin,
"no stub-router administrative", "no stub-router administrative",
NO_STR NO_STR
"Make router a stub router\n" "Make router a stub router\n"
"Advertise ability to be a transit router\n"
"Administratively applied, for an indefinite period\n") "Administratively applied, for an indefinite period\n")
{ {
struct listnode *node; struct listnode *node;

View File

@ -7095,8 +7095,7 @@ DEFUN (ospf_redistribute_source,
"Metric for redistributed routes\n" "Metric for redistributed routes\n"
"OSPF default metric\n" "OSPF default metric\n"
"OSPF exterior metric type for redistributed routes\n" "OSPF exterior metric type for redistributed routes\n"
"Set OSPF External Type 1 metrics\n" "Set OSPF External Type 1/2 metrics\n"
"Set OSPF External Type 2 metrics\n"
"Route map reference\n" "Route map reference\n"
"Pointer to route-map entries\n") "Pointer to route-map entries\n")
{ {
@ -7147,8 +7146,7 @@ DEFUN (no_ospf_redistribute_source,
"Metric for redistributed routes\n" "Metric for redistributed routes\n"
"OSPF default metric\n" "OSPF default metric\n"
"OSPF exterior metric type for redistributed routes\n" "OSPF exterior metric type for redistributed routes\n"
"Set OSPF External Type 1 metrics\n" "Set OSPF External Type 1/2 metrics\n"
"Set OSPF External Type 2 metrics\n"
"Route map reference\n" "Route map reference\n"
"Pointer to route-map entries\n") "Pointer to route-map entries\n")
{ {
@ -7179,8 +7177,7 @@ DEFUN (ospf_redistribute_instance_source,
"Metric for redistributed routes\n" "Metric for redistributed routes\n"
"OSPF default metric\n" "OSPF default metric\n"
"OSPF exterior metric type for redistributed routes\n" "OSPF exterior metric type for redistributed routes\n"
"Set OSPF External Type 1 metrics\n" "Set OSPF External Type 1/2 metrics\n"
"Set OSPF External Type 2 metrics\n"
"Route map reference\n" "Route map reference\n"
"Pointer to route-map entries\n") "Pointer to route-map entries\n")
{ {
@ -7251,8 +7248,7 @@ DEFUN (no_ospf_redistribute_instance_source,
"Metric for redistributed routes\n" "Metric for redistributed routes\n"
"OSPF default metric\n" "OSPF default metric\n"
"OSPF exterior metric type for redistributed routes\n" "OSPF exterior metric type for redistributed routes\n"
"Set OSPF External Type 1 metrics\n" "Set OSPF External Type 1/2 metrics\n"
"Set OSPF External Type 2 metrics\n"
"Route map reference\n" "Route map reference\n"
"Pointer to route-map entries\n") "Pointer to route-map entries\n")
{ {
@ -7345,8 +7341,7 @@ DEFUN (ospf_default_information_originate,
"OSPF default metric\n" "OSPF default metric\n"
"OSPF metric\n" "OSPF metric\n"
"OSPF metric type for default routes\n" "OSPF metric type for default routes\n"
"Set OSPF External Type 1 metrics\n" "Set OSPF External Type 1/2 metrics\n"
"Set OSPF External Type 2 metrics\n"
"Route map reference\n" "Route map reference\n"
"Pointer to route-map entries\n") "Pointer to route-map entries\n")
{ {
@ -7392,8 +7387,7 @@ DEFUN (no_ospf_default_information_originate,
"OSPF default metric\n" "OSPF default metric\n"
"OSPF metric\n" "OSPF metric\n"
"OSPF metric type for default routes\n" "OSPF metric type for default routes\n"
"Set OSPF External Type 1 metrics\n" "Set OSPF External Type 1/2 metrics\n"
"Set OSPF External Type 2 metrics\n"
"Route map reference\n" "Route map reference\n"
"Pointer to route-map entries\n") "Pointer to route-map entries\n")
{ {

View File

@ -4256,7 +4256,6 @@ DEFUN_HIDDEN (no_ip_multicast_routing,
"no ip multicast-routing", "no ip multicast-routing",
NO_STR NO_STR
IP_STR IP_STR
"Global IP configuration subcommands\n"
"Enable IP multicast forwarding\n") "Enable IP multicast forwarding\n")
{ {
vty_outln (vty, vty_outln (vty,
@ -5732,7 +5731,6 @@ DEFUN (debug_ssmpingd,
debug_ssmpingd_cmd, debug_ssmpingd_cmd,
"debug ssmpingd", "debug ssmpingd",
DEBUG_STR DEBUG_STR
DEBUG_PIM_STR
DEBUG_SSMPINGD_STR) DEBUG_SSMPINGD_STR)
{ {
PIM_DO_DEBUG_SSMPINGD; PIM_DO_DEBUG_SSMPINGD;
@ -5744,7 +5742,6 @@ DEFUN (no_debug_ssmpingd,
"no debug ssmpingd", "no debug ssmpingd",
NO_STR NO_STR
DEBUG_STR DEBUG_STR
DEBUG_PIM_STR
DEBUG_SSMPINGD_STR) DEBUG_SSMPINGD_STR)
{ {
PIM_DONT_DEBUG_SSMPINGD; PIM_DONT_DEBUG_SSMPINGD;

View File

@ -1327,8 +1327,7 @@ DEFUN (ip_rip_receive_version,
"Routing Information Protocol\n" "Routing Information Protocol\n"
"Advertisement reception\n" "Advertisement reception\n"
"Version control\n" "Version control\n"
"RIP version 1\n" "RIP version\n"
"RIP version 2\n"
"None\n") "None\n")
{ {
VTY_DECLVAR_CONTEXT(interface, ifp); VTY_DECLVAR_CONTEXT(interface, ifp);
@ -1357,31 +1356,13 @@ DEFUN (ip_rip_receive_version,
DEFUN (ip_rip_receive_version_1, DEFUN (ip_rip_receive_version_1,
ip_rip_receive_version_1_cmd, ip_rip_receive_version_1_cmd,
"ip rip receive version (1-1) (2-2)", "ip rip receive version <1 2|2 1>",
IP_STR IP_STR
"Routing Information Protocol\n" "Routing Information Protocol\n"
"Advertisement reception\n" "Advertisement reception\n"
"Version control\n" "Version control\n"
"RIP version 1\n" "RIP version 1\n"
"RIP version 2\n") "RIP version 2\n"
{
VTY_DECLVAR_CONTEXT(interface, ifp);
struct rip_interface *ri;
ri = ifp->info;
/* Version 1 and 2. */
ri->ri_receive = RI_RIP_VERSION_1_AND_2;
return CMD_SUCCESS;
}
DEFUN (ip_rip_receive_version_2,
ip_rip_receive_version_2_cmd,
"ip rip receive version (2-2) (1-1)",
IP_STR
"Routing Information Protocol\n"
"Advertisement reception\n"
"Version control\n"
"RIP version 2\n" "RIP version 2\n"
"RIP version 1\n") "RIP version 1\n")
{ {
@ -1403,8 +1384,7 @@ DEFUN (no_ip_rip_receive_version,
"Routing Information Protocol\n" "Routing Information Protocol\n"
"Advertisement reception\n" "Advertisement reception\n"
"Version control\n" "Version control\n"
"Version 1\n" "RIP version\n")
"Version 2\n")
{ {
VTY_DECLVAR_CONTEXT(interface, ifp); VTY_DECLVAR_CONTEXT(interface, ifp);
struct rip_interface *ri; struct rip_interface *ri;
@ -1423,8 +1403,7 @@ DEFUN (ip_rip_send_version,
"Routing Information Protocol\n" "Routing Information Protocol\n"
"Advertisement transmission\n" "Advertisement transmission\n"
"Version control\n" "Version control\n"
"RIP version 1\n" "RIP version\n")
"RIP version 2\n")
{ {
VTY_DECLVAR_CONTEXT(interface, ifp); VTY_DECLVAR_CONTEXT(interface, ifp);
int idx_type = 4; int idx_type = 4;
@ -1448,31 +1427,13 @@ DEFUN (ip_rip_send_version,
DEFUN (ip_rip_send_version_1, DEFUN (ip_rip_send_version_1,
ip_rip_send_version_1_cmd, ip_rip_send_version_1_cmd,
"ip rip send version (1-1) (2-2)", "ip rip send version <1 2|2 1>",
IP_STR IP_STR
"Routing Information Protocol\n" "Routing Information Protocol\n"
"Advertisement transmission\n" "Advertisement transmission\n"
"Version control\n" "Version control\n"
"RIP version 1\n" "RIP version 1\n"
"RIP version 2\n") "RIP version 2\n"
{
VTY_DECLVAR_CONTEXT(interface, ifp);
struct rip_interface *ri;
ri = ifp->info;
/* Version 1 and 2. */
ri->ri_send = RI_RIP_VERSION_1_AND_2;
return CMD_SUCCESS;
}
DEFUN (ip_rip_send_version_2,
ip_rip_send_version_2_cmd,
"ip rip send version (2-2) (1-1)",
IP_STR
"Routing Information Protocol\n"
"Advertisement transmission\n"
"Version control\n"
"RIP version 2\n" "RIP version 2\n"
"RIP version 1\n") "RIP version 1\n")
{ {
@ -1494,8 +1455,7 @@ DEFUN (no_ip_rip_send_version,
"Routing Information Protocol\n" "Routing Information Protocol\n"
"Advertisement transmission\n" "Advertisement transmission\n"
"Version control\n" "Version control\n"
"Version 1\n" "RIP version\n")
"Version 2\n")
{ {
VTY_DECLVAR_CONTEXT(interface, ifp); VTY_DECLVAR_CONTEXT(interface, ifp);
struct rip_interface *ri; struct rip_interface *ri;
@ -2034,12 +1994,10 @@ rip_if_init (void)
install_element (INTERFACE_NODE, &ip_rip_send_version_cmd); install_element (INTERFACE_NODE, &ip_rip_send_version_cmd);
install_element (INTERFACE_NODE, &ip_rip_send_version_1_cmd); install_element (INTERFACE_NODE, &ip_rip_send_version_1_cmd);
install_element (INTERFACE_NODE, &ip_rip_send_version_2_cmd);
install_element (INTERFACE_NODE, &no_ip_rip_send_version_cmd); install_element (INTERFACE_NODE, &no_ip_rip_send_version_cmd);
install_element (INTERFACE_NODE, &ip_rip_receive_version_cmd); install_element (INTERFACE_NODE, &ip_rip_receive_version_cmd);
install_element (INTERFACE_NODE, &ip_rip_receive_version_1_cmd); install_element (INTERFACE_NODE, &ip_rip_receive_version_1_cmd);
install_element (INTERFACE_NODE, &ip_rip_receive_version_2_cmd);
install_element (INTERFACE_NODE, &no_ip_rip_receive_version_cmd); install_element (INTERFACE_NODE, &no_ip_rip_receive_version_cmd);
install_element (INTERFACE_NODE, &ip_rip_v2_broadcast_cmd); install_element (INTERFACE_NODE, &ip_rip_v2_broadcast_cmd);

View File

@ -1272,9 +1272,8 @@ DEFUNSH (VTYSH_BGPD,
address_family_evpn_cmd, address_family_evpn_cmd,
"address-family <l2vpn evpn>", "address-family <l2vpn evpn>",
"Enter Address Family command mode\n" "Enter Address Family command mode\n"
"EVPN Address family\n" "Address Family\n"
"Layer2 VPN Address family\n" "Address Family modifier\n")
"Ethernet Virtual Private Network Subsequent Address Family\n")
{ {
vty->node = BGP_EVPN_NODE; vty->node = BGP_EVPN_NODE;
return CMD_SUCCESS; return CMD_SUCCESS;
@ -2446,10 +2445,9 @@ DEFUNSH (VTYSH_ALL,
DEFUNSH (VTYSH_ALL, DEFUNSH (VTYSH_ALL,
vtysh_config_password, vtysh_config_password,
vtysh_password_cmd, vtysh_password_cmd,
"password (8-8) WORD", "password [(8-8)] WORD",
"Assign the terminal connection password\n" "Assign the terminal connection password\n"
"Specifies a HIDDEN password will follow\n" "Specifies a HIDDEN password will follow\n"
"dummy string \n"
"The HIDDEN line password string\n") "The HIDDEN line password string\n")
{ {
return CMD_SUCCESS; return CMD_SUCCESS;

View File

@ -1774,7 +1774,7 @@ mpls_str2label (const char *label_str, u_int8_t *num_labels,
if (!rc) if (!rc)
{ {
*num_labels = i + 1; *num_labels = i;
memcpy (labels, pl, *num_labels * sizeof (mpls_label_t)); memcpy (labels, pl, *num_labels * sizeof (mpls_label_t));
} }

View File

@ -433,8 +433,7 @@ DEFUN (ip_route_flags,
"Set tag for this route\n" "Set tag for this route\n"
"Tag value\n" "Tag value\n"
"Distance value for this route\n" "Distance value for this route\n"
VRF_CMD_HELP_STR VRF_CMD_HELP_STR)
MPLS_LABEL_HELPSTR)
{ {
int idx_ipv4_prefixlen = 2; int idx_ipv4_prefixlen = 2;
int idx_reject_blackhole = 3; int idx_reject_blackhole = 3;
@ -466,8 +465,7 @@ DEFUN (ip_route_mask,
"Set tag for this route\n" "Set tag for this route\n"
"Tag value\n" "Tag value\n"
"Distance value for this route\n" "Distance value for this route\n"
VRF_CMD_HELP_STR VRF_CMD_HELP_STR)
MPLS_LABEL_HELPSTR)
{ {
int idx_ipv4 = 2; int idx_ipv4 = 2;
int idx_ipv4_2 = 3; int idx_ipv4_2 = 3;
@ -497,8 +495,7 @@ DEFUN (ip_route_mask_flags,
"Set tag for this route\n" "Set tag for this route\n"
"Tag value\n" "Tag value\n"
"Distance value for this route\n" "Distance value for this route\n"
VRF_CMD_HELP_STR VRF_CMD_HELP_STR)
MPLS_LABEL_HELPSTR)
{ {
int idx_ipv4 = 2; int idx_ipv4 = 2;
int idx_ipv4_2 = 3; int idx_ipv4_2 = 3;
@ -530,8 +527,7 @@ DEFUN (no_ip_route,
"Tag of this route\n" "Tag of this route\n"
"Tag value\n" "Tag value\n"
"Distance value for this route\n" "Distance value for this route\n"
VRF_CMD_HELP_STR VRF_CMD_HELP_STR)
MPLS_LABEL_HELPSTR)
{ {
int idx_ipv4_prefixlen = 3; int idx_ipv4_prefixlen = 3;
int idx_ipv4_ifname_null = 4; int idx_ipv4_ifname_null = 4;
@ -561,8 +557,7 @@ DEFUN (no_ip_route_flags,
"Tag of this route\n" "Tag of this route\n"
"Tag value\n" "Tag value\n"
"Distance value for this route\n" "Distance value for this route\n"
VRF_CMD_HELP_STR VRF_CMD_HELP_STR)
MPLS_LABEL_HELPSTR)
{ {
int idx_ipv4_prefixlen = 3; int idx_ipv4_prefixlen = 3;
int idx_curr = 5; int idx_curr = 5;
@ -591,8 +586,7 @@ DEFUN (no_ip_route_mask,
"Tag of this route\n" "Tag of this route\n"
"Tag value\n" "Tag value\n"
"Distance value for this route\n" "Distance value for this route\n"
VRF_CMD_HELP_STR VRF_CMD_HELP_STR)
MPLS_LABEL_HELPSTR)
{ {
int idx_ipv4 = 3; int idx_ipv4 = 3;
int idx_ipv4_2 = 4; int idx_ipv4_2 = 4;
@ -624,8 +618,7 @@ DEFUN (no_ip_route_mask_flags,
"Tag of this route\n" "Tag of this route\n"
"Tag value\n" "Tag value\n"
"Distance value for this route\n" "Distance value for this route\n"
VRF_CMD_HELP_STR VRF_CMD_HELP_STR)
MPLS_LABEL_HELPSTR)
{ {
int idx_ipv4 = 3; int idx_ipv4 = 3;
int idx_ipv4_2 = 4; int idx_ipv4_2 = 4;
@ -2170,8 +2163,7 @@ DEFUN (ipv6_route,
"Set tag for this route\n" "Set tag for this route\n"
"Tag value\n" "Tag value\n"
"Distance value for this prefix\n" "Distance value for this prefix\n"
VRF_CMD_HELP_STR VRF_CMD_HELP_STR)
MPLS_LABEL_HELPSTR)
{ {
int idx_ipv6_prefixlen = 2; int idx_ipv6_prefixlen = 2;
int idx_ipv6_ifname; int idx_ipv6_ifname;
@ -2217,8 +2209,7 @@ DEFUN (ipv6_route_flags,
"Set tag for this route\n" "Set tag for this route\n"
"Tag value\n" "Tag value\n"
"Distance value for this prefix\n" "Distance value for this prefix\n"
VRF_CMD_HELP_STR VRF_CMD_HELP_STR)
MPLS_LABEL_HELPSTR)
{ {
int idx_ipv6_prefixlen = 2; int idx_ipv6_prefixlen = 2;
int idx_ipv6_ifname; int idx_ipv6_ifname;
@ -2266,8 +2257,7 @@ DEFUN (ipv6_route_ifname,
"Set tag for this route\n" "Set tag for this route\n"
"Tag value\n" "Tag value\n"
"Distance value for this prefix\n" "Distance value for this prefix\n"
VRF_CMD_HELP_STR VRF_CMD_HELP_STR)
MPLS_LABEL_HELPSTR)
{ {
int idx_ipv6_prefixlen = 2; int idx_ipv6_prefixlen = 2;
int idx_ipv6 = 3; int idx_ipv6 = 3;
@ -2317,8 +2307,7 @@ DEFUN (ipv6_route_ifname_flags,
"Set tag for this route\n" "Set tag for this route\n"
"Tag value\n" "Tag value\n"
"Distance value for this prefix\n" "Distance value for this prefix\n"
VRF_CMD_HELP_STR VRF_CMD_HELP_STR)
MPLS_LABEL_HELPSTR)
{ {
int idx_ipv6_prefixlen = 2; int idx_ipv6_prefixlen = 2;
int idx_ipv6; int idx_ipv6;
@ -2371,8 +2360,7 @@ DEFUN (no_ipv6_route,
"Set tag for this route\n" "Set tag for this route\n"
"Tag value\n" "Tag value\n"
"Distance value for this prefix\n" "Distance value for this prefix\n"
VRF_CMD_HELP_STR VRF_CMD_HELP_STR)
MPLS_LABEL_HELPSTR)
{ {
int idx_ipv6_prefixlen = 3; int idx_ipv6_prefixlen = 3;
int idx_ipv6_ifname; int idx_ipv6_ifname;
@ -2419,8 +2407,7 @@ DEFUN (no_ipv6_route_flags,
"Set tag for this route\n" "Set tag for this route\n"
"Tag value\n" "Tag value\n"
"Distance value for this prefix\n" "Distance value for this prefix\n"
VRF_CMD_HELP_STR VRF_CMD_HELP_STR)
MPLS_LABEL_HELPSTR)
{ {
int idx_ipv6_prefixlen = 3; int idx_ipv6_prefixlen = 3;
int idx_ipv6_ifname; int idx_ipv6_ifname;
@ -2469,8 +2456,7 @@ DEFUN (no_ipv6_route_ifname,
"Set tag for this route\n" "Set tag for this route\n"
"Tag value\n" "Tag value\n"
"Distance value for this prefix\n" "Distance value for this prefix\n"
VRF_CMD_HELP_STR VRF_CMD_HELP_STR)
MPLS_LABEL_HELPSTR)
{ {
int idx_ipv6_prefixlen = 3; int idx_ipv6_prefixlen = 3;
int idx_ipv6; int idx_ipv6;
@ -2521,8 +2507,7 @@ DEFUN (no_ipv6_route_ifname_flags,
"Set tag for this route\n" "Set tag for this route\n"
"Tag value\n" "Tag value\n"
"Distance value for this prefix\n" "Distance value for this prefix\n"
VRF_CMD_HELP_STR VRF_CMD_HELP_STR)
MPLS_LABEL_HELPSTR)
{ {
int idx_ipv6_prefixlen = 3; int idx_ipv6_prefixlen = 3;
int idx_ipv6; int idx_ipv6;