mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-14 00:56:19 +00:00
bgpd: restore some missing afi/safi commands (Issue #14)
Added defines and parse utility functions Fix vty code that treated vpn&encap as AFIs and some other related vty printing/handline issues
This commit is contained in:
parent
3324ef9359
commit
46f296b402
@ -8804,39 +8804,20 @@ bgp_table_stats_vty (struct vty *vty, const char *name,
|
||||
vty_out (vty, "%% No such BGP instance exist%s", VTY_NEWLINE);
|
||||
return CMD_WARNING;
|
||||
}
|
||||
if (strncmp (afi_str, "ipv", 3) == 0)
|
||||
{
|
||||
if (strncmp (afi_str, "ipv4", 4) == 0)
|
||||
afi = AFI_IP;
|
||||
else if (strncmp (afi_str, "ipv6", 4) == 0)
|
||||
afi = AFI_IP6;
|
||||
else
|
||||
{
|
||||
vty_out (vty, "%% Invalid address family %s%s",
|
||||
afi_str, VTY_NEWLINE);
|
||||
return CMD_WARNING;
|
||||
}
|
||||
if (strncmp (safi_str, "m", 1) == 0)
|
||||
safi = SAFI_MULTICAST;
|
||||
else if (strncmp (safi_str, "u", 1) == 0)
|
||||
safi = SAFI_UNICAST;
|
||||
else if (strncmp (safi_str, "e", 1) == 0)
|
||||
safi = SAFI_ENCAP;
|
||||
else if (strncmp (safi_str, "vpnv4", 5) == 0 || strncmp (safi_str, "vpnv6", 5) == 0)
|
||||
safi = SAFI_MPLS_VPN;
|
||||
else
|
||||
{
|
||||
vty_out (vty, "%% Invalid subsequent address family %s%s",
|
||||
safi_str, VTY_NEWLINE);
|
||||
return CMD_WARNING;
|
||||
}
|
||||
}
|
||||
else
|
||||
afi = bgp_vty_afi_from_arg(afi_str);
|
||||
if (afi == AFI_MAX)
|
||||
{
|
||||
vty_out (vty, "%% Invalid address family \"%s\"%s",
|
||||
afi_str, VTY_NEWLINE);
|
||||
return CMD_WARNING;
|
||||
}
|
||||
safi = bgp_vty_safi_from_arg(safi_str);
|
||||
if (safi == SAFI_MAX)
|
||||
{
|
||||
vty_out (vty, "%% Invalid subsequent address family %s%s",
|
||||
safi_str, VTY_NEWLINE);
|
||||
return CMD_WARNING;
|
||||
}
|
||||
|
||||
return bgp_table_stats (vty, bgp, afi, safi);
|
||||
}
|
||||
|
285
bgpd/bgp_vty.c
285
bgpd/bgp_vty.c
@ -107,23 +107,52 @@ bgp_node_safi (struct vty *vty)
|
||||
return safi;
|
||||
}
|
||||
|
||||
/* supports <ipv4|ipv6> */
|
||||
afi_t
|
||||
bgp_vty_afi_from_arg(const char *afi_str)
|
||||
{
|
||||
afi_t afi = AFI_MAX; /* unknown */
|
||||
if (!strcmp(afi_str, "ipv4")) {
|
||||
afi = AFI_IP;
|
||||
}
|
||||
#ifdef HAVE_IPV6
|
||||
else if (!strcmp(afi_str, "ipv6")) {
|
||||
afi = AFI_IP6;
|
||||
}
|
||||
#endif /* HAVE_IPV6 */
|
||||
return afi;
|
||||
}
|
||||
|
||||
int
|
||||
bgp_parse_afi(const char *str, afi_t *afi)
|
||||
{
|
||||
if (!strcmp(str, "ipv4")) {
|
||||
*afi = AFI_IP;
|
||||
return 0;
|
||||
}
|
||||
#ifdef HAVE_IPV6
|
||||
if (!strcmp(str, "ipv6")) {
|
||||
*afi = AFI_IP6;
|
||||
return 0;
|
||||
}
|
||||
#endif /* HAVE_IPV6 */
|
||||
*afi = bgp_vty_afi_from_arg(str);
|
||||
if (*afi != AFI_MAX)
|
||||
return 0;
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* supports (unicast|multicast|vpn|encap) */
|
||||
int
|
||||
argv_find_and_parse_afi(struct cmd_token **argv, int argc, int *index, afi_t *afi)
|
||||
{
|
||||
int ret = 0;
|
||||
if (argv_find (argv, argc, "ipv4", index))
|
||||
{
|
||||
ret = 1;
|
||||
if (afi)
|
||||
*afi = AFI_IP;
|
||||
}
|
||||
else if (argv_find (argv, argc, "ipv6", index))
|
||||
{
|
||||
ret = 1;
|
||||
if (afi)
|
||||
*afi = AFI_IP6;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* supports <unicast|multicast|vpn|encap> */
|
||||
safi_t
|
||||
bgp_vty_safi_from_arg(const char *safi_str)
|
||||
{
|
||||
@ -135,7 +164,7 @@ bgp_vty_safi_from_arg(const char *safi_str)
|
||||
else if (strncmp (safi_str, "e", 1) == 0)
|
||||
safi = SAFI_ENCAP;
|
||||
else if (strncmp (safi_str, "v", 1) == 0)
|
||||
safi = SAFI_MPLS_VPN;
|
||||
safi = SAFI_MPLS_VPN;
|
||||
return safi;
|
||||
}
|
||||
|
||||
@ -149,6 +178,37 @@ bgp_parse_safi(const char *str, safi_t *safi)
|
||||
return -1;
|
||||
}
|
||||
|
||||
int
|
||||
argv_find_and_parse_safi(struct cmd_token **argv, int argc, int *index, safi_t *safi)
|
||||
{
|
||||
int ret = 0;
|
||||
if (argv_find (argv, argc, "unicast", index))
|
||||
{
|
||||
ret = 1;
|
||||
if (safi)
|
||||
*safi = SAFI_UNICAST;
|
||||
}
|
||||
else if (argv_find (argv, argc, "multicast", index))
|
||||
{
|
||||
ret = 1;
|
||||
if (safi)
|
||||
*safi = SAFI_MULTICAST;
|
||||
}
|
||||
else if (argv_find (argv, argc, "vpn", index))
|
||||
{
|
||||
ret = 1;
|
||||
if (safi)
|
||||
*safi = SAFI_MPLS_VPN;
|
||||
}
|
||||
else if (argv_find (argv, argc, "encap", index))
|
||||
{
|
||||
ret = 1;
|
||||
if (safi)
|
||||
*safi = SAFI_ENCAP;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int
|
||||
peer_address_self_check (struct bgp *bgp, union sockunion *su)
|
||||
{
|
||||
@ -363,10 +423,8 @@ bgp_clear_vty_error (struct vty *vty, struct peer *peer, afi_t afi,
|
||||
{
|
||||
case BGP_ERR_AF_UNCONFIGURED:
|
||||
vty_out (vty,
|
||||
"%%BGP: Enable %s %s address family for the neighbor %s%s",
|
||||
afi == AFI_IP6 ? "IPv6" : safi == SAFI_MPLS_VPN ? "VPNv4" : "IPv4",
|
||||
safi == SAFI_MULTICAST ? "Multicast" : "Unicast",
|
||||
peer->host, VTY_NEWLINE);
|
||||
"%%BGP: Enable %s address family for the neighbor %s%s",
|
||||
afi_safi_print(afi, safi), peer->host, VTY_NEWLINE);
|
||||
break;
|
||||
case BGP_ERR_SOFT_RECONFIG_UNCONFIGURED:
|
||||
vty_out (vty, "%%BGP: Inbound soft reconfig for %s not possible as it%s has neither refresh capability, nor inbound soft reconfig%s", peer->host, VTY_NEWLINE, VTY_NEWLINE);
|
||||
@ -5440,13 +5498,10 @@ DEFUN (address_family_ipv4,
|
||||
|
||||
DEFUN (address_family_ipv4_safi,
|
||||
address_family_ipv4_safi_cmd,
|
||||
"address-family ipv4 <unicast|multicast|vpn|encap>",
|
||||
"address-family ipv4 "BGP_SAFI_CMD_STR,
|
||||
"Enter Address Family command mode\n"
|
||||
"Address Family\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n")
|
||||
BGP_SAFI_HELP_STR)
|
||||
{
|
||||
int idx_safi = 2;
|
||||
switch (bgp_vty_safi_from_arg(argv[idx_safi]->arg))
|
||||
@ -5481,19 +5536,28 @@ DEFUN (address_family_ipv6,
|
||||
|
||||
DEFUN (address_family_ipv6_safi,
|
||||
address_family_ipv6_safi_cmd,
|
||||
"address-family ipv6 <unicast|multicast|vpn|encap>",
|
||||
"address-family ipv6 "BGP_SAFI_CMD_STR,
|
||||
"Enter Address Family command mode\n"
|
||||
"Address Family\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n")
|
||||
BGP_SAFI_HELP_STR)
|
||||
{
|
||||
int idx_safi = 2;
|
||||
if (strncmp (argv[idx_safi]->arg, "m", 1) == 0)
|
||||
vty->node = BGP_IPV6M_NODE;
|
||||
else
|
||||
vty->node = BGP_IPV6_NODE;
|
||||
switch (bgp_vty_safi_from_arg(argv[idx_safi]->arg))
|
||||
{
|
||||
case SAFI_MULTICAST:
|
||||
vty->node = BGP_IPV6M_NODE;
|
||||
break;
|
||||
case SAFI_ENCAP:
|
||||
vty->node = BGP_ENCAPV6_NODE;
|
||||
break;
|
||||
case SAFI_MPLS_VPN:
|
||||
vty->node = BGP_VPNV6_NODE;
|
||||
break;
|
||||
case SAFI_UNICAST:
|
||||
default:
|
||||
vty->node = BGP_IPV6_NODE;
|
||||
break;
|
||||
}
|
||||
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
@ -5643,7 +5707,7 @@ bgp_clear_prefix (struct vty *vty, const char *view_name, const char *ip_str,
|
||||
/* one clear bgp command to rule them all */
|
||||
DEFUN (clear_ip_bgp_all,
|
||||
clear_ip_bgp_all_cmd,
|
||||
"clear [ip] bgp [<view|vrf> WORD] [<ipv4 [<unicast|multicast|vpn|encap>]|ipv6 [<unicast|multicast|vpn|encap>]] <*|A.B.C.D|X:X::X:X|WORD|(1-4294967295)|external|peer-group WORD> [<soft [<in|out>]|in [prefix-filter]|out>]",
|
||||
"clear [ip] bgp [<view|vrf> WORD] ["BGP_AFI_CMD_STR" ["BGP_SAFI_CMD_STR"]] <*|A.B.C.D|X:X::X:X|WORD|(1-4294967295)|external|peer-group WORD> [<soft [<in|out>]|in [prefix-filter]|out>]",
|
||||
CLEAR_STR
|
||||
IP_STR
|
||||
BGP_STR
|
||||
@ -5656,20 +5720,8 @@ DEFUN (clear_ip_bgp_all,
|
||||
"Clear all external peers\n"
|
||||
"Clear all members of peer-group\n"
|
||||
"BGP peer-group name\n"
|
||||
"Address Family\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family\n"
|
||||
"Address Family modifier\n"
|
||||
BGP_AFI_HELP_STR
|
||||
BGP_SAFI_HELP_STR
|
||||
BGP_SOFT_STR
|
||||
BGP_SOFT_IN_STR
|
||||
BGP_SOFT_OUT_STR
|
||||
@ -5746,19 +5798,10 @@ DEFUN (clear_ip_bgp_all,
|
||||
{
|
||||
clr_sort = clear_external;
|
||||
}
|
||||
/* [<ipv4 [<unicast|multicast>]|ipv6 [<unicast|multicast>]|encap [unicast]||vpnv4 [unicast]>] */
|
||||
if (argv_find (argv, argc, "ipv4", &idx) || argv_find (argv, argc, "ipv6", &idx))
|
||||
/* ["BGP_AFI_CMD_STR" ["BGP_SAFI_CMD_STR"]] */
|
||||
if (argv_find_and_parse_afi (argv, argc, &idx, &afi))
|
||||
{
|
||||
afi = strmatch(argv[idx]->text, "ipv6") ? AFI_IP6 : AFI_IP;
|
||||
if (argv_find (argv, argc, "unicast", &idx) || argv_find (argv, argc, "multicast", &idx))
|
||||
safi = bgp_vty_safi_from_arg (argv[idx]->text);
|
||||
}
|
||||
else if (argv_find (argv, argc, "encap", &idx) || argv_find (argv, argc, "vpnv4", &idx))
|
||||
{
|
||||
afi = AFI_IP;
|
||||
safi = bgp_vty_safi_from_arg (argv[idx]->text);
|
||||
// advance idx if necessary
|
||||
argv_find (argv, argc, "unicast", &idx);
|
||||
argv_find_and_parse_safi (argv, argc, &idx, &safi);
|
||||
}
|
||||
/* [<soft [<in|out>]|in [prefix-filter]|out>] */
|
||||
if (argv_find (argv, argc, "soft", &idx))
|
||||
@ -5808,44 +5851,38 @@ DEFUN (clear_ip_bgp_prefix,
|
||||
|
||||
DEFUN (clear_bgp_ipv6_safi_prefix,
|
||||
clear_bgp_ipv6_safi_prefix_cmd,
|
||||
"clear [ip] bgp ipv6 <unicast|multicast|vpn|encap> prefix X:X::X:X/M",
|
||||
"clear [ip] bgp ipv6 "BGP_SAFI_CMD_STR" prefix X:X::X:X/M",
|
||||
CLEAR_STR
|
||||
IP_STR
|
||||
BGP_STR
|
||||
"Address Family\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
BGP_SAFI_HELP_STR
|
||||
"Clear bestpath and re-advertise\n"
|
||||
"IPv6 prefix\n")
|
||||
{
|
||||
int idx_safi = 3;
|
||||
int idx_ipv6_prefixlen = 5;
|
||||
safi_t safi = bgp_vty_safi_from_arg (argv[idx_safi]->arg);
|
||||
return bgp_clear_prefix (vty, NULL, argv[idx_ipv6_prefixlen]->arg, AFI_IP6, safi, NULL);
|
||||
return bgp_clear_prefix (vty, NULL, argv[idx_ipv6_prefixlen]->arg, AFI_IP6,
|
||||
bgp_vty_safi_from_arg(argv[idx_safi]->arg), NULL);
|
||||
}
|
||||
|
||||
DEFUN (clear_bgp_instance_ipv6_safi_prefix,
|
||||
clear_bgp_instance_ipv6_safi_prefix_cmd,
|
||||
"clear [ip] bgp <view|vrf> WORD ipv6 <unicast|multicast|vpn|encap> prefix X:X::X:X/M",
|
||||
"clear [ip] bgp <view|vrf> WORD ipv6 "BGP_SAFI_CMD_STR" prefix X:X::X:X/M",
|
||||
CLEAR_STR
|
||||
IP_STR
|
||||
BGP_STR
|
||||
BGP_INSTANCE_HELP_STR
|
||||
"Address Family\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
BGP_SAFI_HELP_STR
|
||||
"Clear bestpath and re-advertise\n"
|
||||
"IPv6 prefix\n")
|
||||
{
|
||||
int idx_word = 3;
|
||||
int idx_safi = 5;
|
||||
int idx_ipv6_prefixlen = 7;
|
||||
safi_t safi = bgp_vty_safi_from_arg (argv[idx_safi]->text);
|
||||
return bgp_clear_prefix (vty, argv[idx_word]->arg, argv[idx_ipv6_prefixlen]->arg, AFI_IP6, safi, NULL);
|
||||
return bgp_clear_prefix (vty, argv[idx_word]->arg, argv[idx_ipv6_prefixlen]->arg, AFI_IP6,
|
||||
bgp_vty_safi_from_arg(argv[idx_safi]->arg), NULL);
|
||||
}
|
||||
|
||||
DEFUN (show_bgp_views,
|
||||
@ -6465,10 +6502,10 @@ bgp_show_summary (struct vty *vty, struct bgp *bgp, int afi, int safi,
|
||||
{
|
||||
if (use_json)
|
||||
vty_out(vty, "{\"error\": {\"message\": \"No %s neighbor configured\"}}%s",
|
||||
afi == AFI_IP ? "IPv4" : "IPv6", VTY_NEWLINE);
|
||||
afi_safi_print(afi, safi), VTY_NEWLINE);
|
||||
else
|
||||
vty_out (vty, "No %s neighbor is configured%s",
|
||||
afi == AFI_IP ? "IPv4" : "IPv6", VTY_NEWLINE);
|
||||
afi_safi_print(afi, safi), VTY_NEWLINE);
|
||||
}
|
||||
|
||||
if (dn_count && ! use_json)
|
||||
@ -6566,30 +6603,18 @@ bgp_show_summary_vty (struct vty *vty, const char *name,
|
||||
/* `show [ip] bgp summary' commands. */
|
||||
DEFUN (show_ip_bgp_summary,
|
||||
show_ip_bgp_summary_cmd,
|
||||
"show [ip] bgp [<view|vrf> WORD] [<ipv4 [<unicast|multicast|vpn|encap>]|ipv6 [<unicast|multicast|vpn|encap>]|vpnv4 <all|rd ASN:nn_or_IP-address:nn>>] summary [json]",
|
||||
"show [ip] bgp [<view|vrf> WORD] ["BGP_AFI_CMD_STR" ["BGP_SAFI_CMD_STR"]] summary [json]",
|
||||
SHOW_STR
|
||||
IP_STR
|
||||
BGP_STR
|
||||
BGP_INSTANCE_HELP_STR
|
||||
"Address Family\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family\n"
|
||||
"Display information about all VPNv4 NLRIs\n"
|
||||
"Display information for a route distinguisher\n"
|
||||
"VPN Route Distinguisher\n"
|
||||
BGP_AFI_HELP_STR
|
||||
BGP_SAFI_HELP_STR
|
||||
"Summary of BGP neighbor status\n"
|
||||
JSON_STR)
|
||||
{
|
||||
char *vrf = NULL;
|
||||
afi_t afi = AFI_IP6;
|
||||
afi_t afi = AFI_IP6; /* why default to v6? */
|
||||
safi_t safi = SAFI_UNICAST;
|
||||
|
||||
int idx = 0;
|
||||
@ -6600,23 +6625,10 @@ DEFUN (show_ip_bgp_summary,
|
||||
/* [<view|vrf> WORD] */
|
||||
if (argv_find (argv, argc, "view", &idx) || argv_find (argv, argc, "vrf", &idx))
|
||||
vrf = argv[++idx]->arg;
|
||||
/* [<ipv4 [<unicast|multicast>]|ipv6 [<unicast|multicast>]|encap [unicast]|vpnv4 [unicast]>] */
|
||||
if (argv_find (argv, argc, "ipv4", &idx) || argv_find (argv, argc, "ipv6", &idx))
|
||||
/* ["BGP_AFI_CMD_STR" ["BGP_SAFI_CMD_STR"]] */
|
||||
if (argv_find_and_parse_afi (argv, argc, &idx, &afi))
|
||||
{
|
||||
afi = strmatch(argv[idx]->text, "ipv6") ? AFI_IP6 : AFI_IP;
|
||||
if (argv_find (argv, argc, "unicast", &idx) || argv_find (argv, argc, "multicast", &idx))
|
||||
safi = bgp_vty_safi_from_arg (argv[idx]->text);
|
||||
}
|
||||
else if (argv_find (argv, argc, "encap", &idx))
|
||||
{
|
||||
afi = AFI_IP;
|
||||
safi = SAFI_ENCAP;
|
||||
}
|
||||
else if (argv_find (argv, argc, "vpnv4", &idx))
|
||||
{
|
||||
// we show the same thing regardless of rd and all
|
||||
afi = AFI_IP;
|
||||
safi = SAFI_MPLS_VPN;
|
||||
argv_find_and_parse_safi (argv, argc, &idx, &safi);
|
||||
}
|
||||
|
||||
int uj = use_json (argc, argv);
|
||||
@ -6632,17 +6644,17 @@ afi_safi_print (afi_t afi, safi_t safi)
|
||||
else if (afi == AFI_IP && safi == SAFI_MULTICAST)
|
||||
return "IPv4 Multicast";
|
||||
else if (afi == AFI_IP && safi == SAFI_MPLS_VPN)
|
||||
return "VPN-IPv4 Unicast";
|
||||
return "IPv4 VPN";
|
||||
else if (afi == AFI_IP && safi == SAFI_ENCAP)
|
||||
return "ENCAP-IPv4 Unicast";
|
||||
return "IPv4 Encap";
|
||||
else if (afi == AFI_IP6 && safi == SAFI_UNICAST)
|
||||
return "IPv6 Unicast";
|
||||
else if (afi == AFI_IP6 && safi == SAFI_MULTICAST)
|
||||
return "IPv6 Multicast";
|
||||
else if (afi == AFI_IP6 && safi == SAFI_MPLS_VPN)
|
||||
return "VPN-IPv6 Unicast";
|
||||
return "IPv6 VPN";
|
||||
else if (afi == AFI_IP6 && safi == SAFI_ENCAP)
|
||||
return "ENCAP-IPv6 Unicast";
|
||||
return "IPv6 Encap";
|
||||
else
|
||||
return "Unknown";
|
||||
}
|
||||
@ -8507,14 +8519,11 @@ DEFUN (show_ip_bgp_neighbors,
|
||||
same.*/
|
||||
DEFUN (show_ip_bgp_paths,
|
||||
show_ip_bgp_paths_cmd,
|
||||
"show [ip] bgp [<unicast|multicast|vpn|encap>] paths",
|
||||
"show [ip] bgp ["BGP_SAFI_CMD_STR"] paths",
|
||||
SHOW_STR
|
||||
IP_STR
|
||||
BGP_STR
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
BGP_SAFI_HELP_STR
|
||||
"Path information\n")
|
||||
{
|
||||
vty_out (vty, "Address Refcnt Path%s", VTY_NEWLINE);
|
||||
@ -8612,16 +8621,15 @@ bgp_show_update_groups(struct vty *vty, const char *name,
|
||||
|
||||
DEFUN (show_ip_bgp_updgrps,
|
||||
show_ip_bgp_updgrps_cmd,
|
||||
"show [ip] bgp [<view|vrf> WORD] [<ipv4 [<unicast|multicast|vpn|encap>]|ipv6 [<unicast|multicast|vpn|encap>]|vpnv4 [unicast]>] update-groups [SUBGROUP-ID]",
|
||||
"show [ip] bgp [<view|vrf> WORD] [<ipv4 ["BGP_SAFI_CMD_STR"]|ipv6 ["BGP_SAFI_CMD_STR"]|encap [unicast]|vpnv4 [unicast]>] update-groups [SUBGROUP-ID]",
|
||||
SHOW_STR
|
||||
IP_STR
|
||||
BGP_STR
|
||||
BGP_INSTANCE_HELP_STR
|
||||
"Address Family\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
BGP_SAFI_HELP_STR
|
||||
"Address Family\n"
|
||||
BGP_SAFI_HELP_STR
|
||||
"Address Family\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
@ -8645,7 +8653,7 @@ DEFUN (show_ip_bgp_updgrps,
|
||||
/* [<view|vrf> WORD] */
|
||||
if (argv_find (argv, argc, "view", &idx) || argv_find (argv, argc, "vrf", &idx))
|
||||
vrf = argv[++idx]->arg;
|
||||
/* [<ipv4 [<unicast|multicast>]|ipv6 [<unicast|multicast>]|encap [unicast]|vpnv4 [unicast]>] */
|
||||
/* [<ipv4 ["BGP_SAFI_CMD_STR"]|ipv6 ["BGP_SAFI_CMD_STR"]|encap [unicast]|vpnv4 [unicast]>] */
|
||||
if (argv_find (argv, argc, "ipv4", &idx) || argv_find (argv, argc, "ipv6", &idx))
|
||||
{
|
||||
afi = strmatch(argv[idx]->text, "ipv6") ? AFI_IP6 : AFI_IP;
|
||||
@ -8780,16 +8788,11 @@ DEFUN (show_ip_bgp_instance_updgrps_adj,
|
||||
|
||||
DEFUN (show_bgp_updgrps_afi_adj,
|
||||
show_bgp_updgrps_afi_adj_cmd,
|
||||
"show [ip] bgp <ipv4|ipv6> <unicast|multicast|vpn|encap> update-groups <advertise-queue|advertised-routes|packet-queue>",
|
||||
"show [ip] bgp "BGP_AFI_SAFI_CMD_STR" update-groups <advertise-queue|advertised-routes|packet-queue>",
|
||||
SHOW_STR
|
||||
IP_STR
|
||||
BGP_STR
|
||||
"Address Family\n"
|
||||
"Address Family\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
BGP_AFI_SAFI_HELP_STR
|
||||
"Detailed info about dynamic update groups\n"
|
||||
"Advertisement queue\n"
|
||||
"Announced routes\n"
|
||||
@ -8799,12 +8802,10 @@ DEFUN (show_bgp_updgrps_afi_adj,
|
||||
int idx_afi = 2;
|
||||
int idx_safi = 3;
|
||||
int idx_type = 5;
|
||||
afi_t afi;
|
||||
safi_t safi;
|
||||
|
||||
afi = (strcmp(argv[idx_afi]->arg, "ipv4") == 0) ? AFI_IP : AFI_IP6;
|
||||
safi = bgp_vty_safi_from_arg(argv[idx_safi]->arg);
|
||||
show_bgp_updgrps_adj_info_aux(vty, NULL, afi, safi, argv[idx_type]->arg, 0);
|
||||
show_bgp_updgrps_adj_info_aux(vty, NULL,
|
||||
bgp_vty_afi_from_arg(argv[idx_afi]->arg),
|
||||
bgp_vty_safi_from_arg(argv[idx_safi]->arg),
|
||||
argv[idx_type]->arg, 0);
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
@ -8892,16 +8893,11 @@ DEFUN (show_ip_bgp_instance_updgrps_adj_s,
|
||||
|
||||
DEFUN (show_bgp_updgrps_afi_adj_s,
|
||||
show_bgp_updgrps_afi_adj_s_cmd,
|
||||
"show [ip] bgp <ipv4|ipv6> <unicast|multicast|vpn|encap> update-groups SUBGROUP-ID <advertise-queue|advertised-routes|packet-queue>",
|
||||
"show [ip] bgp "BGP_AFI_SAFI_CMD_STR" update-groups SUBGROUP-ID <advertise-queue|advertised-routes|packet-queue>",
|
||||
SHOW_STR
|
||||
IP_STR
|
||||
BGP_STR
|
||||
"Address Family\n"
|
||||
"Address Family\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
"Address Family modifier\n"
|
||||
BGP_AFI_SAFI_HELP_STR
|
||||
"Detailed info about dynamic update groups\n"
|
||||
"Specific subgroup to display info for\n"
|
||||
"Advertisement queue\n"
|
||||
@ -8913,15 +8909,14 @@ DEFUN (show_bgp_updgrps_afi_adj_s,
|
||||
int idx_safi = 3;
|
||||
int idx_subgroup_id = 5;
|
||||
int idx_type = 6;
|
||||
afi_t afi;
|
||||
safi_t safi;
|
||||
uint64_t subgrp_id;
|
||||
|
||||
afi = (strmatch(argv[idx_afi]->text, "ipv4")) ? AFI_IP : AFI_IP6;
|
||||
safi = bgp_vty_safi_from_arg(argv[idx_safi]->text);
|
||||
VTY_GET_ULL("subgroup-id", subgrp_id, argv[idx_subgroup_id]->arg);
|
||||
|
||||
show_bgp_updgrps_adj_info_aux(vty, NULL, afi, safi, argv[idx_type]->arg, subgrp_id);
|
||||
show_bgp_updgrps_adj_info_aux(vty, NULL,
|
||||
bgp_vty_afi_from_arg(argv[idx_afi]->arg),
|
||||
bgp_vty_safi_from_arg(argv[idx_safi]->arg),
|
||||
argv[idx_type]->arg, subgrp_id);
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -26,12 +26,16 @@ struct bgp;
|
||||
#define BGP_INSTANCE_HELP_STR "BGP view\nBGP VRF\nView/VRF name\n"
|
||||
#define BGP_INSTANCE_ALL_HELP_STR "BGP view\nBGP VRF\nAll Views/VRFs\n"
|
||||
|
||||
#define AFI_SAFI_STR \
|
||||
"Address family\n" \
|
||||
"Address Family modifier\n" \
|
||||
"Address Family modifier\n" \
|
||||
"Address Family modifier\n" \
|
||||
#define BGP_AFI_CMD_STR "<ipv4|ipv6>"
|
||||
#define BGP_AFI_HELP_STR "Address Family\nAddress Family\n"
|
||||
#define BGP_SAFI_CMD_STR "<unicast|multicast|vpn|encap>"
|
||||
#define BGP_SAFI_HELP_STR \
|
||||
"Address Family modifier\n" \
|
||||
"Address Family modifier\n" \
|
||||
"Address Family modifier\n" \
|
||||
"Address Family modifier\n"
|
||||
#define BGP_AFI_SAFI_CMD_STR BGP_AFI_CMD_STR" "BGP_SAFI_CMD_STR
|
||||
#define BGP_AFI_SAFI_HELP_STR BGP_AFI_HELP_STR BGP_SAFI_HELP_STR
|
||||
|
||||
extern void bgp_vty_init (void);
|
||||
extern const char *afi_safi_print (afi_t, safi_t);
|
||||
@ -49,7 +53,16 @@ bgp_parse_afi(const char *str, afi_t *afi);
|
||||
extern int
|
||||
bgp_parse_safi(const char *str, safi_t *safi);
|
||||
|
||||
extern afi_t
|
||||
bgp_vty_afi_from_arg(const char *afi_str);
|
||||
|
||||
extern safi_t
|
||||
bgp_vty_safi_from_arg(const char *safi_str);
|
||||
|
||||
extern int
|
||||
argv_find_and_parse_afi(struct cmd_token **argv, int argc, int *index, afi_t *afi);
|
||||
|
||||
extern int
|
||||
argv_find_and_parse_safi(struct cmd_token **argv, int argc, int *index, safi_t *safi);
|
||||
|
||||
#endif /* _QUAGGA_BGP_VTY_H */
|
||||
|
Loading…
Reference in New Issue
Block a user