summaryrefslogtreecommitdiffstats
path: root/bgpd
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@cumulusnetworks.com>2015-05-20 02:40:45 +0200
committerDonald Sharp <sharpd@cumulusnetworks.com>2015-05-20 02:40:45 +0200
commit0b16f23991a9ec2b555816e3798546b2c357ce9c (patch)
treeb8d440dea1372b043dbbb2119a873614e68d05b8 /bgpd
parentbgpd: bgpd-event-driven-route-map-updates.patch (diff)
downloadfrr-0b16f23991a9ec2b555816e3798546b2c357ce9c.tar.xz
frr-0b16f23991a9ec2b555816e3798546b2c357ce9c.zip
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>
Diffstat (limited to '')
-rw-r--r--bgpd/bgp_route.c467
1 files changed, 391 insertions, 76 deletions
diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c
index 3fb6e1cd4..da9903a2a 100644
--- a/bgpd/bgp_route.c
+++ b/bgpd/bgp_route.c
@@ -698,11 +698,12 @@ bgp_cluster_filter (struct peer *peer, struct attr *attr)
static int
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_info info;
route_map_result_t ret;
+ struct route_map *rmap = NULL;
filter = &peer->filter[afi][safi];
@@ -710,8 +711,18 @@ bgp_input_modifier (struct peer *peer, struct prefix *p, struct attr *attr,
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_IN_NAME(filter))
+ rmap = ROUTE_MAP_IN (filter);
+ }
+
/* Route map apply. */
- if (ROUTE_MAP_IN_NAME (filter))
+ if (rmap)
{
/* Duplicate current value to new strucutre for modification. */
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);
/* 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;
@@ -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"
* commands, so we need bgp_attr_flush in the error paths, until we intern
* 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;";
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);
}
-
static void
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_adj_in *ain;
struct bgp_adj_out *adj;
unsigned long output_count;
+ unsigned long filtered_count;
struct bgp_node *rn;
int header1 = 1;
struct bgp *bgp;
int header2 = 1;
+ struct attr attr;
+ struct attr_extra extra;
+ int ret;
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];
- output_count = 0;
+ output_count = filtered_count = 0;
if (! in && CHECK_FLAG (peer->af_sflags[afi][safi],
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;
}
+ attr.extra = &extra;
for (rn = bgp_table_top (table); rn; rn = bgp_route_next (rn))
if (in)
{
@@ -10146,8 +10210,15 @@ show_adj_route (struct vty *vty, struct peer *peer, afi_t afi, safi_t safi,
}
if (ain->attr)
{
- route_vty_out_tmp (vty, &rn->p, ain->attr, safi, delim);
- output_count++;
+ 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++;
+ }
+ else
+ filtered_count++;
}
}
}
@@ -10173,8 +10244,25 @@ show_adj_route (struct vty *vty, struct peer *peer, afi_t afi, safi_t safi,
}
if (adj->attr)
{
- route_vty_out_tmp (vty, &rn->p, adj->attr, safi, delim);
- output_count++;
+ 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++;
+ }
+ else
+ filtered_count++;
}
}
}
@@ -10186,7 +10274,7 @@ show_adj_route (struct vty *vty, struct peer *peer, afi_t afi, safi_t safi,
static int
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])
{
@@ -10201,7 +10289,17 @@ peer_adj_routes (struct vty *vty, struct peer *peer, afi_t afi, safi_t safi,
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;
}
@@ -10228,11 +10326,11 @@ DEFUN (show_ip_bgp_view_neighbor_advertised_route,
if (! peer)
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 neighbors (A.B.C.D|X:X::X:X|WORD) advertised-routes",
SHOW_STR
@@ -10244,6 +10342,33 @@ ALIAS (show_ip_bgp_view_neighbor_advertised_route,
"Neighbor on bgp configured interface\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,
show_ip_bgp_neighbor_advertised_route_csv_cmd,
"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")
{
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)
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,
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",
@@ -10287,17 +10428,37 @@ DEFUN (show_ip_bgp_ipv4_neighbor_advertised_route,
"Display the routes advertised to a BGP neighbor\n")
{
struct peer *peer;
+ char *rmap_name = NULL;
peer = peer_lookup_in_view (vty, NULL, argv[1]);
if (! peer)
return CMD_WARNING;
+ if (argc == 3)
+ rmap_name = argv[2];
+
if (strncmp (argv[0], "m", 1) == 0)
- return peer_adj_routes (vty, peer, AFI_IP, SAFI_MULTICAST, 0, NULL);
+ 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);
+ 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
DEFUN (show_bgp_view_neighbor_advertised_route,
show_bgp_view_neighbor_advertised_route_cmd,
@@ -10320,11 +10481,25 @@ DEFUN (show_bgp_view_neighbor_advertised_route,
peer = peer_lookup_in_view (vty, NULL, argv[0]);
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,
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",
@@ -10348,23 +10523,9 @@ DEFUN (show_bgp_view_neighbor_advertised_route_csv,
if (! peer)
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,
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",
@@ -10379,60 +10540,58 @@ ALIAS (show_bgp_view_neighbor_advertised_route_csv,
"Neighbor on bgp configured interface\n"
"Display the routes advertised to a BGP neighbor\n")
-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",
+DEFUN (show_bgp_neighbor_advertised_route,
+ show_bgp_neighbor_advertised_route_cmd,
+ "show bgp neighbors (A.B.C.D|X:X::X:X|WORD) advertised-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")
+ "Display the routes advertised to a BGP neighbor\n")
+
{
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)
return CMD_WARNING;
- return peer_adj_routes (vty, peer, AFI_IP6, SAFI_UNICAST, 1, NULL);
+ if (argc == 2)
+ rmap_name = argv[1];
+
+ return peer_adj_routes (vty, peer, AFI_IP6, SAFI_UNICAST, 0, NULL, rmap_name);
}
-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",
+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
- "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")
+ "Display the routes advertised to a BGP neighbor\n")
-ALIAS (show_bgp_view_neighbor_advertised_route,
- show_bgp_neighbor_advertised_route_cmd,
- "show bgp neighbors (A.B.C.D|X:X::X:X|WORD) advertised-routes",
+ALIAS (show_bgp_neighbor_advertised_route,
+ show_bgp_ipv6_neighbor_advertised_route_cmd,
+ "show bgp ipv6 neighbors (A.B.C.D|X:X::X:X|WORD) advertised-routes",
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")
-
-ALIAS (show_bgp_view_neighbor_advertised_route,
- show_bgp_ipv6_neighbor_advertised_route_cmd,
- "show bgp ipv6 neighbors (A.B.C.D|X:X::X:X|WORD) advertised-routes",
+
+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"
@@ -10442,7 +10601,7 @@ ALIAS (show_bgp_view_neighbor_advertised_route,
"Neighbor on bgp configured interface\n"
"Display the routes advertised to a BGP neighbor\n")
-ALIAS (show_bgp_view_neighbor_advertised_route_csv,
+DEFUN (show_bgp_neighbor_advertised_route_csv,
show_bgp_neighbor_advertised_route_csv_cmd,
"show bgp neighbors (A.B.C.D|X:X::X:X|WORD) advertised-routes csv",
SHOW_STR
@@ -10452,8 +10611,33 @@ ALIAS (show_bgp_view_neighbor_advertised_route_csv,
"Neighbor to display information about\n"
"Neighbor on bgp configured interface\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 neighbors (A.B.C.D|X:X::X:X|WORD) advertised-routes csv",
SHOW_STR
@@ -10465,8 +10649,20 @@ ALIAS (show_bgp_view_neighbor_advertised_route_csv,
"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_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 */
-ALIAS (show_bgp_view_neighbor_advertised_route,
+ALIAS (show_bgp_neighbor_advertised_route,
ipv6_bgp_neighbor_advertised_route_cmd,
"show ipv6 bgp neighbors (A.B.C.D|X:X::X:X|WORD) advertised-routes",
SHOW_STR
@@ -10498,10 +10694,36 @@ DEFUN (ipv6_mbgp_neighbor_advertised_route,
if (! peer)
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 */
+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,
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",
@@ -10526,10 +10748,24 @@ DEFUN (show_ip_bgp_view_neighbor_received_routes,
if (! peer)
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 neighbors (A.B.C.D|X:X::X:X|WORD) received-routes",
SHOW_STR
@@ -10541,6 +10777,33 @@ ALIAS (show_ip_bgp_view_neighbor_received_routes,
"Neighbor on bgp configured interface\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,
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",
@@ -10557,17 +10820,36 @@ DEFUN (show_ip_bgp_ipv4_neighbor_received_routes,
"Display the received routes from neighbor\n")
{
struct peer *peer;
+ char *rmap_name = NULL;
peer = peer_lookup_in_view (vty, NULL, argv[1]);
if (! peer)
return CMD_WARNING;
-
+
+ if (argc == 3)
+ rmap_name = argv[2];
+
if (strncmp (argv[0], "m", 1) == 0)
- return peer_adj_routes (vty, peer, AFI_IP, SAFI_MULTICAST, 1, NULL);
+ 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);
+ 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,
show_bgp_view_afi_safi_neighbor_adv_recd_routes_cmd,
#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;
#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,
@@ -10752,6 +11034,29 @@ ALIAS (show_bgp_view_neighbor_received_routes,
"Neighbor on bgp configured interface\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,
show_bgp_neighbor_received_prefix_filter_cmd,
"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)
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,
@@ -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_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_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_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_rmap_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_rmap_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_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_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_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_rmap_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_rmap_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_csv_cmd);