Skip to content

Commit

Permalink
zebra: deny when route map is specified but does not exist yet
Browse files Browse the repository at this point in the history
If we have `ip protocol <proto> route-map FOO` and FOO has
not been defined in any way shape fashion or form, we
should deny the match instead of permitting it.

Signed-off-by: Donald Sharp <[email protected]>
  • Loading branch information
donaldsharp committed Nov 14, 2020
1 parent 15675d0 commit fd303a4
Showing 1 changed file with 13 additions and 2 deletions.
15 changes: 13 additions & 2 deletions zebra/zebra_routemap.c
Original file line number Diff line number Diff line change
Expand Up @@ -1723,6 +1723,7 @@ zebra_route_map_check(int family, int rib_type, uint8_t instance,
struct zebra_vrf *zvrf, route_tag_t tag)
{
struct route_map *rmap = NULL;
char *rm_name;
route_map_result_t ret = RMAP_PERMITMATCH;
struct nh_rmap_obj nh_obj;

Expand All @@ -1733,10 +1734,20 @@ zebra_route_map_check(int family, int rib_type, uint8_t instance,
nh_obj.metric = 0;
nh_obj.tag = tag;

if (rib_type >= 0 && rib_type < ZEBRA_ROUTE_MAX)
if (rib_type >= 0 && rib_type < ZEBRA_ROUTE_MAX) {
rm_name = PROTO_RM_NAME(zvrf, family, rib_type);
rmap = PROTO_RM_MAP(zvrf, family, rib_type);
if (!rmap && PROTO_RM_NAME(zvrf, family, ZEBRA_ROUTE_MAX))

if (rm_name && !rmap)
return RMAP_DENYMATCH;
}
if (!rmap) {
rm_name = PROTO_RM_NAME(zvrf, family, ZEBRA_ROUTE_MAX);
rmap = PROTO_RM_MAP(zvrf, family, ZEBRA_ROUTE_MAX);

if (rm_name && !rmap)
return RMAP_DENYMATCH;
}
if (rmap) {
ret = route_map_apply(rmap, p, RMAP_ZEBRA, &nh_obj);
}
Expand Down

0 comments on commit fd303a4

Please sign in to comment.