Skip to content

Commit

Permalink
Merge pull request #15039 from FRRouting/mergify/bp/stable/9.1/pr-15032
Browse files Browse the repository at this point in the history
bgpd: "default-originate" shouldn't withdraw non-default routes (backport #15032)
  • Loading branch information
donaldsharp authored Dec 18, 2023
2 parents 80ce05d + 2330ed6 commit 30f4de3
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 8 deletions.
4 changes: 1 addition & 3 deletions bgpd/bgp_route.c
Original file line number Diff line number Diff line change
Expand Up @@ -2162,9 +2162,7 @@ bool subgroup_announce_check(struct bgp_dest *dest, struct bgp_path_info *pi,
* configured for default-originate */
if (CHECK_FLAG(peer->af_flags[afi][safi],
PEER_FLAG_DEFAULT_ORIGINATE)) {
if (p->family == AF_INET && p->u.prefix4.s_addr == INADDR_ANY)
return false;
else if (p->family == AF_INET6 && p->prefixlen == 0)
if ((p->family == AF_INET || p->family == AF_INET6) && p->prefixlen == 0)
return false;
}

Expand Down
1 change: 1 addition & 0 deletions tests/topotests/bgp_default_route/r1/bgpd.conf
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ router bgp 65000
neighbor 192.168.255.2 remote-as 65001
neighbor 192.168.255.2 timers 3 10
address-family ipv4 unicast
network 0.0.0.0/1
neighbor 192.168.255.2 default-originate
exit-address-family
!
2 changes: 2 additions & 0 deletions tests/topotests/bgp_default_route/r1/zebra.conf
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
!
ip route 0.0.0.0/1 blackhole
!
interface lo
ip address 172.16.255.254/32
!
Expand Down
14 changes: 9 additions & 5 deletions tests/topotests/bgp_default_route/test_bgp_default-originate.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,18 +69,18 @@ def _bgp_check_if_received():
expected = {
"192.168.255.1": {
"bgpState": "Established",
"addressFamilyInfo": {"ipv4Unicast": {"acceptedPrefixCounter": 1}},
"addressFamilyInfo": {"ipv4Unicast": {"acceptedPrefixCounter": 2}},
}
}
return topotest.json_cmp(output, expected)

def _bgp_check_if_originated():
output = json.loads(tgen.gears["r1"].vtysh_cmd("show ip bgp summary json"))
expected = {"ipv4Unicast": {"peers": {"192.168.255.2": {"pfxSnt": 1}}}}
expected = {"ipv4Unicast": {"peers": {"192.168.255.2": {"pfxSnt": 2}}}}
return topotest.json_cmp(output, expected)

def _bgp_default_route_is_valid(router):
output = json.loads(router.vtysh_cmd("show ip bgp 0.0.0.0/0 json"))
def _bgp_route_is_valid(router, prefix):
output = json.loads(router.vtysh_cmd("show ip bgp {} json".format(prefix)))
expected = {"paths": [{"valid": True}]}
return topotest.json_cmp(output, expected)

Expand All @@ -92,10 +92,14 @@ def _bgp_default_route_is_valid(router):
success, result = topotest.run_and_expect(test_func, None, count=30, wait=0.5)
assert result is None, "No 0.0.0.0/0 from r1 to r2"

test_func = functools.partial(_bgp_default_route_is_valid, tgen.gears["r2"])
test_func = functools.partial(_bgp_route_is_valid, tgen.gears["r2"], "0.0.0.0/0")
success, result = topotest.run_and_expect(test_func, None, count=30, wait=0.5)
assert result is None, "Failed to see 0.0.0.0/0 in r2"

test_func = functools.partial(_bgp_route_is_valid, tgen.gears["r2"], "0.0.0.0/1")
success, result = topotest.run_and_expect(test_func, None, count=30, wait=0.5)
assert result is None, "Failed to see 0.0.0.0/1 in r2"


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

0 comments on commit 30f4de3

Please sign in to comment.