summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDonatas Abraitis <donatas@opensourcerouting.org>2024-02-15 12:07:43 +0200
committerDonatas Abraitis <donatas@opensourcerouting.org>2024-02-23 09:34:05 +0200
commit80c85dedb9186467e156cdbaeb8e34588c9035f7 (patch)
tree37a521cc501dade2e9b02c8d5a752e2b89160853 /lib
parentac6a3bfc787d9c312aa22076c26d6ce1d2f21460 (diff)
lib: Do not convert EVPN prefixes into IPv4/IPv6 if not needed
Convert only when this is really needed, e.g. `match ip address prefix-list ...`. Otherwise, we can't have mixed match clauses, like: ``` match ip address prefix-list p1 match evpn route-type prefix ``` This won't work, because the prefix is already converted, and we can't extract route type, vni, etc. from the original EVPN prefix. Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org> (cherry picked from commit 439b739495e86912c8b9ec36b84e55311c549ba0)
Diffstat (limited to 'lib')
-rw-r--r--lib/routemap.c29
1 files changed, 5 insertions, 24 deletions
diff --git a/lib/routemap.c b/lib/routemap.c
index e8a92cda0b..fcf1b204a1 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) {