mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-07-27 11:19:13 +00:00
tests: expand bsr topotest to cover ipv6
Signed-off-by: Jafar Al-Gharaibeh <jafar@atcorp.com>
This commit is contained in:
parent
4e74183d0f
commit
a7e7cc301d
@ -5,21 +5,45 @@ log file /tmp/r1-frr.log
|
|||||||
!
|
!
|
||||||
!debug pim packet
|
!debug pim packet
|
||||||
!debug pim bsm
|
!debug pim bsm
|
||||||
|
!debug pimv6 bsm
|
||||||
!
|
!
|
||||||
ip route 0.0.0.0/0 10.0.0.4
|
!
|
||||||
|
interface lo
|
||||||
|
ip address 10.0.0.1/32
|
||||||
|
ipv6 address fd00:0:0:0::1/128
|
||||||
|
ip pim
|
||||||
|
ipv6 pim
|
||||||
|
ipv6 ospf6 area 0
|
||||||
!
|
!
|
||||||
interface r1-eth0
|
interface r1-eth0
|
||||||
ip address 10.0.0.1/24
|
ip address 10.0.0.1/24
|
||||||
|
ipv6 address fd00:0:0:0::1/64
|
||||||
ip igmp
|
ip igmp
|
||||||
ip pim
|
ip pim
|
||||||
|
ipv6 pim
|
||||||
|
ipv6 ospf6 area 0
|
||||||
!
|
!
|
||||||
interface r1-eth1
|
interface r1-eth1
|
||||||
ip address 10.0.1.1/24
|
ip address 10.0.1.1/24
|
||||||
|
ipv6 address fd00:0:0:1::1/64
|
||||||
ip igmp
|
ip igmp
|
||||||
ip pim
|
ip pim
|
||||||
|
ipv6 pim
|
||||||
|
ipv6 ospf6 area 0
|
||||||
!
|
!
|
||||||
router pim
|
router pim
|
||||||
bsr candidate-bsr priority 200 source address 10.0.0.1
|
bsr candidate-bsr priority 200 source address 10.0.0.1
|
||||||
!
|
!
|
||||||
ip forwarding
|
router pim6
|
||||||
|
bsr candidate-bsr priority 200 source address fd00:0:0:0::1
|
||||||
|
!
|
||||||
|
router ospf
|
||||||
|
ospf router-id 10.0.0.1
|
||||||
|
network 10.0.0.0/16 area 0
|
||||||
|
!
|
||||||
|
router ospf6
|
||||||
|
ospf6 router-id 10.0.0.1
|
||||||
|
!
|
||||||
|
ip forwarding
|
||||||
|
ipv6 forwarding
|
||||||
!
|
!
|
||||||
|
@ -3,20 +3,46 @@ hostname r2
|
|||||||
password zebra
|
password zebra
|
||||||
log file /tmp/r2-frr.log
|
log file /tmp/r2-frr.log
|
||||||
!
|
!
|
||||||
ip route 0.0.0.0/0 10.0.0.4
|
!debug pim packet
|
||||||
|
!debug pim bsm
|
||||||
|
!debug pimv6 bsm
|
||||||
|
!
|
||||||
|
interface lo
|
||||||
|
ip address 10.0.0.2/32
|
||||||
|
ipv6 address fd00:0:0:0::2/128
|
||||||
|
ip pim
|
||||||
|
ipv6 pim
|
||||||
|
ipv6 ospf6 area 0
|
||||||
!
|
!
|
||||||
interface r2-eth0
|
interface r2-eth0
|
||||||
ip address 10.0.0.2/24
|
ip address 10.0.0.2/24
|
||||||
|
ipv6 address fd00:0:0:0::2/64
|
||||||
ip igmp
|
ip igmp
|
||||||
ip pim
|
ip pim
|
||||||
|
ipv6 pim
|
||||||
|
ipv6 ospf6 area 0
|
||||||
!
|
!
|
||||||
interface r2-eth1
|
interface r2-eth1
|
||||||
ip address 10.0.2.2/24
|
ip address 10.0.2.2/24
|
||||||
|
ipv6 address fd00:0:0:2::2/64
|
||||||
ip igmp
|
ip igmp
|
||||||
ip pim
|
ip pim
|
||||||
|
ipv6 pim
|
||||||
|
ipv6 ospf6 area 0
|
||||||
!
|
!
|
||||||
router pim
|
router pim
|
||||||
bsr candidate-bsr priority 100 source address 10.0.0.2
|
bsr candidate-bsr priority 100
|
||||||
|
!
|
||||||
|
router pim6
|
||||||
|
bsr candidate-bsr priority 100
|
||||||
|
!
|
||||||
|
router ospf
|
||||||
|
ospf router-id 10.0.0.2
|
||||||
|
network 10.0.0.0/16 area 0
|
||||||
|
!
|
||||||
|
router ospf6
|
||||||
|
ospf6 router-id 10.0.0.2
|
||||||
!
|
!
|
||||||
ip forwarding
|
ip forwarding
|
||||||
|
ipv6 forwarding
|
||||||
!
|
!
|
||||||
|
@ -5,28 +5,48 @@ log file /tmp/r3-frr.log
|
|||||||
!
|
!
|
||||||
!debug pim packet
|
!debug pim packet
|
||||||
!debug pim bsm
|
!debug pim bsm
|
||||||
|
!debug pimv6 bsm
|
||||||
!
|
!
|
||||||
ip route 0.0.0.0/0 10.0.3.4
|
|
||||||
ip route 10.0.6.0/24 10.0.3.6
|
|
||||||
!
|
!
|
||||||
interface r3-eth0
|
interface r3-eth0
|
||||||
ip address 10.0.1.3/24
|
ip address 10.0.1.3/24
|
||||||
|
ipv6 address fd00:0:0:1::3/64
|
||||||
ip igmp
|
ip igmp
|
||||||
ip pim
|
ip pim
|
||||||
|
ipv6 pim
|
||||||
|
ipv6 ospf6 area 0
|
||||||
!
|
!
|
||||||
interface r3-eth1
|
interface r3-eth1
|
||||||
ip address 10.0.3.3/24
|
ip address 10.0.3.3/24
|
||||||
|
ipv6 address fd00:0:0:3::3/64
|
||||||
ip igmp
|
ip igmp
|
||||||
ip pim
|
ip pim
|
||||||
|
ipv6 pim
|
||||||
|
ipv6 ospf6 area 0
|
||||||
!
|
!
|
||||||
interface r3-eth2
|
interface r3-eth2
|
||||||
ip address 10.0.4.3/24
|
ip address 10.0.4.3/24
|
||||||
|
ipv6 address fd00:0:0:4::3/64
|
||||||
ip igmp
|
ip igmp
|
||||||
ip pim
|
ip pim
|
||||||
|
ipv6 pim
|
||||||
|
ipv6 ospf6 area 0
|
||||||
!
|
!
|
||||||
router pim
|
router pim
|
||||||
bsr candidate-rp group 239.0.0.0/16
|
bsr candidate-rp group 239.0.0.0/16
|
||||||
bsr candidate-rp priority 10 source address 10.0.3.3
|
bsr candidate-rp priority 10 source address 10.0.3.3
|
||||||
!
|
!
|
||||||
ip forwarding
|
router pim6
|
||||||
|
bsr candidate-rp group ffbb::/64
|
||||||
|
bsr candidate-rp priority 10 source address fd00:0:0:3::3
|
||||||
|
!
|
||||||
|
router ospf
|
||||||
|
ospf router-id 10.0.1.3
|
||||||
|
network 10.0.0.0/16 area 0
|
||||||
|
!
|
||||||
|
router ospf6
|
||||||
|
ospf6 router-id 10.0.1.3
|
||||||
|
!
|
||||||
|
ip forwarding
|
||||||
|
ipv6 forwarding
|
||||||
!
|
!
|
||||||
|
@ -3,35 +3,64 @@ hostname r4
|
|||||||
password zebra
|
password zebra
|
||||||
log file /tmp/r4-frr.log
|
log file /tmp/r4-frr.log
|
||||||
!
|
!
|
||||||
ip route 10.0.1.0/24 10.0.0.1
|
!
|
||||||
ip route 10.0.4.0/24 10.0.3.3
|
interface lo
|
||||||
ip route 10.0.6.0/24 10.0.3.6
|
ip address 10.0.3.4/32
|
||||||
|
ipv6 address fd00:0:0:3::4/64
|
||||||
|
ip pim
|
||||||
|
ipv6 pim
|
||||||
!
|
!
|
||||||
interface r4-eth0
|
interface r4-eth0
|
||||||
ip address 10.0.2.4/24
|
ip address 10.0.2.4/24
|
||||||
|
ipv6 address fd00:0:0:2::4/64
|
||||||
ip igmp
|
ip igmp
|
||||||
ip pim
|
ip pim
|
||||||
|
ipv6 pim
|
||||||
|
ipv6 ospf6 area 0
|
||||||
!
|
!
|
||||||
interface r4-eth1
|
interface r4-eth1
|
||||||
ip address 10.0.3.4/24
|
ip address 10.0.3.4/24
|
||||||
|
ipv6 address fd00:0:0:3::4/64
|
||||||
ip igmp
|
ip igmp
|
||||||
ip pim
|
ip pim
|
||||||
|
ipv6 pim
|
||||||
|
ipv6 ospf6 area 0
|
||||||
!
|
!
|
||||||
interface r4-eth2
|
interface r4-eth2
|
||||||
ip address 10.0.5.4/24
|
ip address 10.0.5.4/24
|
||||||
|
ipv6 address fd00:0:0:5::4/64
|
||||||
ip igmp
|
ip igmp
|
||||||
ip pim
|
ip pim
|
||||||
|
ipv6 pim
|
||||||
|
ipv6 ospf6 area 0
|
||||||
!
|
!
|
||||||
interface r4-eth3
|
interface r4-eth3
|
||||||
ip address 10.0.0.4/24
|
ip address 10.0.0.4/24
|
||||||
|
ipv6 address fd00:0:0:0::4/64
|
||||||
ip igmp
|
ip igmp
|
||||||
ip pim
|
ip pim
|
||||||
|
ipv6 pim
|
||||||
|
ipv6 ospf6 area 0
|
||||||
!
|
!
|
||||||
router pim
|
router pim
|
||||||
bsr candidate-rp group 239.0.0.0/24
|
bsr candidate-rp group 239.0.0.0/24
|
||||||
bsr candidate-rp group 239.0.0.0/16
|
bsr candidate-rp group 239.0.0.0/16
|
||||||
bsr candidate-rp group 239.0.0.0/8
|
bsr candidate-rp group 239.0.0.0/8
|
||||||
bsr candidate-rp priority 20 source address 10.0.3.4
|
bsr candidate-rp priority 20
|
||||||
|
!
|
||||||
|
router pim6
|
||||||
|
bsr candidate-rp group ffbb::/124
|
||||||
|
bsr candidate-rp group ffbb::/64
|
||||||
|
bsr candidate-rp group ffbb::/108
|
||||||
|
bsr candidate-rp priority 20
|
||||||
|
!
|
||||||
|
router ospf
|
||||||
|
ospf router-id 10.0.2.4
|
||||||
|
network 10.0.0.0/16 area 0
|
||||||
|
!
|
||||||
|
router ospf6
|
||||||
|
ospf6 router-id 10.0.2.4
|
||||||
!
|
!
|
||||||
ip forwarding
|
ip forwarding
|
||||||
|
ipv6 forwarding
|
||||||
!
|
!
|
||||||
|
@ -3,15 +3,32 @@ hostname r5
|
|||||||
password zebra
|
password zebra
|
||||||
log file /tmp/r5-frr.log
|
log file /tmp/r5-frr.log
|
||||||
!
|
!
|
||||||
ip route 0.0.0.0/0 10.0.4.3
|
|
||||||
!
|
!
|
||||||
interface r5-eth0
|
interface r5-eth0
|
||||||
ip address 10.0.4.5/24
|
ip address 10.0.4.5/24
|
||||||
|
ipv6 address fd00:0:0:4::5/64
|
||||||
ip igmp
|
ip igmp
|
||||||
ip pim
|
ip pim
|
||||||
|
ipv6 pim
|
||||||
|
ipv6 ospf6 area 0
|
||||||
!
|
!
|
||||||
interface r5-eth1
|
interface r5-eth1
|
||||||
ip address 10.0.6.5/24
|
ip address 10.0.6.5/24
|
||||||
|
ipv6 address fd00:0:0:6::5/64
|
||||||
|
ip igmp
|
||||||
|
ip pim
|
||||||
|
ipv6 pim
|
||||||
|
ipv6 ospf6 area 0
|
||||||
|
!
|
||||||
|
router pim6
|
||||||
|
!
|
||||||
|
router ospf
|
||||||
|
ospf router-id 10.0.4.5
|
||||||
|
network 10.0.0.0/16 area 0
|
||||||
|
!
|
||||||
|
router ospf6
|
||||||
|
ospf6 router-id 10.0.4.5
|
||||||
!
|
!
|
||||||
ip forwarding
|
ip forwarding
|
||||||
|
ipv6 forwarding
|
||||||
!
|
!
|
||||||
|
@ -3,20 +3,40 @@ hostname r6
|
|||||||
password zebra
|
password zebra
|
||||||
log file /tmp/r6-frr.log
|
log file /tmp/r6-frr.log
|
||||||
!
|
!
|
||||||
ip route 0.0.0.0/0 10.0.6.6
|
|
||||||
!
|
!
|
||||||
interface r6-eth0
|
interface r6-eth0
|
||||||
ip address 10.0.5.6/24
|
ip address 10.0.5.6/24
|
||||||
|
ipv6 address fd00:0:0:5::6/64
|
||||||
ip igmp
|
ip igmp
|
||||||
ip pim
|
ip pim
|
||||||
|
ipv6 pim
|
||||||
|
ipv6 ospf6 area 0
|
||||||
!
|
!
|
||||||
interface r6-eth1
|
interface r6-eth1
|
||||||
ip address 10.0.6.6/24
|
ip address 10.0.6.6/24
|
||||||
|
ipv6 address fd00:0:0:6::6/64
|
||||||
|
ip igmp
|
||||||
|
ip pim
|
||||||
|
ipv6 pim
|
||||||
|
ipv6 ospf6 area 0
|
||||||
!
|
!
|
||||||
interface r6-eth2
|
interface r6-eth2
|
||||||
ip address 10.0.3.6/24
|
ip address 10.0.3.6/24
|
||||||
|
ipv6 address fd00:0:0:3::6/64
|
||||||
ip igmp
|
ip igmp
|
||||||
ip pim
|
ip pim
|
||||||
|
ipv6 pim
|
||||||
|
ipv6 ospf6 area 0
|
||||||
|
!
|
||||||
|
router pim6
|
||||||
|
!
|
||||||
|
router ospf
|
||||||
|
ospf router-id 10.0.5.6
|
||||||
|
network 10.0.0.0/16 area 0
|
||||||
|
!
|
||||||
|
router ospf6
|
||||||
|
ospf6 router-id 10.0.5.6
|
||||||
!
|
!
|
||||||
ip forwarding
|
ip forwarding
|
||||||
|
ipv6 forwarding
|
||||||
!
|
!
|
||||||
|
@ -59,7 +59,12 @@ CWD = os.path.dirname(os.path.realpath(__file__))
|
|||||||
sys.path.append(os.path.join(CWD, "../"))
|
sys.path.append(os.path.join(CWD, "../"))
|
||||||
|
|
||||||
# Required to instantiate the topology builder class.
|
# Required to instantiate the topology builder class.
|
||||||
pytestmark = [pytest.mark.pimd]
|
pytestmark = [
|
||||||
|
pytest.mark.pimd,
|
||||||
|
pytest.mark.pim6d,
|
||||||
|
pytest.mark.ospfd,
|
||||||
|
pytest.mark.ospf6d,
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
def build_topo(tgen):
|
def build_topo(tgen):
|
||||||
@ -102,6 +107,7 @@ def build_topo(tgen):
|
|||||||
sw1.add_link(tgen.gears["r4"])
|
sw1.add_link(tgen.gears["r4"])
|
||||||
sw3.add_link(tgen.gears["r6"])
|
sw3.add_link(tgen.gears["r6"])
|
||||||
|
|
||||||
|
|
||||||
def setup_module(mod):
|
def setup_module(mod):
|
||||||
logger.info("PIM Candidate RP/BSR:\n {}".format(TOPOLOGY))
|
logger.info("PIM Candidate RP/BSR:\n {}".format(TOPOLOGY))
|
||||||
|
|
||||||
@ -125,6 +131,7 @@ def teardown_module(mod):
|
|||||||
tgen = get_topogen()
|
tgen = get_topogen()
|
||||||
tgen.stop_topology()
|
tgen.stop_topology()
|
||||||
|
|
||||||
|
|
||||||
def test_pim_bsr_election_r1(request):
|
def test_pim_bsr_election_r1(request):
|
||||||
"Test PIM BSR Election"
|
"Test PIM BSR Election"
|
||||||
tgen = get_topogen()
|
tgen = get_topogen()
|
||||||
@ -142,14 +149,13 @@ def test_pim_bsr_election_r1(request):
|
|||||||
"state": "ACCEPT_PREFERRED",
|
"state": "ACCEPT_PREFERRED",
|
||||||
}
|
}
|
||||||
|
|
||||||
test_func = partial(
|
test_func = partial(topotest.router_json_cmp, r2, "show ip pim bsr json", expected)
|
||||||
topotest.router_json_cmp, r2, "show ip pim bsr json", expected
|
|
||||||
)
|
|
||||||
_, result = topotest.run_and_expect(test_func, None, count=60, wait=1)
|
_, result = topotest.run_and_expect(test_func, None, count=60, wait=1)
|
||||||
|
|
||||||
assertmsg = "r2: r1 was not elected, bsr election mismatch"
|
assertmsg = "r2: r1 was not elected, bsr election mismatch"
|
||||||
assert result is None, assertmsg
|
assert result is None, assertmsg
|
||||||
|
|
||||||
|
|
||||||
def test_pim_bsr_cand_bsr_r1(request):
|
def test_pim_bsr_cand_bsr_r1(request):
|
||||||
"Test PIM BSR candidate BSR"
|
"Test PIM BSR candidate BSR"
|
||||||
tgen = get_topogen()
|
tgen = get_topogen()
|
||||||
@ -162,11 +168,7 @@ def test_pim_bsr_cand_bsr_r1(request):
|
|||||||
r2 = tgen.gears["r2"]
|
r2 = tgen.gears["r2"]
|
||||||
|
|
||||||
# r2 is a candidate bsr with low priority: elected = False
|
# r2 is a candidate bsr with low priority: elected = False
|
||||||
expected = {
|
expected = {"address": "10.0.0.2", "priority": 100, "elected": False}
|
||||||
"address": "10.0.0.2",
|
|
||||||
"priority": 100,
|
|
||||||
"elected": False
|
|
||||||
}
|
|
||||||
test_func = partial(
|
test_func = partial(
|
||||||
topotest.router_json_cmp, r2, "show ip pim bsr candidate-bsr json", expected
|
topotest.router_json_cmp, r2, "show ip pim bsr candidate-bsr json", expected
|
||||||
)
|
)
|
||||||
@ -175,6 +177,7 @@ def test_pim_bsr_cand_bsr_r1(request):
|
|||||||
assertmsg = "r2: candidate bsr mismatch "
|
assertmsg = "r2: candidate bsr mismatch "
|
||||||
assert result is None, assertmsg
|
assert result is None, assertmsg
|
||||||
|
|
||||||
|
|
||||||
def test_pim_bsr_cand_rp(request):
|
def test_pim_bsr_cand_rp(request):
|
||||||
"Test PIM BSR candidate RP"
|
"Test PIM BSR candidate RP"
|
||||||
tgen = get_topogen()
|
tgen = get_topogen()
|
||||||
@ -187,10 +190,7 @@ def test_pim_bsr_cand_rp(request):
|
|||||||
r3 = tgen.gears["r3"]
|
r3 = tgen.gears["r3"]
|
||||||
|
|
||||||
# r3 is a candidate rp
|
# r3 is a candidate rp
|
||||||
expected = {
|
expected = {"address": "10.0.3.3", "priority": 10}
|
||||||
"address":"10.0.3.3",
|
|
||||||
"priority":10
|
|
||||||
}
|
|
||||||
test_func = partial(
|
test_func = partial(
|
||||||
topotest.router_json_cmp, r3, "show ip pim bsr candidate-rp json", expected
|
topotest.router_json_cmp, r3, "show ip pim bsr candidate-rp json", expected
|
||||||
)
|
)
|
||||||
@ -211,29 +211,95 @@ def test_pim_bsr_rp_info(request):
|
|||||||
|
|
||||||
# At this point, all nodes, including r5 should have synced the RP state
|
# At this point, all nodes, including r5 should have synced the RP state
|
||||||
step("Verify rp-info on r5 from BSR")
|
step("Verify rp-info on r5 from BSR")
|
||||||
result = verify_pim_rp_info(tgen, None, "r5", "239.0.0.0/16", None, "10.0.3.3",
|
result = verify_pim_rp_info(
|
||||||
"BSR", False, "ipv4", True, retry_timeout = 90)
|
tgen,
|
||||||
|
None,
|
||||||
|
"r5",
|
||||||
|
"239.0.0.0/16",
|
||||||
|
None,
|
||||||
|
"10.0.3.3",
|
||||||
|
"BSR",
|
||||||
|
False,
|
||||||
|
"ipv4",
|
||||||
|
True,
|
||||||
|
retry_timeout=90,
|
||||||
|
)
|
||||||
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
|
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
|
||||||
|
|
||||||
result = verify_pim_rp_info(tgen, None, "r5", "239.0.0.0/8", None, "10.0.3.4",
|
result = verify_pim_rp_info(
|
||||||
"BSR", False, "ipv4", True, retry_timeout = 30)
|
tgen,
|
||||||
|
None,
|
||||||
|
"r5",
|
||||||
|
"239.0.0.0/8",
|
||||||
|
None,
|
||||||
|
"10.0.3.4",
|
||||||
|
"BSR",
|
||||||
|
False,
|
||||||
|
"ipv4",
|
||||||
|
True,
|
||||||
|
retry_timeout=30,
|
||||||
|
)
|
||||||
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
|
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
|
||||||
|
|
||||||
result = verify_pim_rp_info(tgen, None, "r5", "239.0.0.0/24", None, "10.0.3.4",
|
result = verify_pim_rp_info(
|
||||||
"BSR", False, "ipv4", True, retry_timeout = 30)
|
tgen,
|
||||||
|
None,
|
||||||
|
"r5",
|
||||||
|
"239.0.0.0/24",
|
||||||
|
None,
|
||||||
|
"10.0.3.4",
|
||||||
|
"BSR",
|
||||||
|
False,
|
||||||
|
"ipv4",
|
||||||
|
True,
|
||||||
|
retry_timeout=30,
|
||||||
|
)
|
||||||
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
|
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
|
||||||
|
|
||||||
step("Verify rp-info on the BSR node itself r1")
|
step("Verify rp-info on the BSR node itself r1")
|
||||||
result = verify_pim_rp_info(tgen, None, "r1", "239.0.0.0/16", None, "10.0.3.3",
|
result = verify_pim_rp_info(
|
||||||
"BSR", False, "ipv4", True, retry_timeout = 10)
|
tgen,
|
||||||
|
None,
|
||||||
|
"r1",
|
||||||
|
"239.0.0.0/16",
|
||||||
|
None,
|
||||||
|
"10.0.3.3",
|
||||||
|
"BSR",
|
||||||
|
False,
|
||||||
|
"ipv4",
|
||||||
|
True,
|
||||||
|
retry_timeout=10,
|
||||||
|
)
|
||||||
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
|
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
|
||||||
|
|
||||||
result = verify_pim_rp_info(tgen, None, "r1", "239.0.0.0/8", None, "10.0.3.4",
|
result = verify_pim_rp_info(
|
||||||
"BSR", False, "ipv4", True, retry_timeout = 10)
|
tgen,
|
||||||
|
None,
|
||||||
|
"r1",
|
||||||
|
"239.0.0.0/8",
|
||||||
|
None,
|
||||||
|
"10.0.3.4",
|
||||||
|
"BSR",
|
||||||
|
False,
|
||||||
|
"ipv4",
|
||||||
|
True,
|
||||||
|
retry_timeout=10,
|
||||||
|
)
|
||||||
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
|
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
|
||||||
|
|
||||||
result = verify_pim_rp_info(tgen, None, "r1", "239.0.0.0/24", None, "10.0.3.4",
|
result = verify_pim_rp_info(
|
||||||
"BSR", False, "ipv4", True, retry_timeout = 10)
|
tgen,
|
||||||
|
None,
|
||||||
|
"r1",
|
||||||
|
"239.0.0.0/24",
|
||||||
|
None,
|
||||||
|
"10.0.3.4",
|
||||||
|
"BSR",
|
||||||
|
False,
|
||||||
|
"ipv4",
|
||||||
|
True,
|
||||||
|
retry_timeout=10,
|
||||||
|
)
|
||||||
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
|
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
|
||||||
|
|
||||||
|
|
||||||
@ -253,7 +319,8 @@ def test_pim_bsr_election_fallback_r2(request):
|
|||||||
configure
|
configure
|
||||||
router pim
|
router pim
|
||||||
no bsr candidate-bsr priority 200 source address 10.0.0.1
|
no bsr candidate-bsr priority 200 source address 10.0.0.1
|
||||||
""")
|
"""
|
||||||
|
)
|
||||||
|
|
||||||
step("Verify r1 is no longer a BSR candidate")
|
step("Verify r1 is no longer a BSR candidate")
|
||||||
expected = {}
|
expected = {}
|
||||||
@ -276,9 +343,7 @@ def test_pim_bsr_election_fallback_r2(request):
|
|||||||
|
|
||||||
step("Verify that we fallback to r2 as the new BSR")
|
step("Verify that we fallback to r2 as the new BSR")
|
||||||
|
|
||||||
test_func = partial(
|
test_func = partial(topotest.router_json_cmp, r2, "show ip pim bsr json", expected)
|
||||||
topotest.router_json_cmp, r2, "show ip pim bsr json", expected
|
|
||||||
)
|
|
||||||
_, result = topotest.run_and_expect(test_func, None, count=180, wait=1)
|
_, result = topotest.run_and_expect(test_func, None, count=180, wait=1)
|
||||||
|
|
||||||
assertmsg = "r2: failed to fallback to r2 as a BSR"
|
assertmsg = "r2: failed to fallback to r2 as a BSR"
|
||||||
@ -301,12 +366,129 @@ def test_pim_bsr_rp_info_fallback(request):
|
|||||||
configure
|
configure
|
||||||
router pim
|
router pim
|
||||||
no bsr candidate-rp group 239.0.0.0/16
|
no bsr candidate-rp group 239.0.0.0/16
|
||||||
""")
|
"""
|
||||||
|
)
|
||||||
|
|
||||||
step("Verify falling back to r4 as the new RP for 239.0.0.0/16")
|
step("Verify falling back to r4 as the new RP for 239.0.0.0/16")
|
||||||
|
|
||||||
result = verify_pim_rp_info(tgen, None, "r5", "239.0.0.0/16", None, "10.0.3.4",
|
result = verify_pim_rp_info(
|
||||||
"BSR", False, "ipv4", True, retry_timeout = 30)
|
tgen,
|
||||||
|
None,
|
||||||
|
"r5",
|
||||||
|
"239.0.0.0/16",
|
||||||
|
None,
|
||||||
|
"10.0.3.4",
|
||||||
|
"BSR",
|
||||||
|
False,
|
||||||
|
"ipv4",
|
||||||
|
True,
|
||||||
|
retry_timeout=30,
|
||||||
|
)
|
||||||
|
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
|
||||||
|
|
||||||
|
|
||||||
|
def test_pimv6_bsr_election_r1(request):
|
||||||
|
"Test PIMv6 BSR Election"
|
||||||
|
tgen = get_topogen()
|
||||||
|
tc_name = request.node.name
|
||||||
|
write_test_header(tc_name)
|
||||||
|
|
||||||
|
if tgen.routers_have_failure():
|
||||||
|
pytest.skip("skipped because of router(s) failure")
|
||||||
|
|
||||||
|
r2 = tgen.gears["r2"]
|
||||||
|
# r1 should be the BSR winner because it has higher priority
|
||||||
|
expected = {
|
||||||
|
"bsr": "fd00::1",
|
||||||
|
"priority": 200,
|
||||||
|
"state": "ACCEPT_PREFERRED",
|
||||||
|
}
|
||||||
|
|
||||||
|
test_func = partial(
|
||||||
|
topotest.router_json_cmp, r2, "show ipv6 pim bsr json", expected
|
||||||
|
)
|
||||||
|
_, result = topotest.run_and_expect(test_func, None, count=60, wait=1)
|
||||||
|
|
||||||
|
assertmsg = "r2: r1 was not elected, IPv6 bsr election mismatch"
|
||||||
|
assert result is None, assertmsg
|
||||||
|
|
||||||
|
|
||||||
|
def test_pimv6_bsr_cand_rp(request):
|
||||||
|
"Test PIMv6 BSR candidate RP"
|
||||||
|
tgen = get_topogen()
|
||||||
|
tc_name = request.node.name
|
||||||
|
write_test_header(tc_name)
|
||||||
|
|
||||||
|
if tgen.routers_have_failure():
|
||||||
|
pytest.skip("skipped because of router(s) failure")
|
||||||
|
|
||||||
|
r3 = tgen.gears["r3"]
|
||||||
|
|
||||||
|
# r3 is a candidate rp
|
||||||
|
expected = {"address": "fd00:0:0:3::3", "priority": 10}
|
||||||
|
test_func = partial(
|
||||||
|
topotest.router_json_cmp, r3, "show ipv6 pim bsr candidate-rp json", expected
|
||||||
|
)
|
||||||
|
_, result = topotest.run_and_expect(test_func, None, count=60, wait=1)
|
||||||
|
|
||||||
|
assertmsg = "r3: bsr candidate rp mismatch"
|
||||||
|
assert result is None, assertmsg
|
||||||
|
|
||||||
|
|
||||||
|
def test_pimv6_bsr_rp_info(request):
|
||||||
|
"Test IPv6 RP info state"
|
||||||
|
tgen = get_topogen()
|
||||||
|
tc_name = request.node.name
|
||||||
|
write_test_header(tc_name)
|
||||||
|
|
||||||
|
if tgen.routers_have_failure():
|
||||||
|
pytest.skip("skipped because of router(s) failure")
|
||||||
|
|
||||||
|
# At this point, all nodes, including r5 should have synced the RP state
|
||||||
|
step("Verify rp-info on r5 from BSR")
|
||||||
|
result = verify_pim_rp_info(
|
||||||
|
tgen,
|
||||||
|
None,
|
||||||
|
"r5",
|
||||||
|
"ffbb::0/64",
|
||||||
|
None,
|
||||||
|
"fd00:0:0:3::3",
|
||||||
|
"BSR",
|
||||||
|
False,
|
||||||
|
"ipv6",
|
||||||
|
True,
|
||||||
|
retry_timeout=90,
|
||||||
|
)
|
||||||
|
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
|
||||||
|
|
||||||
|
result = verify_pim_rp_info(
|
||||||
|
tgen,
|
||||||
|
None,
|
||||||
|
"r5",
|
||||||
|
"ffbb::0/124",
|
||||||
|
None,
|
||||||
|
"fd00:0:0:3::4",
|
||||||
|
"BSR",
|
||||||
|
False,
|
||||||
|
"ipv6",
|
||||||
|
True,
|
||||||
|
retry_timeout=30,
|
||||||
|
)
|
||||||
|
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
|
||||||
|
|
||||||
|
result = verify_pim_rp_info(
|
||||||
|
tgen,
|
||||||
|
None,
|
||||||
|
"r5",
|
||||||
|
"ffbb::0/108",
|
||||||
|
None,
|
||||||
|
"fd00:0:0:3::4",
|
||||||
|
"BSR",
|
||||||
|
False,
|
||||||
|
"ipv6",
|
||||||
|
True,
|
||||||
|
retry_timeout=30,
|
||||||
|
)
|
||||||
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
|
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user