Skip to content

Commit

Permalink
zebra: Fix ip protocol route-map issue.
Browse files Browse the repository at this point in the history
"ip/ipv6 protocol any route-map <route map>" cli is setting
wrong route type ( ZEBRA_ROUTE_MAX ), It should set route type
ZEBRA_ROUTE_ALL.

Ticket: #4101560

Signed-off-by: Sougata Barik <[email protected]>
  • Loading branch information
sougata-github-nvidia committed Dec 26, 2024
1 parent 172a2aa commit d0a47a3
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 20 deletions.
2 changes: 1 addition & 1 deletion lib/route_types.txt
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ ZEBRA_ROUTE_VRRP, vrrp, vrrpd, '-', 0, 0, 0, "VRRP", vr
ZEBRA_ROUTE_NHG, zebra, none, '-', 0, 0, 0, "Nexthop Group", none
ZEBRA_ROUTE_SRTE, srte, none, '-', 0, 0, 0, "SR-TE", none
ZEBRA_ROUTE_TABLE_DIRECT, table-direct, zebra, 't', 1, 1, 1, "Table-Direct", zebra
ZEBRA_ROUTE_ALL, wildcard, none, '-', 0, 0, 0, "-", none
ZEBRA_ROUTE_ALL, any, none, '-', 0, 0, 0, "-", none


## help strings
Expand Down
14 changes: 14 additions & 0 deletions tests/topotests/bgp_suppress_fib/test_bgp_suppress_fib.py
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,20 @@ def test_local_vs_non_local():
assert False, "Route 60.0.0.0/24 should not have fibPending"


def test_ip_protocol_any_fib_filter():
# "Filtered route of source protocol any should not get installed in fib"

tgen = get_topogen()

if tgen.routers_have_failure():
pytest.skip(tgen.errors)

r2 = tgen.gears["r2"]
r2.vtysh_cmd("conf\nno ip protocol bgp")
r2.vtysh_cmd("conf\nip protocol any route-map LIMIT")
test_bgp_route()


if __name__ == "__main__":
args = ["-s"] + sys.argv[1:]
sys.exit(pytest.main(args))
15 changes: 3 additions & 12 deletions zebra/zebra_nb_config.c
Original file line number Diff line number Diff line change
Expand Up @@ -3375,10 +3375,7 @@ int lib_vrf_zebra_filter_protocol_create(struct nb_cb_create_args *args)
const char *proto = yang_dnode_get_string(args->dnode, "protocol");
int rtype;

if (strcasecmp(proto, "any") == 0)
rtype = ZEBRA_ROUTE_MAX;
else
rtype = proto_name2num(proto);
rtype = proto_name2num(proto);

if (args->event == NB_EV_VALIDATE)
if (rtype < 0) {
Expand All @@ -3404,10 +3401,7 @@ int lib_vrf_zebra_filter_protocol_destroy(struct nb_cb_destroy_args *args)

yang_afi_safi_identity2value(afi_safi, &afi, &safi);

if (strcasecmp(proto, "any") == 0)
rtype = ZEBRA_ROUTE_MAX;
else
rtype = proto_name2num(proto);
rtype = proto_name2num(proto);

/* deleting an existing entry, it can't be invalid */
assert(rtype >= 0);
Expand Down Expand Up @@ -3435,10 +3429,7 @@ void lib_vrf_zebra_filter_protocol_apply_finish(

yang_afi_safi_identity2value(afi_safi, &afi, &safi);

if (strcasecmp(proto, "any") == 0)
rtype = ZEBRA_ROUTE_MAX;
else
rtype = proto_name2num(proto);
rtype = proto_name2num(proto);

/* finishing apply for a validated entry, it can't be invalid */
assert(rtype >= 0);
Expand Down
9 changes: 2 additions & 7 deletions zebra/zebra_routemap.c
Original file line number Diff line number Diff line change
Expand Up @@ -114,11 +114,6 @@ static void show_vrf_proto_rm(struct vty *vty, struct zebra_vrf *zvrf,
vty_out(vty, "%-24s : none\n", zebra_route_string(i));
}

if (PROTO_RM_NAME(zvrf, af_type, i))
vty_out(vty, "%-24s : %-10s\n", "any",
PROTO_RM_NAME(zvrf, af_type, i));
else
vty_out(vty, "%-24s : none\n", "any");
}

static void show_vrf_nht_rm(struct vty *vty, struct zebra_vrf *zvrf,
Expand Down Expand Up @@ -1222,8 +1217,8 @@ route_map_result_t zebra_route_map_check(afi_t family, struct route_entry *re,
return RMAP_DENYMATCH;
}
if (!rmap) {
rm_name = PROTO_RM_NAME(zvrf, family, ZEBRA_ROUTE_MAX);
rmap = PROTO_RM_MAP(zvrf, family, ZEBRA_ROUTE_MAX);
rm_name = PROTO_RM_NAME(zvrf, family, ZEBRA_ROUTE_ALL);
rmap = PROTO_RM_MAP(zvrf, family, ZEBRA_ROUTE_ALL);

if (rm_name && !rmap)
return RMAP_DENYMATCH;
Expand Down

0 comments on commit d0a47a3

Please sign in to comment.