mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-14 12:41:21 +00:00
Merge pull request #7782 from kuldeepkash/multicast_pim_sm_topo2
tests: Add new scenarios to test multicast-pim-sm
This commit is contained in:
commit
8cf7ab7539
@ -539,7 +539,8 @@ def configure_pim_force_expire(tgen, topo, input_dict, build=False):
|
|||||||
#############################################
|
#############################################
|
||||||
# Verification APIs
|
# Verification APIs
|
||||||
#############################################
|
#############################################
|
||||||
def verify_pim_neighbors(tgen, topo, dut=None, iface=None):
|
@retry(attempts=6, wait=2, return_is_str=True)
|
||||||
|
def verify_pim_neighbors(tgen, topo, dut=None, iface=None, nbr_ip=None):
|
||||||
"""
|
"""
|
||||||
Verify all PIM neighbors are up and running, config is verified
|
Verify all PIM neighbors are up and running, config is verified
|
||||||
using "show ip pim neighbor" cli
|
using "show ip pim neighbor" cli
|
||||||
@ -550,10 +551,11 @@ def verify_pim_neighbors(tgen, topo, dut=None, iface=None):
|
|||||||
* `topo` : json file data
|
* `topo` : json file data
|
||||||
* `dut` : dut info
|
* `dut` : dut info
|
||||||
* `iface` : link for which PIM nbr need to check
|
* `iface` : link for which PIM nbr need to check
|
||||||
|
* `nbr_ip` : neighbor ip of interface
|
||||||
|
|
||||||
Usage
|
Usage
|
||||||
-----
|
-----
|
||||||
result = verify_pim_neighbors(tgen, topo, dut, link)
|
result = verify_pim_neighbors(tgen, topo, dut, iface=ens192, nbr_ip=20.1.1.2)
|
||||||
|
|
||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
@ -1530,8 +1532,8 @@ def verify_pim_interface_traffic(tgen, input_dict):
|
|||||||
return output_dict
|
return output_dict
|
||||||
|
|
||||||
|
|
||||||
@retry(attempts=31, wait=2, return_is_str=True)
|
@retry(attempts=21, wait=2, return_is_str=True)
|
||||||
def verify_pim_interface(tgen, topo, dut):
|
def verify_pim_interface(tgen, topo, dut, interface=None, interface_ip=None):
|
||||||
"""
|
"""
|
||||||
Verify all PIM interface are up and running, config is verified
|
Verify all PIM interface are up and running, config is verified
|
||||||
using "show ip pim interface" cli
|
using "show ip pim interface" cli
|
||||||
@ -1541,10 +1543,12 @@ def verify_pim_interface(tgen, topo, dut):
|
|||||||
* `tgen`: topogen object
|
* `tgen`: topogen object
|
||||||
* `topo` : json file data
|
* `topo` : json file data
|
||||||
* `dut` : device under test
|
* `dut` : device under test
|
||||||
|
* `interface` : interface name
|
||||||
|
* `interface_ip` : interface ip address
|
||||||
|
|
||||||
Usage
|
Usage
|
||||||
-----
|
-----
|
||||||
result = verify_pim_interfacetgen, topo, dut)
|
result = verify_pim_interfacetgen, topo, dut, interface=ens192, interface_ip=20.1.1.1)
|
||||||
|
|
||||||
Returns
|
Returns
|
||||||
-------
|
-------
|
||||||
@ -1560,10 +1564,28 @@ def verify_pim_interface(tgen, topo, dut):
|
|||||||
logger.info("[DUT: %s]: Verifying PIM interface status:", dut)
|
logger.info("[DUT: %s]: Verifying PIM interface status:", dut)
|
||||||
|
|
||||||
rnode = tgen.routers()[dut]
|
rnode = tgen.routers()[dut]
|
||||||
show_ip_pim_interface_json = run_frr_cmd(
|
show_ip_pim_interface_json = rnode.\
|
||||||
rnode, "show ip pim interface json", isjson=True
|
vtysh_cmd("show ip pim interface json", isjson=True)
|
||||||
)
|
|
||||||
|
|
||||||
|
logger.info("show_ip_pim_interface_json: \n %s",
|
||||||
|
show_ip_pim_interface_json)
|
||||||
|
|
||||||
|
if interface_ip:
|
||||||
|
if interface in show_ip_pim_interface_json:
|
||||||
|
pim_intf_json = show_ip_pim_interface_json[interface]
|
||||||
|
if pim_intf_json["address"] != interface_ip:
|
||||||
|
errormsg = ("[DUT %s]: PIM interface "
|
||||||
|
"ip is not correct "
|
||||||
|
"[FAILED]!! Expected : %s, Found : %s"
|
||||||
|
%(dut, pim_intf_json["address"],interface_ip))
|
||||||
|
return errormsg
|
||||||
|
else:
|
||||||
|
logger.info("[DUT %s]: PIM interface "
|
||||||
|
"ip is correct "
|
||||||
|
"[Passed]!! Expected : %s, Found : %s"
|
||||||
|
%(dut, pim_intf_json["address"],interface_ip))
|
||||||
|
return True
|
||||||
|
else:
|
||||||
for destLink, data in topo["routers"][dut]["links"].items():
|
for destLink, data in topo["routers"][dut]["links"].items():
|
||||||
if "type" in data and data["type"] == "loopback":
|
if "type" in data and data["type"] == "loopback":
|
||||||
continue
|
continue
|
||||||
@ -1573,43 +1595,24 @@ def verify_pim_interface(tgen, topo, dut):
|
|||||||
pim_intf_ip = data["ipv4"].split("/")[0]
|
pim_intf_ip = data["ipv4"].split("/")[0]
|
||||||
|
|
||||||
if pim_interface in show_ip_pim_interface_json:
|
if pim_interface in show_ip_pim_interface_json:
|
||||||
pim_intf_json = show_ip_pim_interface_json[pim_interface]
|
pim_intf_json = show_ip_pim_interface_json\
|
||||||
|
[pim_interface]
|
||||||
|
|
||||||
# Verifying PIM interface
|
# Verifying PIM interface
|
||||||
if (
|
if pim_intf_json["address"] != pim_intf_ip and \
|
||||||
pim_intf_json["address"] != pim_intf_ip
|
pim_intf_json["state"] != "up":
|
||||||
and pim_intf_json["state"] != "up"
|
errormsg = ("[DUT %s]: PIM interface: %s "
|
||||||
):
|
|
||||||
errormsg = (
|
|
||||||
"[DUT %s]: PIM interface: %s "
|
|
||||||
"PIM interface ip: %s, status check "
|
"PIM interface ip: %s, status check "
|
||||||
"[FAILED]!! Expected : %s, Found : %s"
|
"[FAILED]!! Expected : %s, Found : %s"
|
||||||
% (
|
%(dut, pim_interface, pim_intf_ip,
|
||||||
dut,
|
pim_interface, pim_intf_json["state"]))
|
||||||
pim_interface,
|
|
||||||
pim_intf_ip,
|
|
||||||
pim_interface,
|
|
||||||
pim_intf_json["state"],
|
|
||||||
)
|
|
||||||
)
|
|
||||||
return errormsg
|
return errormsg
|
||||||
|
|
||||||
logger.info(
|
logger.info("[DUT %s]: PIM interface: %s, "
|
||||||
"[DUT %s]: PIM interface: %s, "
|
|
||||||
"interface ip: %s, status: %s"
|
"interface ip: %s, status: %s"
|
||||||
" [PASSED]!!",
|
" [PASSED]!!",
|
||||||
dut,
|
dut, pim_interface, pim_intf_ip,
|
||||||
pim_interface,
|
pim_intf_json["state"])
|
||||||
pim_intf_ip,
|
|
||||||
pim_intf_json["state"],
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
errormsg = (
|
|
||||||
"[DUT %s]: PIM interface: %s "
|
|
||||||
"PIM interface ip: %s, is not present "
|
|
||||||
% (dut, pim_interface, pim_intf_ip,)
|
|
||||||
)
|
|
||||||
return errormsg
|
|
||||||
|
|
||||||
logger.debug("Exiting lib API: {}".format(sys._getframe().f_code.co_name))
|
logger.debug("Exiting lib API: {}".format(sys._getframe().f_code.co_name))
|
||||||
return True
|
return True
|
||||||
@ -1846,7 +1849,6 @@ def clear_ip_mroute_verify(tgen, dut):
|
|||||||
|
|
||||||
rnode = tgen.routers()[dut]
|
rnode = tgen.routers()[dut]
|
||||||
|
|
||||||
# sleep(60)
|
|
||||||
logger.info("[DUT: %s]: IP mroutes uptime before clear", dut)
|
logger.info("[DUT: %s]: IP mroutes uptime before clear", dut)
|
||||||
mroute_json_1 = run_frr_cmd(rnode, "show ip mroute json", isjson=True)
|
mroute_json_1 = run_frr_cmd(rnode, "show ip mroute json", isjson=True)
|
||||||
|
|
||||||
@ -3387,3 +3389,62 @@ def verify_multicast_flag_state(tgen, dut, src_address, group_addresses, flag):
|
|||||||
|
|
||||||
logger.debug("Exiting lib API: {}".format(sys._getframe().f_code.co_name))
|
logger.debug("Exiting lib API: {}".format(sys._getframe().f_code.co_name))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
@retry(attempts=21, wait=2, return_is_str=True)
|
||||||
|
def verify_igmp_interface(tgen, topo, dut, igmp_iface, interface_ip):
|
||||||
|
"""
|
||||||
|
Verify all IGMP interface are up and running, config is verified
|
||||||
|
using "show ip igmp interface" cli
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
* `tgen`: topogen object
|
||||||
|
* `topo` : json file data
|
||||||
|
* `dut` : device under test
|
||||||
|
* `igmp_iface` : interface name
|
||||||
|
* `interface_ip` : interface ip address
|
||||||
|
|
||||||
|
Usage
|
||||||
|
-----
|
||||||
|
result = verify_igmp_interface(tgen, topo, dut, igmp_iface, interface_ip)
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
errormsg(str) or True
|
||||||
|
"""
|
||||||
|
|
||||||
|
logger.debug("Entering lib API: {}".format(sys._getframe().f_code.co_name))
|
||||||
|
|
||||||
|
for router in tgen.routers():
|
||||||
|
if router != dut:
|
||||||
|
continue
|
||||||
|
|
||||||
|
logger.info("[DUT: %s]: Verifying PIM interface status:",
|
||||||
|
dut)
|
||||||
|
|
||||||
|
rnode = tgen.routers()[dut]
|
||||||
|
show_ip_igmp_interface_json = \
|
||||||
|
run_frr_cmd(rnode, "show ip igmp interface json", isjson=True)
|
||||||
|
|
||||||
|
if igmp_iface in show_ip_igmp_interface_json:
|
||||||
|
igmp_intf_json = show_ip_igmp_interface_json[igmp_iface]
|
||||||
|
# Verifying igmp interface
|
||||||
|
if igmp_intf_json["address"] != interface_ip:
|
||||||
|
errormsg = ("[DUT %s]: igmp interface ip is not correct "
|
||||||
|
"[FAILED]!! Expected : %s, Found : %s"
|
||||||
|
%(dut, igmp_intf_json["address"], interface_ip))
|
||||||
|
return errormsg
|
||||||
|
|
||||||
|
logger.info("[DUT %s]: igmp interface: %s, "
|
||||||
|
"interface ip: %s"
|
||||||
|
" [PASSED]!!",
|
||||||
|
dut, igmp_iface, interface_ip)
|
||||||
|
else:
|
||||||
|
errormsg = ("[DUT %s]: igmp interface: %s "
|
||||||
|
"igmp interface ip: %s, is not present "
|
||||||
|
%(dut, igmp_iface, interface_ip))
|
||||||
|
return errormsg
|
||||||
|
|
||||||
|
logger.debug("Exiting lib API: {}".format(sys._getframe().f_code.co_name))
|
||||||
|
return True
|
||||||
|
@ -0,0 +1,140 @@
|
|||||||
|
{
|
||||||
|
"ipv4base": "10.0.0.0",
|
||||||
|
"ipv4mask": 24,
|
||||||
|
"link_ip_start": {"ipv4": "10.0.0.0", "v4mask": 24, "link_local": "disable"},
|
||||||
|
"lo_prefix": {"ipv4": "1.0.", "v4mask": 32},
|
||||||
|
"routers": {
|
||||||
|
"l1": {
|
||||||
|
"links": {
|
||||||
|
"lo": {"ipv4": "auto", "type": "loopback", "pim": "enable"},
|
||||||
|
"i1": {"ipv4": "auto", "pim": "enable"},
|
||||||
|
"i6": {"ipv4": "auto", "pim": "enable"},
|
||||||
|
"i7": {"ipv4": "auto", "pim": "enable"},
|
||||||
|
"r2": {"ipv4": "auto", "pim": "enable"},
|
||||||
|
"c1": {"ipv4": "auto", "pim": "enable"}
|
||||||
|
},
|
||||||
|
"igmp": {
|
||||||
|
"interfaces": {
|
||||||
|
"l1-i1-eth1" :{
|
||||||
|
"igmp":{
|
||||||
|
"version": "2"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"static_routes": [{
|
||||||
|
"network": ["1.0.5.17/32", "10.0.5.0/24", "10.0.6.0/24", "10.0.9.0/24", "1.0.3.5/32"],
|
||||||
|
"next_hop": "10.0.12.2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"network": ["1.0.1.2/32", "1.0.3.5/32", "10.0.1.0/24", "1.0.2.2/32", "10.0.4.0/24"],
|
||||||
|
"next_hop": "10.0.2.1"
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
"r2": {
|
||||||
|
"links": {
|
||||||
|
"lo": {"ipv4": "auto", "type": "loopback", "pim": "enable"},
|
||||||
|
"l1": {"ipv4": "auto", "pim": "enable"},
|
||||||
|
"f1": {"ipv4": "auto", "pim": "enable"},
|
||||||
|
"i3": {"ipv4": "auto", "pim": "enable"}
|
||||||
|
},
|
||||||
|
"static_routes": [{
|
||||||
|
"network": ["10.0.5.0/24", "10.0.6.0/24", "1.0.2.2/32", "10.0.1.0/24", "1.0.3.5/32"],
|
||||||
|
"next_hop": "10.0.7.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"network": ["1.0.1.2/32", "10.0.8.0/24", "10.0.10.0/24", "10.0.4.0/24", "10.0.11.0/24", "10.0.1.0/24"],
|
||||||
|
"next_hop": "10.0.12.1"
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
"f1": {
|
||||||
|
"links": {
|
||||||
|
"lo": {"ipv4": "auto", "type": "loopback", "pim": "enable"},
|
||||||
|
"r2": {"ipv4": "auto", "pim": "enable"},
|
||||||
|
"c2": {"ipv4": "auto", "pim": "enable"},
|
||||||
|
"i2": {"ipv4": "auto", "pim": "enable"},
|
||||||
|
"i8": {"ipv4": "auto", "pim": "enable"}
|
||||||
|
},
|
||||||
|
"static_routes": [{
|
||||||
|
"network": ["1.0.5.17/32", "10.0.8.0/24", "10.0.9.0/24", "10.0.10.0/24", "10.0.11.0/24", "10.0.12.0/24"],
|
||||||
|
"next_hop": "10.0.7.2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"network": ["1.0.2.2/32", "10.0.1.0/24", "10.0.4.0/24", "1.0.1.2/32"],
|
||||||
|
"next_hop": "10.0.3.1"
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
"c1": {
|
||||||
|
"links": {
|
||||||
|
"lo": {"ipv4": "auto", "type": "loopback", "pim": "enable"},
|
||||||
|
"c2": {"ipv4": "auto", "pim": "enable"},
|
||||||
|
"l1": {"ipv4": "auto", "pim": "enable"},
|
||||||
|
"i4": {"ipv4": "auto", "pim": "enable"}
|
||||||
|
},
|
||||||
|
"static_routes": [{
|
||||||
|
"network": ["1.0.5.17/32", "10.0.6.0/24", "10.0.8.0/24", "10.0.9.0/24", "10.0.10.0/24", "10.0.11.0/24"],
|
||||||
|
"next_hop": "10.0.2.2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"network": ["10.0.5.0/24", "10.0.7.0/24", "1.0.3.5/32", "10.0.6.0/24", "1.0.2.2/32", "10.0.1.0/24", "10.0.4.0/24"],
|
||||||
|
"next_hop": "10.0.0.2"
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
"c2": {
|
||||||
|
"links": {
|
||||||
|
"lo": {"ipv4": "auto", "type": "loopback", "pim": "enable"},
|
||||||
|
"c1": {"ipv4": "auto", "pim": "enable"},
|
||||||
|
"f1": {"ipv4": "auto", "pim": "enable"},
|
||||||
|
"i5": {"ipv4": "auto", "pim": "enable"}
|
||||||
|
},
|
||||||
|
"static_routes": [{
|
||||||
|
"network": ["1.0.5.17/32", "10.0.5.0/24", "10.0.6.0/24", "10.0.7.0/24", "10.0.8.0/24", "10.0.9.0/24", "10.0.10.0/24", "10.0.11.0/24"],
|
||||||
|
"next_hop": "10.0.3.2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"network": ["1.0.1.2/32", "10.0.4.0/24"],
|
||||||
|
"next_hop": "10.0.0.1"
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
"i1": {
|
||||||
|
"links": {
|
||||||
|
"l1": {"ipv4": "auto"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"i2": {
|
||||||
|
"links": {
|
||||||
|
"f1": {"ipv4": "auto"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"i3": {
|
||||||
|
"links": {
|
||||||
|
"r2": {"ipv4": "auto"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"i4": {
|
||||||
|
"links": {
|
||||||
|
"c1": {"ipv4": "auto"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"i5": {
|
||||||
|
"links": {
|
||||||
|
"c2": {"ipv4": "auto"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"i6": {
|
||||||
|
"links": {
|
||||||
|
"l1": {"ipv4": "auto"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"i7": {
|
||||||
|
"links": {
|
||||||
|
"l1": {"ipv4": "auto"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"i8": {
|
||||||
|
"links": {
|
||||||
|
"f1": {"ipv4": "auto"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,137 @@
|
|||||||
|
{
|
||||||
|
"ipv4base": "10.0.0.0",
|
||||||
|
"ipv4mask": 24,
|
||||||
|
"link_ip_start": {"ipv4": "10.0.0.0", "v4mask": 24, "link_local": "disable"},
|
||||||
|
"lo_prefix": {"ipv4": "1.0.", "v4mask": 32},
|
||||||
|
"routers": {
|
||||||
|
"l1": {
|
||||||
|
"links": {
|
||||||
|
"lo": {"ipv4": "auto", "type": "loopback", "pim": "enable"},
|
||||||
|
"i1": {"ipv4": "auto", "pim": "enable"},
|
||||||
|
"i6": {"ipv4": "auto", "pim": "enable"},
|
||||||
|
"i7": {"ipv4": "auto", "pim": "enable"},
|
||||||
|
"r2": {"ipv4": "auto", "pim": "enable"},
|
||||||
|
"c1": {"ipv4": "auto", "pim": "enable"}
|
||||||
|
},
|
||||||
|
"igmp": {
|
||||||
|
"interfaces": {
|
||||||
|
"l1-i1-eth1" :{
|
||||||
|
"igmp":{
|
||||||
|
"version": "2"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"static_routes": [{
|
||||||
|
"network": ["10.0.4.0/24", "10.0.3.1/24"],
|
||||||
|
"next_hop": "10.0.12.2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"network": ["10.0.1.2/24"],
|
||||||
|
"next_hop": "10.0.2.1"
|
||||||
|
}]
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
"r2": {
|
||||||
|
"links": {
|
||||||
|
"lo": {"ipv4": "auto", "type": "loopback", "pim": "enable"},
|
||||||
|
"l1": {"ipv4": "auto", "pim": "enable"},
|
||||||
|
"f1": {"ipv4": "auto", "pim": "enable"},
|
||||||
|
"i3": {"ipv4": "auto", "pim": "enable"}
|
||||||
|
},
|
||||||
|
"static_routes": [{
|
||||||
|
"network": ["10.0.4.0/24","10.0.3.1/24"],
|
||||||
|
"next_hop": "10.0.7.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"network": ["1.0.4.11/32", "10.0.2.1/24", "10.0.1.2/24"],
|
||||||
|
"next_hop": "10.0.12.1"
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
"f1": {
|
||||||
|
"links": {
|
||||||
|
"lo": {"ipv4": "auto", "type": "loopback", "pim": "enable"},
|
||||||
|
"r2": {"ipv4": "auto", "pim": "enable"},
|
||||||
|
"c2": {"ipv4": "auto", "pim": "enable"},
|
||||||
|
"i2": {"ipv4": "auto", "pim": "enable"},
|
||||||
|
"i8": {"ipv4": "auto", "pim": "enable"}
|
||||||
|
},
|
||||||
|
"static_routes": [{
|
||||||
|
"network": ["10.0.4.0/24","10.0.3.1/24"],
|
||||||
|
"next_hop": "10.0.3.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"network": ["1.0.4.11/32", "10.0.2.1/24", "10.0.1.2/24"],
|
||||||
|
"next_hop": "10.0.7.2"
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
"c1": {
|
||||||
|
"links": {
|
||||||
|
"lo": {"ipv4": "auto", "type": "loopback", "pim": "enable"},
|
||||||
|
"c2": {"ipv4": "auto", "pim": "enable"},
|
||||||
|
"l1": {"ipv4": "auto", "pim": "enable"},
|
||||||
|
"i4": {"ipv4": "auto", "pim": "enable"}
|
||||||
|
},
|
||||||
|
"static_routes": [{
|
||||||
|
"network": ["1.0.4.11/32","10.0.4.2/24", "10.0.3.1/24"],
|
||||||
|
"next_hop": "10.0.2.2"
|
||||||
|
}]
|
||||||
|
|
||||||
|
|
||||||
|
},
|
||||||
|
"c2": {
|
||||||
|
"links": {
|
||||||
|
"lo": {"ipv4": "auto", "type": "loopback", "pim": "enable"},
|
||||||
|
"c1": {"ipv4": "auto", "pim": "enable"},
|
||||||
|
"f1": {"ipv4": "auto", "pim": "enable"},
|
||||||
|
"i5": {"ipv4": "auto", "pim": "enable"}
|
||||||
|
},
|
||||||
|
"static_routes": [
|
||||||
|
{
|
||||||
|
"network": ["1.0.4.11/32", "10.0.2.1/24", "10.0.1.2/24"],
|
||||||
|
"next_hop": "10.0.3.2"
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
"i1": {
|
||||||
|
"links": {
|
||||||
|
"l1": {"ipv4": "auto"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"i2": {
|
||||||
|
"links": {
|
||||||
|
"f1": {"ipv4": "auto"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"i3": {
|
||||||
|
"links": {
|
||||||
|
"r2": {"ipv4": "auto"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"i4": {
|
||||||
|
"links": {
|
||||||
|
"c1": {"ipv4": "auto"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"i5": {
|
||||||
|
"links": {
|
||||||
|
"c2": {"ipv4": "auto"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"i6": {
|
||||||
|
"links": {
|
||||||
|
"l1": {"ipv4": "auto"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"i7": {
|
||||||
|
"links": {
|
||||||
|
"l1": {"ipv4": "auto"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"i8": {
|
||||||
|
"links": {
|
||||||
|
"f1": {"ipv4": "auto"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
4607
tests/topotests/multicast-pim-sm-topo3/test_multicast_pim_sm_topo3.py
Executable file
4607
tests/topotests/multicast-pim-sm-topo3/test_multicast_pim_sm_topo3.py
Executable file
File diff suppressed because it is too large
Load Diff
1120
tests/topotests/multicast-pim-sm-topo3/test_multicast_pim_sm_topo4.py
Executable file
1120
tests/topotests/multicast-pim-sm-topo3/test_multicast_pim_sm_topo4.py
Executable file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user