diff options
Diffstat (limited to 'lib/routemap.c')
| -rw-r--r-- | lib/routemap.c | 32 |
1 files changed, 25 insertions, 7 deletions
diff --git a/lib/routemap.c b/lib/routemap.c index 3cc010c148..44d7185567 100644 --- a/lib/routemap.c +++ b/lib/routemap.c @@ -1815,7 +1815,24 @@ route_map_get_index(struct route_map *map, const struct prefix *prefix, struct route_map_index *index = NULL, *best_index = NULL; struct route_map_index *head_index = NULL; struct route_table *table = NULL; - unsigned char family = prefix->family; + struct prefix conv; + unsigned char family; + + /* + * 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) + return NULL; + + prefix = &conv; + } + + + family = prefix->family; if (family == AF_INET) table = map->ipv4_prefix_table; @@ -1890,12 +1907,7 @@ route_map_get_index(struct route_map *map, const struct prefix *prefix, static int route_map_candidate_list_cmp(struct route_map_index *idx1, struct route_map_index *idx2) { - if (!idx1) - return -1; - if (!idx2) - return 1; - - return (idx1->pref - idx2->pref); + return idx1->pref - idx2->pref; } /* @@ -3174,6 +3186,12 @@ static struct cmd_node rmap_debug_node = { .config_write = rmap_config_write_debug, }; +void route_map_show_debug(struct vty *vty) +{ + if (rmap_debug) + vty_out(vty, "debug route-map\n"); +} + /* Configuration write function. */ static int rmap_config_write_debug(struct vty *vty) { |
