mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-07-22 11:53:18 +00:00
Merge pull request #17397 from FRRouting/mergify/bp/stable/10.2/pr-17362
bgpd: Fix for match source-protocol in route-map for redistribute cmd (backport #17362)
This commit is contained in:
commit
026f0ddb69
@ -9043,6 +9043,7 @@ void bgp_redistribute_add(struct bgp *bgp, struct prefix *p,
|
|||||||
memset(&rmap_path, 0, sizeof(rmap_path));
|
memset(&rmap_path, 0, sizeof(rmap_path));
|
||||||
rmap_path.peer = bgp->peer_self;
|
rmap_path.peer = bgp->peer_self;
|
||||||
rmap_path.attr = &attr_new;
|
rmap_path.attr = &attr_new;
|
||||||
|
rmap_path.type = type;
|
||||||
|
|
||||||
SET_FLAG(bgp->peer_self->rmap_type,
|
SET_FLAG(bgp->peer_self->rmap_type,
|
||||||
PEER_RMAP_TYPE_REDISTRIBUTE);
|
PEER_RMAP_TYPE_REDISTRIBUTE);
|
||||||
|
@ -22,7 +22,7 @@ sys.path.append(os.path.join(CWD, "../"))
|
|||||||
|
|
||||||
# pylint: disable=C0413
|
# pylint: disable=C0413
|
||||||
from lib import topotest
|
from lib import topotest
|
||||||
from lib.topogen import Topogen, get_topogen
|
from lib.topogen import Topogen, TopoRouter, get_topogen
|
||||||
|
|
||||||
pytestmark = [pytest.mark.bgpd]
|
pytestmark = [pytest.mark.bgpd]
|
||||||
|
|
||||||
@ -47,7 +47,14 @@ def setup_module(mod):
|
|||||||
router_list = tgen.routers()
|
router_list = tgen.routers()
|
||||||
|
|
||||||
for _, (rname, router) in enumerate(router_list.items(), 1):
|
for _, (rname, router) in enumerate(router_list.items(), 1):
|
||||||
router.load_frr_config(os.path.join(CWD, "{}/frr.conf".format(rname)))
|
router.load_frr_config(
|
||||||
|
os.path.join(CWD, "{}/frr.conf".format(rname)),
|
||||||
|
[
|
||||||
|
(TopoRouter.RD_ZEBRA, None),
|
||||||
|
(TopoRouter.RD_SHARP, None),
|
||||||
|
(TopoRouter.RD_BGP, None),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
tgen.start_router()
|
tgen.start_router()
|
||||||
|
|
||||||
@ -109,6 +116,68 @@ def test_bgp_route_map_match_source_protocol():
|
|||||||
_, result = topotest.run_and_expect(test_func, None, count=30, wait=1)
|
_, 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"
|
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__":
|
if __name__ == "__main__":
|
||||||
args = ["-s"] + sys.argv[1:]
|
args = ["-s"] + sys.argv[1:]
|
||||||
|
Loading…
Reference in New Issue
Block a user