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: Prevent USE case for conditional advertisements with set actions #14845

Merged
Merged
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
3 changes: 2 additions & 1 deletion bgpd/bgp_conditional_adv.c
Original file line number Diff line number Diff line change
Expand Up @@ -141,8 +141,9 @@ static void bgp_conditional_adv_routes(struct peer *peer, afi_t afi,
bgp_addpath_id_for_peer(
peer, afi, safi,
&pi->tx_addpath));

bgp_attr_flush(&advmap_attr);
}
bgp_attr_flush(&advmap_attr);
}
}
UNSET_FLAG(subgrp->sflags, SUBGRP_STATUS_TABLE_REPARSING);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,5 @@ route-map exist-map permit 10
!
route-map advertise-map permit 10
match ip address prefix-list advertise
set community 65000:1
!
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ def test_bgp_conditional_advertisements_static_route():
if tgen.routers_have_failure():
pytest.skip(tgen.errors)

r1 = tgen.gears["r1"]
r2 = tgen.gears["r2"]

def _bgp_converge():
Expand Down Expand Up @@ -112,6 +113,25 @@ def _bgp_check_advertised_after_update():
_, result = topotest.run_and_expect(test_func, None, count=30, wait=1)
assert result is None, "10.10.10.2/32 is not advertised after prefix-list update"

def _bgp_check_received_routes():
output = json.loads(r1.vtysh_cmd("show bgp ipv4 unicast 10.10.10.1/32 json"))
expected = {
"paths": [
{
"community": {
"string": "65000:1",
}
}
]
}
return topotest.json_cmp(output, expected)

test_func = functools.partial(
_bgp_check_received_routes,
)
_, result = topotest.run_and_expect(test_func, None, count=30, wait=1)
assert result is None, "10.10.10.1/32 does not have 65000:1 community attached"


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