-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
In this topotest, the route reflector advertises a route with the aigp attribute to its client, some with the nexthop unchanged and some with the nexthp changed. Different aigp values are sent to the clients depending on the nexthop setting. Signed-off-by: Enke Chen <[email protected]>
- Loading branch information
1 parent
a3391d3
commit 9fe80cd
Showing
13 changed files
with
308 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
router bgp 65001 | ||
no bgp ebgp-requires-policy | ||
no bgp network import-check | ||
bgp route-reflector allow-outbound-policy | ||
neighbor 10.0.0.2 remote-as internal | ||
neighbor 10.0.0.2 update-source lo | ||
neighbor 10.0.0.2 timers 1 3 | ||
neighbor 10.0.0.2 timers connect 1 | ||
neighbor 10.0.0.2 route-reflector-client | ||
neighbor 10.0.0.3 remote-as internal | ||
neighbor 10.0.0.3 update-source lo | ||
neighbor 10.0.0.3 timers 1 3 | ||
neighbor 10.0.0.3 timers connect 1 | ||
neighbor 10.0.0.3 route-reflector-client | ||
neighbor 10.0.0.4 remote-as internal | ||
neighbor 10.0.0.4 update-source lo | ||
neighbor 10.0.0.4 timers 1 3 | ||
neighbor 10.0.0.4 timers connect 1 | ||
neighbor 10.0.0.4 route-reflector-client | ||
address-family ipv4 | ||
neighbor 10.0.0.4 route-map set-nexthop out | ||
exit-address-family | ||
! | ||
route-map set-nexthop permit 10 | ||
set ip next-hop peer-address | ||
exit | ||
! |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
! | ||
interface lo | ||
ip ospf passive | ||
! | ||
interface r1-eth0 | ||
ip ospf dead-interval 4 | ||
ip ospf hello-interval 1 | ||
ip ospf cost 10 | ||
! | ||
interface r1-eth1 | ||
ip ospf dead-interval 4 | ||
ip ospf hello-interval 1 | ||
ip ospf cost 10 | ||
! | ||
interface r1-eth2 | ||
ip ospf dead-interval 4 | ||
ip ospf hello-interval 1 | ||
ip ospf cost 10 | ||
! | ||
router ospf | ||
router-id 10.0.0.1 | ||
network 0.0.0.0/0 area 0 | ||
! |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
! | ||
interface lo | ||
ip address 10.0.0.1/32 | ||
! | ||
interface r1-eth0 | ||
ip address 192.168.12.1/24 | ||
! | ||
interface r1-eth1 | ||
ip address 192.168.13.1/24 | ||
! | ||
interface r1-eth2 | ||
ip address 192.168.14.1/24 | ||
! |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
router bgp 65001 | ||
no bgp ebgp-requires-policy | ||
no bgp network import-check | ||
neighbor 10.0.0.1 remote-as internal | ||
neighbor 10.0.0.1 update-source lo | ||
neighbor 10.0.0.1 timers 1 3 | ||
neighbor 10.0.0.1 timers connect 1 | ||
address-family ipv4 | ||
redistribute connected route-map connected-to-bgp | ||
neighbor 10.0.0.1 next-hop-self | ||
exit-address-family | ||
! | ||
ip prefix-list p22 seq 5 permit 10.0.2.2/32 | ||
! | ||
route-map connected-to-bgp permit 10 | ||
match ip address prefix-list p22 | ||
set aigp 2 | ||
! |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
! | ||
interface lo | ||
ip ospf passive | ||
! | ||
interface r2-eth0 | ||
ip ospf dead-interval 4 | ||
ip ospf hello-interval 1 | ||
ip ospf cost 10 | ||
! | ||
interface r2-eth1 | ||
ip ospf dead-interval 4 | ||
ip ospf hello-interval 1 | ||
ip ospf cost 10 | ||
! | ||
router ospf | ||
router-id 10.0.0.2 | ||
network 0.0.0.0/0 area 0 | ||
! |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
! | ||
interface lo | ||
ip address 10.0.0.2/32 | ||
ip address 10.0.2.2/32 | ||
! | ||
interface r2-eth0 | ||
ip address 192.168.12.2/24 | ||
! | ||
interface r2-eth1 | ||
ip address 192.168.23.2/24 | ||
! |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
router bgp 65001 | ||
no bgp ebgp-requires-policy | ||
no bgp network import-check | ||
neighbor 10.0.0.1 remote-as internal | ||
neighbor 10.0.0.1 update-source lo | ||
neighbor 10.0.0.1 timers 1 3 | ||
neighbor 10.0.0.1 timers connect 1 | ||
address-family ipv4 | ||
neighbor 10.0.0.1 next-hop-self | ||
exit-address-family | ||
! |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
! | ||
interface lo | ||
ip ospf passive | ||
! | ||
interface r3-eth0 | ||
ip ospf dead-interval 4 | ||
ip ospf hello-interval 1 | ||
ip ospf cost 10 | ||
! | ||
interface r3-eth1 | ||
ip ospf dead-interval 4 | ||
ip ospf hello-interval 1 | ||
ip ospf cost 10 | ||
! | ||
router ospf | ||
router-id 10.0.0.3 | ||
network 0.0.0.0/0 area 0 | ||
! |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
! | ||
interface lo | ||
ip address 10.0.0.3/32 | ||
! | ||
interface r3-eth0 | ||
ip address 192.168.13.3/24 | ||
! | ||
interface r3-eth1 | ||
ip address 192.168.23.3/24 | ||
! |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
router bgp 65001 | ||
no bgp ebgp-requires-policy | ||
no bgp network import-check | ||
neighbor 10.0.0.1 remote-as internal | ||
neighbor 10.0.0.1 update-source lo | ||
neighbor 10.0.0.1 timers 1 3 | ||
neighbor 10.0.0.1 timers connect 1 | ||
address-family ipv4 | ||
neighbor 10.0.0.1 next-hop-self | ||
exit-address-family | ||
! |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
! | ||
interface lo | ||
ip ospf passive | ||
! | ||
interface r4-eth0 | ||
ip ospf dead-interval 4 | ||
ip ospf hello-interval 1 | ||
ip ospf cost 10 | ||
! | ||
router ospf | ||
router-id 10.0.0.4 | ||
network 0.0.0.0/0 area 0 | ||
! |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
! | ||
interface lo | ||
ip address 10.0.0.4/32 | ||
! | ||
interface r4-eth0 | ||
ip address 192.168.14.4/24 | ||
! |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,128 @@ | ||
#!/usr/bin/env python | ||
# SPDX-License-Identifier: ISC | ||
|
||
# | ||
# Copyright (c) 2024, Palo Alto Networks, Inc. | ||
# Enke Chen <[email protected]> | ||
# | ||
|
||
""" | ||
r1, r2, and r3 are directly connectd to each other. | ||
r4 is only connected to r1 directly. | ||
r1 is the route reflector. | ||
r1 sets the nexthop to itself when advertising routes to r4. | ||
r2 sources 10.0.2.2/32 with agigp-metric 2. | ||
Results: | ||
r1, r2 and r3 should have aigp-meric 2. | ||
r4 should have aigp-metric 12, i.e., aigp + nexthop-metric. | ||
""" | ||
|
||
import os | ||
import sys | ||
import json | ||
import pytest | ||
import functools | ||
|
||
CWD = os.path.dirname(os.path.realpath(__file__)) | ||
sys.path.append(os.path.join(CWD, "../")) | ||
|
||
# pylint: disable=C0413 | ||
from lib import topotest | ||
from lib.topogen import Topogen, TopoRouter, get_topogen | ||
|
||
pytestmark = [pytest.mark.bgpd] | ||
|
||
|
||
def build_topo(tgen): | ||
for routern in range(1, 5): | ||
tgen.add_router("r{}".format(routern)) | ||
|
||
switch = tgen.add_switch("s1") | ||
switch.add_link(tgen.gears["r1"]) | ||
switch.add_link(tgen.gears["r2"]) | ||
|
||
switch = tgen.add_switch("s2") | ||
switch.add_link(tgen.gears["r1"]) | ||
switch.add_link(tgen.gears["r3"]) | ||
|
||
switch = tgen.add_switch("s3") | ||
switch.add_link(tgen.gears["r1"]) | ||
switch.add_link(tgen.gears["r4"]) | ||
|
||
switch = tgen.add_switch("s4") | ||
switch.add_link(tgen.gears["r2"]) | ||
switch.add_link(tgen.gears["r3"]) | ||
|
||
|
||
def setup_module(mod): | ||
tgen = Topogen(build_topo, mod.__name__) | ||
tgen.start_topology() | ||
|
||
router_list = tgen.routers() | ||
|
||
for _, (rname, router) in enumerate(router_list.items(), 1): | ||
router.load_config( | ||
TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(rname)) | ||
) | ||
router.load_config( | ||
TopoRouter.RD_OSPF, os.path.join(CWD, "{}/ospfd.conf".format(rname)) | ||
) | ||
router.load_config( | ||
TopoRouter.RD_BGP, os.path.join(CWD, "{}/bgpd.conf".format(rname)) | ||
) | ||
|
||
tgen.start_router() | ||
|
||
|
||
def teardown_module(mod): | ||
tgen = get_topogen() | ||
tgen.stop_topology() | ||
|
||
|
||
def test_bgp_aigp_rr(): | ||
tgen = get_topogen() | ||
|
||
if tgen.routers_have_failure(): | ||
pytest.skip(tgen.errors) | ||
|
||
r1 = tgen.gears["r1"] | ||
r2 = tgen.gears["r2"] | ||
r3 = tgen.gears["r3"] | ||
r4 = tgen.gears["r4"] | ||
|
||
def _bgp_check_aigp_metric(router, prefix, aigp): | ||
output = json.loads( | ||
router.vtysh_cmd("show bgp ipv4 unicast {} json".format(prefix)) | ||
) | ||
expected = {"paths": [{"aigpMetric": aigp, "valid": True}]} | ||
return topotest.json_cmp(output, expected) | ||
|
||
|
||
# r2, 10.0.2.2/32 with aigp-metric 2 | ||
test_func = functools.partial(_bgp_check_aigp_metric, r2, "10.0.2.2/32", 2) | ||
_, result = topotest.run_and_expect(test_func, None, count=60, wait=1) | ||
assert result is None, "aigp-metric for 10.0.2.2/32 is not 2" | ||
|
||
# r1, 10.0.2.2/32 with aigp-metric 2 | ||
test_func = functools.partial(_bgp_check_aigp_metric, r1, "10.0.2.2/32", 2) | ||
_, result = topotest.run_and_expect(test_func, None, count=60, wait=1) | ||
assert result is None, "aigp-metric for 10.0.2.2/32 is not 2" | ||
|
||
# r3, 10.0.2.2/32 with aigp-metric 2 | ||
test_func = functools.partial(_bgp_check_aigp_metric, r3, "10.0.2.2/32", 2) | ||
_, result = topotest.run_and_expect(test_func, None, count=60, wait=1) | ||
assert result is None, "aigp-metric for 10.0.2.2/32 is not 2" | ||
|
||
# r4, 10.0.2.2/32 with aigp-metric 12: aigp + nexthop-metric | ||
test_func = functools.partial(_bgp_check_aigp_metric, r4, "10.0.2.2/32", 12) | ||
_, result = topotest.run_and_expect(test_func, None, count=60, wait=1) | ||
assert result is None, "aigp-metric for 10.0.2.2/32 is not 12" | ||
|
||
|
||
if __name__ == "__main__": | ||
args = ["-s"] + sys.argv[1:] | ||
sys.exit(pytest.main(args)) |