Summary: Test effect of route-map on received/advertised routes

This patch adds the ability to see the effect of applying a route-map on
the routes received or advertised from or to a neighbor. This effect can
be seen without actually affecting the current state. If the result seen
is what is desired, then the user can actually apply the route-map.
Currently, the application acts on route-map in or out and on unsuppress
maps.

Signed-off-by: Dinesh G Dutt <ddutt@cumulusnetworks.com>
This commit is contained in:
Donald Sharp 2015-05-19 17:40:45 -07:00
parent 518f0eb188
commit 0b16f23991

View File

@ -698,11 +698,12 @@ bgp_cluster_filter (struct peer *peer, struct attr *attr)
static int static int
bgp_input_modifier (struct peer *peer, struct prefix *p, struct attr *attr, bgp_input_modifier (struct peer *peer, struct prefix *p, struct attr *attr,
afi_t afi, safi_t safi) afi_t afi, safi_t safi, char *rmap_name)
{ {
struct bgp_filter *filter; struct bgp_filter *filter;
struct bgp_info info; struct bgp_info info;
route_map_result_t ret; route_map_result_t ret;
struct route_map *rmap = NULL;
filter = &peer->filter[afi][safi]; filter = &peer->filter[afi][safi];
@ -710,8 +711,18 @@ bgp_input_modifier (struct peer *peer, struct prefix *p, struct attr *attr,
if (peer->weight) if (peer->weight)
(bgp_attr_extra_get (attr))->weight = peer->weight; (bgp_attr_extra_get (attr))->weight = peer->weight;
if (rmap_name)
{
rmap = route_map_lookup_by_name(rmap_name);
}
else
{
if (ROUTE_MAP_IN_NAME(filter))
rmap = ROUTE_MAP_IN (filter);
}
/* Route map apply. */ /* Route map apply. */
if (ROUTE_MAP_IN_NAME (filter)) if (rmap)
{ {
/* Duplicate current value to new strucutre for modification. */ /* Duplicate current value to new strucutre for modification. */
info.peer = peer; info.peer = peer;
@ -720,7 +731,56 @@ bgp_input_modifier (struct peer *peer, struct prefix *p, struct attr *attr,
SET_FLAG (peer->rmap_type, PEER_RMAP_TYPE_IN); SET_FLAG (peer->rmap_type, PEER_RMAP_TYPE_IN);
/* Apply BGP route map to the attribute. */ /* Apply BGP route map to the attribute. */
ret = route_map_apply (ROUTE_MAP_IN (filter), p, RMAP_BGP, &info); ret = route_map_apply (rmap, p, RMAP_BGP, &info);
peer->rmap_type = 0;
if (ret == RMAP_DENYMATCH)
{
/* Free newly generated AS path and community by route-map. */
bgp_attr_flush (attr);
return RMAP_DENY;
}
}
return RMAP_PERMIT;
}
static int
bgp_output_modifier (struct peer *peer, struct prefix *p, struct attr *attr,
afi_t afi, safi_t safi, char *rmap_name)
{
struct bgp_filter *filter;
struct bgp_info info;
route_map_result_t ret;
struct route_map *rmap = NULL;
filter = &peer->filter[afi][safi];
/* Apply default weight value. */
if (peer->weight)
(bgp_attr_extra_get (attr))->weight = peer->weight;
if (rmap_name)
{
rmap = route_map_lookup_by_name(rmap_name);
}
else
{
if (ROUTE_MAP_OUT_NAME(filter))
rmap = ROUTE_MAP_OUT (filter);
}
/* Route map apply. */
if (rmap)
{
/* Duplicate current value to new strucutre for modification. */
info.peer = peer;
info.attr = attr;
SET_FLAG (peer->rmap_type, PEER_RMAP_TYPE_OUT);
/* Apply BGP route map to the attribute. */
ret = route_map_apply (rmap, p, RMAP_BGP, &info);
peer->rmap_type = 0; peer->rmap_type = 0;
@ -2236,7 +2296,7 @@ bgp_update_main (struct peer *peer, struct prefix *p, struct attr *attr,
* NB: new_attr may now contain newly allocated values from route-map "set" * NB: new_attr may now contain newly allocated values from route-map "set"
* commands, so we need bgp_attr_flush in the error paths, until we intern * commands, so we need bgp_attr_flush in the error paths, until we intern
* the attr (which takes over the memory references) */ * the attr (which takes over the memory references) */
if (bgp_input_modifier (peer, p, &new_attr, afi, safi) == RMAP_DENY) if (bgp_input_modifier (peer, p, &new_attr, afi, safi, NULL) == RMAP_DENY)
{ {
reason = "route-map;"; reason = "route-map;";
bgp_attr_flush (&new_attr); bgp_attr_flush (&new_attr);
@ -10085,19 +10145,22 @@ DEFUN (show_ip_bgp_vpnv4_neighbor_prefix_counts,
return bgp_peer_counts (vty, peer, AFI_IP, SAFI_MPLS_VPN); return bgp_peer_counts (vty, peer, AFI_IP, SAFI_MPLS_VPN);
} }
static void static void
show_adj_route (struct vty *vty, struct peer *peer, afi_t afi, safi_t safi, show_adj_route (struct vty *vty, struct peer *peer, afi_t afi, safi_t safi,
int in, char *delim) int in, char *delim, char *rmap_name)
{ {
struct bgp_table *table; struct bgp_table *table;
struct bgp_adj_in *ain; struct bgp_adj_in *ain;
struct bgp_adj_out *adj; struct bgp_adj_out *adj;
unsigned long output_count; unsigned long output_count;
unsigned long filtered_count;
struct bgp_node *rn; struct bgp_node *rn;
int header1 = 1; int header1 = 1;
struct bgp *bgp; struct bgp *bgp;
int header2 = 1; int header2 = 1;
struct attr attr;
struct attr_extra extra;
int ret;
bgp = peer->bgp; bgp = peer->bgp;
@ -10109,7 +10172,7 @@ show_adj_route (struct vty *vty, struct peer *peer, afi_t afi, safi_t safi,
table = bgp->rib[afi][safi]; table = bgp->rib[afi][safi];
output_count = 0; output_count = filtered_count = 0;
if (! in && CHECK_FLAG (peer->af_sflags[afi][safi], if (! in && CHECK_FLAG (peer->af_sflags[afi][safi],
PEER_STATUS_DEFAULT_ORIGINATE)) PEER_STATUS_DEFAULT_ORIGINATE))
@ -10123,6 +10186,7 @@ show_adj_route (struct vty *vty, struct peer *peer, afi_t afi, safi_t safi,
header1 = 0; header1 = 0;
} }
attr.extra = &extra;
for (rn = bgp_table_top (table); rn; rn = bgp_route_next (rn)) for (rn = bgp_table_top (table); rn; rn = bgp_route_next (rn))
if (in) if (in)
{ {
@ -10146,9 +10210,16 @@ show_adj_route (struct vty *vty, struct peer *peer, afi_t afi, safi_t safi,
} }
if (ain->attr) if (ain->attr)
{ {
route_vty_out_tmp (vty, &rn->p, ain->attr, safi, delim); bgp_attr_dup(&attr, ain->attr);
if (bgp_input_modifier(peer, &rn->p, &attr, afi,
safi, rmap_name) != RMAP_DENY)
{
route_vty_out_tmp (vty, &rn->p, &attr, safi, delim);
output_count++; output_count++;
} }
else
filtered_count++;
}
} }
} }
else else
@ -10173,9 +10244,26 @@ show_adj_route (struct vty *vty, struct peer *peer, afi_t afi, safi_t safi,
} }
if (adj->attr) if (adj->attr)
{ {
route_vty_out_tmp (vty, &rn->p, adj->attr, safi, delim); if (!CHECK_FLAG(peer->af_flags[afi][safi],
PEER_FLAG_REFLECTOR_CLIENT)
|| bgp_flag_check(bgp, BGP_FLAG_RR_ALLOW_OUTBOUND_POLICY))
{
bgp_attr_dup(&attr, adj->attr);
ret = bgp_output_modifier(peer, &rn->p, &attr, afi,
safi, rmap_name);
}
else
ret = RMAP_PERMIT;
if (ret != RMAP_DENY)
{
route_vty_out_tmp (vty, &rn->p, &attr, safi, delim);
output_count++; output_count++;
} }
else
filtered_count++;
}
} }
} }
@ -10186,7 +10274,7 @@ show_adj_route (struct vty *vty, struct peer *peer, afi_t afi, safi_t safi,
static int static int
peer_adj_routes (struct vty *vty, struct peer *peer, afi_t afi, safi_t safi, peer_adj_routes (struct vty *vty, struct peer *peer, afi_t afi, safi_t safi,
int in, char *delim) int in, char *delim, char *rmap_name)
{ {
if (! peer || ! peer->afc[afi][safi]) if (! peer || ! peer->afc[afi][safi])
{ {
@ -10201,7 +10289,17 @@ peer_adj_routes (struct vty *vty, struct peer *peer, afi_t afi, safi_t safi,
return CMD_WARNING; return CMD_WARNING;
} }
show_adj_route (vty, peer, afi, safi, in, delim); if (!in && (CHECK_FLAG(peer->af_flags[afi][safi], PEER_FLAG_REFLECTOR_CLIENT)
&& !bgp_flag_check(peer->bgp, BGP_FLAG_RR_ALLOW_OUTBOUND_POLICY)))
{
vty_out (vty, "%% Cannot apply outgoing route-map on route-reflector clients%s",
VTY_NEWLINE);
vty_out (vty, "%% Enable bgp route-reflector allow-outbound-policy flag%s",
VTY_NEWLINE);
return CMD_WARNING;
}
show_adj_route (vty, peer, afi, safi, in, delim, rmap_name);
return CMD_SUCCESS; return CMD_SUCCESS;
} }
@ -10229,10 +10327,10 @@ DEFUN (show_ip_bgp_view_neighbor_advertised_route,
if (! peer) if (! peer)
return CMD_WARNING; return CMD_WARNING;
return peer_adj_routes (vty, peer, AFI_IP, SAFI_UNICAST, 0, NULL); return peer_adj_routes (vty, peer, AFI_IP, SAFI_UNICAST, 0, NULL, NULL);
} }
ALIAS (show_ip_bgp_view_neighbor_advertised_route, DEFUN (show_ip_bgp_neighbor_advertised_route,
show_ip_bgp_neighbor_advertised_route_cmd, show_ip_bgp_neighbor_advertised_route_cmd,
"show ip bgp neighbors (A.B.C.D|X:X::X:X|WORD) advertised-routes", "show ip bgp neighbors (A.B.C.D|X:X::X:X|WORD) advertised-routes",
SHOW_STR SHOW_STR
@ -10244,6 +10342,33 @@ ALIAS (show_ip_bgp_view_neighbor_advertised_route,
"Neighbor on bgp configured interface\n" "Neighbor on bgp configured interface\n"
"Display the routes advertised to a BGP neighbor\n") "Display the routes advertised to a BGP neighbor\n")
{
struct peer *peer;
char *rmap_name = NULL;
peer = peer_lookup_in_view (vty, NULL, argv[0]);
if (! peer)
return CMD_WARNING;
if (argc == 2)
rmap_name = argv[1];
return peer_adj_routes (vty, peer, AFI_IP, SAFI_UNICAST, 0, NULL, rmap_name);
}
ALIAS (show_ip_bgp_neighbor_advertised_route,
show_ip_bgp_neighbor_advertised_route_rmap_cmd,
"show ip bgp neighbors (A.B.C.D|X:X::X:X|WORD) advertised-routes route-map WORD",
SHOW_STR
IP_STR
BGP_STR
"Detailed information on TCP and BGP neighbor connections\n"
"Neighbor to display information about\n"
"Neighbor to display information about\n"
"Neighbor on bgp configured interface\n"
"Display the routes advertised to a BGP neighbor\n")
DEFUN (show_ip_bgp_neighbor_advertised_route_csv, DEFUN (show_ip_bgp_neighbor_advertised_route_csv,
show_ip_bgp_neighbor_advertised_route_csv_cmd, show_ip_bgp_neighbor_advertised_route_csv_cmd,
"show ip bgp neighbors (A.B.C.D|X:X::X:X|WORD) advertised-routes csv", "show ip bgp neighbors (A.B.C.D|X:X::X:X|WORD) advertised-routes csv",
@ -10259,18 +10384,34 @@ DEFUN (show_ip_bgp_neighbor_advertised_route_csv,
"Display the routes advertised to a BGP neighbor\n") "Display the routes advertised to a BGP neighbor\n")
{ {
struct peer *peer; struct peer *peer;
char *rmap_name = NULL;
if (argc == 2)
peer = peer_lookup_in_view (vty, argv[0], argv[1]);
else
peer = peer_lookup_in_view (vty, NULL, argv[0]); peer = peer_lookup_in_view (vty, NULL, argv[0]);
if (! peer) if (! peer)
return CMD_WARNING; return CMD_WARNING;
return peer_adj_routes (vty, peer, AFI_IP, SAFI_UNICAST, 0, &csv); if (argc == 2)
rmap_name = argv[1];
return peer_adj_routes (vty, peer, AFI_IP, SAFI_UNICAST, 0, &csv, rmap_name);
} }
ALIAS (show_ip_bgp_neighbor_advertised_route_csv,
show_ip_bgp_neighbor_advertised_route_csv_rmap_cmd,
"show ip bgp neighbors (A.B.C.D|X:X::X:X|WORD) advertised-routes csv route-map WORD",
SHOW_STR
IP_STR
BGP_STR
"BGP view\n"
"View name\n"
"Detailed information on TCP and BGP neighbor connections\n"
"Neighbor to display information about\n"
"Neighbor to display information about\n"
"Neighbor on bgp configured interface\n"
"Display the routes advertised to a BGP neighbor\n"
"Apply this route-map to display what would've been advertised\n")
DEFUN (show_ip_bgp_ipv4_neighbor_advertised_route, DEFUN (show_ip_bgp_ipv4_neighbor_advertised_route,
show_ip_bgp_ipv4_neighbor_advertised_route_cmd, show_ip_bgp_ipv4_neighbor_advertised_route_cmd,
"show ip bgp ipv4 (unicast|multicast) neighbors (A.B.C.D|X:X::X:X|WORD) advertised-routes", "show ip bgp ipv4 (unicast|multicast) neighbors (A.B.C.D|X:X::X:X|WORD) advertised-routes",
@ -10287,17 +10428,37 @@ DEFUN (show_ip_bgp_ipv4_neighbor_advertised_route,
"Display the routes advertised to a BGP neighbor\n") "Display the routes advertised to a BGP neighbor\n")
{ {
struct peer *peer; struct peer *peer;
char *rmap_name = NULL;
peer = peer_lookup_in_view (vty, NULL, argv[1]); peer = peer_lookup_in_view (vty, NULL, argv[1]);
if (! peer) if (! peer)
return CMD_WARNING; return CMD_WARNING;
if (strncmp (argv[0], "m", 1) == 0) if (argc == 3)
return peer_adj_routes (vty, peer, AFI_IP, SAFI_MULTICAST, 0, NULL); rmap_name = argv[2];
return peer_adj_routes (vty, peer, AFI_IP, SAFI_UNICAST, 0, NULL); if (strncmp (argv[0], "m", 1) == 0)
return peer_adj_routes (vty, peer, AFI_IP, SAFI_MULTICAST, 0, NULL, rmap_name);
return peer_adj_routes (vty, peer, AFI_IP, SAFI_UNICAST, 0, NULL, rmap_name);
} }
ALIAS (show_ip_bgp_ipv4_neighbor_advertised_route,
show_ip_bgp_ipv4_neighbor_advertised_route_rmap_cmd,
"show ip bgp ipv4 (unicast|multicast) neighbors (A.B.C.D|X:X::X:X|WORD) advertised-routes route-map WORD",
SHOW_STR
IP_STR
BGP_STR
"Address family\n"
"Address Family modifier\n"
"Address Family modifier\n"
"Detailed information on TCP and BGP neighbor connections\n"
"Neighbor to display information about\n"
"Neighbor to display information about\n"
"Neighbor on bgp configured interface\n"
"Display the routes advertised to a BGP neighbor\n"
"Route-map to control what is displayed\n")
#ifdef HAVE_IPV6 #ifdef HAVE_IPV6
DEFUN (show_bgp_view_neighbor_advertised_route, DEFUN (show_bgp_view_neighbor_advertised_route,
show_bgp_view_neighbor_advertised_route_cmd, show_bgp_view_neighbor_advertised_route_cmd,
@ -10322,9 +10483,23 @@ DEFUN (show_bgp_view_neighbor_advertised_route,
if (! peer) if (! peer)
return CMD_WARNING; return CMD_WARNING;
return peer_adj_routes (vty, peer, AFI_IP6, SAFI_UNICAST, 0, NULL); return peer_adj_routes (vty, peer, AFI_IP6, SAFI_UNICAST, 0, NULL, NULL);
} }
ALIAS (show_bgp_view_neighbor_advertised_route,
show_bgp_view_ipv6_neighbor_advertised_route_cmd,
"show bgp view WORD ipv6 neighbors (A.B.C.D|X:X::X:X|WORD) advertised-routes",
SHOW_STR
BGP_STR
"BGP view\n"
"View name\n"
"Address family\n"
"Detailed information on TCP and BGP neighbor connections\n"
"Neighbor to display information about\n"
"Neighbor to display information about\n"
"Neighbor on bgp configured interface\n"
"Display the routes advertised to a BGP neighbor\n")
DEFUN (show_bgp_view_neighbor_advertised_route_csv, DEFUN (show_bgp_view_neighbor_advertised_route_csv,
show_bgp_view_neighbor_advertised_route_csv_cmd, show_bgp_view_neighbor_advertised_route_csv_cmd,
"show bgp view WORD neighbors (A.B.C.D|X:X::X:X|WORD) advertised-routes csv", "show bgp view WORD neighbors (A.B.C.D|X:X::X:X|WORD) advertised-routes csv",
@ -10348,23 +10523,9 @@ DEFUN (show_bgp_view_neighbor_advertised_route_csv,
if (! peer) if (! peer)
return CMD_WARNING; return CMD_WARNING;
return peer_adj_routes (vty, peer, AFI_IP6, SAFI_UNICAST, 0, &csv); return peer_adj_routes (vty, peer, AFI_IP6, SAFI_UNICAST, 0, &csv, NULL);
} }
ALIAS (show_bgp_view_neighbor_advertised_route,
show_bgp_view_ipv6_neighbor_advertised_route_cmd,
"show bgp view WORD ipv6 neighbors (A.B.C.D|X:X::X:X|WORD) advertised-routes",
SHOW_STR
BGP_STR
"BGP view\n"
"View name\n"
"Address family\n"
"Detailed information on TCP and BGP neighbor connections\n"
"Neighbor to display information about\n"
"Neighbor to display information about\n"
"Neighbor on bgp configured interface\n"
"Display the routes advertised to a BGP neighbor\n")
ALIAS (show_bgp_view_neighbor_advertised_route_csv, ALIAS (show_bgp_view_neighbor_advertised_route_csv,
show_bgp_view_ipv6_neighbor_advertised_route_csv_cmd, show_bgp_view_ipv6_neighbor_advertised_route_csv_cmd,
"show bgp view WORD ipv6 neighbors (A.B.C.D|X:X::X:X|WORD) advertised-routes csv", "show bgp view WORD ipv6 neighbors (A.B.C.D|X:X::X:X|WORD) advertised-routes csv",
@ -10379,47 +10540,7 @@ ALIAS (show_bgp_view_neighbor_advertised_route_csv,
"Neighbor on bgp configured interface\n" "Neighbor on bgp configured interface\n"
"Display the routes advertised to a BGP neighbor\n") "Display the routes advertised to a BGP neighbor\n")
DEFUN (show_bgp_view_neighbor_received_routes, DEFUN (show_bgp_neighbor_advertised_route,
show_bgp_view_neighbor_received_routes_cmd,
"show bgp view WORD neighbors (A.B.C.D|X:X::X:X|WORD) received-routes",
SHOW_STR
BGP_STR
"BGP view\n"
"View name\n"
"Detailed information on TCP and BGP neighbor connections\n"
"Neighbor to display information about\n"
"Neighbor to display information about\n"
"Neighbor on bgp configured interface\n"
"Display the received routes from neighbor\n")
{
struct peer *peer;
if (argc == 2)
peer = peer_lookup_in_view (vty, argv[0], argv[1]);
else
peer = peer_lookup_in_view (vty, NULL, argv[0]);
if (! peer)
return CMD_WARNING;
return peer_adj_routes (vty, peer, AFI_IP6, SAFI_UNICAST, 1, NULL);
}
ALIAS (show_bgp_view_neighbor_received_routes,
show_bgp_view_ipv6_neighbor_received_routes_cmd,
"show bgp view WORD ipv6 neighbors (A.B.C.D|X:X::X:X|WORD) received-routes",
SHOW_STR
BGP_STR
"BGP view\n"
"View name\n"
"Address family\n"
"Detailed information on TCP and BGP neighbor connections\n"
"Neighbor to display information about\n"
"Neighbor to display information about\n"
"Neighbor on bgp configured interface\n"
"Display the received routes from neighbor\n")
ALIAS (show_bgp_view_neighbor_advertised_route,
show_bgp_neighbor_advertised_route_cmd, show_bgp_neighbor_advertised_route_cmd,
"show bgp neighbors (A.B.C.D|X:X::X:X|WORD) advertised-routes", "show bgp neighbors (A.B.C.D|X:X::X:X|WORD) advertised-routes",
SHOW_STR SHOW_STR
@ -10430,7 +10551,33 @@ ALIAS (show_bgp_view_neighbor_advertised_route,
"Neighbor on bgp configured interface\n" "Neighbor on bgp configured interface\n"
"Display the routes advertised to a BGP neighbor\n") "Display the routes advertised to a BGP neighbor\n")
ALIAS (show_bgp_view_neighbor_advertised_route, {
struct peer *peer;
char *rmap_name = NULL;
peer = peer_lookup_in_view (vty, NULL, argv[0]);
if (! peer)
return CMD_WARNING;
if (argc == 2)
rmap_name = argv[1];
return peer_adj_routes (vty, peer, AFI_IP6, SAFI_UNICAST, 0, NULL, rmap_name);
}
ALIAS (show_bgp_neighbor_advertised_route,
show_bgp_neighbor_advertised_route_rmap_cmd,
"show bgp neighbors (A.B.C.D|X:X::X:X|WORD) advertised-routes route-map WORD",
SHOW_STR
BGP_STR
"Detailed information on TCP and BGP neighbor connections\n"
"Neighbor to display information about\n"
"Neighbor to display information about\n"
"Neighbor on bgp configured interface\n"
"Display the routes advertised to a BGP neighbor\n")
ALIAS (show_bgp_neighbor_advertised_route,
show_bgp_ipv6_neighbor_advertised_route_cmd, show_bgp_ipv6_neighbor_advertised_route_cmd,
"show bgp ipv6 neighbors (A.B.C.D|X:X::X:X|WORD) advertised-routes", "show bgp ipv6 neighbors (A.B.C.D|X:X::X:X|WORD) advertised-routes",
SHOW_STR SHOW_STR
@ -10442,7 +10589,19 @@ ALIAS (show_bgp_view_neighbor_advertised_route,
"Neighbor on bgp configured interface\n" "Neighbor on bgp configured interface\n"
"Display the routes advertised to a BGP neighbor\n") "Display the routes advertised to a BGP neighbor\n")
ALIAS (show_bgp_view_neighbor_advertised_route_csv, ALIAS (show_bgp_neighbor_advertised_route,
show_bgp_ipv6_neighbor_advertised_route_rmap_cmd,
"show bgp ipv6 neighbors (A.B.C.D|X:X::X:X|WORD) advertised-routes route-map WORD",
SHOW_STR
BGP_STR
"Address family\n"
"Detailed information on TCP and BGP neighbor connections\n"
"Neighbor to display information about\n"
"Neighbor to display information about\n"
"Neighbor on bgp configured interface\n"
"Display the routes advertised to a BGP neighbor\n")
DEFUN (show_bgp_neighbor_advertised_route_csv,
show_bgp_neighbor_advertised_route_csv_cmd, show_bgp_neighbor_advertised_route_csv_cmd,
"show bgp neighbors (A.B.C.D|X:X::X:X|WORD) advertised-routes csv", "show bgp neighbors (A.B.C.D|X:X::X:X|WORD) advertised-routes csv",
SHOW_STR SHOW_STR
@ -10452,8 +10611,33 @@ ALIAS (show_bgp_view_neighbor_advertised_route_csv,
"Neighbor to display information about\n" "Neighbor to display information about\n"
"Neighbor on bgp configured interface\n" "Neighbor on bgp configured interface\n"
"Display the routes advertised to a BGP neighbor\n") "Display the routes advertised to a BGP neighbor\n")
{
struct peer *peer;
char *rmap_name = NULL;
ALIAS (show_bgp_view_neighbor_advertised_route_csv, peer = peer_lookup_in_view (vty, NULL, argv[0]);
if (! peer)
return CMD_WARNING;
if (argc == 2)
rmap_name = argv[1];
return peer_adj_routes (vty, peer, AFI_IP6, SAFI_UNICAST, 0, &csv, rmap_name);
}
ALIAS (show_bgp_neighbor_advertised_route_csv,
show_bgp_neighbor_advertised_route_csv_rmap_cmd,
"show bgp neighbors (A.B.C.D|X:X::X:X|WORD) advertised-routes csv route-map WORD",
SHOW_STR
BGP_STR
"Detailed information on TCP and BGP neighbor connections\n"
"Neighbor to display information about\n"
"Neighbor to display information about\n"
"Neighbor on bgp configured interface\n"
"Display the routes advertised to a BGP neighbor\n")
ALIAS (show_bgp_neighbor_advertised_route_csv,
show_bgp_ipv6_neighbor_advertised_route_csv_cmd, show_bgp_ipv6_neighbor_advertised_route_csv_cmd,
"show bgp ipv6 neighbors (A.B.C.D|X:X::X:X|WORD) advertised-routes csv", "show bgp ipv6 neighbors (A.B.C.D|X:X::X:X|WORD) advertised-routes csv",
SHOW_STR SHOW_STR
@ -10465,8 +10649,20 @@ ALIAS (show_bgp_view_neighbor_advertised_route_csv,
"Neighbor on bgp configured interface\n" "Neighbor on bgp configured interface\n"
"Display the routes advertised to a BGP neighbor\n") "Display the routes advertised to a BGP neighbor\n")
ALIAS (show_bgp_neighbor_advertised_route_csv,
show_bgp_ipv6_neighbor_advertised_route_csv_rmap_cmd,
"show bgp ipv6 neighbors (A.B.C.D|X:X::X:X|WORD) advertised-routes csv route-map WORD",
SHOW_STR
BGP_STR
"Address family\n"
"Detailed information on TCP and BGP neighbor connections\n"
"Neighbor to display information about\n"
"Neighbor to display information about\n"
"Neighbor on bgp configured interface\n"
"Display the routes advertised to a BGP neighbor\n")
/* old command */ /* old command */
ALIAS (show_bgp_view_neighbor_advertised_route, ALIAS (show_bgp_neighbor_advertised_route,
ipv6_bgp_neighbor_advertised_route_cmd, ipv6_bgp_neighbor_advertised_route_cmd,
"show ipv6 bgp neighbors (A.B.C.D|X:X::X:X|WORD) advertised-routes", "show ipv6 bgp neighbors (A.B.C.D|X:X::X:X|WORD) advertised-routes",
SHOW_STR SHOW_STR
@ -10498,10 +10694,36 @@ DEFUN (ipv6_mbgp_neighbor_advertised_route,
if (! peer) if (! peer)
return CMD_WARNING; return CMD_WARNING;
return peer_adj_routes (vty, peer, AFI_IP6, SAFI_MULTICAST, 0, NULL); return peer_adj_routes (vty, peer, AFI_IP6, SAFI_MULTICAST, 0, NULL, NULL);
} }
#endif /* HAVE_IPV6 */ #endif /* HAVE_IPV6 */
DEFUN (show_bgp_view_neighbor_received_routes,
show_bgp_view_neighbor_received_routes_cmd,
"show bgp view WORD neighbors (A.B.C.D|X:X::X:X|WORD) received-routes",
SHOW_STR
BGP_STR
"BGP view\n"
"View name\n"
"Detailed information on TCP and BGP neighbor connections\n"
"Neighbor to display information about\n"
"Neighbor to display information about\n"
"Neighbor on bgp configured interface\n"
"Display the received routes from neighbor\n")
{
struct peer *peer;
if (argc == 2)
peer = peer_lookup_in_view (vty, argv[0], argv[1]);
else
peer = peer_lookup_in_view (vty, NULL, argv[0]);
if (! peer)
return CMD_WARNING;
return peer_adj_routes (vty, peer, AFI_IP6, SAFI_UNICAST, 1, NULL, NULL);
}
DEFUN (show_ip_bgp_view_neighbor_received_routes, DEFUN (show_ip_bgp_view_neighbor_received_routes,
show_ip_bgp_view_neighbor_received_routes_cmd, show_ip_bgp_view_neighbor_received_routes_cmd,
"show ip bgp view WORD neighbors (A.B.C.D|X:X::X:X|WORD) received-routes", "show ip bgp view WORD neighbors (A.B.C.D|X:X::X:X|WORD) received-routes",
@ -10526,10 +10748,24 @@ DEFUN (show_ip_bgp_view_neighbor_received_routes,
if (! peer) if (! peer)
return CMD_WARNING; return CMD_WARNING;
return peer_adj_routes (vty, peer, AFI_IP, SAFI_UNICAST, 1, NULL); return peer_adj_routes (vty, peer, AFI_IP, SAFI_UNICAST, 1, NULL, NULL);
} }
ALIAS (show_ip_bgp_view_neighbor_received_routes, ALIAS (show_bgp_view_neighbor_received_routes,
show_bgp_view_ipv6_neighbor_received_routes_cmd,
"show bgp view WORD ipv6 neighbors (A.B.C.D|X:X::X:X|WORD) received-routes",
SHOW_STR
BGP_STR
"BGP view\n"
"View name\n"
"Address family\n"
"Detailed information on TCP and BGP neighbor connections\n"
"Neighbor to display information about\n"
"Neighbor to display information about\n"
"Neighbor on bgp configured interface\n"
"Display the received routes from neighbor\n")
DEFUN (show_ip_bgp_neighbor_received_routes,
show_ip_bgp_neighbor_received_routes_cmd, show_ip_bgp_neighbor_received_routes_cmd,
"show ip bgp neighbors (A.B.C.D|X:X::X:X|WORD) received-routes", "show ip bgp neighbors (A.B.C.D|X:X::X:X|WORD) received-routes",
SHOW_STR SHOW_STR
@ -10541,6 +10777,33 @@ ALIAS (show_ip_bgp_view_neighbor_received_routes,
"Neighbor on bgp configured interface\n" "Neighbor on bgp configured interface\n"
"Display the received routes from neighbor\n") "Display the received routes from neighbor\n")
{
struct peer *peer;
char *rmap_name = NULL;
peer = peer_lookup_in_view (vty, NULL, argv[0]);
if (! peer)
return CMD_WARNING;
if (argc == 2)
rmap_name = argv[1];
return peer_adj_routes (vty, peer, AFI_IP, SAFI_UNICAST, 1, NULL, rmap_name);
}
ALIAS (show_ip_bgp_neighbor_received_routes,
show_ip_bgp_neighbor_received_routes_rmap_cmd,
"show ip bgp neighbors (A.B.C.D|X:X::X:X|WORD) received-routes route-map WORD",
SHOW_STR
IP_STR
BGP_STR
"Detailed information on TCP and BGP neighbor connections\n"
"Neighbor to display information about\n"
"Neighbor to display information about\n"
"Neighbor on bgp configured interface\n"
"Display the received routes from neighbor\n")
DEFUN (show_ip_bgp_ipv4_neighbor_received_routes, DEFUN (show_ip_bgp_ipv4_neighbor_received_routes,
show_ip_bgp_ipv4_neighbor_received_routes_cmd, show_ip_bgp_ipv4_neighbor_received_routes_cmd,
"show ip bgp ipv4 (unicast|multicast) neighbors (A.B.C.D|X:X::X:X|WORD) received-routes", "show ip bgp ipv4 (unicast|multicast) neighbors (A.B.C.D|X:X::X:X|WORD) received-routes",
@ -10557,17 +10820,36 @@ DEFUN (show_ip_bgp_ipv4_neighbor_received_routes,
"Display the received routes from neighbor\n") "Display the received routes from neighbor\n")
{ {
struct peer *peer; struct peer *peer;
char *rmap_name = NULL;
peer = peer_lookup_in_view (vty, NULL, argv[1]); peer = peer_lookup_in_view (vty, NULL, argv[1]);
if (! peer) if (! peer)
return CMD_WARNING; return CMD_WARNING;
if (strncmp (argv[0], "m", 1) == 0) if (argc == 3)
return peer_adj_routes (vty, peer, AFI_IP, SAFI_MULTICAST, 1, NULL); rmap_name = argv[2];
return peer_adj_routes (vty, peer, AFI_IP, SAFI_UNICAST, 1, NULL); if (strncmp (argv[0], "m", 1) == 0)
return peer_adj_routes (vty, peer, AFI_IP, SAFI_MULTICAST, 1, NULL, rmap_name);
return peer_adj_routes (vty, peer, AFI_IP, SAFI_UNICAST, 1, NULL, rmap_name);
} }
ALIAS (show_ip_bgp_ipv4_neighbor_received_routes,
show_ip_bgp_ipv4_neighbor_received_routes_rmap_cmd,
"show ip bgp ipv4 (unicast|multicast) neighbors (A.B.C.D|X:X::X:X|WORD) received-routes route-map WORD",
SHOW_STR
IP_STR
BGP_STR
"Address family\n"
"Address Family modifier\n"
"Address Family modifier\n"
"Detailed information on TCP and BGP neighbor connections\n"
"Neighbor to display information about\n"
"Neighbor to display information about\n"
"Neighbor on bgp configured interface\n"
"Display the received routes from neighbor\n")
DEFUN (show_bgp_view_afi_safi_neighbor_adv_recd_routes, DEFUN (show_bgp_view_afi_safi_neighbor_adv_recd_routes,
show_bgp_view_afi_safi_neighbor_adv_recd_routes_cmd, show_bgp_view_afi_safi_neighbor_adv_recd_routes_cmd,
#ifdef HAVE_IPV6 #ifdef HAVE_IPV6
@ -10616,7 +10898,7 @@ DEFUN (show_bgp_view_afi_safi_neighbor_adv_recd_routes,
in = (strncmp (argv[3], "r", 1) == 0) ? 1 : 0; in = (strncmp (argv[3], "r", 1) == 0) ? 1 : 0;
#endif #endif
return peer_adj_routes (vty, peer, afi, safi, in, NULL); return peer_adj_routes (vty, peer, afi, safi, in, NULL, NULL);
} }
DEFUN (show_ip_bgp_neighbor_received_prefix_filter, DEFUN (show_ip_bgp_neighbor_received_prefix_filter,
@ -10752,6 +11034,29 @@ ALIAS (show_bgp_view_neighbor_received_routes,
"Neighbor on bgp configured interface\n" "Neighbor on bgp configured interface\n"
"Display the received routes from neighbor\n") "Display the received routes from neighbor\n")
ALIAS (show_bgp_view_neighbor_received_routes,
show_bgp_neighbor_received_routes_rmap_cmd,
"show bgp neighbors (A.B.C.D|X:X::X:X|WORD) received-routes route-map WORD",
SHOW_STR
BGP_STR
"Detailed information on TCP and BGP neighbor connections\n"
"Neighbor to display information about\n"
"Neighbor to display information about\n"
"Neighbor on bgp configured interface\n"
"Display the received routes from neighbor\n")
ALIAS (show_bgp_view_neighbor_received_routes,
show_bgp_ipv6_neighbor_received_routes_rmap_cmd,
"show bgp ipv6 neighbors (A.B.C.D|X:X::X:X|WORD) received-routes route-map WORD",
SHOW_STR
BGP_STR
"Address family\n"
"Detailed information on TCP and BGP neighbor connections\n"
"Neighbor to display information about\n"
"Neighbor to display information about\n"
"Neighbor on bgp configured interface\n"
"Display the received routes from neighbor\n")
DEFUN (show_bgp_neighbor_received_prefix_filter, DEFUN (show_bgp_neighbor_received_prefix_filter,
show_bgp_neighbor_received_prefix_filter_cmd, show_bgp_neighbor_received_prefix_filter_cmd,
"show bgp neighbors (A.B.C.D|X:X::X:X|WORD) received prefix-filter", "show bgp neighbors (A.B.C.D|X:X::X:X|WORD) received prefix-filter",
@ -10842,7 +11147,7 @@ DEFUN (ipv6_mbgp_neighbor_received_routes,
if (! peer) if (! peer)
return CMD_WARNING; return CMD_WARNING;
return peer_adj_routes (vty, peer, AFI_IP6, SAFI_MULTICAST, 1, NULL); return peer_adj_routes (vty, peer, AFI_IP6, SAFI_MULTICAST, 1, NULL, NULL);
} }
DEFUN (show_bgp_view_neighbor_received_prefix_filter, DEFUN (show_bgp_view_neighbor_received_prefix_filter,
@ -13062,10 +13367,15 @@ bgp_route_init (void)
install_element (VIEW_NODE, &show_ip_bgp_prefix_longer_cmd); install_element (VIEW_NODE, &show_ip_bgp_prefix_longer_cmd);
install_element (VIEW_NODE, &show_ip_bgp_ipv4_prefix_longer_cmd); install_element (VIEW_NODE, &show_ip_bgp_ipv4_prefix_longer_cmd);
install_element (VIEW_NODE, &show_ip_bgp_neighbor_advertised_route_cmd); install_element (VIEW_NODE, &show_ip_bgp_neighbor_advertised_route_cmd);
install_element (VIEW_NODE, &show_ip_bgp_neighbor_advertised_route_rmap_cmd);
install_element (VIEW_NODE, &show_ip_bgp_neighbor_advertised_route_csv_cmd); install_element (VIEW_NODE, &show_ip_bgp_neighbor_advertised_route_csv_cmd);
install_element (VIEW_NODE, &show_ip_bgp_neighbor_advertised_route_csv_rmap_cmd);
install_element (VIEW_NODE, &show_ip_bgp_ipv4_neighbor_advertised_route_cmd); install_element (VIEW_NODE, &show_ip_bgp_ipv4_neighbor_advertised_route_cmd);
install_element (VIEW_NODE, &show_ip_bgp_ipv4_neighbor_advertised_route_rmap_cmd);
install_element (VIEW_NODE, &show_ip_bgp_neighbor_received_routes_cmd); install_element (VIEW_NODE, &show_ip_bgp_neighbor_received_routes_cmd);
install_element (VIEW_NODE, &show_ip_bgp_neighbor_received_routes_rmap_cmd);
install_element (VIEW_NODE, &show_ip_bgp_ipv4_neighbor_received_routes_cmd); install_element (VIEW_NODE, &show_ip_bgp_ipv4_neighbor_received_routes_cmd);
install_element (VIEW_NODE, &show_ip_bgp_ipv4_neighbor_received_routes_rmap_cmd);
install_element (VIEW_NODE, &show_bgp_view_afi_safi_neighbor_adv_recd_routes_cmd); install_element (VIEW_NODE, &show_bgp_view_afi_safi_neighbor_adv_recd_routes_cmd);
install_element (VIEW_NODE, &show_ip_bgp_neighbor_routes_cmd); install_element (VIEW_NODE, &show_ip_bgp_neighbor_routes_cmd);
install_element (VIEW_NODE, &show_ip_bgp_neighbor_routes_csv_cmd); install_element (VIEW_NODE, &show_ip_bgp_neighbor_routes_csv_cmd);
@ -13200,9 +13510,14 @@ bgp_route_init (void)
install_element (ENABLE_NODE, &show_ip_bgp_ipv4_prefix_longer_cmd); install_element (ENABLE_NODE, &show_ip_bgp_ipv4_prefix_longer_cmd);
install_element (ENABLE_NODE, &show_ip_bgp_neighbor_advertised_route_cmd); install_element (ENABLE_NODE, &show_ip_bgp_neighbor_advertised_route_cmd);
install_element (ENABLE_NODE, &show_ip_bgp_neighbor_advertised_route_csv_cmd); install_element (ENABLE_NODE, &show_ip_bgp_neighbor_advertised_route_csv_cmd);
install_element (ENABLE_NODE, &show_ip_bgp_neighbor_advertised_route_rmap_cmd);
install_element (ENABLE_NODE, &show_ip_bgp_neighbor_advertised_route_csv_rmap_cmd);
install_element (ENABLE_NODE, &show_ip_bgp_ipv4_neighbor_advertised_route_cmd); install_element (ENABLE_NODE, &show_ip_bgp_ipv4_neighbor_advertised_route_cmd);
install_element (ENABLE_NODE, &show_ip_bgp_ipv4_neighbor_advertised_route_rmap_cmd);
install_element (ENABLE_NODE, &show_ip_bgp_neighbor_received_routes_cmd); install_element (ENABLE_NODE, &show_ip_bgp_neighbor_received_routes_cmd);
install_element (ENABLE_NODE, &show_ip_bgp_neighbor_received_routes_rmap_cmd);
install_element (ENABLE_NODE, &show_ip_bgp_ipv4_neighbor_received_routes_cmd); install_element (ENABLE_NODE, &show_ip_bgp_ipv4_neighbor_received_routes_cmd);
install_element (ENABLE_NODE, &show_ip_bgp_ipv4_neighbor_received_routes_rmap_cmd);
install_element (ENABLE_NODE, &show_bgp_view_afi_safi_neighbor_adv_recd_routes_cmd); install_element (ENABLE_NODE, &show_bgp_view_afi_safi_neighbor_adv_recd_routes_cmd);
install_element (ENABLE_NODE, &show_ip_bgp_neighbor_routes_cmd); install_element (ENABLE_NODE, &show_ip_bgp_neighbor_routes_cmd);
install_element (ENABLE_NODE, &show_ip_bgp_neighbor_routes_csv_cmd); install_element (ENABLE_NODE, &show_ip_bgp_neighbor_routes_csv_cmd);