2 # SPDX-License-Identifier: ISC
5 # Copyright (c) 2022 by VMware, Inc. ("VMware")
6 # Used Copyright (c) 2018 by Network Device Education Foundation,
7 # Inc. ("NetDEF") in this file.
11 Following tests are covered to test Multicast basic functionality:
18 r0-----r1-------------r3-----r5
24 - Create topology (setup module)
27 1. Configure multiple groups (10 grps) with same RP address
28 2. Verify IIF and OIL in updated in mroute when upstream interface
30 3. Verify RP info and (*,G) mroute after deleting the RP and shut /
31 no shut the RPF interface.
40 # Save the Current Working Directory to find configuration files.
41 CWD
= os
.path
.dirname(os
.path
.realpath(__file__
))
42 sys
.path
.append(os
.path
.join(CWD
, "../"))
43 sys
.path
.append(os
.path
.join(CWD
, "../lib/"))
45 # Required to instantiate the topology builder class.
47 # pylint: disable=C0413
48 # Import topogen and topotest helpers
49 from lib
.topogen
import Topogen
, get_topogen
51 from lib
.common_config
import (
55 reset_config_on_routers
,
57 shutdown_bringup_interface
,
63 socat_send_pim6_traffic
,
65 create_debug_log_config
,
70 verify_join_state_and_timer
,
73 verify_pim_interface_traffic
,
76 clear_pim6_interface_traffic
,
78 verify_pim6_neighbors
,
79 get_pim6_interface_traffic
,
80 clear_pim6_interfaces
,
83 from lib
.topolog
import logger
84 from lib
.topojson
import build_topo_from_json
, build_config_from_json
87 GROUP_RANGE_1
= "ff08::/64"
88 GROUP_ADDRESS_1
= "ff08::1"
89 GROUP_RANGE_3
= "ffaa::/64"
90 GROUP_ADDRESS_3
= "ffaa::1"
91 GROUP_RANGE_LIST_1
= [
98 GROUP_RANGE_LIST_2
= [
105 GROUP_ADDRESS_LIST_1
= ["ffaa::1", "ffaa::2", "ffaa::3", "ffaa::4", "ffaa::5"]
106 GROUP_ADDRESS_LIST_2
= ["ffaa::6", "ffaa::7", "ffaa::8", "ffaa::9", "ffaa::10"]
109 ASSERT_MSG
= "Testcase {} : Failed Error: {}"
111 pytestmark
= [pytest
.mark
.pim6d
]
114 def build_topo(tgen
):
117 # Building topology from json file
118 build_topo_from_json(tgen
, TOPO
)
121 def setup_module(mod
):
123 Sets up the pytest environment
128 testsuite_run_time
= time
.asctime(time
.localtime(time
.time()))
129 logger
.info("Testsuite start time: %s", testsuite_run_time
)
130 logger
.info("=" * 40)
137 r0-----r1-------------r3-----r5
143 logger
.info("Master Topology: \n %s", topology
)
145 logger
.info("Running setup_module to create topology")
147 # This function initiates the topology build with Topogen...
148 json_file
= "{}/multicast_pim6_static_rp.json".format(CWD
)
149 tgen
= Topogen(json_file
, mod
.__name
__)
151 TOPO
= tgen
.json_topo
153 # ... and here it calls Mininet initialization functions.
155 # Starting topology, create tmp files which are loaded to routers
156 # to start daemons and then start routers
159 # Don"t run this test if we have any failure.
160 if tgen
.routers_have_failure():
161 pytest
.skip(tgen
.errors
)
163 # Creating configuration from JSON
164 build_config_from_json(tgen
, TOPO
)
166 # Verify PIM6 neighbors
167 result
= verify_pim6_neighbors(tgen
, TOPO
)
168 assert result
is True, "setup_module :Failed \n Error:" " {}".format(result
)
170 logger
.info("Running setup_module() done")
173 def teardown_module():
174 """Teardown the pytest environment"""
176 logger
.info("Running teardown_module to delete topology")
182 # Stop toplogy and Remove tmp files
185 logger
.info("Testsuite end time: %s", time
.asctime(time
.localtime(time
.time())))
186 logger
.info("=" * 40)
189 #####################################################
193 #####################################################
196 def verify_state_incremented(state_before
, state_after
):
198 API to compare interface traffic state incrementing
202 * `state_before` : State dictionary for any particular instance
203 * `state_after` : State dictionary for any particular instance
206 for router
, state_data
in state_before
.items():
207 for state
, value
in state_data
.items():
208 if state_before
[router
][state
] >= state_after
[router
][state
]:
210 "[DUT: %s]: state %s value has not"
211 " incremented, Initial value: %s, "
212 "Current value: %s [FAILED!!]"
216 state_before
[router
][state
],
217 state_after
[router
][state
],
223 "[DUT: %s]: State %s value is "
224 "incremented, Initial value: %s, Current value: %s"
228 state_before
[router
][state
],
229 state_after
[router
][state
],
235 #####################################################
239 #####################################################
242 def test_pim6_multiple_groups_same_RP_address_p2(request
):
244 Configure multiple groups (10 grps) with same RP address
250 r0-----r1-------------r3-----r5
258 tc_name
= request
.node
.name
259 write_test_header(tc_name
)
261 # Don"t run this test if we have any failure.
262 if tgen
.routers_have_failure():
263 pytest
.skip(tgen
.errors
)
265 step("Creating configuration from JSON")
266 reset_config_on_routers(tgen
)
269 "r1": {"debug": {"log_file": "r1_debug.log", "enable": ["pim6d"]}},
270 "r2": {"debug": {"log_file": "r2_debug.log", "enable": ["pim6d"]}},
271 "r3": {"debug": {"log_file": "r3_debug.log", "enable": ["pim6d"]}},
272 "r4": {"debug": {"log_file": "r4_debug.log", "enable": ["pim6d"]}},
275 result
= create_debug_log_config(tgen
, input_dict
)
277 step("Enable MLD on r1 interface")
278 step("Enable the PIM6 on all the interfaces of r1, r2, r3 and r4 routers")
279 step("r2: Configure r2 as RP")
285 "rp_addr": TOPO
["routers"]["r2"]["links"]["lo"]["ipv6"].split(
288 "group_addr_range": GROUP_RANGE_3
,
295 result
= create_pim_config(tgen
, TOPO
, input_dict
)
296 assert result
is True, "Testcase {} : Failed Error: {}".format(tc_name
, result
)
298 step("r2: verify rp-info")
301 rp_address
= TOPO
["routers"]["r2"]["links"]["lo"]["ipv6"].split("/")[0]
302 result
= verify_pim_rp_info(tgen
, TOPO
, dut
, GROUP_RANGE_3
, oif
, rp_address
, SOURCE
)
303 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
305 group_address_list
= GROUP_ADDRESS_LIST_1
+ GROUP_ADDRESS_LIST_2
306 step("r0: Send MLD join for 10 groups")
307 intf
= TOPO
["routers"]["r0"]["links"]["r1"]["interface"]
308 intf_ip
= TOPO
["routers"]["r0"]["links"]["r1"]["ipv6"].split("/")[0]
309 result
= socat_send_mld_join(
310 tgen
, "r0", "UDP6-RECV", group_address_list
, intf
, intf_ip
312 assert result
is True, "Testcase {}: Failed Error: {}".format(tc_name
, result
)
314 step("r1: Verify MLD groups")
316 intf_r1_r0
= TOPO
["routers"]["r1"]["links"]["r0"]["interface"]
317 result
= verify_mld_groups(tgen
, dut
, intf_r1_r0
, group_address_list
)
318 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
320 step("r5: Send multicast traffic for group {}".format(group_address_list
))
321 intf
= TOPO
["routers"]["r5"]["links"]["r3"]["interface"]
322 SOURCE_ADDRESS
= TOPO
["routers"]["r5"]["links"]["r3"]["ipv6"].split("/")[0]
323 result
= socat_send_pim6_traffic(tgen
, "r5", "UDP6-SEND", group_address_list
, intf
)
324 assert result
is True, "Testcase {}: Failed Error: {}".format(tc_name
, result
)
326 step("r1: Verify (*, G) upstream IIF interface")
328 iif
= TOPO
["routers"]["r1"]["links"]["r2"]["interface"]
329 result
= verify_upstream_iif(tgen
, dut
, iif
, STAR
, group_address_list
)
330 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
332 step("r1: Verify (*, G) upstream join state and join timer")
333 result
= verify_join_state_and_timer(
334 tgen
, dut
, iif
, STAR
, group_address_list
, addr_type
="ipv6"
336 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
338 step("r1: Verify (*, G) ip mroutes")
339 oif
= TOPO
["routers"]["r1"]["links"]["r0"]["interface"]
340 result
= verify_mroutes(tgen
, dut
, STAR
, group_address_list
, iif
, oif
)
341 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
343 step("r1: Verify (S, G) ip mroutes")
344 iif
= TOPO
["routers"]["r1"]["links"]["r3"]["interface"]
345 result
= verify_mroutes(tgen
, dut
, SOURCE_ADDRESS
, group_address_list
, iif
, oif
)
346 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
348 step("r1: Verify (S, G) upstream IIF interface")
349 result
= verify_upstream_iif(tgen
, dut
, iif
, SOURCE_ADDRESS
, group_address_list
)
350 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
352 step("r1: Verify (S, G) upstream join state and join timer")
353 result
= verify_join_state_and_timer(
354 tgen
, dut
, iif
, SOURCE_ADDRESS
, group_address_list
, addr_type
="ipv6"
356 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
358 step("r2: Verify (*, G) upstream IIF interface")
361 result
= verify_upstream_iif(tgen
, dut
, iif
, STAR
, group_address_list
)
362 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
364 step("r2: Verify (*, G) upstream join state and join timer")
365 result
= verify_join_state_and_timer(
366 tgen
, dut
, iif
, STAR
, group_address_list
, addr_type
="ipv6"
368 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
370 step("r2: Verify (*, G) ip mroutes")
371 oif
= TOPO
["routers"]["r2"]["links"]["r1"]["interface"]
372 result
= verify_mroutes(tgen
, dut
, STAR
, group_address_list
, iif
, oif
)
373 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
375 step("r3: Verify (S, G) upstream IIF interface")
377 iif
= TOPO
["routers"]["r3"]["links"]["r5"]["interface"]
378 result
= verify_upstream_iif(tgen
, dut
, iif
, SOURCE_ADDRESS
, group_address_list
)
379 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
381 step("r3: Verify (S, G) upstream join state and join timer")
382 result
= verify_join_state_and_timer(
391 assert result
is not True, (
392 "Testcase {} : Failed \n "
393 "r3: (S,G) upstream state is joined and join timer is running\n Error: {}".format(
398 step("r3: Verify (S, G) ip mroutes")
399 oif
= TOPO
["routers"]["r3"]["links"]["r1"]["interface"]
400 result
= verify_mroutes(tgen
, dut
, SOURCE_ADDRESS
, group_address_list
, iif
, oif
)
401 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
403 step("r2: Verify (S, G) upstream IIF interface")
405 iif
= TOPO
["routers"]["r2"]["links"]["r3"]["interface"]
406 result
= verify_upstream_iif(
407 tgen
, dut
, iif
, SOURCE_ADDRESS
, group_address_list
, joinState
="NotJoined"
409 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
411 step("r2: Verify (S, G) upstream join state and join timer")
412 result
= verify_join_state_and_timer(
421 assert result
is not True, (
422 "Testcase {} : Failed \n "
423 "r2: (S,G) upstream state is joined and join timer is running\n Error: {}".format(
428 step("r2: Verify (S, G) ip mroutes")
430 result
= verify_mroutes(tgen
, dut
, SOURCE_ADDRESS
, group_address_list
, iif
, oif
)
431 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
433 step("r1: Delete RP configuration")
439 "rp_addr": TOPO
["routers"]["r2"]["links"]["lo"]["ipv6"].split(
442 "group_addr_range": GROUP_RANGE_3
,
450 result
= create_pim_config(tgen
, TOPO
, input_dict
)
451 assert result
is True, "Testcase {} : Failed Error: {}".format(tc_name
, result
)
453 step("r1: Shut the interface r1-r2-eth1 from R1 to R2")
455 intf
= TOPO
["routers"]["r1"]["links"]["r2"]["interface"]
456 shutdown_bringup_interface(tgen
, dut
, intf
, False)
458 step("r1: No Shut the interface r1-r2-eth1 from R1 to R2")
459 shutdown_bringup_interface(tgen
, dut
, intf
, True)
461 step("r1: Configure RP")
467 "rp_addr": TOPO
["routers"]["r2"]["links"]["lo"]["ipv6"].split(
470 "group_addr_range": GROUP_RANGE_3
,
477 result
= create_pim_config(tgen
, TOPO
, input_dict
)
478 assert result
is True, "Testcase {} : Failed Error: {}".format(tc_name
, result
)
480 step("r1: Shut the interface r1-r0-eth0 from R1 to R2")
481 intf
= TOPO
["routers"]["r1"]["links"]["r0"]["interface"]
482 shutdown_bringup_interface(tgen
, dut
, intf
, False)
484 step("r1: No Shut the interface r1-r0-eth0 from R1 to R2")
485 shutdown_bringup_interface(tgen
, dut
, intf
, True)
487 step("r1: Verify (*, G) upstream IIF interface")
489 iif
= TOPO
["routers"]["r1"]["links"]["r2"]["interface"]
490 result
= verify_upstream_iif(tgen
, dut
, iif
, STAR
, group_address_list
)
491 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
493 step("r1: Verify (*, G) upstream join state and join timer")
494 result
= verify_join_state_and_timer(
495 tgen
, dut
, iif
, STAR
, group_address_list
, addr_type
="ipv6"
497 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
499 step("r1: Verify (*, G) ip mroutes")
500 oif
= TOPO
["routers"]["r1"]["links"]["r0"]["interface"]
501 result
= verify_mroutes(tgen
, dut
, STAR
, group_address_list
, iif
, oif
)
502 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
504 step("r1: Verify (S, G) upstream IIF interface")
505 iif
= TOPO
["routers"]["r1"]["links"]["r3"]["interface"]
506 result
= verify_upstream_iif(tgen
, dut
, iif
, SOURCE_ADDRESS
, group_address_list
)
507 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
509 step("r1: Verify (S, G) upstream join state and join timer")
510 result
= verify_join_state_and_timer(
511 tgen
, dut
, iif
, SOURCE_ADDRESS
, group_address_list
, addr_type
="ipv6"
513 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
515 step("r1: Verify (S, G) ip mroutes")
516 result
= verify_mroutes(tgen
, dut
, SOURCE_ADDRESS
, group_address_list
, iif
, oif
)
517 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
519 step("r2: Verify (*, G) upstream IIF interface")
522 result
= verify_upstream_iif(tgen
, dut
, iif
, STAR
, group_address_list
)
523 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
525 step("r2: Verify (*, G) upstream join state and join timer")
526 result
= verify_join_state_and_timer(
527 tgen
, dut
, iif
, STAR
, group_address_list
, addr_type
="ipv6"
529 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
531 step("r2: Verify (*, G) ip mroutes")
532 oif
= TOPO
["routers"]["r2"]["links"]["r1"]["interface"]
533 result
= verify_mroutes(tgen
, dut
, STAR
, group_address_list
, iif
, oif
)
534 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
536 step("r3: Verify (S, G) upstream IIF interface")
538 iif
= TOPO
["routers"]["r3"]["links"]["r5"]["interface"]
539 result
= verify_upstream_iif(tgen
, dut
, iif
, SOURCE_ADDRESS
, group_address_list
)
540 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
542 step("r3: Verify (S, G) upstream join state and join timer")
543 result
= verify_join_state_and_timer(
552 assert result
is not True, (
553 "Testcase {} : Failed \n "
554 "r3: (S,G) upstream state is joined and join timer is running\n Error: {}".format(
559 step("r3: Verify (S, G) ip mroutes")
560 oif
= TOPO
["routers"]["r3"]["links"]["r1"]["interface"]
561 result
= verify_mroutes(tgen
, dut
, SOURCE_ADDRESS
, group_address_list
, iif
, oif
)
562 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
564 write_test_footer(tc_name
)
567 def test_pim6_multiple_groups_different_RP_address_p2(request
):
569 Verify IIF and OIL in updated in mroute when upstream interface
576 r0-----r1-------------r3-----r5
586 tc_name
= request
.node
.name
587 write_test_header(tc_name
)
589 # Don"t run this test if we have any failure.
590 if tgen
.routers_have_failure():
591 pytest
.skip(tgen
.errors
)
593 step("Creating configuration from JSON")
594 reset_config_on_routers(tgen
)
596 step("Enable MLD on r1 interface")
597 step("Enable the PIM6 on all the interfaces of r1, r2, r3 and r4 routers")
598 step("r2: Configure r2 as RP")
599 step("r4: Configure r4 as RP")
605 "rp_addr": TOPO
["routers"]["r2"]["links"]["lo"]["ipv6"].split(
608 "group_addr_range": GROUP_RANGE_LIST_1
,
617 "rp_addr": TOPO
["routers"]["r4"]["links"]["lo"]["ipv6"].split(
620 "group_addr_range": GROUP_RANGE_LIST_2
,
627 result
= create_pim_config(tgen
, TOPO
, input_dict
)
628 assert result
is True, "Testcase {} : Failed Error: {}".format(tc_name
, result
)
630 step("r2: Verify RP info")
633 rp_address
= TOPO
["routers"]["r2"]["links"]["lo"]["ipv6"].split("/")[0]
634 result
= verify_pim_rp_info(
635 tgen
, TOPO
, dut
, GROUP_RANGE_LIST_1
, oif
, rp_address
, SOURCE
637 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
639 step("r4: Verify RP info")
641 rp_address
= TOPO
["routers"]["r4"]["links"]["lo"]["ipv6"].split("/")[0]
642 result
= verify_pim_rp_info(
643 tgen
, TOPO
, dut
, GROUP_RANGE_LIST_2
, oif
, rp_address
, SOURCE
645 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
647 group_address_list
= GROUP_ADDRESS_LIST_1
+ GROUP_ADDRESS_LIST_2
648 step("r0: Send MLD join for 10 groups")
649 intf
= TOPO
["routers"]["r0"]["links"]["r1"]["interface"]
650 intf_ip
= TOPO
["routers"]["r0"]["links"]["r1"]["ipv6"].split("/")[0]
651 result
= socat_send_mld_join(
652 tgen
, "r0", "UDP6-RECV", group_address_list
, intf
, intf_ip
654 assert result
is True, "Testcase {}: Failed Error: {}".format(tc_name
, result
)
656 step("r1: Verify MLD groups")
658 intf_r1_r0
= TOPO
["routers"]["r1"]["links"]["r0"]["interface"]
659 result
= verify_mld_groups(tgen
, dut
, intf_r1_r0
, group_address_list
)
660 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
662 step("r5: Send multicast traffic for group {}".format(group_address_list
))
663 intf
= TOPO
["routers"]["r5"]["links"]["r3"]["interface"]
664 SOURCE_ADDRESS
= TOPO
["routers"]["r5"]["links"]["r3"]["ipv6"].split("/")[0]
665 result
= socat_send_pim6_traffic(tgen
, "r5", "UDP6-SEND", group_address_list
, intf
)
666 assert result
is True, "Testcase {}: Failed Error: {}".format(tc_name
, result
)
668 step("r1: Verify (*, G) upstream IIF interface")
670 iif1
= TOPO
["routers"]["r1"]["links"]["r2"]["interface"]
671 iif2
= TOPO
["routers"]["r1"]["links"]["r4"]["interface"]
673 for _iif
, _group
in zip([iif1
, iif2
], [GROUP_ADDRESS_LIST_1
, GROUP_ADDRESS_LIST_2
]):
674 result
= verify_upstream_iif(tgen
, dut
, _iif
, STAR
, _group
)
675 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
677 step("r1: Verify (*, G) upstream join state and join timer")
678 result
= verify_join_state_and_timer(
679 tgen
, dut
, _iif
, STAR
, _group
, addr_type
="ipv6"
681 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
683 step("r1: Verify (*, G) ip mroutes")
684 iif
= TOPO
["routers"]["r1"]["links"]["r2"]["interface"]
685 oif
= TOPO
["routers"]["r1"]["links"]["r0"]["interface"]
686 result
= verify_mroutes(tgen
, dut
, STAR
, GROUP_ADDRESS_LIST_1
, iif
, oif
)
687 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
689 step("r1: Verify (S, G) upstream IIF interface")
690 iif
= TOPO
["routers"]["r1"]["links"]["r3"]["interface"]
691 result
= verify_upstream_iif(tgen
, dut
, iif
, SOURCE_ADDRESS
, GROUP_ADDRESS_LIST_1
)
692 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
694 step("r1: Verify (S, G) upstream join state and join timer")
695 result
= verify_join_state_and_timer(
696 tgen
, dut
, iif
, SOURCE_ADDRESS
, GROUP_ADDRESS_LIST_1
, addr_type
="ipv6"
698 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
700 step("r1: Verify (S, G) ip mroutes")
701 result
= verify_mroutes(tgen
, dut
, SOURCE_ADDRESS
, GROUP_ADDRESS_LIST_1
, iif
, oif
)
702 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
704 step("r2: Verify (*, G) upstream IIF interface")
707 result
= verify_upstream_iif(tgen
, dut
, iif
, STAR
, GROUP_ADDRESS_LIST_1
)
708 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
710 step("r2: Verify (*, G) upstream join state and join timer")
711 result
= verify_join_state_and_timer(
712 tgen
, dut
, iif
, STAR
, GROUP_ADDRESS_LIST_1
, addr_type
="ipv6"
714 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
716 step("r2: Verify (*, G) ip mroutes")
717 oif
= TOPO
["routers"]["r2"]["links"]["r1"]["interface"]
718 result
= verify_mroutes(tgen
, dut
, STAR
, GROUP_ADDRESS_LIST_1
, iif
, oif
)
719 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
721 step("r2: Verify (S, G) upstream IIF interface")
722 iif
= TOPO
["routers"]["r2"]["links"]["r3"]["interface"]
723 result
= verify_upstream_iif(
724 tgen
, dut
, iif
, SOURCE_ADDRESS
, GROUP_ADDRESS_LIST_1
, joinState
="NotJoined"
726 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
728 step("r2: Verify (S, G) upstream join state and join timer")
729 result
= verify_join_state_and_timer(
734 GROUP_ADDRESS_LIST_1
,
738 assert result
is not True, (
739 "Testcase {} : Failed \n "
740 "r2: (S,G) upstream state is joined and join timer is running\n Error: {}".format(
745 step("r2: Verify (S, G) ip mroutes")
747 result
= verify_mroutes(tgen
, dut
, SOURCE_ADDRESS
, GROUP_ADDRESS_LIST_1
, iif
, oif
)
748 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
750 step("r3: Verify (S, G) upstream IIF interface")
752 iif
= TOPO
["routers"]["r3"]["links"]["r5"]["interface"]
753 result
= verify_upstream_iif(tgen
, dut
, iif
, SOURCE_ADDRESS
, GROUP_ADDRESS_LIST_1
)
754 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
756 step("r3: Verify (S, G) upstream join state and join timer")
757 result
= verify_join_state_and_timer(
762 GROUP_ADDRESS_LIST_1
,
766 assert result
is not True, (
767 "Testcase {} : Failed \n "
768 "r3: (S,G) upstream state is joined and join timer is running\n Error: {}".format(
773 step("r3: Verify (S, G) ip mroutes")
774 oif
= TOPO
["routers"]["r3"]["links"]["r1"]["interface"]
775 result
= verify_mroutes(tgen
, dut
, SOURCE_ADDRESS
, GROUP_ADDRESS_LIST_1
, iif
, oif
)
776 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
778 step("r1: Verify (*, G) upstream IIF interface")
780 iif
= TOPO
["routers"]["r1"]["links"]["r4"]["interface"]
781 result
= verify_upstream_iif(tgen
, dut
, iif
, STAR
, GROUP_ADDRESS_LIST_2
)
782 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
784 step("r1: Verify (*, G) upstream join state and join timer")
785 result
= verify_join_state_and_timer(
786 tgen
, dut
, iif
, STAR
, GROUP_ADDRESS_LIST_2
, addr_type
="ipv6"
788 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
790 step("r1: Verify (*, G) ip mroutes")
791 oif
= TOPO
["routers"]["r1"]["links"]["r0"]["interface"]
792 result
= verify_mroutes(tgen
, dut
, STAR
, GROUP_ADDRESS_LIST_2
, iif
, oif
)
793 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
795 step("r1: Verify (S, G) upstream IIF interface")
796 iif
= TOPO
["routers"]["r1"]["links"]["r3"]["interface"]
797 result
= verify_upstream_iif(tgen
, dut
, iif
, SOURCE_ADDRESS
, GROUP_ADDRESS_LIST_2
)
798 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
800 step("r1: Verify (S, G) upstream join state and join timer")
801 result
= verify_join_state_and_timer(
802 tgen
, dut
, iif
, SOURCE_ADDRESS
, GROUP_ADDRESS_LIST_2
, addr_type
="ipv6"
804 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
806 step("r1: Verify (S, G) ip mroutes")
807 result
= verify_mroutes(tgen
, dut
, SOURCE_ADDRESS
, GROUP_ADDRESS_LIST_2
, iif
, oif
)
808 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
810 step("r4: Verify (*, G) upstream IIF interface")
813 result
= verify_upstream_iif(tgen
, dut
, iif
, STAR
, GROUP_ADDRESS_LIST_2
)
814 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
816 step("r4: Verify (*, G) upstream join state and join timer")
817 result
= verify_join_state_and_timer(
818 tgen
, dut
, iif
, STAR
, GROUP_ADDRESS_LIST_2
, addr_type
="ipv6"
820 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
822 step("r4: Verify (*, G) ip mroutes")
823 oif
= TOPO
["routers"]["r4"]["links"]["r1"]["interface"]
824 result
= verify_mroutes(tgen
, dut
, STAR
, GROUP_ADDRESS_LIST_2
, iif
, oif
)
825 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
827 step("r4: Verify (S, G) upstream IIF interface")
828 iif
= TOPO
["routers"]["r4"]["links"]["r3"]["interface"]
829 result
= verify_upstream_iif(
830 tgen
, dut
, iif
, SOURCE_ADDRESS
, GROUP_ADDRESS_LIST_2
, joinState
="NotJoined"
832 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
834 step("r4: Verify (S, G) upstream join state and join timer")
835 result
= verify_join_state_and_timer(
840 GROUP_ADDRESS_LIST_2
,
844 assert result
is not True, (
845 "Testcase {} : Failed \n "
846 "r4: (S,G) upstream state is joined and join timer is running\n Error: {}".format(
851 step("r4: Verify (S, G) ip mroutes")
853 result
= verify_mroutes(tgen
, dut
, SOURCE_ADDRESS
, GROUP_ADDRESS_LIST_2
, iif
, oif
)
854 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
856 step("r3: Verify (S, G) upstream IIF interface")
858 iif
= TOPO
["routers"]["r3"]["links"]["r5"]["interface"]
859 result
= verify_upstream_iif(tgen
, dut
, iif
, SOURCE_ADDRESS
, GROUP_ADDRESS_LIST_2
)
860 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
862 step("r3: Verify (S, G) upstream join state and join timer")
863 result
= verify_join_state_and_timer(
868 GROUP_ADDRESS_LIST_2
,
872 assert result
is not True, "Testcase {} :Failed \n Error: {}".format(
876 step("r3: Verify (S, G) ip mroutes")
877 oif
= TOPO
["routers"]["r3"]["links"]["r1"]["interface"]
878 result
= verify_mroutes(tgen
, dut
, SOURCE_ADDRESS
, GROUP_ADDRESS_LIST_2
, iif
, oif
)
879 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
881 step("Delete RP configuration")
887 "rp_addr": TOPO
["routers"]["r2"]["links"]["lo"]["ipv6"].split(
890 "group_addr_range": GROUP_RANGE_LIST_1
,
900 "rp_addr": TOPO
["routers"]["r4"]["links"]["lo"]["ipv6"].split(
903 "group_addr_range": GROUP_RANGE_LIST_2
,
911 result
= create_pim_config(tgen
, TOPO
, input_dict
)
912 assert result
is True, "Testcase {} : Failed Error: {}".format(tc_name
, result
)
914 step("r1, r2, r3, r4: Re-configure RP")
920 "rp_addr": TOPO
["routers"]["r2"]["links"]["lo"]["ipv6"].split(
923 "group_addr_range": GROUP_RANGE_LIST_1
,
932 "rp_addr": TOPO
["routers"]["r4"]["links"]["lo"]["ipv6"].split(
935 "group_addr_range": GROUP_RANGE_LIST_2
,
942 result
= create_pim_config(tgen
, TOPO
, input_dict
)
943 assert result
is True, "Testcase {} : Failed Error: {}".format(tc_name
, result
)
945 step("r1: Shut/No Shut the interfacesfrom R1 to R2, R4 and R0")
947 intf1
= TOPO
["routers"]["r1"]["links"]["r2"]["interface"]
948 intf2
= TOPO
["routers"]["r1"]["links"]["r4"]["interface"]
949 intf3
= TOPO
["routers"]["r1"]["links"]["r0"]["interface"]
950 for intf
in [intf1
, intf2
, intf3
]:
951 shutdown_bringup_interface(tgen
, dut
, intf
, False)
952 shutdown_bringup_interface(tgen
, dut
, intf
, True)
954 step("r1: Verify (*, G) upstream IIF interface")
956 iif
= TOPO
["routers"]["r1"]["links"]["r2"]["interface"]
957 result
= verify_upstream_iif(tgen
, dut
, iif
, STAR
, GROUP_ADDRESS_LIST_1
)
958 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
960 step("r1: Verify (*, G) upstream join state and join timer")
961 result
= verify_join_state_and_timer(
962 tgen
, dut
, iif
, STAR
, GROUP_ADDRESS_LIST_1
, addr_type
="ipv6"
964 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
966 step("r1: Verify (*, G) ip mroutes")
967 oif
= TOPO
["routers"]["r1"]["links"]["r0"]["interface"]
968 result
= verify_mroutes(tgen
, dut
, STAR
, GROUP_ADDRESS_LIST_1
, iif
, oif
)
969 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
971 step("r1: Verify (S, G) upstream IIF interface")
972 iif
= TOPO
["routers"]["r1"]["links"]["r3"]["interface"]
973 result
= verify_upstream_iif(tgen
, dut
, iif
, SOURCE_ADDRESS
, GROUP_ADDRESS_LIST_1
)
974 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
976 step("r1: Verify (S, G) upstream join state and join timer")
977 result
= verify_join_state_and_timer(
978 tgen
, dut
, iif
, SOURCE_ADDRESS
, GROUP_ADDRESS_LIST_1
, addr_type
="ipv6"
980 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
982 step("r1: Verify (S, G) ip mroutes")
983 result
= verify_mroutes(tgen
, dut
, SOURCE_ADDRESS
, GROUP_ADDRESS_LIST_1
, iif
, oif
)
984 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
986 step("r2: Verify (*, G) upstream IIF interface")
989 result
= verify_upstream_iif(tgen
, dut
, iif
, STAR
, GROUP_ADDRESS_LIST_1
)
990 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
992 step("r2: Verify (*, G) upstream join state and join timer")
993 result
= verify_join_state_and_timer(
994 tgen
, dut
, iif
, STAR
, GROUP_ADDRESS_LIST_1
, addr_type
="ipv6"
996 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
998 step("r2: Verify (*, G) ip mroutes")
999 oif
= TOPO
["routers"]["r2"]["links"]["r1"]["interface"]
1000 result
= verify_mroutes(tgen
, dut
, STAR
, GROUP_ADDRESS_LIST_1
, iif
, oif
)
1001 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
1003 step("r2: Verify (S, G) upstream IIF interface")
1004 iif
= TOPO
["routers"]["r2"]["links"]["r3"]["interface"]
1005 result
= verify_upstream_iif(
1006 tgen
, dut
, iif
, SOURCE_ADDRESS
, GROUP_ADDRESS_LIST_1
, joinState
="NotJoined"
1008 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
1010 step("r2: Verify (S, G) upstream join state and join timer")
1011 result
= verify_join_state_and_timer(
1016 GROUP_ADDRESS_LIST_1
,
1020 assert result
is not True, (
1021 "Testcase {} : Failed \n "
1022 "r2: (S,G) upstream state is joined and join timer is running\n Error: {}".format(
1027 step("r2: Verify (S, G) ip mroutes")
1029 result
= verify_mroutes(tgen
, dut
, SOURCE_ADDRESS
, GROUP_ADDRESS_LIST_1
, iif
, oif
)
1030 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
1032 step("r3: Verify (S, G) upstream IIF interface")
1034 iif
= TOPO
["routers"]["r3"]["links"]["r5"]["interface"]
1035 result
= verify_upstream_iif(tgen
, dut
, iif
, SOURCE_ADDRESS
, GROUP_ADDRESS_LIST_1
)
1036 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
1038 step("r3: Verify (S, G) upstream join state and join timer")
1039 result
= verify_join_state_and_timer(
1044 GROUP_ADDRESS_LIST_1
,
1048 assert result
is not True, (
1049 "Testcase {} : Failed \n "
1050 "r3: (S,G) upstream state is joined and join timer is running\n Error: {}".format(
1055 step("r3: Verify (S, G) ip mroutes")
1056 oif
= TOPO
["routers"]["r3"]["links"]["r1"]["interface"]
1057 result
= verify_mroutes(tgen
, dut
, SOURCE_ADDRESS
, GROUP_ADDRESS_LIST_1
, iif
, oif
)
1058 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
1060 step("r1: Verify (*, G) upstream IIF interface")
1062 iif
= TOPO
["routers"]["r1"]["links"]["r4"]["interface"]
1063 result
= verify_upstream_iif(tgen
, dut
, iif
, STAR
, GROUP_ADDRESS_LIST_2
)
1064 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
1066 step("r1: Verify (*, G) upstream join state and join timer")
1067 result
= verify_join_state_and_timer(
1068 tgen
, dut
, iif
, STAR
, GROUP_ADDRESS_LIST_2
, addr_type
="ipv6"
1070 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
1072 step("r1: Verify (*, G) ip mroutes")
1073 oif
= TOPO
["routers"]["r1"]["links"]["r0"]["interface"]
1074 result
= verify_mroutes(tgen
, dut
, STAR
, GROUP_ADDRESS_LIST_2
, iif
, oif
)
1075 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
1077 step("r1: Verify (S, G) upstream IIF interface")
1078 iif
= TOPO
["routers"]["r1"]["links"]["r3"]["interface"]
1079 result
= verify_upstream_iif(tgen
, dut
, iif
, SOURCE_ADDRESS
, GROUP_ADDRESS_LIST_2
)
1080 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
1082 step("r1: Verify (S, G) upstream join state and join timer")
1083 result
= verify_join_state_and_timer(
1084 tgen
, dut
, iif
, SOURCE_ADDRESS
, GROUP_ADDRESS_LIST_2
, addr_type
="ipv6"
1086 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
1088 step("r1: Verify (S, G) ip mroutes")
1089 result
= verify_mroutes(tgen
, dut
, SOURCE_ADDRESS
, GROUP_ADDRESS_LIST_2
, iif
, oif
)
1090 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
1092 step("r4: Verify (*, G) upstream IIF interface")
1095 result
= verify_upstream_iif(tgen
, dut
, iif
, STAR
, GROUP_ADDRESS_LIST_2
)
1096 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
1098 step("r4: Verify (*, G) upstream join state and join timer")
1099 result
= verify_join_state_and_timer(
1100 tgen
, dut
, iif
, STAR
, GROUP_ADDRESS_LIST_2
, addr_type
="ipv6"
1102 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
1104 step("r4: Verify (*, G) ip mroutes")
1105 oif
= TOPO
["routers"]["r4"]["links"]["r1"]["interface"]
1106 result
= verify_mroutes(tgen
, dut
, STAR
, GROUP_ADDRESS_LIST_2
, iif
, oif
)
1107 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
1109 step("r4: Verify (S, G) upstream IIF interface")
1110 iif
= TOPO
["routers"]["r4"]["links"]["r3"]["interface"]
1111 result
= verify_upstream_iif(
1112 tgen
, dut
, iif
, SOURCE_ADDRESS
, GROUP_ADDRESS_LIST_2
, joinState
="NotJoined"
1114 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
1116 step("r4: Verify (S, G) upstream join state and join timer")
1117 result
= verify_join_state_and_timer(
1122 GROUP_ADDRESS_LIST_2
,
1126 assert result
is not True, (
1127 "Testcase {} : Failed \n "
1128 "r4: (S,G) upstream state is joined and join timer is running\n Error: {}".format(
1133 step("r4: Verify (S, G) ip mroutes")
1135 result
= verify_mroutes(tgen
, dut
, SOURCE_ADDRESS
, GROUP_ADDRESS_LIST_2
, iif
, oif
)
1136 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
1138 step("r3: Verify (S, G) upstream IIF interface")
1140 iif
= TOPO
["routers"]["r3"]["links"]["r5"]["interface"]
1141 result
= verify_upstream_iif(tgen
, dut
, iif
, SOURCE_ADDRESS
, GROUP_ADDRESS_LIST_2
)
1142 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
1144 step("r3: Verify (S, G) upstream join state and join timer")
1145 result
= verify_join_state_and_timer(
1150 GROUP_ADDRESS_LIST_2
,
1154 assert result
is not True, (
1155 "Testcase {} : Failed \n "
1156 "r3: (S,G) upstream state is joined and join timer is running\n Error: {}".format(
1161 step("r3: Verify (S, G) ip mroutes")
1162 oif
= TOPO
["routers"]["r3"]["links"]["r1"]["interface"]
1163 result
= verify_mroutes(tgen
, dut
, SOURCE_ADDRESS
, GROUP_ADDRESS_LIST_2
, iif
, oif
)
1164 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
1166 write_test_footer(tc_name
)
1169 def test_pim6_delete_RP_shut_noshut_upstream_interface_p1(request
):
1171 Verify RP info and (*,G) mroute after deleting the RP and shut /
1172 no shut the RPF interface.
1178 r0-----r1-------------r3
1181 tgen
= get_topogen()
1182 tc_name
= request
.node
.name
1183 write_test_header(tc_name
)
1185 # Don"t run this test if we have any failure.
1186 if tgen
.routers_have_failure():
1187 pytest
.skip(tgen
.errors
)
1189 step("Creating configuration from JSON")
1190 reset_config_on_routers(tgen
)
1192 step("Enable MLD on r1 interface")
1193 step("Enable the PIM6 on all the interfaces of r1, r2, r3 and r4 routers")
1194 step("r2: Configure r2 as RP")
1200 "rp_addr": TOPO
["routers"]["r2"]["links"]["lo"]["ipv6"].split(
1203 "group_addr_range": GROUP_RANGE_1
,
1210 result
= create_pim_config(tgen
, TOPO
, input_dict
)
1211 assert result
is True, "Testcase {} : Failed Error: {}".format(tc_name
, result
)
1213 step("r2: verify rp-info")
1216 rp_address
= TOPO
["routers"]["r2"]["links"]["lo"]["ipv6"].split("/")[0]
1217 result
= verify_pim_rp_info(
1218 tgen
, TOPO
, dut
, GROUP_ADDRESS_1
, oif
, rp_address
, SOURCE
1220 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
1222 step("r0: Send MLD join")
1223 intf
= TOPO
["routers"]["r0"]["links"]["r1"]["interface"]
1224 intf_ip
= TOPO
["routers"]["r0"]["links"]["r1"]["ipv6"].split("/")[0]
1225 result
= socat_send_mld_join(
1226 tgen
, "r0", "UDP6-RECV", GROUP_ADDRESS_1
, intf
, intf_ip
1228 assert result
is True, "Testcase {}: Failed Error: {}".format(tc_name
, result
)
1230 step("r1: Verify MLD groups")
1232 intf_r1_r0
= TOPO
["routers"]["r1"]["links"]["r0"]["interface"]
1233 result
= verify_mld_groups(tgen
, dut
, intf_r1_r0
, GROUP_ADDRESS_1
)
1234 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
1236 step("r1: Verify (*, G) ip mroutes created")
1237 iif
= TOPO
["routers"]["r1"]["links"]["r2"]["interface"]
1238 oif
= TOPO
["routers"]["r1"]["links"]["r0"]["interface"]
1239 result
= verify_mroutes(tgen
, dut
, STAR
, GROUP_ADDRESS_1
, iif
, oif
)
1240 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
1242 step("r2: Verify (*, G) ip mroutes created")
1245 oif
= TOPO
["routers"]["r2"]["links"]["r1"]["interface"]
1246 result
= verify_mroutes(tgen
, dut
, STAR
, GROUP_ADDRESS_1
, iif
, oif
)
1247 assert result
is True, ASSERT_MSG
.format(tc_name
, result
)
1249 step("r1: Delete RP configuration")
1255 "rp_addr": TOPO
["routers"]["r2"]["links"]["lo"]["ipv6"].split(
1258 "group_addr_range": GROUP_RANGE_1
,
1266 result
= create_pim_config(tgen
, TOPO
, input_dict
)
1267 assert result
is True, "Testcase {} : Failed Error: {}".format(tc_name
, result
)
1269 step("r1: Shut/No Shut the interface r1-r2-eth1/r1-r0-eth0 from R1 to R2")
1271 intf1
= TOPO
["routers"]["r1"]["links"]["r2"]["interface"]
1272 intf2
= TOPO
["routers"]["r1"]["links"]["r0"]["interface"]
1273 for intf
in [intf1
, intf2
]:
1274 shutdown_bringup_interface(tgen
, dut
, intf
, False)
1275 shutdown_bringup_interface(tgen
, dut
, intf
, True)
1277 step("r2: Shut the RP interface lo")
1280 shutdown_bringup_interface(tgen
, dut
, intf
, False)
1282 step("r1: Shut the interface r1-r2-eth1/r1-r3-eth2 towards RP")
1283 intf3
= TOPO
["routers"]["r1"]["links"]["r3"]["interface"]
1284 for intf
in [intf1
, intf3
]:
1285 shutdown_bringup_interface(tgen
, dut
, intf
, False)
1287 step("r1: Verify (*, G) ip mroutes cleared")
1289 iif
= TOPO
["routers"]["r1"]["links"]["r2"]["interface"]
1290 oif
= TOPO
["routers"]["r1"]["links"]["r0"]["interface"]
1291 result
= verify_mroutes(tgen
, dut
, STAR
, GROUP_ADDRESS_1
, iif
, oif
, expected
=False)
1292 assert result
is not True, (
1293 "Testcase {} : Failed \n "
1294 "r1: (*,G) mroutes are not cleared after shut of R1 to R0 link\n Error: {}".format(
1299 step("r2: Verify (*, G) ip mroutes cleared")
1302 oif
= TOPO
["routers"]["r2"]["links"]["r1"]["interface"]
1303 result
= verify_mroutes(tgen
, dut
, STAR
, GROUP_ADDRESS_1
, iif
, oif
, expected
=False)
1304 assert result
is not True, (
1305 "Testcase {} : Failed \n "
1306 "r2: (*,G) mroutes are not cleared after shut of R1 to R0 link\n Error: {}".format(
1311 write_test_footer(tc_name
)
1314 if __name__
== "__main__":
1315 args
= ["-s"] + sys
.argv
[1:]
1316 sys
.exit(pytest
.main(args
))