diff options
author | Mitesh Kanjariya <mitesh@marvel-07.cumulusnetworks.com> | 2018-02-22 07:02:07 +0100 |
---|---|---|
committer | mitesh <mitesh@cumulusnetworks.com> | 2018-02-23 02:42:07 +0100 |
commit | 6fb219da876ace4732e31005466cae708e512d42 (patch) | |
tree | aad1da60762b171ad6adf537586ed4f59f6780a9 /bgpd/bgp_routemap.c | |
parent | bgpd: support for default-originate type-5 route (diff) | |
download | frr-6fb219da876ace4732e31005466cae708e512d42.tar.xz frr-6fb219da876ace4732e31005466cae708e512d42.zip |
bgpd: provide a match clause to match EVPN default route
A Border Leaf can originate a default route
for all the leafs within the POD.
However, we do not want to advertise this route outside the POD.
Therefore, we provide an option
to filter a EVPN type5 default route through a route-map.
Signed-off-by: Mitesh Kanjariya <mitesh@cumulusnetworks.com>
Diffstat (limited to 'bgpd/bgp_routemap.c')
-rw-r--r-- | bgpd/bgp_routemap.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/bgpd/bgp_routemap.c b/bgpd/bgp_routemap.c index 4d5624d3b..b3cd4b7af 100644 --- a/bgpd/bgp_routemap.c +++ b/bgpd/bgp_routemap.c @@ -594,6 +594,24 @@ struct route_map_rule_cmd route_match_ip_route_source_prefix_list_cmd = { route_match_ip_route_source_prefix_list_compile, route_match_ip_route_source_prefix_list_free}; +/* `match evpn default-route' */ + +/* Match function should return 1 if match is success else 0 */ +static route_map_result_t route_match_evpn_default_route(void *rule, + struct prefix *p, + route_map_object_t + type, void *object) +{ + if (type == RMAP_BGP && is_evpn_prefix_default(p)) + return RMAP_MATCH; + + return RMAP_NOMATCH; +} + +/* Route map commands for default-route matching. */ +struct route_map_rule_cmd route_match_evpn_default_route_cmd = { + "evpn default-route", route_match_evpn_default_route, NULL, NULL}; + /* `match mac address MAC_ACCESS_LIST' */ /* Match function should return 1 if match is success else return @@ -3249,6 +3267,29 @@ DEFUN (no_match_evpn_vni, RMAP_EVENT_MATCH_DELETED); } +DEFUN (match_evpn_default_route, + match_evpn_default_route_cmd, + "match evpn default-route", + MATCH_STR + EVPN_HELP_STR + "default EVPN type-5 route\n") +{ + return bgp_route_match_add(vty, "evpn default-route", NULL, + RMAP_EVENT_MATCH_ADDED); +} + +DEFUN (no_match_evpn_default_route, + no_match_evpn_default_route_cmd, + "no match evpn default-route", + NO_STR + MATCH_STR + EVPN_HELP_STR + "default EVPN type-5 route\n") +{ + return bgp_route_match_delete(vty, "evpn default-route", NULL, + RMAP_EVENT_MATCH_DELETED); +} + DEFUN (match_peer, match_peer_cmd, "match peer <A.B.C.D|X:X::X:X|WORD>", @@ -4628,6 +4669,7 @@ void bgp_route_map_init(void) route_map_install_match(&route_match_mac_address_cmd); route_map_install_match(&route_match_evpn_vni_cmd); route_map_install_match(&route_match_evpn_route_type_cmd); + route_map_install_match(&route_match_evpn_default_route_cmd); route_map_install_set(&route_set_ip_nexthop_cmd); route_map_install_set(&route_set_local_pref_cmd); @@ -4664,6 +4706,8 @@ void bgp_route_map_init(void) install_element(RMAP_NODE, &no_match_evpn_vni_cmd); install_element(RMAP_NODE, &match_evpn_route_type_cmd); install_element(RMAP_NODE, &no_match_evpn_route_type_cmd); + install_element(RMAP_NODE, &match_evpn_default_route_cmd); + install_element(RMAP_NODE, &no_match_evpn_default_route_cmd); install_element(RMAP_NODE, &match_aspath_cmd); install_element(RMAP_NODE, &no_match_aspath_cmd); |