diff --git a/lib/routemap.c b/lib/routemap.c index 6b3f81b4d41b..ea917ebd8c73 100644 --- a/lib/routemap.c +++ b/lib/routemap.c @@ -2548,7 +2548,6 @@ route_map_result_t route_map_apply_ext(struct route_map *map, struct route_map_index *index = NULL; struct route_map_rule *set = NULL; bool skip_match_clause = false; - struct prefix conv; if (recursion > RMAP_RECURSION_LIMIT) { if (map) @@ -2571,31 +2570,14 @@ route_map_result_t route_map_apply_ext(struct route_map *map, map->applied++; - /* - * Handling for matching evpn_routes in the prefix table. - * - * We convert type2/5 prefix to ipv4/6 prefix to do longest - * prefix matching on. - */ if (prefix->family == AF_EVPN) { - if (evpn_prefix2prefix(prefix, &conv) != 0) { - if (unlikely(CHECK_FLAG(rmap_debug, - DEBUG_ROUTEMAP_DETAIL))) - zlog_debug( - "Unable to convert EVPN prefix %pFX into IPv4/IPv6 prefix. Falling back to non-optimized route-map lookup", - prefix); - } else { - if (unlikely(CHECK_FLAG(rmap_debug, - DEBUG_ROUTEMAP_DETAIL))) - zlog_debug( - "Converted EVPN prefix %pFX into %pFX for optimized route-map lookup", - prefix, &conv); - - prefix = &conv; - } + index = map->head; + } else { + skip_match_clause = true; + index = route_map_get_index(map, prefix, match_object, + &match_ret); } - index = route_map_get_index(map, prefix, match_object, &match_ret); if (index) { index->applied++; if (unlikely(CHECK_FLAG(rmap_debug, DEBUG_ROUTEMAP))) @@ -2619,7 +2601,6 @@ route_map_result_t route_map_apply_ext(struct route_map *map, ret = RMAP_DENYMATCH; goto route_map_apply_end; } - skip_match_clause = true; for (; index; index = index->next) { if (!skip_match_clause) { diff --git a/tests/topotests/bgp_evpn_route_map_match/r1/frr.conf b/tests/topotests/bgp_evpn_route_map_match/r1/frr.conf index 33353a61f11d..4347052c5e75 100644 --- a/tests/topotests/bgp_evpn_route_map_match/r1/frr.conf +++ b/tests/topotests/bgp_evpn_route_map_match/r1/frr.conf @@ -1,5 +1,8 @@ ! !debug bgp neighbor +!debug route-map detail +! +vni 10 ! int lo ip address 10.10.10.1/32 @@ -9,22 +12,33 @@ int r1-eth1 ! router bgp 65001 no bgp ebgp-requires-policy + no bgp network import-check neighbor 192.168.1.2 remote-as external neighbor 192.168.1.2 timers 1 3 neighbor 192.168.1.2 timers connect 1 ! address-family ipv4 unicast redistribute connected + network 10.10.10.10/32 exit-address-family ! address-family l2vpn evpn neighbor 192.168.1.2 activate neighbor 192.168.1.2 route-map r2 out advertise-all-vni + advertise ipv4 unicast exit-address-family ! route-map r2 deny 10 match evpn route-type macip ! -route-map r2 permit 20 +route-map r2 deny 20 + match ip address prefix-list pl + match evpn route-type prefix +! +route-map r2 permit 30 +! +ip prefix-list pl seq 5 permit 192.168.1.0/24 +ip prefix-list pl seq 10 permit 10.10.10.1/32 +ip prefix-list pl seq 15 permit 10.10.10.2/32 ! diff --git a/tests/topotests/bgp_evpn_route_map_match/test_bgp_evpn_route_map_match.py b/tests/topotests/bgp_evpn_route_map_match/test_bgp_evpn_route_map_match.py index 18e25d56744d..5781684a88d8 100644 --- a/tests/topotests/bgp_evpn_route_map_match/test_bgp_evpn_route_map_match.py +++ b/tests/topotests/bgp_evpn_route_map_match/test_bgp_evpn_route_map_match.py @@ -83,8 +83,8 @@ def _bgp_converge(): ) expected = { "advertisedRoutes": { - "10.10.10.1:2": { - "[3]:[0]:[32]:[10.10.10.1]": { + "10.10.10.1:1": { + "[5]:[0]:[32]:[10.10.10.10]": { "valid": True, } }, @@ -102,7 +102,7 @@ def _bgp_converge(): _bgp_converge, ) _, result = topotest.run_and_expect(test_func, None, count=60, wait=1) - assert result is None, "MAC-IP EVPN routes should not be advertised" + assert result is None, "Filtered EVPN routes should not be advertised" if __name__ == "__main__":