summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bgpd/bgp_route.c2
-rw-r--r--bgpd/bgp_route.h3
-rw-r--r--bgpd/bgp_updgrp.c8
-rw-r--r--bgpd/bgp_updgrp.h2
-rw-r--r--bgpd/bgp_updgrp_adv.c6
-rw-r--r--bgpd/bgpd.c8
-rw-r--r--tests/topotests/bgp_default_route_route_map_set/r1/bgpd.conf23
-rw-r--r--tests/topotests/bgp_default_route_route_map_set/r1/zebra.conf2
-rw-r--r--tests/topotests/bgp_default_route_route_map_set/r2/bgpd.conf14
-rw-r--r--tests/topotests/bgp_default_route_route_map_set/r2/zebra.conf2
-rw-r--r--tests/topotests/bgp_default_route_route_map_set/r3/bgpd.conf8
-rw-r--r--tests/topotests/bgp_default_route_route_map_set/r3/zebra.conf4
-rw-r--r--tests/topotests/bgp_default_route_route_map_set/test_bgp_default-originate_route-map_set.py34
13 files changed, 69 insertions, 47 deletions
diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c
index 227d175ab9..d8c6449325 100644
--- a/bgpd/bgp_route.c
+++ b/bgpd/bgp_route.c
@@ -5164,7 +5164,7 @@ void bgp_withdraw(struct peer *peer, const struct prefix *p,
}
void bgp_default_originate(struct peer *peer, afi_t afi, safi_t safi,
- int withdraw)
+ bool withdraw)
{
struct update_subgroup *subgrp;
subgrp = peer_subgroup(peer, afi, safi);
diff --git a/bgpd/bgp_route.h b/bgpd/bgp_route.h
index ad0cc9eabc..0599e8dce1 100644
--- a/bgpd/bgp_route.h
+++ b/bgpd/bgp_route.h
@@ -707,7 +707,8 @@ extern void bgp_announce_route(struct peer *peer, afi_t afi, safi_t safi,
bool force);
extern void bgp_stop_announce_route_timer(struct peer_af *paf);
extern void bgp_announce_route_all(struct peer *);
-extern void bgp_default_originate(struct peer *, afi_t, safi_t, int);
+extern void bgp_default_originate(struct peer *peer, afi_t afi, safi_t safi,
+ bool withdraw);
extern void bgp_soft_reconfig_table_task_cancel(const struct bgp *bgp,
const struct bgp_table *table,
const struct peer *peer);
diff --git a/bgpd/bgp_updgrp.c b/bgpd/bgp_updgrp.c
index 9eb4433c55..470dfdb3fa 100644
--- a/bgpd/bgp_updgrp.c
+++ b/bgpd/bgp_updgrp.c
@@ -1699,14 +1699,14 @@ static int updgrp_policy_update_walkcb(struct update_group *updgrp, void *arg)
*/
UNSET_FLAG(subgrp->sflags,
SUBGRP_STATUS_DEFAULT_ORIGINATE);
- subgroup_default_originate(subgrp, 0);
+ subgroup_default_originate(subgrp, false);
} else {
/*
* This is a explicit withdraw, since the
* routemap is not present in routemap lib. need
- * to pass 1 for withdraw arg.
+ * to pass `true` for withdraw arg.
*/
- subgroup_default_originate(subgrp, 1);
+ subgroup_default_originate(subgrp, true);
}
}
update_subgroup_set_needs_refresh(subgrp, 0);
@@ -2102,7 +2102,7 @@ update_group_default_originate_route_map_walkcb(struct update_group *updgrp,
*/
UNSET_FLAG(subgrp->sflags,
SUBGRP_STATUS_DEFAULT_ORIGINATE);
- subgroup_default_originate(subgrp, 0);
+ subgroup_default_originate(subgrp, false);
}
}
diff --git a/bgpd/bgp_updgrp.h b/bgpd/bgp_updgrp.h
index 0d866f3be7..7a0d328c6a 100644
--- a/bgpd/bgp_updgrp.h
+++ b/bgpd/bgp_updgrp.h
@@ -428,7 +428,7 @@ extern void subgroup_announce_route(struct update_subgroup *subgrp);
extern void subgroup_announce_all(struct update_subgroup *subgrp);
extern void subgroup_default_originate(struct update_subgroup *subgrp,
- int withdraw);
+ bool withdraw);
extern void group_announce_route(struct bgp *bgp, afi_t afi, safi_t safi,
struct bgp_dest *dest,
struct bgp_path_info *pi);
diff --git a/bgpd/bgp_updgrp_adv.c b/bgpd/bgp_updgrp_adv.c
index ffdd39636b..c466d87197 100644
--- a/bgpd/bgp_updgrp_adv.c
+++ b/bgpd/bgp_updgrp_adv.c
@@ -733,7 +733,7 @@ void subgroup_announce_table(struct update_subgroup *subgrp,
if (safi != SAFI_MPLS_VPN && safi != SAFI_ENCAP && safi != SAFI_EVPN
&& CHECK_FLAG(peer->af_flags[afi][safi],
PEER_FLAG_DEFAULT_ORIGINATE))
- subgroup_default_originate(subgrp, 0);
+ subgroup_default_originate(subgrp, false);
subgrp->pscount = 0;
SET_FLAG(subgrp->sflags, SUBGRP_STATUS_TABLE_REPARSING);
@@ -825,7 +825,7 @@ void subgroup_announce_route(struct update_subgroup *subgrp)
}
}
-void subgroup_default_originate(struct update_subgroup *subgrp, int withdraw)
+void subgroup_default_originate(struct update_subgroup *subgrp, bool withdraw)
{
struct bgp *bgp;
struct attr attr;
@@ -940,7 +940,7 @@ void subgroup_default_originate(struct update_subgroup *subgrp, int withdraw)
SUBGRP_STATUS_DEFAULT_ORIGINATE)))
SET_FLAG(subgrp->sflags,
SUBGRP_STATUS_DEFAULT_ORIGINATE);
- withdraw = 1;
+ withdraw = true;
}
}
diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c
index 051d920716..0409eae05a 100644
--- a/bgpd/bgpd.c
+++ b/bgpd/bgpd.c
@@ -5655,7 +5655,7 @@ int peer_default_originate_set(struct peer *peer, afi_t afi, safi_t safi,
if (peer_established(peer->connection) &&
peer->afc_nego[afi][safi]) {
update_group_adjust_peer(peer_af_find(peer, afi, safi));
- bgp_default_originate(peer, afi, safi, 0);
+ bgp_default_originate(peer, afi, safi, false);
bgp_announce_route(peer, afi, safi, false);
}
@@ -5698,7 +5698,7 @@ int peer_default_originate_set(struct peer *peer, afi_t afi, safi_t safi,
member->afc_nego[afi][safi]) {
update_group_adjust_peer(
peer_af_find(member, afi, safi));
- bgp_default_originate(member, afi, safi, 0);
+ bgp_default_originate(member, afi, safi, false);
bgp_announce_route(member, afi, safi, false);
}
}
@@ -5743,7 +5743,7 @@ int peer_default_originate_unset(struct peer *peer, afi_t afi, safi_t safi)
if (peer_established(peer->connection) &&
peer->afc_nego[afi][safi]) {
update_group_adjust_peer(peer_af_find(peer, afi, safi));
- bgp_default_originate(peer, afi, safi, 1);
+ bgp_default_originate(peer, afi, safi, true);
bgp_announce_route(peer, afi, safi, false);
}
@@ -5782,7 +5782,7 @@ int peer_default_originate_unset(struct peer *peer, afi_t afi, safi_t safi)
if (peer_established(member->connection) &&
member->afc_nego[afi][safi]) {
update_group_adjust_peer(peer_af_find(member, afi, safi));
- bgp_default_originate(member, afi, safi, 1);
+ bgp_default_originate(member, afi, safi, true);
bgp_announce_route(member, afi, safi, false);
}
}
diff --git a/tests/topotests/bgp_default_route_route_map_set/r1/bgpd.conf b/tests/topotests/bgp_default_route_route_map_set/r1/bgpd.conf
index 6f6d394402..c442e06a63 100644
--- a/tests/topotests/bgp_default_route_route_map_set/r1/bgpd.conf
+++ b/tests/topotests/bgp_default_route_route_map_set/r1/bgpd.conf
@@ -1,12 +1,17 @@
-router bgp 65000
- no bgp ebgp-requires-policy
- neighbor 192.168.255.2 remote-as 65001
- neighbor 192.168.255.2 timers 3 10
- address-family ipv4 unicast
- neighbor 192.168.255.2 default-originate route-map default
- exit-address-family
+router bgp 65001
+ no bgp ebgp-requires-policy
+ neighbor 192.168.255.2 remote-as external
+ neighbor 192.168.255.2 timers 3 10
+ neighbor PG peer-group
+ neighbor PG remote-as external
+ neighbor PG timers 3 10
+ bgp listen range 192.168.255.0/24 peer-group PG
+ address-family ipv4 unicast
+ neighbor PG default-originate route-map default
+ neighbor 192.168.255.2 default-originate route-map default
+ exit-address-family
!
route-map default permit 10
- set metric 123
- set as-path prepend 65000 65000 65000
+ set metric 123
+ set as-path prepend 65001 65001 65001
!
diff --git a/tests/topotests/bgp_default_route_route_map_set/r1/zebra.conf b/tests/topotests/bgp_default_route_route_map_set/r1/zebra.conf
index 0a283c06d5..4af88e523c 100644
--- a/tests/topotests/bgp_default_route_route_map_set/r1/zebra.conf
+++ b/tests/topotests/bgp_default_route_route_map_set/r1/zebra.conf
@@ -5,5 +5,3 @@ interface lo
interface r1-eth0
ip address 192.168.255.1/24
!
-ip forwarding
-!
diff --git a/tests/topotests/bgp_default_route_route_map_set/r2/bgpd.conf b/tests/topotests/bgp_default_route_route_map_set/r2/bgpd.conf
index 00c96cc58b..3a18a11386 100644
--- a/tests/topotests/bgp_default_route_route_map_set/r2/bgpd.conf
+++ b/tests/topotests/bgp_default_route_route_map_set/r2/bgpd.conf
@@ -1,8 +1,8 @@
-router bgp 65001
- no bgp ebgp-requires-policy
- neighbor 192.168.255.1 remote-as 65000
- neighbor 192.168.255.1 timers 3 10
- address-family ipv4 unicast
- redistribute connected
- exit-address-family
+router bgp 65002
+ no bgp ebgp-requires-policy
+ neighbor 192.168.255.1 remote-as external
+ neighbor 192.168.255.1 timers 3 10
+ address-family ipv4 unicast
+ redistribute connected
+ exit-address-family
!
diff --git a/tests/topotests/bgp_default_route_route_map_set/r2/zebra.conf b/tests/topotests/bgp_default_route_route_map_set/r2/zebra.conf
index 606c17bec9..c03dd7e197 100644
--- a/tests/topotests/bgp_default_route_route_map_set/r2/zebra.conf
+++ b/tests/topotests/bgp_default_route_route_map_set/r2/zebra.conf
@@ -2,5 +2,3 @@
interface r2-eth0
ip address 192.168.255.2/24
!
-ip forwarding
-!
diff --git a/tests/topotests/bgp_default_route_route_map_set/r3/bgpd.conf b/tests/topotests/bgp_default_route_route_map_set/r3/bgpd.conf
new file mode 100644
index 0000000000..c477037e34
--- /dev/null
+++ b/tests/topotests/bgp_default_route_route_map_set/r3/bgpd.conf
@@ -0,0 +1,8 @@
+router bgp 65003
+ no bgp ebgp-requires-policy
+ neighbor 192.168.255.1 remote-as external
+ neighbor 192.168.255.1 timers 3 10
+ address-family ipv4 unicast
+ redistribute connected
+ exit-address-family
+!
diff --git a/tests/topotests/bgp_default_route_route_map_set/r3/zebra.conf b/tests/topotests/bgp_default_route_route_map_set/r3/zebra.conf
new file mode 100644
index 0000000000..5ae9daf077
--- /dev/null
+++ b/tests/topotests/bgp_default_route_route_map_set/r3/zebra.conf
@@ -0,0 +1,4 @@
+!
+interface r3-eth0
+ ip address 192.168.255.3/24
+!
diff --git a/tests/topotests/bgp_default_route_route_map_set/test_bgp_default-originate_route-map_set.py b/tests/topotests/bgp_default_route_route_map_set/test_bgp_default-originate_route-map_set.py
index 3bd900bda0..e633b61d1b 100644
--- a/tests/topotests/bgp_default_route_route_map_set/test_bgp_default-originate_route-map_set.py
+++ b/tests/topotests/bgp_default_route_route_map_set/test_bgp_default-originate_route-map_set.py
@@ -26,12 +26,13 @@ pytestmark = [pytest.mark.bgpd]
def build_topo(tgen):
- for routern in range(1, 3):
+ for routern in range(1, 4):
tgen.add_router("r{}".format(routern))
switch = tgen.add_switch("s1")
switch.add_link(tgen.gears["r1"])
switch.add_link(tgen.gears["r2"])
+ switch.add_link(tgen.gears["r3"])
def setup_module(mod):
@@ -62,14 +63,17 @@ def test_bgp_default_originate_route_map():
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
- router = tgen.gears["r2"]
+ r2 = tgen.gears["r2"]
+ r3 = tgen.gears["r3"]
- def _bgp_converge(router):
+ def _bgp_converge(router, pfxCount):
output = json.loads(router.vtysh_cmd("show ip bgp neighbor 192.168.255.1 json"))
expected = {
"192.168.255.1": {
"bgpState": "Established",
- "addressFamilyInfo": {"ipv4Unicast": {"acceptedPrefixCounter": 1}},
+ "addressFamilyInfo": {
+ "ipv4Unicast": {"acceptedPrefixCounter": pfxCount}
+ },
}
}
return topotest.json_cmp(output, expected)
@@ -77,21 +81,25 @@ def test_bgp_default_originate_route_map():
def _bgp_default_route_has_metric(router):
output = json.loads(router.vtysh_cmd("show ip bgp 0.0.0.0/0 json"))
expected = {
- "paths": [{"aspath": {"string": "65000 65000 65000 65000"}, "metric": 123}]
+ "paths": [{"aspath": {"string": "65001 65001 65001 65001"}, "metric": 123}]
}
return topotest.json_cmp(output, expected)
- test_func = functools.partial(_bgp_converge, router)
- success, result = topotest.run_and_expect(test_func, None, count=30, wait=0.5)
+ test_func = functools.partial(_bgp_converge, r2, 1)
+ _, result = topotest.run_and_expect(test_func, None, count=30, wait=1)
+ assert result is None, "Failed to see bgp convergence in r2"
- assert result is None, 'Failed to see bgp convergence in "{}"'.format(router)
+ test_func = functools.partial(_bgp_default_route_has_metric, r2)
+ _, result = topotest.run_and_expect(test_func, None, count=30, wait=1)
+ assert result is None, "Failed to see applied metric for default route in r2"
- test_func = functools.partial(_bgp_default_route_has_metric, router)
- success, result = topotest.run_and_expect(test_func, None, count=30, wait=0.5)
+ test_func = functools.partial(_bgp_converge, r3, 2)
+ _, result = topotest.run_and_expect(test_func, None, count=30, wait=1)
+ assert result is None, "Failed to see bgp convergence in r3"
- assert (
- result is None
- ), 'Failed to see applied metric for default route in "{}"'.format(router)
+ test_func = functools.partial(_bgp_default_route_has_metric, r3)
+ _, result = topotest.run_and_expect(test_func, None, count=30, wait=1)
+ assert result is None, "Failed to see applied metric for default route in r3"
if __name__ == "__main__":