Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bgpd: Fix for match source-protocol in route-map for redistribute cmd (backport #17362) #17398

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions bgpd/bgp_route.c
Original file line number Diff line number Diff line change
Expand Up @@ -8963,6 +8963,7 @@ void bgp_redistribute_add(struct bgp *bgp, struct prefix *p,
memset(&rmap_path, 0, sizeof(rmap_path));
rmap_path.peer = bgp->peer_self;
rmap_path.attr = &attr_new;
rmap_path.type = type;

SET_FLAG(bgp->peer_self->rmap_type,
PEER_RMAP_TYPE_REDISTRIBUTE);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,20 @@ def setup_module(mod):

router_list = tgen.routers()

<<<<<<< HEAD
for i, (rname, router) in enumerate(router_list.items(), 1):
router.load_frr_config(os.path.join(CWD, "{}/frr.conf".format(rname)))
=======
for _, (rname, router) in enumerate(router_list.items(), 1):
router.load_frr_config(
os.path.join(CWD, "{}/frr.conf".format(rname)),
[
(TopoRouter.RD_ZEBRA, None),
(TopoRouter.RD_SHARP, None),
(TopoRouter.RD_BGP, None),
],
)
>>>>>>> 68358c0f92 (bgpd: Fix for match source-protocol in route-map for redistribute cmd)

tgen.start_router()

Expand Down Expand Up @@ -109,6 +121,68 @@ def _bgp_check_advertised_routes_r3():
_, result = topotest.run_and_expect(test_func, None, count=30, wait=1)
assert result is None, "Failed to filter routes by source-protocol for r3"

def _bgp_check_advertised_routes_r4():
# Remove match source-protocol towards Nbr out policy for Nbr 192.168.1.2 so it receives all routes
tgen.gears["r1"].vtysh_cmd(
"""
configure terminal
route-map r2 permit 10
no match source-protocol
"""
)

tgen.gears["r1"].vtysh_cmd(
"sharp install route 192.168.11.0 nexthop 172.16.255.1 5"
)

# Configure a r4 with source protocol sharp and apply it to all redistribute cmds
tgen.gears["r1"].vtysh_cmd(
"""
configure terminal
route-map r4 permit 10
match source-protocol sharp
router bgp 65001
address-family ipv4 unicast
redistribute connected route-map r4
redistribute static route-map r4
redistribute sharp route-map r4
"""
)

# Since match protocol is sharp, only sharp protocol routes are to be advertised
output = json.loads(
tgen.gears["r1"].vtysh_cmd(
"show bgp ipv4 unicast neighbors 192.168.1.2 advertised-routes json"
)
)

expected = {
"advertisedRoutes": {
"192.168.11.0/32": {
"valid": True,
},
"192.168.11.1/32": {
"valid": True,
},
"192.168.11.2/32": {
"valid": True,
},
"192.168.11.3/32": {
"valid": True,
},
"192.168.11.4/32": {
"valid": True,
},
},
"totalPrefixCounter": 5,
}

return topotest.json_cmp(output, expected)

test_func = functools.partial(_bgp_check_advertised_routes_r4)
_, result = topotest.run_and_expect(test_func, None, count=30, wait=1)
assert result is None, "Failed to match the source-protocol for redistribute cmds"


if __name__ == "__main__":
args = ["-s"] + sys.argv[1:]
Expand Down
Loading