Commit c9b866a005 for frr
commit c9b866a005165b696a924d3a5ca2d7ccc7f8a225
Author: Donald Sharp <sharpd@nvidia.com>
Date: Fri Oct 2 13:32:12 2026 -0400
tests: Convert topotests to use shutdown_bringup_interface_in_kernel
Find all the places that use `ip link set... [down|up]` and convert them.
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
diff --git a/tests/topotests/all_protocol_startup/test_all_protocol_startup.py b/tests/topotests/all_protocol_startup/test_all_protocol_startup.py
index 3e40e786e6..f2f8fa313d 100644
--- a/tests/topotests/all_protocol_startup/test_all_protocol_startup.py
+++ b/tests/topotests/all_protocol_startup/test_all_protocol_startup.py
@@ -42,6 +42,7 @@ from lib import topotest
from lib.topogen import Topogen, get_topogen
from lib.common_config import (
required_linux_kernel_version,
+ shutdown_bringup_interface_in_kernel,
)
import json
@@ -663,13 +664,11 @@ def test_nexthop_groups():
pre_nh_show = net["r1"].cmd("ip next show id {}".format(pre_nhg.group(1)))
pre_total_nhs = len((re.search(r"group ([\d/]+)", pre_nh_show)).group(1).split("/"))
- net["r1"].cmd(
- "ip link set r1-eth1 down;ip link set r1-eth2 down;ip link set r1-eth3 down;ip link set r1-eth4 down"
- )
+ for iface in ("r1-eth1", "r1-eth2", "r1-eth3", "r1-eth4"):
+ shutdown_bringup_interface_in_kernel(get_topogen(), "r1", iface, False)
sleep(1)
- net["r1"].cmd(
- "ip link set r1-eth1 up;ip link set r1-eth2 up;ip link set r1-eth3 up;ip link set r1-eth4 up"
- )
+ for iface in ("r1-eth1", "r1-eth2", "r1-eth3", "r1-eth4"):
+ shutdown_bringup_interface_in_kernel(get_topogen(), "r1", iface, True)
sleep(5)
post_out = net["r1"].cmd('ip route show | grep "5.5.5.1"')
diff --git a/tests/topotests/bfd_demand_topo1/test_bfd_demand_topo1.py b/tests/topotests/bfd_demand_topo1/test_bfd_demand_topo1.py
index 02008bfed7..fac9075f60 100644
--- a/tests/topotests/bfd_demand_topo1/test_bfd_demand_topo1.py
+++ b/tests/topotests/bfd_demand_topo1/test_bfd_demand_topo1.py
@@ -31,6 +31,7 @@ sys.path.append(os.path.join(CWD, "../"))
# pylint: disable=C0413
from lib import topotest
from lib.topogen import Topogen, get_topogen
+from lib.common_config import shutdown_bringup_interface_in_kernel
pytestmark = [pytest.mark.bfdd]
@@ -221,7 +222,7 @@ def test_bfd_demand_poll_detects_failure():
# Break the path silently. Stopping the router would let r2 signal the
# session down, which is a different diagnostic than the one under test.
- r2.run("ip link set r2-eth0 down")
+ shutdown_bringup_interface_in_kernel(r2.tgen, r2.name, "r2-eth0", False)
topotest.sleep(UNDETECTED_SECS, "checking that the failure goes unnoticed")
@@ -258,7 +259,7 @@ def test_bfd_demand_disable_restores_detection():
# Bring the session back with the link and demand mode restored, so this
# test starts from a working demanding session rather than the previous
# test's leftovers.
- r2.run("ip link set r2-eth0 up")
+ shutdown_bringup_interface_in_kernel(r2.tgen, r2.name, "r2-eth0", True)
_set_demand(r1, R2_ADDR, False)
test_func = partial(_check_peer, r1, R2_ADDR, {"status": "up"})
@@ -288,7 +289,7 @@ def test_bfd_demand_disable_restores_detection():
# Break the path while the detection timer is disabled, so nothing will
# arrive to re-arm it once demand mode is turned off again.
- r2.run("ip link set r2-eth0 down")
+ shutdown_bringup_interface_in_kernel(r2.tgen, r2.name, "r2-eth0", False)
topotest.sleep(3, "letting the failure go unnoticed")
_set_demand(r1, R2_ADDR, False)
@@ -314,7 +315,7 @@ def test_bfd_demand_both_ends_disable():
r1, r2 = tgen.gears["r1"], tgen.gears["r2"]
- r2.run("ip link set r2-eth0 up")
+ shutdown_bringup_interface_in_kernel(r2.tgen, r2.name, "r2-eth0", True)
_set_demand(r1, R2_ADDR, False)
_set_demand(r2, R1_ADDR, False)
diff --git a/tests/topotests/bfd_static_vrf/test_bfd_static_vrf.py b/tests/topotests/bfd_static_vrf/test_bfd_static_vrf.py
index a3ffea73b4..eb5ef3b7ae 100755
--- a/tests/topotests/bfd_static_vrf/test_bfd_static_vrf.py
+++ b/tests/topotests/bfd_static_vrf/test_bfd_static_vrf.py
@@ -30,6 +30,7 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.topogen import Topogen, get_topogen
from lib.topolog import logger
+from lib.common_config import shutdown_bringup_interface_in_kernel
def build_topo(tgen):
@@ -57,10 +58,10 @@ def setup_module(mod):
router_list = tgen.routers()
for rname, router in router_list.items():
+ tgen.net[rname].cmd("ip link add cust1 type vrf table 10")
+ shutdown_bringup_interface_in_kernel(tgen, rname, "cust1", True)
tgen.net[rname].cmd(
f"""
-ip link add cust1 type vrf table 10
-ip link set dev cust1 up
ip link set dev {rname}-eth0 master cust1
sysctl net.ipv6.conf.{rname}-eth0.keep_addr_on_down=1
"""
diff --git a/tests/topotests/bgp_accept_own/test_bgp_accept_own.py b/tests/topotests/bgp_accept_own/test_bgp_accept_own.py
index dc49fe80e1..ff409adf1f 100644
--- a/tests/topotests/bgp_accept_own/test_bgp_accept_own.py
+++ b/tests/topotests/bgp_accept_own/test_bgp_accept_own.py
@@ -22,7 +22,7 @@ sys.path.append(os.path.join(CWD, "../"))
# pylint: disable=C0413
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
-from lib.common_config import step
+from lib.common_config import step, shutdown_bringup_interface_in_kernel
pytestmark = [pytest.mark.bgpd, pytest.mark.ldpd, pytest.mark.ospfd]
@@ -57,10 +57,10 @@ def setup_module(mod):
rr1 = tgen.gears["rr1"]
pe1.run("ip link add Customer type vrf table 1001")
- pe1.run("ip link set up dev Customer")
+ shutdown_bringup_interface_in_kernel(pe1.tgen, pe1.name, "Customer", True)
pe1.run("ip link set pe1-eth0 master Customer")
pe1.run("ip link add Service type vrf table 1002")
- pe1.run("ip link set up dev Service")
+ shutdown_bringup_interface_in_kernel(pe1.tgen, pe1.name, "Service", True)
pe1.run("ip link set pe1-eth1 master Service")
pe1.run("ip link set pe1-eth3 master Customer")
pe1.run("sysctl -w net.mpls.conf.pe1-eth2.input=1")
diff --git a/tests/topotests/bgp_advertisement_delay/test_bgp_advertisement_delay.py b/tests/topotests/bgp_advertisement_delay/test_bgp_advertisement_delay.py
index 28a44f33ae..efe3c6b29b 100644
--- a/tests/topotests/bgp_advertisement_delay/test_bgp_advertisement_delay.py
+++ b/tests/topotests/bgp_advertisement_delay/test_bgp_advertisement_delay.py
@@ -48,6 +48,7 @@ sys.path.append(os.path.join(CWD, "../"))
# pylint: disable=C0413
from lib import topotest
from lib.topogen import Topogen, get_topogen
+from lib.common_config import shutdown_bringup_interface_in_kernel
pytestmark = [pytest.mark.bgpd]
@@ -431,7 +432,7 @@ def test_bgp_advertisement_delay_vrf_without_peers():
r2 = tgen.gears["r2"]
r2.run("ip link add vrf-quiet type vrf table 1010")
- r2.run("ip link set vrf-quiet up")
+ shutdown_bringup_interface_in_kernel(r2.tgen, r2.name, "vrf-quiet", True)
r2.vtysh_cmd(
"""
diff --git a/tests/topotests/bgp_auth/test_bgp_auth1.py b/tests/topotests/bgp_auth/test_bgp_auth1.py
index 36ac6fe5bb..bbbc7e3d6d 100644
--- a/tests/topotests/bgp_auth/test_bgp_auth1.py
+++ b/tests/topotests/bgp_auth/test_bgp_auth1.py
@@ -40,8 +40,9 @@ import pytest
from lib import topotest
from lib.common_config import (
create_interface_in_kernel,
- save_initial_config_on_routers,
reset_with_new_configs,
+ save_initial_config_on_routers,
+ shutdown_bringup_interface_in_kernel,
)
from bgp_auth_common import (
@@ -85,11 +86,11 @@ def setup_module(mod):
# blue vrf
r1.cmd_raises("ip link add blue type vrf table 1001")
- r1.cmd_raises("ip link set up dev blue")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "blue", True)
r2.cmd_raises("ip link add blue type vrf table 1001")
- r2.cmd_raises("ip link set up dev blue")
+ shutdown_bringup_interface_in_kernel(r2.tgen, r2.name, "blue", True)
r3.cmd_raises("ip link add blue type vrf table 1001")
- r3.cmd_raises("ip link set up dev blue")
+ shutdown_bringup_interface_in_kernel(r3.tgen, r3.name, "blue", True)
create_interface_in_kernel(tgen, "R1", "lo1", vrf="blue")
create_interface_in_kernel(tgen, "R2", "lo1", vrf="blue")
@@ -102,20 +103,20 @@ def setup_module(mod):
r3.cmd_raises("ip link set R3-eth2 master blue")
r3.cmd_raises("ip link set R3-eth3 master blue")
- r1.cmd_raises("ip link set up dev R1-eth2")
- r1.cmd_raises("ip link set up dev R1-eth3")
- r2.cmd_raises("ip link set up dev R2-eth2")
- r2.cmd_raises("ip link set up dev R2-eth3")
- r3.cmd_raises("ip link set up dev R3-eth2")
- r3.cmd_raises("ip link set up dev R3-eth3")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "R1-eth2", True)
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "R1-eth3", True)
+ shutdown_bringup_interface_in_kernel(r2.tgen, r2.name, "R2-eth2", True)
+ shutdown_bringup_interface_in_kernel(r2.tgen, r2.name, "R2-eth3", True)
+ shutdown_bringup_interface_in_kernel(r3.tgen, r3.name, "R3-eth2", True)
+ shutdown_bringup_interface_in_kernel(r3.tgen, r3.name, "R3-eth3", True)
# red vrf
r1.cmd_raises("ip link add red type vrf table 1002")
- r1.cmd_raises("ip link set up dev red")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "red", True)
r2.cmd_raises("ip link add red type vrf table 1002")
- r2.cmd_raises("ip link set up dev red")
+ shutdown_bringup_interface_in_kernel(r2.tgen, r2.name, "red", True)
r3.cmd_raises("ip link add red type vrf table 1002")
- r3.cmd_raises("ip link set up dev red")
+ shutdown_bringup_interface_in_kernel(r3.tgen, r3.name, "red", True)
create_interface_in_kernel(tgen, "R1", "lo2", vrf="red")
create_interface_in_kernel(tgen, "R2", "lo2", vrf="red")
@@ -128,12 +129,12 @@ def setup_module(mod):
r3.cmd_raises("ip link set R3-eth4 master red")
r3.cmd_raises("ip link set R3-eth5 master red")
- r1.cmd_raises("ip link set up dev R1-eth4")
- r1.cmd_raises("ip link set up dev R1-eth5")
- r2.cmd_raises("ip link set up dev R2-eth4")
- r2.cmd_raises("ip link set up dev R2-eth5")
- r3.cmd_raises("ip link set up dev R3-eth4")
- r3.cmd_raises("ip link set up dev R3-eth5")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "R1-eth4", True)
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "R1-eth5", True)
+ shutdown_bringup_interface_in_kernel(r2.tgen, r2.name, "R2-eth4", True)
+ shutdown_bringup_interface_in_kernel(r2.tgen, r2.name, "R2-eth5", True)
+ shutdown_bringup_interface_in_kernel(r3.tgen, r3.name, "R3-eth4", True)
+ shutdown_bringup_interface_in_kernel(r3.tgen, r3.name, "R3-eth5", True)
r1.cmd_raises("sysctl -w net.ipv4.tcp_l3mdev_accept=1")
r2.cmd_raises("sysctl -w net.ipv4.tcp_l3mdev_accept=1")
diff --git a/tests/topotests/bgp_auth/test_bgp_auth2.py b/tests/topotests/bgp_auth/test_bgp_auth2.py
index 65de1058ee..bf0bba9039 100644
--- a/tests/topotests/bgp_auth/test_bgp_auth2.py
+++ b/tests/topotests/bgp_auth/test_bgp_auth2.py
@@ -40,8 +40,9 @@ import pytest
from lib import topotest
from lib.common_config import (
create_interface_in_kernel,
- save_initial_config_on_routers,
reset_with_new_configs,
+ save_initial_config_on_routers,
+ shutdown_bringup_interface_in_kernel,
)
from bgp_auth_common import (
check_all_peers_established,
@@ -85,11 +86,11 @@ def setup_module(mod):
# blue vrf
r1.cmd_raises("ip link add blue type vrf table 1001")
- r1.cmd_raises("ip link set up dev blue")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "blue", True)
r2.cmd_raises("ip link add blue type vrf table 1001")
- r2.cmd_raises("ip link set up dev blue")
+ shutdown_bringup_interface_in_kernel(r2.tgen, r2.name, "blue", True)
r3.cmd_raises("ip link add blue type vrf table 1001")
- r3.cmd_raises("ip link set up dev blue")
+ shutdown_bringup_interface_in_kernel(r3.tgen, r3.name, "blue", True)
create_interface_in_kernel(tgen, "R1", "lo1", vrf="blue")
create_interface_in_kernel(tgen, "R2", "lo1", vrf="blue")
@@ -102,20 +103,20 @@ def setup_module(mod):
r3.cmd_raises("ip link set R3-eth2 master blue")
r3.cmd_raises("ip link set R3-eth3 master blue")
- r1.cmd_raises("ip link set up dev R1-eth2")
- r1.cmd_raises("ip link set up dev R1-eth3")
- r2.cmd_raises("ip link set up dev R2-eth2")
- r2.cmd_raises("ip link set up dev R2-eth3")
- r3.cmd_raises("ip link set up dev R3-eth2")
- r3.cmd_raises("ip link set up dev R3-eth3")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "R1-eth2", True)
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "R1-eth3", True)
+ shutdown_bringup_interface_in_kernel(r2.tgen, r2.name, "R2-eth2", True)
+ shutdown_bringup_interface_in_kernel(r2.tgen, r2.name, "R2-eth3", True)
+ shutdown_bringup_interface_in_kernel(r3.tgen, r3.name, "R3-eth2", True)
+ shutdown_bringup_interface_in_kernel(r3.tgen, r3.name, "R3-eth3", True)
# red vrf
r1.cmd_raises("ip link add red type vrf table 1002")
- r1.cmd_raises("ip link set up dev red")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "red", True)
r2.cmd_raises("ip link add red type vrf table 1002")
- r2.cmd_raises("ip link set up dev red")
+ shutdown_bringup_interface_in_kernel(r2.tgen, r2.name, "red", True)
r3.cmd_raises("ip link add red type vrf table 1002")
- r3.cmd_raises("ip link set up dev red")
+ shutdown_bringup_interface_in_kernel(r3.tgen, r3.name, "red", True)
create_interface_in_kernel(tgen, "R1", "lo2", vrf="red")
create_interface_in_kernel(tgen, "R2", "lo2", vrf="red")
@@ -128,12 +129,12 @@ def setup_module(mod):
r3.cmd_raises("ip link set R3-eth4 master red")
r3.cmd_raises("ip link set R3-eth5 master red")
- r1.cmd_raises("ip link set up dev R1-eth4")
- r1.cmd_raises("ip link set up dev R1-eth5")
- r2.cmd_raises("ip link set up dev R2-eth4")
- r2.cmd_raises("ip link set up dev R2-eth5")
- r3.cmd_raises("ip link set up dev R3-eth4")
- r3.cmd_raises("ip link set up dev R3-eth5")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "R1-eth4", True)
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "R1-eth5", True)
+ shutdown_bringup_interface_in_kernel(r2.tgen, r2.name, "R2-eth4", True)
+ shutdown_bringup_interface_in_kernel(r2.tgen, r2.name, "R2-eth5", True)
+ shutdown_bringup_interface_in_kernel(r3.tgen, r3.name, "R3-eth4", True)
+ shutdown_bringup_interface_in_kernel(r3.tgen, r3.name, "R3-eth5", True)
r1.cmd_raises("sysctl -w net.ipv4.tcp_l3mdev_accept=1")
r2.cmd_raises("sysctl -w net.ipv4.tcp_l3mdev_accept=1")
diff --git a/tests/topotests/bgp_auth/test_bgp_auth3.py b/tests/topotests/bgp_auth/test_bgp_auth3.py
index 354fbfe799..87b9ab4095 100644
--- a/tests/topotests/bgp_auth/test_bgp_auth3.py
+++ b/tests/topotests/bgp_auth/test_bgp_auth3.py
@@ -40,8 +40,9 @@ import pytest
from lib import topotest
from lib.common_config import (
create_interface_in_kernel,
- save_initial_config_on_routers,
reset_with_new_configs,
+ save_initial_config_on_routers,
+ shutdown_bringup_interface_in_kernel,
)
from bgp_auth_common import (
check_vrf_peer_change_passwords,
@@ -84,11 +85,11 @@ def setup_module(mod):
# blue vrf
r1.cmd_raises("ip link add blue type vrf table 1001")
- r1.cmd_raises("ip link set up dev blue")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "blue", True)
r2.cmd_raises("ip link add blue type vrf table 1001")
- r2.cmd_raises("ip link set up dev blue")
+ shutdown_bringup_interface_in_kernel(r2.tgen, r2.name, "blue", True)
r3.cmd_raises("ip link add blue type vrf table 1001")
- r3.cmd_raises("ip link set up dev blue")
+ shutdown_bringup_interface_in_kernel(r3.tgen, r3.name, "blue", True)
create_interface_in_kernel(tgen, "R1", "lo1", vrf="blue")
create_interface_in_kernel(tgen, "R2", "lo1", vrf="blue")
@@ -101,20 +102,20 @@ def setup_module(mod):
r3.cmd_raises("ip link set R3-eth2 master blue")
r3.cmd_raises("ip link set R3-eth3 master blue")
- r1.cmd_raises("ip link set up dev R1-eth2")
- r1.cmd_raises("ip link set up dev R1-eth3")
- r2.cmd_raises("ip link set up dev R2-eth2")
- r2.cmd_raises("ip link set up dev R2-eth3")
- r3.cmd_raises("ip link set up dev R3-eth2")
- r3.cmd_raises("ip link set up dev R3-eth3")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "R1-eth2", True)
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "R1-eth3", True)
+ shutdown_bringup_interface_in_kernel(r2.tgen, r2.name, "R2-eth2", True)
+ shutdown_bringup_interface_in_kernel(r2.tgen, r2.name, "R2-eth3", True)
+ shutdown_bringup_interface_in_kernel(r3.tgen, r3.name, "R3-eth2", True)
+ shutdown_bringup_interface_in_kernel(r3.tgen, r3.name, "R3-eth3", True)
# red vrf
r1.cmd_raises("ip link add red type vrf table 1002")
- r1.cmd_raises("ip link set up dev red")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "red", True)
r2.cmd_raises("ip link add red type vrf table 1002")
- r2.cmd_raises("ip link set up dev red")
+ shutdown_bringup_interface_in_kernel(r2.tgen, r2.name, "red", True)
r3.cmd_raises("ip link add red type vrf table 1002")
- r3.cmd_raises("ip link set up dev red")
+ shutdown_bringup_interface_in_kernel(r3.tgen, r3.name, "red", True)
create_interface_in_kernel(tgen, "R1", "lo2", vrf="red")
create_interface_in_kernel(tgen, "R2", "lo2", vrf="red")
@@ -127,12 +128,12 @@ def setup_module(mod):
r3.cmd_raises("ip link set R3-eth4 master red")
r3.cmd_raises("ip link set R3-eth5 master red")
- r1.cmd_raises("ip link set up dev R1-eth4")
- r1.cmd_raises("ip link set up dev R1-eth5")
- r2.cmd_raises("ip link set up dev R2-eth4")
- r2.cmd_raises("ip link set up dev R2-eth5")
- r3.cmd_raises("ip link set up dev R3-eth4")
- r3.cmd_raises("ip link set up dev R3-eth5")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "R1-eth4", True)
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "R1-eth5", True)
+ shutdown_bringup_interface_in_kernel(r2.tgen, r2.name, "R2-eth4", True)
+ shutdown_bringup_interface_in_kernel(r2.tgen, r2.name, "R2-eth5", True)
+ shutdown_bringup_interface_in_kernel(r3.tgen, r3.name, "R3-eth4", True)
+ shutdown_bringup_interface_in_kernel(r3.tgen, r3.name, "R3-eth5", True)
r1.cmd_raises("sysctl -w net.ipv4.tcp_l3mdev_accept=1")
r2.cmd_raises("sysctl -w net.ipv4.tcp_l3mdev_accept=1")
diff --git a/tests/topotests/bgp_auth/test_bgp_auth4.py b/tests/topotests/bgp_auth/test_bgp_auth4.py
index eb947a9b36..8ee0bd0f2f 100644
--- a/tests/topotests/bgp_auth/test_bgp_auth4.py
+++ b/tests/topotests/bgp_auth/test_bgp_auth4.py
@@ -40,8 +40,9 @@ import pytest
from lib import topotest
from lib.common_config import (
create_interface_in_kernel,
- save_initial_config_on_routers,
reset_with_new_configs,
+ save_initial_config_on_routers,
+ shutdown_bringup_interface_in_kernel,
)
from bgp_auth_common import (
check_vrf_peer_change_passwords,
@@ -84,11 +85,11 @@ def setup_module(mod):
# blue vrf
r1.cmd_raises("ip link add blue type vrf table 1001")
- r1.cmd_raises("ip link set up dev blue")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "blue", True)
r2.cmd_raises("ip link add blue type vrf table 1001")
- r2.cmd_raises("ip link set up dev blue")
+ shutdown_bringup_interface_in_kernel(r2.tgen, r2.name, "blue", True)
r3.cmd_raises("ip link add blue type vrf table 1001")
- r3.cmd_raises("ip link set up dev blue")
+ shutdown_bringup_interface_in_kernel(r3.tgen, r3.name, "blue", True)
create_interface_in_kernel(tgen, "R1", "lo1", vrf="blue")
create_interface_in_kernel(tgen, "R2", "lo1", vrf="blue")
@@ -101,20 +102,20 @@ def setup_module(mod):
r3.cmd_raises("ip link set R3-eth2 master blue")
r3.cmd_raises("ip link set R3-eth3 master blue")
- r1.cmd_raises("ip link set up dev R1-eth2")
- r1.cmd_raises("ip link set up dev R1-eth3")
- r2.cmd_raises("ip link set up dev R2-eth2")
- r2.cmd_raises("ip link set up dev R2-eth3")
- r3.cmd_raises("ip link set up dev R3-eth2")
- r3.cmd_raises("ip link set up dev R3-eth3")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "R1-eth2", True)
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "R1-eth3", True)
+ shutdown_bringup_interface_in_kernel(r2.tgen, r2.name, "R2-eth2", True)
+ shutdown_bringup_interface_in_kernel(r2.tgen, r2.name, "R2-eth3", True)
+ shutdown_bringup_interface_in_kernel(r3.tgen, r3.name, "R3-eth2", True)
+ shutdown_bringup_interface_in_kernel(r3.tgen, r3.name, "R3-eth3", True)
# red vrf
r1.cmd_raises("ip link add red type vrf table 1002")
- r1.cmd_raises("ip link set up dev red")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "red", True)
r2.cmd_raises("ip link add red type vrf table 1002")
- r2.cmd_raises("ip link set up dev red")
+ shutdown_bringup_interface_in_kernel(r2.tgen, r2.name, "red", True)
r3.cmd_raises("ip link add red type vrf table 1002")
- r3.cmd_raises("ip link set up dev red")
+ shutdown_bringup_interface_in_kernel(r3.tgen, r3.name, "red", True)
create_interface_in_kernel(tgen, "R1", "lo2", vrf="red")
create_interface_in_kernel(tgen, "R2", "lo2", vrf="red")
@@ -127,12 +128,12 @@ def setup_module(mod):
r3.cmd_raises("ip link set R3-eth4 master red")
r3.cmd_raises("ip link set R3-eth5 master red")
- r1.cmd_raises("ip link set up dev R1-eth4")
- r1.cmd_raises("ip link set up dev R1-eth5")
- r2.cmd_raises("ip link set up dev R2-eth4")
- r2.cmd_raises("ip link set up dev R2-eth5")
- r3.cmd_raises("ip link set up dev R3-eth4")
- r3.cmd_raises("ip link set up dev R3-eth5")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "R1-eth4", True)
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "R1-eth5", True)
+ shutdown_bringup_interface_in_kernel(r2.tgen, r2.name, "R2-eth4", True)
+ shutdown_bringup_interface_in_kernel(r2.tgen, r2.name, "R2-eth5", True)
+ shutdown_bringup_interface_in_kernel(r3.tgen, r3.name, "R3-eth4", True)
+ shutdown_bringup_interface_in_kernel(r3.tgen, r3.name, "R3-eth5", True)
r1.cmd_raises("sysctl -w net.ipv4.tcp_l3mdev_accept=1")
r2.cmd_raises("sysctl -w net.ipv4.tcp_l3mdev_accept=1")
diff --git a/tests/topotests/bgp_auth/test_bgp_auth5.py b/tests/topotests/bgp_auth/test_bgp_auth5.py
index 85707cea0f..e0ee85f95b 100644
--- a/tests/topotests/bgp_auth/test_bgp_auth5.py
+++ b/tests/topotests/bgp_auth/test_bgp_auth5.py
@@ -33,6 +33,7 @@ import sys
import pytest
from lib import common_config, topotest
from lib.common_config import (
+ shutdown_bringup_interface_in_kernel,
step,
)
from bgp_auth_common import check_neigh_state
@@ -65,15 +66,15 @@ def setup_module(mod):
# blue vrf
r1.cmd_raises("ip link add blue type vrf table 1001")
- r1.cmd_raises("ip link set up dev blue")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "blue", True)
r2.cmd_raises("ip link add blue type vrf table 1001")
- r2.cmd_raises("ip link set up dev blue")
+ shutdown_bringup_interface_in_kernel(r2.tgen, r2.name, "blue", True)
r1.cmd_raises("ip link set R1-eth0 master blue")
r2.cmd_raises("ip link set R2-eth0 master blue")
- r1.cmd_raises("ip link set up dev R1-eth0")
- r2.cmd_raises("ip link set up dev R2-eth0")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "R1-eth0", True)
+ shutdown_bringup_interface_in_kernel(r2.tgen, r2.name, "R2-eth0", True)
r1.cmd_raises("sysctl -w net.ipv4.tcp_l3mdev_accept=1")
r2.cmd_raises("sysctl -w net.ipv4.tcp_l3mdev_accept=1")
diff --git a/tests/topotests/bgp_batch_clearing/test_bgp_batch_clearing.py b/tests/topotests/bgp_batch_clearing/test_bgp_batch_clearing.py
index 134f9b7eb0..724c06811c 100644
--- a/tests/topotests/bgp_batch_clearing/test_bgp_batch_clearing.py
+++ b/tests/topotests/bgp_batch_clearing/test_bgp_batch_clearing.py
@@ -26,6 +26,7 @@ import pytest
from lib import topotest
from lib.topogen import Topogen, get_topogen
+from lib.common_config import shutdown_bringup_interface_in_kernel
pytestmark = [pytest.mark.bgpd, pytest.mark.staticd]
@@ -232,7 +233,7 @@ def test_link_down_clears_routes():
r1 = tgen.gears["r1"]
r2 = tgen.gears["r2"]
- r1.cmd("ip link set r1-eth0 down")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "r1-eth0", False)
test_func = functools.partial(_bgp_neighbor_cleared, r1, "10.255.0.2")
_, result = topotest.run_and_expect(test_func, None, count=60, wait=1)
@@ -246,7 +247,7 @@ def test_link_down_clears_routes():
_, result = topotest.run_and_expect(test_func, None, count=60, wait=1)
assert result is None, f"r1 still has BGP routes: {result}"
- r1.cmd("ip link set r1-eth0 up")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "r1-eth0", True)
def test_delete_bgp_during_batch_clearing():
diff --git a/tests/topotests/bgp_bmp/test_bgp_bmp_1.py b/tests/topotests/bgp_bmp/test_bgp_bmp_1.py
index 1a686ab20c..e371a7c4e9 100644
--- a/tests/topotests/bgp_bmp/test_bgp_bmp_1.py
+++ b/tests/topotests/bgp_bmp/test_bgp_bmp_1.py
@@ -46,6 +46,7 @@ from .bgpbmp import (
)
from lib.topogen import Topogen, get_topogen
from lib.topolog import logger
+from lib.common_config import shutdown_bringup_interface_in_kernel
pytestmark = [pytest.mark.bgpd]
@@ -82,12 +83,12 @@ def setup_module(mod):
"tcpdump -nni r1-eth0 -s 0 -w {} &".format(pcap_file), stdout=None
)
- tgen.net["r2"].cmd(
+ tgen.net['r2'].cmd(
"""
+
ip link add vrf1 type vrf table 10
-ip link set vrf1 up
-"""
- )
+ """)
+ shutdown_bringup_interface_in_kernel(tgen, 'r2', "vrf1", True)
for router in tgen.routers().values():
router.load_frr_config(
diff --git a/tests/topotests/bgp_bmp/test_bgp_bmp_2.py b/tests/topotests/bgp_bmp/test_bgp_bmp_2.py
index 99543a5bd7..c55ed94c72 100644
--- a/tests/topotests/bgp_bmp/test_bgp_bmp_2.py
+++ b/tests/topotests/bgp_bmp/test_bgp_bmp_2.py
@@ -50,6 +50,7 @@ from .bgpbmp import (
from lib.topogen import Topogen, get_topogen
from lib.topolog import logger
+from lib.common_config import shutdown_bringup_interface_in_kernel
pytestmark = [pytest.mark.bgpd]
@@ -80,13 +81,16 @@ def setup_module(mod):
tgen = Topogen(build_topo, mod.__name__)
tgen.start_topology()
- tgen.net["r1vrf"].cmd(
+ tgen.net['r1vrf'].cmd(
"""
+
ip link add vrf1 type vrf table 10
-ip link set vrf1 up
+ """)
+ shutdown_bringup_interface_in_kernel(tgen, 'r1vrf', "vrf1", True)
+ tgen.net['r1vrf'].cmd(
+ """
ip link set r1vrf-eth1 master vrf1
-"""
- )
+ """)
bmp_reset_seq(bmp_seq_context)
if DEBUG_PCAP:
pcap_file = os.path.join(tgen.logdir, "r1vrf/bmp.pcap")
@@ -266,7 +270,7 @@ def test_bgp_instance_flapping():
tgen = get_topogen()
# create flapping at BMP
- tgen.net["r1vrf"].cmd("ip link set dev vrf1 down")
+ shutdown_bringup_interface_in_kernel(tgen, 'r1vrf', "vrf1", False)
peers = ["0.0.0.0"]
logger.info("checking for BMP peer down LOC-RIB message.")
@@ -282,7 +286,7 @@ def test_bgp_instance_flapping():
success, _ = topotest.run_and_expect(test_func, True, count=30, wait=1)
assert success, "Checking the BMP peer down LOC-RIB message failed !."
- tgen.net["r1vrf"].cmd("ip link set dev vrf1 up")
+ shutdown_bringup_interface_in_kernel(tgen, 'r1vrf', "vrf1", True)
logger.info("checking for BMP peer up LOC-RIB message.")
test_func = partial(
diff --git a/tests/topotests/bgp_bmp/test_bgp_bmp_3.py b/tests/topotests/bgp_bmp/test_bgp_bmp_3.py
index d68e39609c..077b9c7c19 100644
--- a/tests/topotests/bgp_bmp/test_bgp_bmp_3.py
+++ b/tests/topotests/bgp_bmp/test_bgp_bmp_3.py
@@ -54,6 +54,7 @@ from .bgpbmp import (
)
from lib.topogen import Topogen, get_topogen
from lib.topolog import logger
+from lib.common_config import shutdown_bringup_interface_in_kernel
pytestmark = [pytest.mark.bgpd]
@@ -123,13 +124,17 @@ def setup_module(mod):
tgen = Topogen(build_topo, mod.__name__)
tgen.start_topology()
- tgen.net["r1import"].cmd(
+ tgen.net['r1import'].cmd(
"""
+
ip link add vrf1 type vrf table 10
-ip link set vrf1 up
-ip link set r1import-eth2 master vrf1
+ """)
+ shutdown_bringup_interface_in_kernel(tgen, 'r1import', "vrf1", True)
+ tgen.net['r1import'].cmd(
"""
- )
+ip link set r1import-eth2 master vrf1
+
+ """)
bmp_reset_seq(bmp_seq_context)
if DEBUG_PCAP:
@@ -628,7 +633,7 @@ def test_bgp_instance_flapping():
# create flapping at BMP
# note: only peer up are handled at BMP level today
- tgen.net["r1import"].cmd("ip link set dev vrf1 down")
+ shutdown_bringup_interface_in_kernel(tgen, 'r1import', "vrf1", False)
peers = ["0.0.0.0"]
@@ -645,7 +650,7 @@ def test_bgp_instance_flapping():
success, _ = topotest.run_and_expect(test_func, True, count=30, wait=1)
assert success, "Checking the BMP peer down LOC-RIB message failed !."
- tgen.net["r1import"].cmd("ip link set dev vrf1 up")
+ shutdown_bringup_interface_in_kernel(tgen, 'r1import', "vrf1", True)
logger.info("checking for BMP peer up LOC-RIB message.")
test_func = partial(
diff --git a/tests/topotests/bgp_community_change_update/test_bgp_community_change_update.py b/tests/topotests/bgp_community_change_update/test_bgp_community_change_update.py
index fe73104ae5..277ae1a3be 100644
--- a/tests/topotests/bgp_community_change_update/test_bgp_community_change_update.py
+++ b/tests/topotests/bgp_community_change_update/test_bgp_community_change_update.py
@@ -41,7 +41,7 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
-from lib.common_config import step
+from lib.common_config import step, shutdown_bringup_interface_in_kernel
from time import sleep
pytestmark = [pytest.mark.bgpd]
@@ -145,7 +145,12 @@ def test_bgp_community_update_path_change():
dup_before = _bgp_get_dup_count()
step("Disable link between y1 and y2")
- tgen.gears["y1"].run("ip link set dev y1-eth1 down")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['y1'].tgen,
+ tgen.gears['y1'].name,
+ "y1-eth1",
+ False,
+ )
def _bgp_converge_link_disabled():
output = json.loads(tgen.gears["y1"].vtysh_cmd("show ip bgp nei 10.0.3.2 json"))
@@ -172,7 +177,12 @@ def test_bgp_community_update_path_change():
dup_before = _bgp_get_dup_count()
step("Enable link between y1 and y2")
- tgen.gears["y1"].run("ip link set dev y1-eth1 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['y1'].tgen,
+ tgen.gears['y1'].name,
+ "y1-eth1",
+ True,
+ )
def _bgp_converge_link_enabled():
output = json.loads(tgen.gears["y1"].vtysh_cmd("show ip bgp nei 10.0.3.2 json"))
diff --git a/tests/topotests/bgp_evpn_advertise_all_vni_vrf/test_bgp_evpn_advertise_all_vni_vrf.py b/tests/topotests/bgp_evpn_advertise_all_vni_vrf/test_bgp_evpn_advertise_all_vni_vrf.py
index ee206cdde9..54eb00bd54 100644
--- a/tests/topotests/bgp_evpn_advertise_all_vni_vrf/test_bgp_evpn_advertise_all_vni_vrf.py
+++ b/tests/topotests/bgp_evpn_advertise_all_vni_vrf/test_bgp_evpn_advertise_all_vni_vrf.py
@@ -57,6 +57,7 @@ from lib import topotest
from lib.common_config import (
create_address_on_interface,
required_linux_kernel_version,
+ shutdown_bringup_interface_in_kernel,
)
from lib.topogen import Topogen, get_topogen
from lib.topolog import logger
@@ -136,10 +137,10 @@ def _prepare_underlay_linux(pe, config):
pe.run("sysctl -q -w net.ipv4.tcp_l3mdev_accept=0")
pe.run(f"ip link add {UNDERLAY_VRF} type vrf table {UNDERLAY_TABLE}")
- pe.run(f"ip link set dev {UNDERLAY_VRF} up")
+ shutdown_bringup_interface_in_kernel(pe.tgen, pe.name, UNDERLAY_VRF, True)
pe.run(f"ip link set dev {underlay_if} master {UNDERLAY_VRF}")
- pe.run(f"ip link set dev {underlay_if} up")
+ shutdown_bringup_interface_in_kernel(pe.tgen, pe.name, underlay_if, True)
def _setup_overlay_linux(pe, config):
@@ -149,10 +150,10 @@ def _setup_overlay_linux(pe, config):
vtep_ip = config["vtep_ip"]
pe.run(f"ip link add name {BRIDGE} type bridge stp_state 0")
- pe.run(f"ip link set dev {BRIDGE} up")
+ shutdown_bringup_interface_in_kernel(pe.tgen, pe.name, BRIDGE, True)
pe.run(f"ip link set dev {access_if} master {BRIDGE}")
- pe.run(f"ip link set dev {access_if} up")
+ shutdown_bringup_interface_in_kernel(pe.tgen, pe.name, access_if, True)
pe.run(
f"ip link add {VXLAN} type vxlan id {VNI} "
@@ -161,17 +162,17 @@ def _setup_overlay_linux(pe, config):
)
pe.run(f"ip link set dev {VXLAN} master {BRIDGE}")
pe.run(f"bridge link set dev {VXLAN} learning off")
- pe.run(f"ip link set dev {VXLAN} up")
+ shutdown_bringup_interface_in_kernel(pe.tgen, pe.name, VXLAN, True)
def _setup_host(host, config):
ifname = config["ifname"]
- host.run(f"ip link set dev {ifname} down")
+ shutdown_bringup_interface_in_kernel(host.tgen, host.name, ifname, False)
host.run(f"ip addr flush dev {ifname}")
host.run(f"ip link set dev {ifname} address {config['mac']}")
create_address_on_interface(host.tgen, host.name, ifname, config["ip"])
- host.run(f"ip link set dev {ifname} up")
+ shutdown_bringup_interface_in_kernel(host.tgen, host.name, ifname, True)
def _disable_advertise_all_vni(pe):
diff --git a/tests/topotests/bgp_evpn_ead_evi_routes/test_bgp_evpn_ead_evi_routes.py b/tests/topotests/bgp_evpn_ead_evi_routes/test_bgp_evpn_ead_evi_routes.py
index 6a0934f87d..191d49c115 100644
--- a/tests/topotests/bgp_evpn_ead_evi_routes/test_bgp_evpn_ead_evi_routes.py
+++ b/tests/topotests/bgp_evpn_ead_evi_routes/test_bgp_evpn_ead_evi_routes.py
@@ -28,6 +28,7 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
+from lib.common_config import shutdown_bringup_interface_in_kernel
def build_topo(tgen):
@@ -65,7 +66,7 @@ def setup_module(module):
tor.run("ip link add dev bridge type bridge stp_state 0")
tor.run("ip link set dev bridge type bridge vlan_filtering 1")
tor.run("ip link set dev bridge type bridge mcast_snooping 0")
- tor.run("ip link set dev bridge up")
+ shutdown_bringup_interface_in_kernel(tor.tgen, tor.name, "bridge", True)
tor.run("/sbin/bridge vlan add vid 1001 dev bridge self")
tor.run("/sbin/bridge vlan add vid 1002 dev bridge self")
tor.run("/sbin/bridge vlan add vid 1003 dev bridge self")
@@ -73,7 +74,7 @@ def setup_module(module):
# Create bond interface for ES
tor.run("ip link add dev hostbond1 type bond mode 802.3ad")
tor.run("ip link set dev hostbond1 type bond ad_actor_system 44:38:39:ff:ff:01")
- tor.run("ip link set dev hostbond1 up")
+ shutdown_bringup_interface_in_kernel(tor.tgen, tor.name, "hostbond1", True)
# Add bond to bridge with VLANs
tor.run("ip link set dev hostbond1 master bridge")
@@ -87,7 +88,7 @@ def setup_module(module):
tor.run(
f"ip link add dev vx-{vni} type vxlan id {vni} dstport 4789 local {tor_ip} nolearning"
)
- tor.run(f"ip link set dev vx-{vni} up")
+ shutdown_bringup_interface_in_kernel(tor.tgen, tor.name, f"vx-{vni}", True)
tor.run(f"ip link set dev vx-{vni} master bridge")
tor.run(f"/sbin/bridge link set dev vx-{vni} neigh_suppress on")
tor.run(f"/sbin/bridge link set dev vx-{vni} learning off")
diff --git a/tests/topotests/bgp_evpn_gr/test_bgp_evpn_gr.py b/tests/topotests/bgp_evpn_gr/test_bgp_evpn_gr.py
index 46ad93d4b3..e23c43d5b5 100644
--- a/tests/topotests/bgp_evpn_gr/test_bgp_evpn_gr.py
+++ b/tests/topotests/bgp_evpn_gr/test_bgp_evpn_gr.py
@@ -36,6 +36,7 @@ from lib.common_config import (
check_router_status,
create_address_on_interface,
kill_router_daemons,
+ shutdown_bringup_interface_in_kernel,
start_router_daemons,
)
@@ -58,9 +59,9 @@ def setup_module(mod):
host_macs = {"host1": "1a:2b:3c:4d:5e:61", "host2": "1a:2b:3c:4d:5e:62"}
for name, mac in host_macs.items():
host = tgen.net[name]
- host.cmd_raises(f"ip link set dev {name}-eth0 down")
+ shutdown_bringup_interface_in_kernel(tgen, name, f"{name}-eth0", False)
host.cmd_raises(f"ip link set dev {name}-eth0 address {mac}")
- host.cmd_raises(f"ip link set dev {name}-eth0 up")
+ shutdown_bringup_interface_in_kernel(tgen, name, f"{name}-eth0", True)
# Configure PE devices: vrf-blue, vxlan100/1000, bridges and sysctls
pe_suffix = {"PE1": "1", "PE2": "2"}
@@ -70,7 +71,7 @@ def setup_module(mod):
bridge_ip = f"192.168.50.{suf}/24"
bridge_ipv6 = f"fd00:50:1::{suf}/48"
pe.cmd_raises("ip link add vrf-blue type vrf table 10")
- pe.cmd_raises("ip link set dev vrf-blue up")
+ shutdown_bringup_interface_in_kernel(tgen, name, "vrf-blue", True)
pe.cmd_raises(
f"ip link add vxlan100 type vxlan id 100 dstport 4789 local {vtep_ip}"
)
@@ -78,9 +79,9 @@ def setup_module(mod):
pe.cmd_raises("ip link set dev vxlan100 master br100")
pe.cmd_raises(f"ip link set dev {name}-eth1 master br100")
create_address_on_interface(tgen, name, "br100", bridge_ip)
- pe.cmd_raises("ip link set up dev br100")
- pe.cmd_raises("ip link set up dev vxlan100")
- pe.cmd_raises(f"ip link set up dev {name}-eth1")
+ shutdown_bringup_interface_in_kernel(tgen, name, "br100", True)
+ shutdown_bringup_interface_in_kernel(tgen, name, "vxlan100", True)
+ shutdown_bringup_interface_in_kernel(tgen, name, f"{name}-eth1", True)
pe.cmd_raises("ip link set dev br100 master vrf-blue")
create_address_on_interface(tgen, name, "br100", bridge_ipv6)
pe.cmd_raises(
@@ -88,8 +89,8 @@ def setup_module(mod):
)
pe.cmd_raises("ip link add name br1000 type bridge stp_state 0")
pe.cmd_raises("ip link set dev vxlan1000 master br1000")
- pe.cmd_raises("ip link set up dev br1000")
- pe.cmd_raises("ip link set up dev vxlan1000")
+ shutdown_bringup_interface_in_kernel(tgen, name, "br1000", True)
+ shutdown_bringup_interface_in_kernel(tgen, name, "vxlan1000", True)
pe.cmd_raises("ip link set dev br1000 master vrf-blue")
pe.cmd_raises("sysctl -w net.ipv4.ip_forward=1")
pe.cmd_raises("sysctl -w net.ipv6.conf.all.forwarding=1")
diff --git a/tests/topotests/bgp_evpn_maximum_prefix/test_bgp_evpn_maximum_prefix.py b/tests/topotests/bgp_evpn_maximum_prefix/test_bgp_evpn_maximum_prefix.py
index 6d9f0ba5e2..4c2ff2214d 100644
--- a/tests/topotests/bgp_evpn_maximum_prefix/test_bgp_evpn_maximum_prefix.py
+++ b/tests/topotests/bgp_evpn_maximum_prefix/test_bgp_evpn_maximum_prefix.py
@@ -17,6 +17,7 @@ sys.path.append(os.path.join(CWD, "../"))
# pylint: disable=C0413
from lib import topotest
from lib.topogen import Topogen, get_topogen
+from lib.common_config import shutdown_bringup_interface_in_kernel
pytestmark = [pytest.mark.bgpd, pytest.mark.evpn]
@@ -26,25 +27,27 @@ def setup_module(mod):
tgen = Topogen(topodef, mod.__name__)
tgen.start_topology()
- tgen.net["r1"].cmd(
+ tgen.net['r1'].cmd(
"""
+
ip link add vxlan10 type vxlan id 10 dstport 4789 local 10.10.10.1 nolearning
ip link add name br10 type bridge
ip link set dev vxlan10 master br10
ip link set dev r1-eth0 master br10
-ip link set up dev br10
-ip link set up dev vxlan10"""
- )
+ """)
+ shutdown_bringup_interface_in_kernel(tgen, 'r1', "br10", True)
+ shutdown_bringup_interface_in_kernel(tgen, 'r1', "vxlan10", True)
- tgen.net["r2"].cmd(
+ tgen.net['r2'].cmd(
"""
+
ip link add vxlan10 type vxlan id 10 dstport 4789 local 10.10.10.2 nolearning
ip link add name br10 type bridge
ip link set dev vxlan10 master br10
ip link set dev r2-eth1 master br10
-ip link set up dev br10
-ip link set up dev vxlan10"""
- )
+ """)
+ shutdown_bringup_interface_in_kernel(tgen, 'r2', "br10", True)
+ shutdown_bringup_interface_in_kernel(tgen, 'r2', "vxlan10", True)
router_list = tgen.routers()
diff --git a/tests/topotests/bgp_evpn_mh/test_evpn_mh.py b/tests/topotests/bgp_evpn_mh/test_evpn_mh.py
index 6d46b383c4..58f97e5fc4 100644
--- a/tests/topotests/bgp_evpn_mh/test_evpn_mh.py
+++ b/tests/topotests/bgp_evpn_mh/test_evpn_mh.py
@@ -38,6 +38,7 @@ from lib.common_config import (
create_interface_in_kernel,
delete_address_on_interface,
kill_router_daemons,
+ shutdown_bringup_interface_in_kernel,
start_router_daemons,
)
@@ -231,11 +232,11 @@ def config_bond(node, bond_name, bond_members, bond_ad_sys_mac, br):
)
for bond_member in bond_members:
- node.run("ip link set dev %s down" % bond_member)
+ shutdown_bringup_interface_in_kernel(node.tgen, node.name, bond_member, False)
node.run("ip link set dev %s master %s" % (bond_member, bond_name))
- node.run("ip link set dev %s up" % bond_member)
+ shutdown_bringup_interface_in_kernel(node.tgen, node.name, bond_member, True)
- node.run("ip link set dev %s up" % bond_name)
+ shutdown_bringup_interface_in_kernel(node.tgen, node.name, bond_name, True)
# if bridge is specified add the bond as a bridge member
if br:
@@ -267,7 +268,7 @@ def config_mcast_tunnel_termination_device(node):
create_interface_in_kernel(node.tgen, node.name, "ipmr-lo")
node.run("ip link set dev ipmr-lo mtu 16000")
node.run("ip link set dev ipmr-lo mode dormant")
- node.run("ip link set dev ipmr-lo up")
+ shutdown_bringup_interface_in_kernel(node.tgen, node.name, "ipmr-lo", True)
def config_bridge(node):
@@ -280,7 +281,7 @@ def config_bridge(node):
node.run("ip link set dev bridge type bridge ageing_time 1800")
node.run("ip link set dev bridge type bridge mcast_snooping 0")
node.run("ip link set dev bridge type bridge vlan_stats_enabled 1")
- node.run("ip link set dev bridge up")
+ shutdown_bringup_interface_in_kernel(node.tgen, node.name, "bridge", True)
node.run("/sbin/bridge vlan add vid 1000 dev bridge self")
@@ -295,7 +296,7 @@ def config_vxlan(node, node_ip):
node.run("ip link set dev vx-1000 type vxlan ttl 64")
node.run("ip link set dev vx-1000 mtu 9152")
node.run("ip link set dev vx-1000 type vxlan dev ipmr-lo group 239.1.1.100")
- node.run("ip link set dev vx-1000 up")
+ shutdown_bringup_interface_in_kernel(node.tgen, node.name, "vx-1000", True)
# bridge attrs
node.run("ip link set dev vx-1000 master bridge")
@@ -314,14 +315,14 @@ def config_svi(node, svi_pip):
"""
node.run("ip link add link bridge name vlan1000 type vlan id 1000 protocol 802.1q")
create_address_on_interface(node.tgen, node.name, "vlan1000", "%s/24" % svi_pip)
- node.run("ip link set dev vlan1000 up")
+ shutdown_bringup_interface_in_kernel(node.tgen, node.name, "vlan1000", True)
node.run("/sbin/sysctl net.ipv4.conf.vlan1000.arp_accept=1")
node.run("ip link add link vlan1000 name vlan1000-v0 type macvlan mode private")
node.run("/sbin/sysctl net.ipv6.conf.vlan1000-v0.accept_dad=0")
node.run("/sbin/sysctl net.ipv6.conf.vlan1000-v0.dad_transmits")
node.run("/sbin/sysctl net.ipv6.conf.vlan1000-v0.dad_transmits=0")
node.run("ip link set dev vlan1000-v0 address 00:00:5e:00:01:01")
- node.run("ip link set dev vlan1000-v0 up")
+ shutdown_bringup_interface_in_kernel(node.tgen, node.name, "vlan1000-v0", True)
# metric 1024 is not working
create_address_on_interface(node.tgen, node.name, "vlan1000-v0", "45.0.0.1/24")
@@ -745,7 +746,12 @@ def test_evpn_ead_update():
# down a remote host link and check if the EAD withdraw is rxed
# Note: LACP is not working as expected so I am temporarily shutting
# down the link on the remote TOR instead of the remote host
- remote_tor.run("ip link set dev %s-%s down" % (remote_tor_name, "eth2"))
+ shutdown_bringup_interface_in_kernel(
+ remote_tor.tgen,
+ remote_tor.name,
+ f"{remote_tor_name}-{'eth2'}",
+ False,
+ )
down_vteps.append(tor_ips.get(remote_tor_name))
_, result = topotest.run_and_expect(test_fn, None, count=20, wait=3)
assertmsg = '"{}" ES incorrect after remote link down'.format(dut_name)
@@ -753,7 +759,12 @@ def test_evpn_ead_update():
# bring up remote host link and check if the EAD update is rxed
down_vteps.remove(tor_ips.get(remote_tor_name))
- remote_tor.run("ip link set dev %s-%s up" % (remote_tor_name, "eth2"))
+ shutdown_bringup_interface_in_kernel(
+ remote_tor.tgen,
+ remote_tor.name,
+ f"{remote_tor_name}-{'eth2'}",
+ True,
+ )
_, result = topotest.run_and_expect(test_fn, None, count=20, wait=3)
assertmsg = '"{}" ES incorrect after remote link flap'.format(dut_name)
assert result is None, assertmsg
@@ -1109,8 +1120,8 @@ def test_evpn_uplink_tracking():
assert result is None, assertmsg
# disable the uplinks
- dut.run("ip link set %s-eth0 down" % dut_name)
- dut.run("ip link set %s-eth1 down" % dut_name)
+ shutdown_bringup_interface_in_kernel(dut.tgen, dut.name, f"{dut_name}-eth0", False)
+ shutdown_bringup_interface_in_kernel(dut.tgen, dut.name, f"{dut_name}-eth1", False)
# check if the access ports have been protodowned
test_fn = partial(check_protodown_rc, dut, "uplinkDown")
@@ -1119,8 +1130,8 @@ def test_evpn_uplink_tracking():
assert result is None, assertmsg
# enable the uplinks
- dut.run("ip link set %s-eth0 up" % dut_name)
- dut.run("ip link set %s-eth1 up" % dut_name)
+ shutdown_bringup_interface_in_kernel(dut.tgen, dut.name, f"{dut_name}-eth0", True)
+ shutdown_bringup_interface_in_kernel(dut.tgen, dut.name, f"{dut_name}-eth1", True)
# check if the access ports have been moved out of protodown
test_fn = partial(check_protodown_rc, dut, None)
diff --git a/tests/topotests/bgp_evpn_mh_v4_v6_num/test_evpn_mh_v4_v6_num.py b/tests/topotests/bgp_evpn_mh_v4_v6_num/test_evpn_mh_v4_v6_num.py
index f7a23a8d07..9d94574b5f 100644
--- a/tests/topotests/bgp_evpn_mh_v4_v6_num/test_evpn_mh_v4_v6_num.py
+++ b/tests/topotests/bgp_evpn_mh_v4_v6_num/test_evpn_mh_v4_v6_num.py
@@ -46,7 +46,11 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
# Required to instantiate the topology builder class.
-from lib.common_config import create_address_on_interface, create_interface_in_kernel
+from lib.common_config import (
+ create_address_on_interface,
+ create_interface_in_kernel,
+ shutdown_bringup_interface_in_kernel,
+)
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
@@ -415,11 +419,11 @@ def config_bond(node, bond_name, bond_members, bond_ad_sys_mac, br):
)
for bond_member in bond_members:
- node.run("ip link set dev %s down" % bond_member)
+ shutdown_bringup_interface_in_kernel(node.tgen, node.name, bond_member, False)
node.run("ip link set dev %s master %s" % (bond_member, bond_name))
- node.run("ip link set dev %s up" % bond_member)
+ shutdown_bringup_interface_in_kernel(node.tgen, node.name, bond_member, True)
- node.run("ip link set dev %s up" % bond_name)
+ shutdown_bringup_interface_in_kernel(node.tgen, node.name, bond_name, True)
# if bridge is specified add the bond as a bridge member
if br:
@@ -439,7 +443,7 @@ def config_mcast_tunnel_termination_device(node):
create_interface_in_kernel(node.tgen, node.name, "ipmr-lo")
node.run("ip link set dev ipmr-lo mtu 16000")
node.run("ip link set dev ipmr-lo mode dormant")
- node.run("ip link set dev ipmr-lo up")
+ shutdown_bringup_interface_in_kernel(node.tgen, node.name, "ipmr-lo", True)
def config_bridge(node):
@@ -455,7 +459,7 @@ def config_bridge(node):
node.run("ip link set dev br_default type bridge ageing_time 1800")
node.run("ip link set dev br_default type bridge mcast_snooping 0")
node.run("ip link set dev br_default type bridge vlan_stats_enabled 1")
- node.run("ip link set dev br_default up")
+ shutdown_bringup_interface_in_kernel(node.tgen, node.name, "br_default", True)
# Self VLAN entries for all L2VNIs and L3VNI VLANs derived from the maps
for vid in sorted(VLAN_VNI_VRF.keys()):
node.run(f"/sbin/bridge vlan add vid {vid} dev br_default self")
@@ -500,7 +504,7 @@ def config_vxlan(node, node_ip):
node.run(f"/sbin/bridge vlan add dev vxlan48 vid {vid}")
node.run(f"/sbin/bridge vlan add dev vxlan48 vid {vid} tunnel_info id {vni}")
- node.run("ip link set dev vxlan48 up")
+ shutdown_bringup_interface_in_kernel(node.tgen, node.name, "vxlan48", True)
def config_l3vni(node, node_ip):
@@ -529,7 +533,7 @@ def config_svi(node, svi_pip):
f"type vlan id {vid} protocol 802.1q"
)
node.run(f"ip link set dev {vlan_name} master {vrf}")
- node.run(f"ip link set dev {vlan_name} up")
+ shutdown_bringup_interface_in_kernel(node.tgen, node.name, vlan_name, True)
node.run(f"/sbin/sysctl net.ipv6.conf.{vlan_name}.accept_dad=0")
node.run(f"/sbin/sysctl net.ipv6.conf.{vlan_name}.dad_transmits=0")
@@ -546,7 +550,7 @@ def config_svi(node, svi_pip):
node.run("/sbin/sysctl net.ipv4.conf.vlan1000.arp_accept=1")
node.run("ip link add link vlan1000 name vlan1000-v0 type macvlan mode private")
node.run("ip link set dev vlan1000-v0 address 00:00:5e:00:01:01")
- node.run("ip link set dev vlan1000-v0 up")
+ shutdown_bringup_interface_in_kernel(node.tgen, node.name, "vlan1000-v0", True)
create_address_on_interface(node.tgen, node.name, "vlan1000-v0", "45.0.0.1/24")
@@ -560,7 +564,7 @@ def config_vrf_l3vni(node):
vrf_tables = {"vrf1": 1001, "vrf2": 1002}
for vrf, table in vrf_tables.items():
node.run(f"ip link add {vrf} type vrf table {table} 2>/dev/null || true")
- node.run(f"ip link set dev {vrf} up")
+ shutdown_bringup_interface_in_kernel(node.tgen, node.name, vrf, True)
# Create L3VNI VLAN interfaces and attach them to the appropriate VRFs
for l3vni, vrf in L3VNI_VRF.items():
@@ -570,7 +574,7 @@ def config_vrf_l3vni(node):
f"type vlan id {l3vni} protocol 802.1q"
)
node.run(f"ip link set dev {vlan_name} master {vrf}")
- node.run(f"ip link set dev {vlan_name} up")
+ shutdown_bringup_interface_in_kernel(node.tgen, node.name, vlan_name, True)
node.run(f"/sbin/sysctl net.ipv6.conf.{vlan_name}.accept_dad=0")
node.run(f"/sbin/sysctl net.ipv6.conf.{vlan_name}.dad_transmits=0")
@@ -660,12 +664,12 @@ def setup_vtep_mh(tgen, tor_name, tor_ip, svi_pip, ip_version):
# Cleanup any existing SVD-related interfaces
cleanup_cmds = [
# SVIs and L3VNI VLANs
- "ip link set dev vlan1000 down 2>/dev/null || true",
- "ip link set dev vlan1001 down 2>/dev/null || true",
- "ip link set dev vlan1002 down 2>/dev/null || true",
- "ip link set dev vlan1003 down 2>/dev/null || true",
- "ip link set dev vlan4000 down 2>/dev/null || true",
- "ip link set dev vlan4001 down 2>/dev/null || true",
+ ("down", "vlan1000"),
+ ("down", "vlan1001"),
+ ("down", "vlan1002"),
+ ("down", "vlan1003"),
+ ("down", "vlan4000"),
+ ("down", "vlan4001"),
"ip link del vlan1000 2>/dev/null || true",
"ip link del vlan1001 2>/dev/null || true",
"ip link del vlan1002 2>/dev/null || true",
@@ -673,17 +677,22 @@ def setup_vtep_mh(tgen, tor_name, tor_ip, svi_pip, ip_version):
"ip link del vlan4000 2>/dev/null || true",
"ip link del vlan4001 2>/dev/null || true",
# VXLAN and bridge
- "ip link set dev vxlan48 down 2>/dev/null || true",
+ ("down", "vxlan48"),
"ip link del vxlan48 2>/dev/null || true",
- "ip link set dev br_default down 2>/dev/null || true",
+ ("down", "br_default"),
"ip link del br_default 2>/dev/null || true",
# VRFs
- "ip link set dev vrf1 down 2>/dev/null || true",
- "ip link set dev vrf2 down 2>/dev/null || true",
+ ("down", "vrf1"),
+ ("down", "vrf2"),
"ip link del vrf1 2>/dev/null || true",
"ip link del vrf2 2>/dev/null || true",
]
for cmd in cleanup_cmds:
+ if isinstance(cmd, tuple):
+ shutdown_bringup_interface_in_kernel(
+ tor.tgen, tor.name, cmd[1], cmd[0] == "up"
+ )
+ continue
tor.run(cmd)
# Now configure SVD data plane and host bonds using existing helper
@@ -1166,7 +1175,12 @@ def test_evpn_ead_update(tgen_and_ip_version):
# down a remote host link and check if the EAD withdraw is rxed
# Note: LACP is not working as expected so I am temporarily shutting
# down the link on the remote TOR instead of the remote host
- remote_tor.run("ip link set dev %s-%s down" % (remote_tor_name, "eth2"))
+ shutdown_bringup_interface_in_kernel(
+ remote_tor.tgen,
+ remote_tor.name,
+ f"{remote_tor_name}-{'eth2'}",
+ False,
+ )
down_vteps.append(tor_ips.get(remote_tor_name))
_, result = topotest.run_and_expect(test_fn, None, count=20, wait=3)
assertmsg = '"{}" ES incorrect after remote link down'.format(dut_name)
@@ -1174,7 +1188,12 @@ def test_evpn_ead_update(tgen_and_ip_version):
# bring up remote host link and check if the EAD update is rxed
down_vteps.remove(tor_ips.get(remote_tor_name))
- remote_tor.run("ip link set dev %s-%s up" % (remote_tor_name, "eth2"))
+ shutdown_bringup_interface_in_kernel(
+ remote_tor.tgen,
+ remote_tor.name,
+ f"{remote_tor_name}-{'eth2'}",
+ True,
+ )
_, result = topotest.run_and_expect(test_fn, None, count=20, wait=3)
assertmsg = '"{}" ES incorrect after remote link flap'.format(dut_name)
assert result is None, assertmsg
@@ -1377,8 +1396,8 @@ def test_evpn_uplink_tracking(tgen_and_ip_version):
assert result is None, assertmsg
# disable the uplinks
- dut.run("ip link set %s-eth0 down" % dut_name)
- dut.run("ip link set %s-eth1 down" % dut_name)
+ shutdown_bringup_interface_in_kernel(dut.tgen, dut.name, f"{dut_name}-eth0", False)
+ shutdown_bringup_interface_in_kernel(dut.tgen, dut.name, f"{dut_name}-eth1", False)
# check if the access ports have been protodowned
test_fn = partial(check_protodown_rc, dut, "uplinkDown")
@@ -1387,8 +1406,8 @@ def test_evpn_uplink_tracking(tgen_and_ip_version):
assert result is None, assertmsg
# enable the uplinks
- dut.run("ip link set %s-eth0 up" % dut_name)
- dut.run("ip link set %s-eth1 up" % dut_name)
+ shutdown_bringup_interface_in_kernel(dut.tgen, dut.name, f"{dut_name}-eth0", True)
+ shutdown_bringup_interface_in_kernel(dut.tgen, dut.name, f"{dut_name}-eth1", True)
# check if the access ports have been moved out of protodown
test_fn = partial(check_protodown_rc, dut, None)
diff --git a/tests/topotests/bgp_evpn_overlay_index_gateway/test_bgp_evpn_overlay_index_gateway.py b/tests/topotests/bgp_evpn_overlay_index_gateway/test_bgp_evpn_overlay_index_gateway.py
index aabc59fe40..5889dd685b 100755
--- a/tests/topotests/bgp_evpn_overlay_index_gateway/test_bgp_evpn_overlay_index_gateway.py
+++ b/tests/topotests/bgp_evpn_overlay_index_gateway/test_bgp_evpn_overlay_index_gateway.py
@@ -56,9 +56,10 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
from lib.common_config import (
create_address_on_interface,
+ shutdown_bringup_interface_in_kernel,
step,
- write_test_header,
write_test_footer,
+ write_test_header,
)
# Required to instantiate the topology builder class.
@@ -132,9 +133,9 @@ def setup_module(mod):
host = tgen.net[name]
host_mac = "1a:2b:3c:4d:5e:6{}".format(HOST_SUFFIX[name])
- host.cmd_raises("ip link set dev {}-eth0 down".format(name))
+ shutdown_bringup_interface_in_kernel(tgen, name, f"{name}-eth0", False)
host.cmd_raises("ip link set dev {0}-eth0 address {1}".format(name, host_mac))
- host.cmd_raises("ip link set dev {}-eth0 up".format(name))
+ shutdown_bringup_interface_in_kernel(tgen, name, f"{name}-eth0", True)
# Configure PE VxLAN and Bridge interfaces
for name in tgen.gears:
@@ -147,7 +148,7 @@ def setup_module(mod):
bridge_ipv6 = "50:0:1::{}/48".format(PE_SUFFIX[name])
pe.cmd_raises("ip link add vrf-blue type vrf table 10")
- pe.cmd_raises("ip link set dev vrf-blue up")
+ shutdown_bringup_interface_in_kernel(tgen, name, "vrf-blue", True)
pe.cmd_raises(
"ip link add vxlan100 type vxlan id 100 dstport 4789 local {}".format(
vtep_ip
@@ -157,9 +158,9 @@ def setup_module(mod):
pe.cmd_raises("ip link set dev vxlan100 master br100")
pe.cmd_raises("ip link set dev {}-eth1 master br100".format(name))
create_address_on_interface(tgen, name, "br100", bridge_ip)
- pe.cmd_raises("ip link set up dev br100")
- pe.cmd_raises("ip link set up dev vxlan100")
- pe.cmd_raises("ip link set up dev {}-eth1".format(name))
+ shutdown_bringup_interface_in_kernel(tgen, name, "br100", True)
+ shutdown_bringup_interface_in_kernel(tgen, name, "vxlan100", True)
+ shutdown_bringup_interface_in_kernel(tgen, name, f"{name}-eth1", True)
pe.cmd_raises("ip link set dev br100 master vrf-blue")
create_address_on_interface(tgen, name, "br100", bridge_ipv6)
@@ -170,8 +171,8 @@ def setup_module(mod):
)
pe.cmd_raises("ip link add name br1000 type bridge stp_state 0")
pe.cmd_raises("ip link set dev vxlan1000 master br100")
- pe.cmd_raises("ip link set up dev br1000")
- pe.cmd_raises("ip link set up dev vxlan1000")
+ shutdown_bringup_interface_in_kernel(tgen, name, "br1000", True)
+ shutdown_bringup_interface_in_kernel(tgen, name, "vxlan1000", True)
pe.cmd_raises("ip link set dev br1000 master vrf-blue")
pe.cmd_raises("sysctl -w net.ipv4.ip_forward=1")
@@ -385,16 +386,14 @@ def test_evpn_gateway_ip_flap_rt2(request):
step("Shut down VxLAN interface at PE1 which results in withdraw of type-2 routes")
- pe1 = tgen.net["PE1"]
-
- pe1.cmd_raises("ip link set dev vxlan100 down")
+ shutdown_bringup_interface_in_kernel(tgen, "PE1", "vxlan100", False)
result, assertmsg = evpn_gateway_ip_show_op_check("no_rt2")
assert result is None, assertmsg
step("Bring up VxLAN interface at PE1 and advertise type-2 routes again")
- pe1.cmd_raises("ip link set dev vxlan100 up")
+ shutdown_bringup_interface_in_kernel(tgen, "PE1", "vxlan100", True)
result, assertmsg = evpn_gateway_ip_show_op_check("base")
assert result is None, assertmsg
diff --git a/tests/topotests/bgp_evpn_pmsi_attr_intern/test_bgp_evpn_pmsi_attr_intern.py b/tests/topotests/bgp_evpn_pmsi_attr_intern/test_bgp_evpn_pmsi_attr_intern.py
index 7611602fab..ba5bdf3685 100644
--- a/tests/topotests/bgp_evpn_pmsi_attr_intern/test_bgp_evpn_pmsi_attr_intern.py
+++ b/tests/topotests/bgp_evpn_pmsi_attr_intern/test_bgp_evpn_pmsi_attr_intern.py
@@ -84,6 +84,7 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.topogen import Topogen, get_topogen
from lib.topolog import logger
+from lib.common_config import shutdown_bringup_interface_in_kernel
pytestmark = [pytest.mark.bgpd, pytest.mark.evpn]
@@ -110,7 +111,7 @@ def setup_module(mod):
cmds_vxlan = [
"ip link add name bridge-{vni} up type bridge stp_state 0",
- "ip link set dev bridge-{vni} up",
+ ("up", "bridge-{vni}"),
"ip link add name vxlan-{vni} type vxlan id {vni} dstport 4789 "
"dev {rname}-eth0 local {vtep}",
"ip link set dev vxlan-{vni} master bridge-{vni}",
@@ -122,6 +123,14 @@ def setup_module(mod):
router = tgen.gears[rname]
for vni in VNIS:
for cmd in cmds_vxlan:
+ if isinstance(cmd, tuple):
+ shutdown_bringup_interface_in_kernel(
+ tgen,
+ rname,
+ cmd[1].format(rname=rname, vni=vni, vtep=params["vtep"]),
+ cmd[0] == "up",
+ )
+ continue
formatted = cmd.format(rname=rname, vni=vni, vtep=params["vtep"])
logger.info("cmd to {}: {}".format(rname, formatted))
router.cmd_raises(formatted)
diff --git a/tests/topotests/bgp_evpn_rmac_conflict/test_bgp_evpn_rmac_conflict.py b/tests/topotests/bgp_evpn_rmac_conflict/test_bgp_evpn_rmac_conflict.py
index 879cfbac3f..2ab8ad1667 100644
--- a/tests/topotests/bgp_evpn_rmac_conflict/test_bgp_evpn_rmac_conflict.py
+++ b/tests/topotests/bgp_evpn_rmac_conflict/test_bgp_evpn_rmac_conflict.py
@@ -39,7 +39,10 @@ sys.path.append(os.path.join(CWD, "../"))
# pylint: disable=C0413
from lib import topotest
-from lib.common_config import create_interface_in_kernel
+from lib.common_config import (
+ create_interface_in_kernel,
+ shutdown_bringup_interface_in_kernel,
+)
from lib.topogen import Topogen, get_topogen
from lib.topolog import logger
@@ -120,12 +123,10 @@ ip -n vrf-{vrf} link set vxlan-{vrf} up
# ------------------------------------------------------------------
for vrf in (101, 102):
tgen.gears["r2"].cmd(
- """
-ip link add vrf-{vrf} type vrf table {vrf}
-ip link set dev vrf-{vrf} up
-""".format(
- vrf=vrf
- )
+ "ip link add vrf-{vrf} type vrf table {vrf}".format(vrf=vrf)
+ )
+ shutdown_bringup_interface_in_kernel(
+ tgen, "r2", "vrf-{}".format(vrf), True
)
create_interface_in_kernel(
tgen, "r2", "loop{}".format(vrf), vrf="vrf-{}".format(vrf)
@@ -134,12 +135,20 @@ ip link set dev vrf-{vrf} up
"""
ip link add bridge-{vrf} up address {rmac} type bridge stp_state 0
ip link set bridge-{vrf} master vrf-{vrf}
-ip link set dev bridge-{vrf} up
+""".format(
+ vrf=vrf, rmac=_create_rmac(2, vrf)
+ )
+ )
+ shutdown_bringup_interface_in_kernel(
+ tgen, "r2", "bridge-{}".format(vrf), True
+ )
+ tgen.gears["r2"].cmd(
+ """
ip link add vxlan-{vrf} type vxlan id {vrf} dstport 4789 dev eth-rr local 192.168.2.2
ip link set dev vxlan-{vrf} master bridge-{vrf}
ip link set vxlan-{vrf} up type bridge_slave learning off flood off mcast_flood off
""".format(
- vrf=vrf, rmac=_create_rmac(2, vrf)
+ vrf=vrf
)
)
diff --git a/tests/topotests/bgp_evpn_route_map_match/test_bgp_evpn_route_map_match.py b/tests/topotests/bgp_evpn_route_map_match/test_bgp_evpn_route_map_match.py
index 633706a6a7..2bd33a0b25 100644
--- a/tests/topotests/bgp_evpn_route_map_match/test_bgp_evpn_route_map_match.py
+++ b/tests/topotests/bgp_evpn_route_map_match/test_bgp_evpn_route_map_match.py
@@ -24,6 +24,7 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.topogen import Topogen, get_topogen
from lib.topolog import logger
+from lib.common_config import shutdown_bringup_interface_in_kernel
def setup_module(mod):
@@ -31,25 +32,27 @@ def setup_module(mod):
tgen = Topogen(topodef, mod.__name__)
tgen.start_topology()
- tgen.net["r1"].cmd(
+ tgen.net['r1'].cmd(
"""
+
ip link add vxlan10 type vxlan id 10 dstport 4789 local 10.10.10.1 nolearning
ip link add name br10 type bridge
ip link set dev vxlan10 master br10
ip link set dev r1-eth0 master br10
-ip link set up dev br10
-ip link set up dev vxlan10"""
- )
+ """)
+ shutdown_bringup_interface_in_kernel(tgen, 'r1', "br10", True)
+ shutdown_bringup_interface_in_kernel(tgen, 'r1', "vxlan10", True)
- tgen.net["r2"].cmd(
+ tgen.net['r2'].cmd(
"""
+
ip link add vxlan10 type vxlan id 10 dstport 4789 local 10.10.10.2 nolearning
ip link add name br10 type bridge
ip link set dev vxlan10 master br10
ip link set dev r2-eth1 master br10
-ip link set up dev br10
-ip link set up dev vxlan10"""
- )
+ """)
+ shutdown_bringup_interface_in_kernel(tgen, 'r2', "br10", True)
+ shutdown_bringup_interface_in_kernel(tgen, 'r2', "vxlan10", True)
router_list = tgen.routers()
diff --git a/tests/topotests/bgp_evpn_route_target_config/test_bgp_evpn_route_target_config.py b/tests/topotests/bgp_evpn_route_target_config/test_bgp_evpn_route_target_config.py
index b58463557a..69fbd1ac87 100644
--- a/tests/topotests/bgp_evpn_route_target_config/test_bgp_evpn_route_target_config.py
+++ b/tests/topotests/bgp_evpn_route_target_config/test_bgp_evpn_route_target_config.py
@@ -48,7 +48,11 @@ sys.path.append(os.path.join(CWD, "../"))
# pylint: disable=C0413
from lib import topotest
-from lib.common_config import create_address_on_interface, create_interface_in_kernel
+from lib.common_config import (
+ create_address_on_interface,
+ create_interface_in_kernel,
+ shutdown_bringup_interface_in_kernel,
+)
from lib.topogen import Topogen, get_topogen
from lib.topolog import logger
@@ -94,10 +98,10 @@ def setup_module(mod):
# routers.
cmds_vxlan = [
"ip link add vrf-101 type vrf table 101",
- "ip link set dev vrf-101 up",
+ ("up", "vrf-101"),
"ip link add bridge-101 up address 52:54:00:0{0}:01:65 type bridge stp_state 0",
"ip link set bridge-101 master vrf-101",
- "ip link set dev bridge-101 up",
+ ("up", "bridge-101"),
"ip link add vxlan-101 type vxlan id 101 dstport 4789 dev r{0}-eth0 local 192.168.0.{0}",
"ip link set dev vxlan-101 master bridge-101",
"ip link set vxlan-101 up type bridge_slave learning off flood off mcast_flood off",
@@ -121,6 +125,11 @@ def setup_module(mod):
for rid in (1, 2):
router = tgen.gears["r{}".format(rid)]
for cmd in cmds_vxlan:
+ if isinstance(cmd, tuple):
+ shutdown_bringup_interface_in_kernel(
+ tgen, "r{}".format(rid), cmd[1].format(rid), cmd[0] == "up"
+ )
+ continue
formatted = cmd.format(rid)
logger.info("cmd to r{}: {}".format(rid, formatted))
output = router.cmd_raises(formatted)
diff --git a/tests/topotests/bgp_evpn_rt2_v6_vrf_import/test_bgp_evpn_rt2_v6_vrf_import.py b/tests/topotests/bgp_evpn_rt2_v6_vrf_import/test_bgp_evpn_rt2_v6_vrf_import.py
index 665c4ee78a..2bd4a0d940 100644
--- a/tests/topotests/bgp_evpn_rt2_v6_vrf_import/test_bgp_evpn_rt2_v6_vrf_import.py
+++ b/tests/topotests/bgp_evpn_rt2_v6_vrf_import/test_bgp_evpn_rt2_v6_vrf_import.py
@@ -18,7 +18,7 @@ sys.path.append(os.path.join(CWD, "../"))
# pylint: disable=C0413
from lib import topotest
-from lib.common_config import step
+from lib.common_config import step, shutdown_bringup_interface_in_kernel
from lib.topogen import Topogen, get_topogen
pytestmark = [pytest.mark.bgpd, pytest.mark.evpn]
@@ -40,6 +40,11 @@ def build_topo(tgen):
def _run_cmds(node, commands):
for command in commands:
+ if isinstance(command, tuple):
+ shutdown_bringup_interface_in_kernel(
+ node.tgen, node.name, command[1], command[0] == "up"
+ )
+ continue
node.cmd_raises(command)
@@ -92,9 +97,9 @@ def setup_module(mod):
_run_cmds(
tgen.gears["h2"],
[
- "ip link set eth-pe2 down",
+ ("down", "eth-pe2"),
"ip link set eth-pe2 address 02:00:00:00:00:02",
- "ip link set eth-pe2 up",
+ ("up", "eth-pe2"),
],
)
diff --git a/tests/topotests/bgp_evpn_rt5/test_bgp_evpn.py b/tests/topotests/bgp_evpn_rt5/test_bgp_evpn.py
index ff65cdb924..09fe9084f7 100644
--- a/tests/topotests/bgp_evpn_rt5/test_bgp_evpn.py
+++ b/tests/topotests/bgp_evpn_rt5/test_bgp_evpn.py
@@ -35,6 +35,7 @@ from lib.common_config import (
create_interface_in_kernel,
required_iproute2_version,
required_linux_kernel_version,
+ shutdown_bringup_interface_in_kernel,
)
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
@@ -110,12 +111,10 @@ ip -n vrf-{0} link set vxlan-{0} up
)
tgen.gears["r2"].cmd(
- """
-ip link add vrf-{0} type vrf table {0}
-ip link set dev vrf-{0} up
-""".format(
- vrf
- )
+ "ip link add vrf-{0} type vrf table {0}".format(vrf)
+ )
+ shutdown_bringup_interface_in_kernel(
+ tgen, "r2", "vrf-{}".format(vrf), True
)
create_interface_in_kernel(
tgen, "r2", "loop{}".format(vrf), vrf="vrf-{}".format(vrf)
@@ -124,12 +123,20 @@ ip link set dev vrf-{0} up
"""
ip link add bridge-{0} up address {1} type bridge stp_state 0
ip link set bridge-{0} master vrf-{0}
-ip link set dev bridge-{0} up
+""".format(
+ vrf, _create_rmac(2, vrf)
+ )
+ )
+ shutdown_bringup_interface_in_kernel(
+ tgen, "r2", "bridge-{}".format(vrf), True
+ )
+ tgen.gears["r2"].cmd(
+ """
ip link add vxlan-{0} type vxlan id {0} dstport 4789 dev eth-rr local 192.168.2.2
ip link set dev vxlan-{0} master bridge-{0}
ip link set vxlan-{0} up type bridge_slave learning off flood off mcast_flood off
""".format(
- vrf, _create_rmac(2, vrf)
+ vrf
)
)
diff --git a/tests/topotests/bgp_evpn_rt5/test_bgp_evpn_v6_vtep.py b/tests/topotests/bgp_evpn_rt5/test_bgp_evpn_v6_vtep.py
index 77c46c6abc..7b8dd3322b 100644
--- a/tests/topotests/bgp_evpn_rt5/test_bgp_evpn_v6_vtep.py
+++ b/tests/topotests/bgp_evpn_rt5/test_bgp_evpn_v6_vtep.py
@@ -29,7 +29,11 @@ sys.path.append(os.path.join(CWD, "../"))
# Import topogen and topotest helpers
from lib import topotest
from lib.bgp import verify_bgp_rib
-from lib.common_config import apply_raw_config, create_interface_in_kernel
+from lib.common_config import (
+ apply_raw_config,
+ create_interface_in_kernel,
+ shutdown_bringup_interface_in_kernel,
+)
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
@@ -60,6 +64,18 @@ def build_topo(tgen):
switch.add_link(tgen.gears["r3"])
+def _apply_link_cmd(tgen, router, cmd, *args):
+ if isinstance(cmd, tuple):
+ shutdown_bringup_interface_in_kernel(
+ tgen, router.name, cmd[1].format(*args), cmd[0] == "up"
+ )
+ return
+ formatted = cmd.format(*args)
+ logger.info("cmd to %s: %s", router.name, formatted)
+ output = router.cmd_raises(formatted)
+ logger.info("result: " + output)
+
+
def setup_module(mod):
"Sets up the pytest environment"
@@ -83,13 +99,13 @@ def setup_module(mod):
"ip link add {0}-vrf-{1} type vrf table {1}",
"ip ru add oif {0}-vrf-{1} table {1}",
"ip ru add iif {0}-vrf-{1} table {1}",
- "ip link set dev {0}-vrf-{1} up",
+ ("up", "{0}-vrf-{1}"),
]
cmds_r2 = [ # config routing 101
"ip link add name bridge-101 up type bridge stp_state 0",
"ip link set bridge-101 master {}-vrf-101",
- "ip link set dev bridge-101 up",
+ ("up", "bridge-101"),
"ip link add name vxlan-101 type vxlan id 101 dstport 4789 dev r2-eth0 local 192:168:100::41",
"ip link set dev vxlan-101 master bridge-101",
"ip link set vxlan-101 up type bridge_slave learning off flood off mcast_flood off",
@@ -98,7 +114,7 @@ def setup_module(mod):
cmds_r3 = [ # config routing 102
"ip link add name bridge-102 up type bridge stp_state 0",
"ip link set bridge-102 master {}-vrf-102",
- "ip link set dev bridge-102 up",
+ ("up", "bridge-102"),
"ip link add name vxlan-102 type vxlan id 102 dstport 4789 dev r3-eth0 local 192:168:100::61",
"ip link set dev vxlan-102 master bridge-102",
"ip link set vxlan-102 up type bridge_slave learning off flood off mcast_flood off",
@@ -123,27 +139,19 @@ def setup_module(mod):
router = tgen.gears["r2"]
for cmd in cmds_vrflite:
- logger.info("cmd to r2: " + cmd.format("r2", 101))
- output = router.cmd_raises(cmd.format("r2", 101))
- logger.info("result: " + output)
+ _apply_link_cmd(tgen, router, cmd, "r2", 101)
create_interface_in_kernel(tgen, "r2", "loop101", vrf="r2-vrf-101")
for cmd in cmds_r2:
- logger.info("cmd to r2: " + cmd.format("r2"))
- output = router.cmd_raises(cmd.format("r2"))
- logger.info("result: " + output)
+ _apply_link_cmd(tgen, router, cmd, "r2")
router = tgen.gears["r3"]
for cmd in cmds_vrflite:
- logger.info("cmd to r3: " + cmd.format("r3", 102))
- output = router.cmd_raises(cmd.format("r3", 102))
- logger.info("result: " + output)
+ _apply_link_cmd(tgen, router, cmd, "r3", 102)
create_interface_in_kernel(tgen, "r3", "loop102", vrf="r3-vrf-102")
for cmd in cmds_r3:
- logger.info("cmd to r3: " + cmd.format("r3"))
- output = router.cmd_raises(cmd.format("r3"))
- logger.info("result: " + output)
+ _apply_link_cmd(tgen, router, cmd, "r3")
tgen.net["r1"].cmd_raises(
"ip link add name vxlan-101 type vxlan id 101 dstport 4789 dev r1-eth0 local 192:168:100::21"
diff --git a/tests/topotests/bgp_evpn_rt5_implied/test_bgp_evpn_implied.py b/tests/topotests/bgp_evpn_rt5_implied/test_bgp_evpn_implied.py
index 6236a030d9..a811aea39c 100644
--- a/tests/topotests/bgp_evpn_rt5_implied/test_bgp_evpn_implied.py
+++ b/tests/topotests/bgp_evpn_rt5_implied/test_bgp_evpn_implied.py
@@ -37,7 +37,11 @@ sys.path.append(os.path.join(CWD, "../"))
# Import topogen and topotest helpers
from lib import topotest
from lib.bgp import verify_bgp_rib
-from lib.common_config import apply_raw_config, create_interface_in_kernel
+from lib.common_config import (
+ apply_raw_config,
+ create_interface_in_kernel,
+ shutdown_bringup_interface_in_kernel,
+)
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
@@ -106,12 +110,10 @@ ip -n vrf-{0} link set vxlan-{0} up
)
tgen.gears["r2"].cmd(
- """
-ip link add vrf-{0} type vrf table {0}
-ip link set dev vrf-{0} up
-""".format(
- vrf
- )
+ "ip link add vrf-{0} type vrf table {0}".format(vrf)
+ )
+ shutdown_bringup_interface_in_kernel(
+ tgen, "r2", "vrf-{}".format(vrf), True
)
create_interface_in_kernel(
tgen, "r2", "loop{}".format(vrf), vrf="vrf-{}".format(vrf)
@@ -120,12 +122,20 @@ ip link set dev vrf-{0} up
"""
ip link add bridge-{0} up address {1} type bridge stp_state 0
ip link set bridge-{0} master vrf-{0}
-ip link set dev bridge-{0} up
+""".format(
+ vrf, _create_rmac(2, vrf)
+ )
+ )
+ shutdown_bringup_interface_in_kernel(
+ tgen, "r2", "bridge-{}".format(vrf), True
+ )
+ tgen.gears["r2"].cmd(
+ """
ip link add vxlan-{0} type vxlan id {0} dstport 4789 dev eth-rr local 192.168.2.2
ip link set dev vxlan-{0} master bridge-{0}
ip link set vxlan-{0} up type bridge_slave learning off flood off mcast_flood off
""".format(
- vrf, _create_rmac(2, vrf)
+ vrf
)
)
diff --git a/tests/topotests/bgp_evpn_rt_wildcard_matching/test_bgp_evpn_rt_wildcard_matching.py b/tests/topotests/bgp_evpn_rt_wildcard_matching/test_bgp_evpn_rt_wildcard_matching.py
index 651448360b..6b673d9367 100644
--- a/tests/topotests/bgp_evpn_rt_wildcard_matching/test_bgp_evpn_rt_wildcard_matching.py
+++ b/tests/topotests/bgp_evpn_rt_wildcard_matching/test_bgp_evpn_rt_wildcard_matching.py
@@ -47,7 +47,10 @@ sys.path.append(os.path.join(CWD, "../"))
# pylint: disable=C0413
from lib import topotest
-from lib.common_config import create_interface_in_kernel
+from lib.common_config import (
+ create_interface_in_kernel,
+ shutdown_bringup_interface_in_kernel,
+)
from lib.topogen import Topogen, get_topogen
from lib.topolog import logger
@@ -88,10 +91,10 @@ def setup_module(mod):
# routers.
cmds_vxlan = [
"ip link add vrf-101 type vrf table 101",
- "ip link set dev vrf-101 up",
+ ("up", "vrf-101"),
"ip link add bridge-101 up address 52:54:00:0{0}:01:65 type bridge stp_state 0",
"ip link set bridge-101 master vrf-101",
- "ip link set dev bridge-101 up",
+ ("up", "bridge-101"),
"ip link add vxlan-101 type vxlan id 101 dstport 4789 dev r{0}-eth0 local 192.168.0.{0}",
"ip link set dev vxlan-101 master bridge-101",
"ip link set vxlan-101 up type bridge_slave learning off flood off mcast_flood off",
@@ -104,6 +107,11 @@ def setup_module(mod):
for rid in (1, 2):
router = tgen.gears["r{}".format(rid)]
for cmd in cmds_vxlan:
+ if isinstance(cmd, tuple):
+ shutdown_bringup_interface_in_kernel(
+ tgen, "r{}".format(rid), cmd[1].format(rid), cmd[0] == "up"
+ )
+ continue
formatted = cmd.format(rid)
logger.info("cmd to r{}: {}".format(rid, formatted))
output = router.cmd_raises(formatted)
diff --git a/tests/topotests/bgp_evpn_svi_anycast_gw/test_anycast_gw_neigh_linkage.py b/tests/topotests/bgp_evpn_svi_anycast_gw/test_anycast_gw_neigh_linkage.py
index db41613eec..c3b2e44cb4 100644
--- a/tests/topotests/bgp_evpn_svi_anycast_gw/test_anycast_gw_neigh_linkage.py
+++ b/tests/topotests/bgp_evpn_svi_anycast_gw/test_anycast_gw_neigh_linkage.py
@@ -68,7 +68,10 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.evpn import evpn_verify_bgp_vni_state, evpn_verify_vni_remote_vteps
from lib.topogen import Topogen, get_topogen
-from lib.common_config import create_address_on_interface
+from lib.common_config import (
+ create_address_on_interface,
+ shutdown_bringup_interface_in_kernel,
+)
from lib.topolog import logger
pytestmark = [pytest.mark.bgpd]
@@ -110,7 +113,7 @@ def config_leaf_dataplane(leaf, name, svi_mac, with_gw_addrs):
leaf.run("ip link set dev bridge type bridge vlan_filtering 1")
leaf.run("ip link set dev bridge type bridge mcast_snooping 0")
leaf.run("ip link set dev bridge address %s" % svi_mac)
- leaf.run("ip link set dev bridge up")
+ shutdown_bringup_interface_in_kernel(leaf.tgen, leaf.name, "bridge", True)
leaf.run(
"ip link add dev vxlan0 type vxlan dstport 4789 local %s nolearning external"
@@ -121,7 +124,7 @@ def config_leaf_dataplane(leaf, name, svi_mac, with_gw_addrs):
leaf.run("/sbin/bridge link set dev vxlan0 neigh_suppress on")
leaf.run("/sbin/bridge link set dev vxlan0 learning off")
leaf.run("/sbin/bridge vlan del vid 1 dev vxlan0")
- leaf.run("ip link set dev vxlan0 up")
+ shutdown_bringup_interface_in_kernel(leaf.tgen, leaf.name, "vxlan0", True)
for vni in VNIS:
leaf.run("/sbin/bridge vlan add vid %d dev vxlan0" % vni)
@@ -140,7 +143,7 @@ def config_leaf_dataplane(leaf, name, svi_mac, with_gw_addrs):
create_address_on_interface(
leaf.tgen, leaf.name, svi, "%s/%d" % (GW_IPS[vni], GW_PLEN)
)
- leaf.run("ip link set dev %s up" % svi)
+ shutdown_bringup_interface_in_kernel(leaf.tgen, leaf.name, svi, True)
leaf.run("/sbin/sysctl -w net.ipv4.ip_forward=1")
diff --git a/tests/topotests/bgp_evpn_three_tier_clos_topo1/test_bgp_evpn_v4_v6_vtep.py b/tests/topotests/bgp_evpn_three_tier_clos_topo1/test_bgp_evpn_v4_v6_vtep.py
index 78a78f33ab..8beb56de00 100644
--- a/tests/topotests/bgp_evpn_three_tier_clos_topo1/test_bgp_evpn_v4_v6_vtep.py
+++ b/tests/topotests/bgp_evpn_three_tier_clos_topo1/test_bgp_evpn_v4_v6_vtep.py
@@ -79,6 +79,7 @@ from lib.common_config import (
create_address_on_interface,
required_iproute2_version,
required_linux_kernel_version,
+ shutdown_bringup_interface_in_kernel,
)
from lib.bgp import get_bgp_summary_json
from lib.evpn import (
@@ -223,14 +224,54 @@ def tgen_and_ip_version(request):
logger.info(f"Cleaning up interfaces on {rname}")
# Bring interfaces down first
- router.run("ip link set dev vlan111 down 2>/dev/null || true")
- router.run("ip link set dev vlan112 down 2>/dev/null || true")
- router.run("ip link set dev vlan4001 down 2>/dev/null || true")
- router.run("ip link set dev vlan4002 down 2>/dev/null || true")
- router.run("ip link set dev vxlan48 down 2>/dev/null || true")
- router.run("ip link set dev vxlan99 down 2>/dev/null || true")
- router.run("ip link set dev br_default down 2>/dev/null || true")
- router.run("ip link set dev br_l3vni down 2>/dev/null || true")
+ shutdown_bringup_interface_in_kernel(
+ router.tgen,
+ router.name,
+ "vlan111",
+ False,
+ )
+ shutdown_bringup_interface_in_kernel(
+ router.tgen,
+ router.name,
+ "vlan112",
+ False,
+ )
+ shutdown_bringup_interface_in_kernel(
+ router.tgen,
+ router.name,
+ "vlan4001",
+ False,
+ )
+ shutdown_bringup_interface_in_kernel(
+ router.tgen,
+ router.name,
+ "vlan4002",
+ False,
+ )
+ shutdown_bringup_interface_in_kernel(
+ router.tgen,
+ router.name,
+ "vxlan48",
+ False,
+ )
+ shutdown_bringup_interface_in_kernel(
+ router.tgen,
+ router.name,
+ "vxlan99",
+ False,
+ )
+ shutdown_bringup_interface_in_kernel(
+ router.tgen,
+ router.name,
+ "br_default",
+ False,
+ )
+ shutdown_bringup_interface_in_kernel(
+ router.tgen,
+ router.name,
+ "br_l3vni",
+ False,
+ )
# Delete in dependency order
router.run("ip link del vlan111 2>/dev/null || true")
@@ -421,14 +462,14 @@ def setup_vtep(tgen, rname, local_ip, is_bordertor=True):
# Cleanup any existing interfaces from previous runs
logger.info(f"Cleaning up existing interfaces on {rname}")
# First bring interfaces down, then delete them
- router.run("ip link set dev vlan111 down 2>/dev/null || true")
- router.run("ip link set dev vlan112 down 2>/dev/null || true")
- router.run("ip link set dev vlan4001 down 2>/dev/null || true")
- router.run("ip link set dev vlan4002 down 2>/dev/null || true")
- router.run("ip link set dev vxlan48 down 2>/dev/null || true")
- router.run("ip link set dev vxlan99 down 2>/dev/null || true")
- router.run("ip link set dev br_default down 2>/dev/null || true")
- router.run("ip link set dev br_l3vni down 2>/dev/null || true")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "vlan111", False)
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "vlan112", False)
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "vlan4001", False)
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "vlan4002", False)
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "vxlan48", False)
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "vxlan99", False)
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "br_default", False)
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "br_l3vni", False)
# Delete VLAN interfaces first (they depend on bridges)
router.run("ip link del vlan111 2>/dev/null || true")
@@ -457,7 +498,7 @@ def setup_vtep(tgen, rname, local_ip, is_bordertor=True):
router.run("ip link add name br_default type bridge stp_state 0")
router.run("ip link set dev br_default type bridge vlan_filtering 1")
router.run("ip link set dev br_default type bridge ageing_time 18000")
- router.run("ip link set dev br_default up")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "br_default", True)
# Add all VLANs to the bridge (L2VNIs: 111, 112 and L3VNIs: 4001, 4002)
router.run("bridge vlan add vid 111 dev br_default self")
@@ -487,13 +528,13 @@ def setup_vtep(tgen, rname, local_ip, is_bordertor=True):
router.run("bridge vlan add dev vxlan48 vid 4002")
router.run("bridge vlan add dev vxlan48 vid 4002 tunnel_info id 104002")
- router.run("ip link set up dev vxlan48")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "vxlan48", True)
# Create VRFs
router.run("ip link add vrf1 type vrf table 1001")
- router.run("ip link set dev vrf1 up")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "vrf1", True)
router.run("ip link add vrf2 type vrf table 1002")
- router.run("ip link set dev vrf2 up")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "vrf2", True)
# Create SVI for VLAN 111 (VRF2) from br_default
router.run(
@@ -515,7 +556,7 @@ def setup_vtep(tgen, rname, local_ip, is_bordertor=True):
create_address_on_interface(tgen, rname, "vlan111", "192.168.11.22/24")
create_address_on_interface(tgen, rname, "vlan111", "fd00:60:1:1::22/64")
- router.run("ip link set dev vlan111 up")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "vlan111", True)
router.run("/sbin/sysctl net.ipv4.conf.vlan111.arp_accept=1")
# Create SVI for VLAN 112 (VRF1) from br_default
@@ -537,7 +578,7 @@ def setup_vtep(tgen, rname, local_ip, is_bordertor=True):
create_address_on_interface(tgen, rname, "vlan112", "192.168.12.22/24")
create_address_on_interface(tgen, rname, "vlan112", "fd00:50:1:1::22/64")
- router.run("ip link set dev vlan112 up")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "vlan112", True)
router.run("/sbin/sysctl net.ipv4.conf.vlan112.arp_accept=1")
# Create L3VNI interfaces from br_default (same bridge as L2VNIs)
@@ -545,13 +586,13 @@ def setup_vtep(tgen, rname, local_ip, is_bordertor=True):
"ip link add link br_default name vlan4001 type vlan id 4001 protocol 802.1q"
)
router.run("ip link set dev vlan4001 master vrf1")
- router.run("ip link set dev vlan4001 up")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "vlan4001", True)
router.run(
"ip link add link br_default name vlan4002 type vlan id 4002 protocol 802.1q"
)
router.run("ip link set dev vlan4002 master vrf2")
- router.run("ip link set dev vlan4002 up")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "vlan4002", True)
# Add host interfaces to br_default bridge
# Border ToRs: swp4 for hosts (VLAN 111 only)
@@ -605,7 +646,7 @@ def setup_bordertor_ext_connectivity(tgen, ip_version):
create_address_on_interface(
tgen, router.name, "swp3.4001", "2001:db8:144:1::2/64"
)
- router.run("ip link set dev swp3.4001 up")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "swp3.4001", True)
# swp3.4002 for VRF2 L3VNI
router.run("ip link add link swp3 name swp3.4002 type vlan id 4002")
@@ -615,7 +656,7 @@ def setup_bordertor_ext_connectivity(tgen, ip_version):
create_address_on_interface(
tgen, router.name, "swp3.4002", "2001:db8:144:2::6/64"
)
- router.run("ip link set dev swp3.4002 up")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "swp3.4002", True)
# Configure bordertor-12
router = tgen.gears["bordertor-12"]
@@ -630,7 +671,7 @@ def setup_bordertor_ext_connectivity(tgen, ip_version):
create_address_on_interface(
tgen, router.name, "swp3.4001", "2001:db8:144:11::2/64"
)
- router.run("ip link set dev swp3.4001 up")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "swp3.4001", True)
# swp3.4002 for VRF2 L3VNI
router.run("ip link add link swp3 name swp3.4002 type vlan id 4002")
@@ -640,7 +681,7 @@ def setup_bordertor_ext_connectivity(tgen, ip_version):
create_address_on_interface(
tgen, router.name, "swp3.4002", "2001:db8:144:12::6/64"
)
- router.run("ip link set dev swp3.4002 up")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "swp3.4002", True)
def setup_ext1(tgen, ip_version):
@@ -656,7 +697,7 @@ def setup_ext1(tgen, ip_version):
logger.info(f"Configuring ext-1 interfaces for {ip_version} underlay")
# Configure swp1 - Connected to bordertor-11
- router.run("ip link set dev swp1 up")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "swp1", True)
if ip_version == "ipv6":
create_address_on_interface(
tgen, router.name, "swp1", "fd00:10:254::2:0:2/126"
@@ -665,7 +706,7 @@ def setup_ext1(tgen, ip_version):
create_address_on_interface(tgen, router.name, "swp1", "10.254.0.10/30")
# Configure swp2 - Connected to bordertor-12
- router.run("ip link set dev swp2 up")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "swp2", True)
if ip_version == "ipv6":
create_address_on_interface(
tgen, router.name, "swp2", "fd00:10:254::9:0:2/126"
@@ -678,26 +719,26 @@ def setup_ext1(tgen, ip_version):
router.run("ip link add link swp1 name swp1.4001 type vlan id 4001")
create_address_on_interface(tgen, router.name, "swp1.4001", "192.0.2.1/30")
create_address_on_interface(tgen, router.name, "swp1.4001", "2001:db8:144:1::1/64")
- router.run("ip link set dev swp1.4001 up")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "swp1.4001", True)
# swp1.4002 for VRF2 L3VNI connectivity - always configure both IPv4 and IPv6
router.run("ip link add link swp1 name swp1.4002 type vlan id 4002")
create_address_on_interface(tgen, router.name, "swp1.4002", "192.0.2.5/30")
create_address_on_interface(tgen, router.name, "swp1.4002", "2001:db8:144:2::5/64")
- router.run("ip link set dev swp1.4002 up")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "swp1.4002", True)
# Configure VLAN sub-interfaces on swp2 for bordertor-12
# swp2.4001 for VRF1 L3VNI connectivity - always configure both IPv4 and IPv6
router.run("ip link add link swp2 name swp2.4001 type vlan id 4001")
create_address_on_interface(tgen, router.name, "swp2.4001", "192.0.2.9/30")
create_address_on_interface(tgen, router.name, "swp2.4001", "2001:db8:144:11::1/64")
- router.run("ip link set dev swp2.4001 up")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "swp2.4001", True)
# swp2.4002 for VRF2 L3VNI connectivity - always configure both IPv4 and IPv6
router.run("ip link add link swp2 name swp2.4002 type vlan id 4002")
create_address_on_interface(tgen, router.name, "swp2.4002", "192.0.2.13/30")
create_address_on_interface(tgen, router.name, "swp2.4002", "2001:db8:144:12::5/64")
- router.run("ip link set dev swp2.4002 up")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "swp2.4002", True)
# Configure swp3-6 for connection to host-1 (4 links)
# Using separate /24 networks from 198.51.100-103.0/24 TEST-NET-2 space
@@ -713,7 +754,7 @@ def setup_ext1(tgen, ip_version):
# Check if interface exists by examining command output
output = router.run(f"ip link show {intf} 2>&1")
if "does not exist" not in output and "Cannot find device" not in output:
- router.run(f"ip link set dev {intf} up")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, intf, True)
create_address_on_interface(
tgen, router.name, intf, f"198.51.{ipv4_net}.1/24"
)
@@ -749,9 +790,9 @@ def setup_ext21_connectivity(tgen, ip_version):
router.run("ip link del RED 2>/dev/null || true")
router.run("ip link add RED type vrf table 1003")
- router.run("ip link set dev RED up")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "RED", True)
router.run("ip link set dev swp1 master RED")
- router.run("ip link set dev swp1 up")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "swp1", True)
# --- leaf-21: Create VRF RED and move swp5 into it ---
router = tgen.gears["leaf-21"]
@@ -759,9 +800,9 @@ def setup_ext21_connectivity(tgen, ip_version):
router.run("ip link del RED 2>/dev/null || true")
router.run("ip link add RED type vrf table 1003")
- router.run("ip link set dev RED up")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "RED", True)
router.run("ip link set dev swp5 master RED")
- router.run("ip link set dev swp5 up")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "swp5", True)
def setup_ext21_post_start(tgen, ip_version):
@@ -2529,9 +2570,9 @@ def test_l3vni_rmac_change(tgen_and_ip_version):
logger.info(f"Changing vlan4001 MAC from {original_mac} to {new_mac}")
- tor21.run(f"ip link set dev vlan4001 down")
+ shutdown_bringup_interface_in_kernel(tor21.tgen, tor21.name, "vlan4001", False)
tor21.run(f"ip link set dev vlan4001 address {new_mac}")
- tor21.run(f"ip link set dev vlan4001 up")
+ shutdown_bringup_interface_in_kernel(tor21.tgen, tor21.name, "vlan4001", True)
# Step 3: Verify RMAC update and check for duplicates
logger.info("Step 3: Verifying RMAC update (checking for duplicates)")
@@ -2593,9 +2634,9 @@ def test_l3vni_rmac_change(tgen_and_ip_version):
logger.info("Step 4: Restoring original MAC on tor-21")
if original_mac:
- tor21.run(f"ip link set dev vlan4001 down")
+ shutdown_bringup_interface_in_kernel(tor21.tgen, tor21.name, "vlan4001", False)
tor21.run(f"ip link set dev vlan4001 address {original_mac}")
- tor21.run(f"ip link set dev vlan4001 up")
+ shutdown_bringup_interface_in_kernel(tor21.tgen, tor21.name, "vlan4001", True)
def check_rmac_restored(router, vni, vtep_ip):
"""Check that RMAC exists for the VTEP after restoration"""
@@ -2862,8 +2903,8 @@ def test_evpn_vtep_on_uplink_flap(tgen_and_ip_version):
logger.info(
"tor-21: bringing uplinks swp1 and swp2 down ({})".format(ip_version)
)
- router.run("ip link set dev swp1 down")
- router.run("ip link set dev swp2 down")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "swp1", False)
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "swp2", False)
test_func = partial(
evpn_verify_no_remote_vtep_in_l3vni,
@@ -2875,8 +2916,8 @@ def test_evpn_vtep_on_uplink_flap(tgen_and_ip_version):
logger.info("tor-21: no stale VTEP entries after uplinks down")
logger.info("tor-21: bringing uplinks swp1 and swp2 up")
- router.run("ip link set dev swp1 up")
- router.run("ip link set dev swp2 up")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "swp1", True)
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "swp2", True)
test_func = partial(
evpn_verify_l3vni_nexthops,
@@ -2890,8 +2931,8 @@ def test_evpn_vtep_on_uplink_flap(tgen_and_ip_version):
), f"tor-21: remote VTEPs not restored after uplink up: {result}"
logger.info("tor-21: remote VTEPs restored after uplinks up")
finally:
- router.run("ip link set dev swp1 up 2>/dev/null || true")
- router.run("ip link set dev swp2 up 2>/dev/null || true")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "swp1", True)
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "swp2", True)
def test_host_to_host_ping(tgen_and_ip_version):
@@ -3945,13 +3986,18 @@ def test_import_vrf_preserves_dvni_label(tgen_and_ip_version):
)
tor21.run(f"ip link add {tenant_vrf} type vrf table 1900")
- tor21.run(f"ip link set dev {tenant_vrf} up")
+ shutdown_bringup_interface_in_kernel(tor21.tgen, tor21.name, tenant_vrf, True)
tor21.run(
"ip link add link br_default name vlan%u type vlan id %u protocol 802.1q"
% (tenant_vlan, tenant_vlan)
)
tor21.run(f"ip link set dev vlan{tenant_vlan} master {tenant_vrf}")
- tor21.run(f"ip link set dev vlan{tenant_vlan} up")
+ shutdown_bringup_interface_in_kernel(
+ tor21.tgen,
+ tor21.name,
+ f"vlan{tenant_vlan}",
+ True,
+ )
tor21.vtysh_multicmd(
f"""
diff --git a/tests/topotests/bgp_evpn_type5_vrf_leak_stale/test_bgp_evpn_type5_vrf_leak_stale.py b/tests/topotests/bgp_evpn_type5_vrf_leak_stale/test_bgp_evpn_type5_vrf_leak_stale.py
index 5ce53e248f..9024009115 100644
--- a/tests/topotests/bgp_evpn_type5_vrf_leak_stale/test_bgp_evpn_type5_vrf_leak_stale.py
+++ b/tests/topotests/bgp_evpn_type5_vrf_leak_stale/test_bgp_evpn_type5_vrf_leak_stale.py
@@ -68,8 +68,9 @@ from lib.common_config import (
create_static_routes,
create_vrf_cfg,
kill_router_daemons,
+ shutdown_bringup_interface_in_kernel,
start_router_daemons,
- step
+ step,
)
from lib.common_check import iproute2_check_path_selection
from lib.bgp import create_router_bgp, verify_bgp_convergence_from_running_config
@@ -143,21 +144,24 @@ def _configure_l3vni_interfaces(router, rname, vrf, vni, local_vtep):
).format(vni),
]
for command in commands:
+ if isinstance(command, tuple):
+ shutdown_bringup_interface_in_kernel(
+ router.tgen, router.name, command[1], command[0] == "up"
+ )
+ continue
logger.info("%s: %s", router.name, command)
router.cmd_raises(command)
-<<<<<<< HEAD
-=======
def _add_vrf_vni(router, rname, vrf, table, vni, local_vtep):
_run_cmds(
router,
[
"ip link add {0} type vrf table {1}".format(vrf, table),
- "ip link set dev {0} up".format(vrf),
+ ("up", vrf),
"ip link add name br{0} up type bridge stp_state 0".format(vni),
"ip link set dev br{0} master {1}".format(vni, vrf),
- "ip link set dev br{0} up".format(vni),
+ ("up", "br{}".format(vni)),
(
"ip link add name vxlan{0} type vxlan id {0} dstport 4789 "
"dev {1}-eth0 local {2} nolearning"
@@ -174,7 +178,6 @@ def _add_vrf_vni(router, rname, vrf, table, vni, local_vtep):
)
->>>>>>> 7d80721b4e (tests: Convert them to use create_interface_in_kernel)
def setup_module(mod):
"Create router VRFs and L3VNIs, load configs, and start the topology."
diff --git a/tests/topotests/bgp_evpn_v6_pmsi_tunnel/test_bgp_evpn_v6_pmsi_tunnel.py b/tests/topotests/bgp_evpn_v6_pmsi_tunnel/test_bgp_evpn_v6_pmsi_tunnel.py
index 739d682a00..c7ba26ca6a 100644
--- a/tests/topotests/bgp_evpn_v6_pmsi_tunnel/test_bgp_evpn_v6_pmsi_tunnel.py
+++ b/tests/topotests/bgp_evpn_v6_pmsi_tunnel/test_bgp_evpn_v6_pmsi_tunnel.py
@@ -29,6 +29,7 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.topogen import Topogen, get_topogen
from lib.topolog import logger
+from lib.common_config import shutdown_bringup_interface_in_kernel
pytestmark = [pytest.mark.bgpd, pytest.mark.evpn]
@@ -55,7 +56,7 @@ def setup_module(mod):
cmds_vxlan = [
"ip link add name bridge-101 up type bridge stp_state 0",
- "ip link set dev bridge-101 up",
+ ("up", "bridge-101"),
"ip link add name vxlan-101 type vxlan id 101 dstport 4789 dev {0}-eth0 local {1}",
"ip link set dev vxlan-101 master bridge-101",
"ip link set vxlan-101 up type bridge_slave learning off flood off mcast_flood off",
@@ -64,6 +65,11 @@ def setup_module(mod):
for rname, vtep_ip in [("r1", "fd00:100::1"), ("r2", "fd00:100::2")]:
router = tgen.gears[rname]
for cmd in cmds_vxlan:
+ if isinstance(cmd, tuple):
+ shutdown_bringup_interface_in_kernel(
+ tgen, rname, cmd[1].format(rname, vtep_ip), cmd[0] == "up"
+ )
+ continue
formatted = cmd.format(rname, vtep_ip)
logger.info("cmd to {}: {}".format(rname, formatted))
output = router.cmd_raises(formatted)
diff --git a/tests/topotests/bgp_evpn_vxlan_local_vtep_none/test_bgp_evpn_vxlan_local_vtep_none.py b/tests/topotests/bgp_evpn_vxlan_local_vtep_none/test_bgp_evpn_vxlan_local_vtep_none.py
index 876fc40fa7..81c3986b8b 100644
--- a/tests/topotests/bgp_evpn_vxlan_local_vtep_none/test_bgp_evpn_vxlan_local_vtep_none.py
+++ b/tests/topotests/bgp_evpn_vxlan_local_vtep_none/test_bgp_evpn_vxlan_local_vtep_none.py
@@ -16,6 +16,7 @@ sys.path.append(os.path.join(CWD, "../"))
# pylint: disable=C0413
from lib import topotest
from lib.topogen import Topogen, get_topogen
+from lib.common_config import shutdown_bringup_interface_in_kernel
pytestmark = [pytest.mark.bgpd, pytest.mark.evpn]
@@ -30,14 +31,14 @@ def setup_module(mod):
router = tgen.gears["r1"]
router.cmd_raises(f"ip link add name br{VNI} type bridge")
- router.cmd_raises("ip link set dev r1-eth0 up")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "r1-eth0", True)
router.cmd_raises(
f"ip link add vxlan{VNI} type vxlan id {VNI} dstport 4789 "
"group 239.1.1.1 dev r1-eth0 nolearning"
)
router.cmd_raises(f"ip link set dev vxlan{VNI} master br{VNI}")
- router.cmd_raises(f"ip link set dev br{VNI} up")
- router.cmd_raises(f"ip link set dev vxlan{VNI} up")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, f"br{VNI}", True)
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, f"vxlan{VNI}", True)
for router in tgen.routers().values():
router.load_frr_config()
diff --git a/tests/topotests/bgp_evpn_vxlan_macvrf_soo_topo1/test_bgp_evpn_vxlan_macvrf_soo.py b/tests/topotests/bgp_evpn_vxlan_macvrf_soo_topo1/test_bgp_evpn_vxlan_macvrf_soo.py
index 4cf8078a58..5c5dae49e4 100755
--- a/tests/topotests/bgp_evpn_vxlan_macvrf_soo_topo1/test_bgp_evpn_vxlan_macvrf_soo.py
+++ b/tests/topotests/bgp_evpn_vxlan_macvrf_soo_topo1/test_bgp_evpn_vxlan_macvrf_soo.py
@@ -41,7 +41,11 @@ from lib.evpn import (
)
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
-from lib.common_config import create_address_on_interface, step
+from lib.common_config import (
+ create_address_on_interface,
+ step,
+ shutdown_bringup_interface_in_kernel,
+)
pytestmark = [pytest.mark.bgpd, pytest.mark.evpn, pytest.mark.ospfd]
@@ -96,34 +100,34 @@ def setup_module(mod):
## Setup VRF
# pe1
pe1.run("ip link add VRF-A type vrf table 4000")
- pe1.run("ip link set VRF-A up")
+ shutdown_bringup_interface_in_kernel(pe1.tgen, pe1.name, "VRF-A", True)
# pe2
pe2.run("ip link add VRF-A type vrf table 4000")
- pe2.run("ip link set VRF-A up")
+ shutdown_bringup_interface_in_kernel(pe2.tgen, pe2.name, "VRF-A", True)
## Setup L3VNI bridge/vxlan
# pe1
pe1.run("ip link add name br404 type bridge stp_state 0")
pe1.run("ip link set dev br404 addr aa:bb:cc:00:11:ff")
pe1.run("ip link set dev br404 master VRF-A addrgenmode none")
- pe1.run("ip link set dev br404 up")
+ shutdown_bringup_interface_in_kernel(pe1.tgen, pe1.name, "br404", True)
pe1.run(
"ip link add vxlan404 type vxlan id 404 dstport 4789 local 10.10.10.10 nolearning"
)
pe1.run("ip link set dev vxlan404 master br404 addrgenmode none")
pe1.run("ip link set dev vxlan404 type bridge_slave neigh_suppress on learning off")
- pe1.run("ip link set dev vxlan404 up")
+ shutdown_bringup_interface_in_kernel(pe1.tgen, pe1.name, "vxlan404", True)
# pe2
pe2.run("ip link add name br404 type bridge stp_state 0")
pe2.run("ip link set dev br404 addr aa:bb:cc:00:22:ff")
pe2.run("ip link set dev br404 master VRF-A addrgenmode none")
- pe2.run("ip link set dev br404 up")
+ shutdown_bringup_interface_in_kernel(pe2.tgen, pe2.name, "br404", True)
pe2.run(
"ip link add vxlan404 type vxlan id 404 dstport 4789 local 10.30.30.30 nolearning"
)
pe2.run("ip link set dev vxlan404 master br404 addrgenmode none")
pe2.run("ip link set dev vxlan404 type bridge_slave neigh_suppress on learning off")
- pe2.run("ip link set dev vxlan404 up")
+ shutdown_bringup_interface_in_kernel(pe2.tgen, pe2.name, "vxlan404", True)
## Setup L2VNI bridge/vxlan + L2 PE/CE link
# pe1
@@ -131,29 +135,29 @@ def setup_module(mod):
create_address_on_interface(pe1.tgen, pe1.name, "br101", "10.10.1.1/24")
pe1.run("ip link set dev br101 addr aa:bb:cc:00:11:aa")
pe1.run("ip link set dev br101 master VRF-A")
- pe1.run("ip link set dev br101 up")
+ shutdown_bringup_interface_in_kernel(pe1.tgen, pe1.name, "br101", True)
pe1.run(
"ip link add vxlan101 type vxlan id 101 dstport 4789 local 10.10.10.10 nolearning"
)
pe1.run("ip link set dev vxlan101 master br101")
pe1.run("ip link set dev vxlan101 type bridge_slave neigh_suppress on learning off")
- pe1.run("ip link set dev vxlan101 up")
+ shutdown_bringup_interface_in_kernel(pe1.tgen, pe1.name, "vxlan101", True)
pe1.run("ip link set dev PE1-eth0 master br101")
- pe1.run("ip link set dev PE1-eth0 up")
+ shutdown_bringup_interface_in_kernel(pe1.tgen, pe1.name, "PE1-eth0", True)
# pe2
pe2.run("ip link add name br101 type bridge stp_state 0")
create_address_on_interface(pe2.tgen, pe2.name, "br101", "10.10.1.3/24")
pe2.run("ip link set dev br101 addr aa:bb:cc:00:22:ff")
pe2.run("ip link set dev br101 master VRF-A")
- pe2.run("ip link set dev br101 up")
+ shutdown_bringup_interface_in_kernel(pe2.tgen, pe2.name, "br101", True)
pe2.run(
"ip link add vxlan101 type vxlan id 101 dstport 4789 local 10.30.30.30 nolearning"
)
pe2.run("ip link set dev vxlan101 master br101")
pe2.run("ip link set dev vxlan101 type bridge_slave neigh_suppress on learning off")
- pe2.run("ip link set dev vxlan101 up")
+ shutdown_bringup_interface_in_kernel(pe2.tgen, pe2.name, "vxlan101", True)
pe2.run("ip link set dev PE2-eth1 master br101")
- pe2.run("ip link set dev PE2-eth1 up")
+ shutdown_bringup_interface_in_kernel(pe2.tgen, pe2.name, "PE2-eth1", True)
## Enable IPv4 Routing
p1.run("sysctl -w net.ipv4.ip_forward=1")
diff --git a/tests/topotests/bgp_evpn_vxlan_macvrf_soo_topo1/test_bgp_evpn_vxlan_macvrf_soo_v6_vtep.py b/tests/topotests/bgp_evpn_vxlan_macvrf_soo_topo1/test_bgp_evpn_vxlan_macvrf_soo_v6_vtep.py
index 43a2addc96..330770f627 100755
--- a/tests/topotests/bgp_evpn_vxlan_macvrf_soo_topo1/test_bgp_evpn_vxlan_macvrf_soo_v6_vtep.py
+++ b/tests/topotests/bgp_evpn_vxlan_macvrf_soo_topo1/test_bgp_evpn_vxlan_macvrf_soo_v6_vtep.py
@@ -41,7 +41,11 @@ from lib.evpn import (
)
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
-from lib.common_config import create_address_on_interface, step
+from lib.common_config import (
+ create_address_on_interface,
+ step,
+ shutdown_bringup_interface_in_kernel,
+)
pytestmark = [pytest.mark.bgpd, pytest.mark.evpn, pytest.mark.ospf6d]
@@ -96,34 +100,34 @@ def setup_module(mod):
## Setup VRF
# pe1
pe1.run("ip link add VRF-A type vrf table 4000")
- pe1.run("ip link set VRF-A up")
+ shutdown_bringup_interface_in_kernel(pe1.tgen, pe1.name, "VRF-A", True)
# pe2
pe2.run("ip link add VRF-A type vrf table 4000")
- pe2.run("ip link set VRF-A up")
+ shutdown_bringup_interface_in_kernel(pe2.tgen, pe2.name, "VRF-A", True)
## Setup L3VNI bridge/vxlan
# pe1
pe1.run("ip link add name br404 type bridge stp_state 0")
pe1.run("ip link set dev br404 addr aa:bb:cc:00:11:ff")
pe1.run("ip link set dev br404 master VRF-A addrgenmode none")
- pe1.run("ip link set dev br404 up")
+ shutdown_bringup_interface_in_kernel(pe1.tgen, pe1.name, "br404", True)
pe1.run(
"ip link add vxlan404 type vxlan id 404 dstport 4789 local 10:10:10::10 nolearning"
)
pe1.run("ip link set dev vxlan404 master br404 addrgenmode none")
pe1.run("ip link set dev vxlan404 type bridge_slave neigh_suppress on learning off")
- pe1.run("ip link set dev vxlan404 up")
+ shutdown_bringup_interface_in_kernel(pe1.tgen, pe1.name, "vxlan404", True)
# pe2
pe2.run("ip link add name br404 type bridge stp_state 0")
pe2.run("ip link set dev br404 addr aa:bb:cc:00:22:ff")
pe2.run("ip link set dev br404 master VRF-A addrgenmode none")
- pe2.run("ip link set dev br404 up")
+ shutdown_bringup_interface_in_kernel(pe2.tgen, pe2.name, "br404", True)
pe2.run(
"ip link add vxlan404 type vxlan id 404 dstport 4789 local 10:30:30::30 nolearning"
)
pe2.run("ip link set dev vxlan404 master br404 addrgenmode none")
pe2.run("ip link set dev vxlan404 type bridge_slave neigh_suppress on learning off")
- pe2.run("ip link set dev vxlan404 up")
+ shutdown_bringup_interface_in_kernel(pe2.tgen, pe2.name, "vxlan404", True)
## Setup L2VNI bridge/vxlan + L2 PE/CE link
# pe1
@@ -131,29 +135,29 @@ def setup_module(mod):
create_address_on_interface(pe1.tgen, pe1.name, "br101", "10.10.1.1/24")
pe1.run("ip link set dev br101 addr aa:bb:cc:00:11:aa")
pe1.run("ip link set dev br101 master VRF-A")
- pe1.run("ip link set dev br101 up")
+ shutdown_bringup_interface_in_kernel(pe1.tgen, pe1.name, "br101", True)
pe1.run(
"ip link add vxlan101 type vxlan id 101 dstport 4789 local 10:10:10::10 nolearning"
)
pe1.run("ip link set dev vxlan101 master br101")
pe1.run("ip link set dev vxlan101 type bridge_slave neigh_suppress on learning off")
- pe1.run("ip link set dev vxlan101 up")
+ shutdown_bringup_interface_in_kernel(pe1.tgen, pe1.name, "vxlan101", True)
pe1.run("ip link set dev PE1-eth0 master br101")
- pe1.run("ip link set dev PE1-eth0 up")
+ shutdown_bringup_interface_in_kernel(pe1.tgen, pe1.name, "PE1-eth0", True)
# pe2
pe2.run("ip link add name br101 type bridge stp_state 0")
create_address_on_interface(pe2.tgen, pe2.name, "br101", "10.10.1.3/24")
pe2.run("ip link set dev br101 addr aa:bb:cc:00:22:ff")
pe2.run("ip link set dev br101 master VRF-A")
- pe2.run("ip link set dev br101 up")
+ shutdown_bringup_interface_in_kernel(pe2.tgen, pe2.name, "br101", True)
pe2.run(
"ip link add vxlan101 type vxlan id 101 dstport 4789 local 10:30:30::30 nolearning"
)
pe2.run("ip link set dev vxlan101 master br101")
pe2.run("ip link set dev vxlan101 type bridge_slave neigh_suppress on learning off")
- pe2.run("ip link set dev vxlan101 up")
+ shutdown_bringup_interface_in_kernel(pe2.tgen, pe2.name, "vxlan101", True)
pe2.run("ip link set dev PE2-eth1 master br101")
- pe2.run("ip link set dev PE2-eth1 up")
+ shutdown_bringup_interface_in_kernel(pe2.tgen, pe2.name, "PE2-eth1", True)
## Enable IPv4 Routing
p1.run("sysctl -w net.ipv4.ip_forward=1")
diff --git a/tests/topotests/bgp_evpn_vxlan_svd_topo1/test_bgp_evpn_vxlan_svd.py b/tests/topotests/bgp_evpn_vxlan_svd_topo1/test_bgp_evpn_vxlan_svd.py
index f0d7871a8e..78746af84b 100755
--- a/tests/topotests/bgp_evpn_vxlan_svd_topo1/test_bgp_evpn_vxlan_svd.py
+++ b/tests/topotests/bgp_evpn_vxlan_svd_topo1/test_bgp_evpn_vxlan_svd.py
@@ -52,6 +52,7 @@ from lib.topolog import logger
from lib.common_config import (
create_address_on_interface,
required_linux_kernel_version,
+ shutdown_bringup_interface_in_kernel,
)
# Required to instantiate the topology builder class.
@@ -105,11 +106,11 @@ def setup_pe_router(tgen, pe_name, tunnel_local_ip, svi_ip, intf):
pe.run("ip link set dev bridge address 44:00:00:ff:ff:01")
if pe_name == "PE2":
pe.run("ip link set dev bridge address 44:20:00:ff:ff:01")
- pe.run("ip link set dev bridge up")
+ shutdown_bringup_interface_in_kernel(pe.tgen, pe.name, "bridge", True)
# setup svi
pe.run("ip link add link bridge name vlan1 type vlan id 1 protocol 802.1q")
- pe.run("ip link set dev vlan1 up")
+ shutdown_bringup_interface_in_kernel(pe.tgen, pe.name, "vlan1", True)
create_address_on_interface(tgen, pe_name, "vlan1", svi_ip)
pe.run("/sbin/sysctl net.ipv4.conf.vlan1.arp_accept=1")
@@ -125,19 +126,19 @@ def setup_pe_router(tgen, pe_name, tunnel_local_ip, svi_ip, intf):
pe.run("bridge link set dev vxlan0 learning off")
pe.run("bridge vlan add dev vxlan0 vid 1")
pe.run("bridge vlan add dev vxlan0 vid 1 tunnel_info id 101")
- pe.run("ip link set up dev vxlan0")
+ shutdown_bringup_interface_in_kernel(pe.tgen, pe.name, "vxlan0", True)
# VRF creation
pe.run("ip link add vrf-purple type vrf table 1003")
- pe.run("ip link set dev vrf-purple up")
+ shutdown_bringup_interface_in_kernel(pe.tgen, pe.name, "vrf-purple", True)
if pe_name == "PE1":
pe.run("ip link add vrf-blue type vrf table 1002")
- pe.run("ip link set dev vrf-blue up")
+ shutdown_bringup_interface_in_kernel(pe.tgen, pe.name, "vrf-blue", True)
create_address_on_interface(tgen, pe_name, "vrf-blue", "27.2.0.85/32")
create_address_on_interface(tgen, pe_name, "vrf-purple", "27.3.0.85/32")
if pe_name == "PE2":
pe.run("ip link add vrf-blue type vrf table 2400")
- pe.run("ip link set dev vrf-blue up")
+ shutdown_bringup_interface_in_kernel(pe.tgen, pe.name, "vrf-blue", True)
# setup PE interface
pe.run("ip link set dev {0}-{1} master bridge".format(pe_name, intf))
@@ -150,7 +151,7 @@ def setup_pe_router(tgen, pe_name, tunnel_local_ip, svi_ip, intf):
pe.run("ip link add vrf-red type vrf table 1400")
pe.run("ip link add link bridge name vlan100 type vlan id 100 protocol 802.1q")
pe.run("ip link set dev vlan100 master vrf-blue")
- pe.run("ip link set dev vlan100 up")
+ shutdown_bringup_interface_in_kernel(pe.tgen, pe.name, "vlan100", True)
pe.run("bridge vlan add vid 100 dev bridge self")
pe.run("bridge vlan add dev vxlan0 vid 100")
pe.run("bridge vlan add dev vxlan0 vid 100 tunnel_info id 100")
@@ -158,7 +159,7 @@ def setup_pe_router(tgen, pe_name, tunnel_local_ip, svi_ip, intf):
# L3VNI 4000
pe.run("ip link add link bridge name vlan400 type vlan id 400 protocol 802.1q")
pe.run("ip link set dev vlan400 master vrf-purple")
- pe.run("ip link set dev vlan400 up")
+ shutdown_bringup_interface_in_kernel(pe.tgen, pe.name, "vlan400", True)
pe.run("bridge vlan add vid 400 dev bridge self")
pe.run("bridge vlan add dev vxlan0 vid 400")
pe.run("bridge vlan add dev vxlan0 vid 400 tunnel_info id 4000")
@@ -167,7 +168,7 @@ def setup_pe_router(tgen, pe_name, tunnel_local_ip, svi_ip, intf):
if pe_name == "PE2":
pe.run("ip link add link bridge name vlan300 type vlan id 300 protocol 802.1q")
pe.run("ip link set dev vlan300 master vrf-blue")
- pe.run("ip link set dev vlan300 up")
+ shutdown_bringup_interface_in_kernel(pe.tgen, pe.name, "vlan300", True)
pe.run("bridge vlan add vid 300 dev bridge self")
pe.run("bridge vlan add dev vxlan0 vid 300")
pe.run("bridge vlan add dev vxlan0 vid 300 tunnel_info id 300")
diff --git a/tests/topotests/bgp_evpn_vxlan_topo1/test_bgp_evpn_vxlan.py b/tests/topotests/bgp_evpn_vxlan_topo1/test_bgp_evpn_vxlan.py
index ac186096ba..5d867a927b 100755
--- a/tests/topotests/bgp_evpn_vxlan_topo1/test_bgp_evpn_vxlan.py
+++ b/tests/topotests/bgp_evpn_vxlan_topo1/test_bgp_evpn_vxlan.py
@@ -33,7 +33,10 @@ from lib.evpn import (
evpn_check_bgp_imet,
)
from lib.topogen import Topogen, TopoRouter, get_topogen
-from lib.common_config import create_address_on_interface
+from lib.common_config import (
+ create_address_on_interface,
+ shutdown_bringup_interface_in_kernel,
+)
from lib.topolog import logger
# Required to instantiate the topology builder class.
@@ -90,36 +93,36 @@ def setup_module(mod):
# set up PE bridges with the EVPN member interfaces facing the CE hosts
pe1.run("ip link add name br101 type bridge stp_state 0")
create_address_on_interface(pe1.tgen, pe1.name, "br101", "10.10.1.1/24")
- pe1.run("ip link set dev br101 up")
+ shutdown_bringup_interface_in_kernel(pe1.tgen, pe1.name, "br101", True)
pe1.run(
"ip link add vxlan101 type vxlan id 101 dstport 4789 local 10.10.10.10 nolearning"
)
pe1.run("ip link set dev vxlan101 master br101")
- pe1.run("ip link set up dev vxlan101")
+ shutdown_bringup_interface_in_kernel(pe1.tgen, pe1.name, "vxlan101", True)
pe1.run("ip link set dev PE1-eth0 master br101")
pe2.run("ip link add name br101 type bridge stp_state 0")
create_address_on_interface(pe2.tgen, pe2.name, "br101", "10.10.1.3/24")
- pe2.run("ip link set dev br101 up")
+ shutdown_bringup_interface_in_kernel(pe2.tgen, pe2.name, "br101", True)
pe2.run(
"ip link add vxlan101 type vxlan id 101 dstport 4789 local 10.30.30.30 nolearning"
)
pe2.run("ip link set dev vxlan101 master br101")
- pe2.run("ip link set up dev vxlan101")
+ shutdown_bringup_interface_in_kernel(pe2.tgen, pe2.name, "vxlan101", True)
pe2.run("ip link set dev PE2-eth1 master br101")
p1.run("sysctl -w net.ipv4.ip_forward=1")
# Setup L3 VNI 999 with VLAN interface for testing fix 3ad2a782e6
# PE1
pe1.run("ip link add vrf-blue type vrf table 1000")
- pe1.run("ip link set vrf-blue up")
+ shutdown_bringup_interface_in_kernel(pe1.tgen, pe1.name, "vrf-blue", True)
pe1.run("ip link add name br999 type bridge stp_state 0 vlan_filtering 1")
- pe1.run("ip link set dev br999 up")
+ shutdown_bringup_interface_in_kernel(pe1.tgen, pe1.name, "br999", True)
pe1.run(
"ip link add vxlan999 type vxlan id 999 dstport 4789 local 10.10.10.10 nolearning"
)
pe1.run("ip link set dev vxlan999 master br999")
- pe1.run("ip link set up dev vxlan999")
+ shutdown_bringup_interface_in_kernel(pe1.tgen, pe1.name, "vxlan999", True)
# Set VLAN 999 as access VLAN on the bridge
pe1.run("bridge vlan add vid 999 dev br999 self")
pe1.run("bridge vlan del vid 1 dev vxlan999")
@@ -127,18 +130,18 @@ def setup_module(mod):
pe1.run("ip link add link br999 name vlan999 type vlan id 999")
pe1.run("ip link set dev vlan999 master vrf-blue")
create_address_on_interface(pe1.tgen, pe1.name, "vlan999", "10.99.99.1/24")
- pe1.run("ip link set dev vlan999 up")
+ shutdown_bringup_interface_in_kernel(pe1.tgen, pe1.name, "vlan999", True)
# PE2
pe2.run("ip link add vrf-blue type vrf table 1000")
- pe2.run("ip link set vrf-blue up")
+ shutdown_bringup_interface_in_kernel(pe2.tgen, pe2.name, "vrf-blue", True)
pe2.run("ip link add name br999 type bridge stp_state 0 vlan_filtering 1")
- pe2.run("ip link set dev br999 up")
+ shutdown_bringup_interface_in_kernel(pe2.tgen, pe2.name, "br999", True)
pe2.run(
"ip link add vxlan999 type vxlan id 999 dstport 4789 local 10.30.30.30 nolearning"
)
pe2.run("ip link set dev vxlan999 master br999")
- pe2.run("ip link set up dev vxlan999")
+ shutdown_bringup_interface_in_kernel(pe2.tgen, pe2.name, "vxlan999", True)
# Set VLAN 999 as access VLAN on the bridge
pe2.run("bridge vlan add vid 999 dev br999 self")
pe2.run("bridge vlan del vid 1 dev vxlan999")
@@ -146,7 +149,7 @@ def setup_module(mod):
pe2.run("ip link add link br999 name vlan999 type vlan id 999")
pe2.run("ip link set dev vlan999 master vrf-blue")
create_address_on_interface(pe2.tgen, pe2.name, "vlan999", "10.99.99.3/24")
- pe2.run("ip link set dev vlan999 up")
+ shutdown_bringup_interface_in_kernel(pe2.tgen, pe2.name, "vlan999", True)
# This is a sample of configuration loading.
router_list = tgen.routers()
diff --git a/tests/topotests/bgp_evpn_vxlan_topo1/test_bgp_evpn_vxlan_v6_vtep.py b/tests/topotests/bgp_evpn_vxlan_topo1/test_bgp_evpn_vxlan_v6_vtep.py
index 01e3f96488..7d218d13d7 100755
--- a/tests/topotests/bgp_evpn_vxlan_topo1/test_bgp_evpn_vxlan_v6_vtep.py
+++ b/tests/topotests/bgp_evpn_vxlan_topo1/test_bgp_evpn_vxlan_v6_vtep.py
@@ -37,7 +37,10 @@ from lib.evpn import (
evpn_check_bgp_imet,
)
from lib.topogen import Topogen, TopoRouter, get_topogen
-from lib.common_config import create_address_on_interface
+from lib.common_config import (
+ create_address_on_interface,
+ shutdown_bringup_interface_in_kernel,
+)
from lib.topolog import logger
# Required to instantiate the topology builder class.
@@ -94,22 +97,22 @@ def setup_module(mod):
# set up PE bridges with the EVPN member interfaces facing the CE hosts
pe1.run("ip link add name br101 type bridge stp_state 0")
create_address_on_interface(pe1.tgen, pe1.name, "br101", "10.10.1.1/24")
- pe1.run("ip link set dev br101 up")
+ shutdown_bringup_interface_in_kernel(pe1.tgen, pe1.name, "br101", True)
pe1.run(
"ip link add vxlan101 type vxlan id 101 dstport 4789 local 10:10:10::10 nolearning"
)
pe1.run("ip link set dev vxlan101 master br101")
- pe1.run("ip link set up dev vxlan101")
+ shutdown_bringup_interface_in_kernel(pe1.tgen, pe1.name, "vxlan101", True)
pe1.run("ip link set dev PE1-eth0 master br101")
pe2.run("ip link add name br101 type bridge stp_state 0")
create_address_on_interface(pe2.tgen, pe2.name, "br101", "10.10.1.3/24")
- pe2.run("ip link set dev br101 up")
+ shutdown_bringup_interface_in_kernel(pe2.tgen, pe2.name, "br101", True)
pe2.run(
"ip link add vxlan101 type vxlan id 101 dstport 4789 local 10:30:30::30 nolearning"
)
pe2.run("ip link set dev vxlan101 master br101")
- pe2.run("ip link set up dev vxlan101")
+ shutdown_bringup_interface_in_kernel(pe2.tgen, pe2.name, "vxlan101", True)
pe2.run("ip link set dev PE2-eth1 master br101")
p1.run("sysctl -w net.ipv4.ip_forward=1")
diff --git a/tests/topotests/bgp_gr_notification/test_bgp_gr_notification.py b/tests/topotests/bgp_gr_notification/test_bgp_gr_notification.py
index 14376ebbfa..9487790870 100644
--- a/tests/topotests/bgp_gr_notification/test_bgp_gr_notification.py
+++ b/tests/topotests/bgp_gr_notification/test_bgp_gr_notification.py
@@ -51,7 +51,7 @@ sys.path.append(os.path.join(CWD, "../"))
# pylint: disable=C0413
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
-from lib.common_config import step
+from lib.common_config import step, shutdown_bringup_interface_in_kernel
pytestmark = [pytest.mark.bgpd]
@@ -108,10 +108,10 @@ def test_bgp_hold_timer_expired_gr():
return topotest.json_cmp(output, expected)
def _disable_link_r1_r2():
- r1.cmd_raises("ip link set down dev r1-eth0")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "r1-eth0", False)
def _enable_link_r1_r2():
- r1.cmd_raises("ip link set up dev r1-eth0")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "r1-eth0", True)
def _bgp_check_hold_timer_expire_reason():
output = json.loads(r2.vtysh_cmd("show ip bgp neighbor 192.168.255.1 json"))
diff --git a/tests/topotests/bgp_gshut/test_bgp_gshut.py b/tests/topotests/bgp_gshut/test_bgp_gshut.py
index cfe63d20ba..ccf4e9be25 100644
--- a/tests/topotests/bgp_gshut/test_bgp_gshut.py
+++ b/tests/topotests/bgp_gshut/test_bgp_gshut.py
@@ -58,6 +58,7 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
+from lib.common_config import shutdown_bringup_interface_in_kernel
pytestmark = [pytest.mark.bgpd]
@@ -103,7 +104,7 @@ def setup_module(mod):
# Configure vrf and its slaves in the kernel on r2
r2 = tgen.gears["r2"]
r2.run("ip link add vrf1 type vrf table 1000")
- r2.run("ip link set vrf1 up")
+ shutdown_bringup_interface_in_kernel(r2.tgen, r2.name, "vrf1", True)
r2.run("ip link set r2-eth2 master vrf1")
r2.run("ip link set r2-eth3 master vrf1")
diff --git a/tests/topotests/bgp_hidden_evpn_revival/test_bgp_hidden_evpn_revival.py b/tests/topotests/bgp_hidden_evpn_revival/test_bgp_hidden_evpn_revival.py
index 4333e88364..9350e93e11 100644
--- a/tests/topotests/bgp_hidden_evpn_revival/test_bgp_hidden_evpn_revival.py
+++ b/tests/topotests/bgp_hidden_evpn_revival/test_bgp_hidden_evpn_revival.py
@@ -41,7 +41,11 @@ sys.path.append(os.path.join(CWD, "../"))
# pylint: disable=C0413
from lib import topotest
from lib.topogen import Topogen, get_topogen
-from lib.common_config import create_interface_in_kernel, step
+from lib.common_config import (
+ create_interface_in_kernel,
+ step,
+ shutdown_bringup_interface_in_kernel,
+)
pytestmark = [pytest.mark.bgpd]
@@ -60,7 +64,8 @@ def setup_module(mod):
tgen.start_topology()
r1 = tgen.gears["r1"]
- r1.run("ip link add vrf1 type vrf table 101 && ip link set vrf1 up")
+ r1.run("ip link add vrf1 type vrf table 101")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "vrf1", True)
create_interface_in_kernel(tgen, "r1", "dummy1", "10.10.1.1/24", vrf="vrf1")
r1.load_frr_config(os.path.join(CWD, "r1/frr.conf"))
diff --git a/tests/topotests/bgp_l3vpn_hidden/test_bgp_l3vpn_hidden.py b/tests/topotests/bgp_l3vpn_hidden/test_bgp_l3vpn_hidden.py
index 962bb45e26..96ee678283 100644
--- a/tests/topotests/bgp_l3vpn_hidden/test_bgp_l3vpn_hidden.py
+++ b/tests/topotests/bgp_l3vpn_hidden/test_bgp_l3vpn_hidden.py
@@ -21,7 +21,7 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.topolog import logger
from lib.topogen import Topogen, get_topogen
-from lib.common_config import step
+from lib.common_config import step, shutdown_bringup_interface_in_kernel
pytestmark = [
@@ -78,12 +78,15 @@ def setup_module(mod):
pe1 = tgen.gears["pe1"]
pe1.cmd(
- f"""
+ """
+
ip link add RED type vrf table 100
-ip link set RED up
+ """)
+ shutdown_bringup_interface_in_kernel(pe1.tgen, pe1.name, "RED", True)
+ pe1.cmd(
+ """
ip link set eth-ce1 master RED
-"""
- )
+ """)
router_list = tgen.routers()
diff --git a/tests/topotests/bgp_l3vpn_label_export/test_bgp_l3vpn_label_export.py b/tests/topotests/bgp_l3vpn_label_export/test_bgp_l3vpn_label_export.py
index 777b2ca0a1..8bbecbf34a 100644
--- a/tests/topotests/bgp_l3vpn_label_export/test_bgp_l3vpn_label_export.py
+++ b/tests/topotests/bgp_l3vpn_label_export/test_bgp_l3vpn_label_export.py
@@ -25,7 +25,12 @@ sys.path.append(os.path.join(CWD, "../"))
# pylint: disable=C0413
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
-from lib.common_config import kill_router_daemons, start_router_daemons, step
+from lib.common_config import (
+ kill_router_daemons,
+ start_router_daemons,
+ step,
+ shutdown_bringup_interface_in_kernel,
+)
pytestmark = [pytest.mark.bgpd, pytest.mark.ldpd, pytest.mark.staticd]
@@ -47,7 +52,12 @@ def setup_module(mod):
for rtr in [1, 2]:
tgen.gears["r{}".format(rtr)].cmd("ip link add vrf1 type vrf table 10")
- tgen.gears["r{}".format(rtr)].cmd("ip link set vrf1 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r{}'.format(rtr)].tgen,
+ tgen.gears['r{}'.format(rtr)].name,
+ "vrf1",
+ True,
+ )
tgen.gears["r{}".format(rtr)].cmd(
"ip address add dev vrf1 192.0.3.{}/32".format(rtr)
)
diff --git a/tests/topotests/bgp_l3vpn_to_bgp_vrf/customize.py b/tests/topotests/bgp_l3vpn_to_bgp_vrf/customize.py
index 45c44ba5db..97041e4855 100644
--- a/tests/topotests/bgp_l3vpn_to_bgp_vrf/customize.py
+++ b/tests/topotests/bgp_l3vpn_to_bgp_vrf/customize.py
@@ -68,6 +68,7 @@ import platform
from lib import topotest
from lib.topogen import get_topogen
from lib.topolog import logger
+from lib.common_config import shutdown_bringup_interface_in_kernel
from lib.ltemplate import ltemplateRtrCmd
# Required to instantiate the topology builder class.
@@ -147,10 +148,15 @@ def ltemplatePreRouterStartHook():
"ip link add {0}-cust1 type vrf table 10",
"ip ru add oif {0}-cust1 table 10",
"ip ru add iif {0}-cust1 table 10",
- "ip link set dev {0}-cust1 up",
+ ("up", "{0}-cust1"),
]
for rtr in rtrs:
for cmd in cmds:
+ if isinstance(cmd, tuple):
+ shutdown_bringup_interface_in_kernel(
+ tgen, rtr, cmd[1].format(rtr), cmd[0] == "up"
+ )
+ continue
cc.doCmd(tgen, rtr, cmd.format(rtr))
cc.doCmd(tgen, rtr, "ip link set dev {0}-eth4 master {0}-cust1".format(rtr))
intfs = [rtr + "-cust1", "lo", rtr + "-eth0", rtr + "-eth4"]
@@ -164,12 +170,17 @@ def ltemplatePreRouterStartHook():
# configure cust4 VRFs & MPLS
cmds = [
"ip link add {0}-cust4 type vrf table 30",
- "ip link set dev {0}-cust4 up",
+ ("up", "{0}-cust4"),
"ip link add {0}-cust5 type vrf table 40",
- "ip link set dev {0}-cust5 up",
+ ("up", "{0}-cust5"),
]
rtr = "r1"
for cmd in cmds:
+ if isinstance(cmd, tuple):
+ shutdown_bringup_interface_in_kernel(
+ tgen, rtr, cmd[1].format(rtr), cmd[0] == "up"
+ )
+ continue
cc.doCmd(tgen, rtr, cmd.format(rtr))
logger.info("setup {0} vrf {0}-cust3 and{0}-cust4.".format(rtr))
# configure cust2 VRFs & MPLS
@@ -178,10 +189,15 @@ def ltemplatePreRouterStartHook():
"ip link add {0}-cust2 type vrf table 20",
"ip ru add oif {0}-cust2 table 20",
"ip ru add iif {0}-cust2 table 20",
- "ip link set dev {0}-cust2 up",
+ ("up", "{0}-cust2"),
]
for rtr in rtrs:
for cmd in cmds:
+ if isinstance(cmd, tuple):
+ shutdown_bringup_interface_in_kernel(
+ tgen, rtr, cmd[1].format(rtr), cmd[0] == "up"
+ )
+ continue
cc.doCmd(tgen, rtr, cmd.format(rtr))
cc.doCmd(tgen, rtr, "ip link set dev {0}-eth5 master {0}-cust2".format(rtr))
intfs = [rtr + "-cust2", rtr + "-eth5"]
@@ -198,10 +214,15 @@ def ltemplatePreRouterStartHook():
"ip link add {0}-cust2 type vrf table 20",
"ip ru add oif {0}-cust2 table 20",
"ip ru add iif {0}-cust2 table 20",
- "ip link set dev {0}-cust2 up",
+ ("up", "{0}-cust2"),
]
for rtr in rtrs:
for cmd in cmds:
+ if isinstance(cmd, tuple):
+ shutdown_bringup_interface_in_kernel(
+ tgen, rtr, cmd[1].format(rtr), cmd[0] == "up"
+ )
+ continue
cc.doCmd(tgen, rtr, cmd.format(rtr))
cc.doCmd(tgen, rtr, "ip link set dev {0}-eth0 master {0}-cust2".format(rtr))
if cc.getOutput() != 0:
diff --git a/tests/topotests/bgp_link_bw_ip/test_bgp_linkbw_ip.py b/tests/topotests/bgp_link_bw_ip/test_bgp_linkbw_ip.py
index 0798ac0d77..7796bd3a07 100644
--- a/tests/topotests/bgp_link_bw_ip/test_bgp_linkbw_ip.py
+++ b/tests/topotests/bgp_link_bw_ip/test_bgp_linkbw_ip.py
@@ -27,7 +27,10 @@ sys.path.append(os.path.join(CWD, "../"))
# Import topogen and topotest helpers
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
-from lib.common_config import create_address_on_interface
+from lib.common_config import (
+ create_address_on_interface,
+ shutdown_bringup_interface_in_kernel,
+)
from lib.topolog import logger
# Required to instantiate the topology builder class.
@@ -369,7 +372,7 @@ def test_weighted_ecmp_link_flap():
# Bring down link on server r9
logger.info("Bring down link on server r9")
- tgen.net["r9"].cmd("ip link set dev r9-eth1 down")
+ shutdown_bringup_interface_in_kernel(tgen, 'r9', "r9-eth1", False)
# Check spine router r2 has only one path
logger.info("Check spine router r2 has only one path")
@@ -409,7 +412,7 @@ def test_weighted_ecmp_link_flap():
# Bring up link on server r9
logger.info("Bring up link on server r9")
- tgen.net["r9"].cmd("ip link set dev r9-eth1 up")
+ shutdown_bringup_interface_in_kernel(tgen, 'r9', "r9-eth1", True)
# Check link-bandwidth change and weighted ECMP rebalance on super-spine router r1
logger.info(
diff --git a/tests/topotests/bgp_listen_l3vrf/test_bgp_listen_l3vrf.py b/tests/topotests/bgp_listen_l3vrf/test_bgp_listen_l3vrf.py
index 5647d638dc..b3ac2d115e 100644
--- a/tests/topotests/bgp_listen_l3vrf/test_bgp_listen_l3vrf.py
+++ b/tests/topotests/bgp_listen_l3vrf/test_bgp_listen_l3vrf.py
@@ -38,7 +38,11 @@ sys.path.append(os.path.join(CWD, "../"))
# Import topogen and topotest helpers
from lib import topotest
from lib.common_check import ip_check_path_selection, iproute2_check_path_selection
-from lib.common_config import create_interface_in_kernel, step
+from lib.common_config import (
+ create_interface_in_kernel,
+ step,
+ shutdown_bringup_interface_in_kernel,
+)
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
@@ -138,16 +142,16 @@ def test_add_vrf():
# create vrf
r1.cmd("ip link add r1-cust type vrf table 10")
- r1.cmd("ip link set dev r1-cust up")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "r1-cust", True)
r1.cmd("ip link add link r1-eth1 dev r1-eth1.100 type vlan id 100")
- r1.cmd("ip link set dev r1-eth1.100 up")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "r1-eth1.100", True)
r1.cmd("ip link set dev r1-eth1.100 master r1-cust")
create_interface_in_kernel(tgen, "r1", "r1-loop1", vrf="r1-cust")
r3.cmd("ip link add link r3-eth1 dev r3-eth1.100 type vlan id 100")
- r3.cmd("ip link set dev r3-eth1.100 up")
+ shutdown_bringup_interface_in_kernel(r3.tgen, r3.name, "r3-eth1.100", True)
r3.vtysh_cmd(
"""
diff --git a/tests/topotests/bgp_path_selection/test_bgp_path_selection.py b/tests/topotests/bgp_path_selection/test_bgp_path_selection.py
index 2be2b512fa..aad76525ae 100644
--- a/tests/topotests/bgp_path_selection/test_bgp_path_selection.py
+++ b/tests/topotests/bgp_path_selection/test_bgp_path_selection.py
@@ -22,7 +22,7 @@ sys.path.append(os.path.join(CWD, "../"))
# pylint: disable=C0413
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
-from lib.common_config import step
+from lib.common_config import step, shutdown_bringup_interface_in_kernel
pytestmark = [pytest.mark.bgpd, pytest.mark.ldpd]
@@ -48,7 +48,12 @@ def setup_module(mod):
for routern in range(1, 4):
tgen.gears["r{}".format(routern)].cmd("ip link add vrf1 type vrf table 10")
- tgen.gears["r{}".format(routern)].cmd("ip link set vrf1 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r{}'.format(routern)].tgen,
+ tgen.gears['r{}'.format(routern)].name,
+ "vrf1",
+ True,
+ )
tgen.gears["r{}".format(routern)].cmd(
"ip address add dev vrf1 {}.{}.{}.{}/32".format(
routern, routern, routern, routern
diff --git a/tests/topotests/bgp_rd_as_zero/test_bgp_rd_as_zero.py b/tests/topotests/bgp_rd_as_zero/test_bgp_rd_as_zero.py
index 190ef23f95..58a7cda915 100644
--- a/tests/topotests/bgp_rd_as_zero/test_bgp_rd_as_zero.py
+++ b/tests/topotests/bgp_rd_as_zero/test_bgp_rd_as_zero.py
@@ -35,7 +35,10 @@ sys.path.append(os.path.join(CWD, "../"))
# pylint: disable=C0413
from lib import topotest
-from lib.common_config import create_interface_in_kernel
+from lib.common_config import (
+ create_interface_in_kernel,
+ shutdown_bringup_interface_in_kernel,
+)
from lib.topogen import Topogen, get_topogen
from lib.topolog import logger
@@ -58,7 +61,7 @@ def setup_module(mod):
r1 = tgen.gears["r1"]
# A VRF with a connected route to redistribute into the ipv4 vpn table.
r1.run("ip link add dummy-vrf type vrf table 1001")
- r1.run("ip link set dummy-vrf up")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "dummy-vrf", True)
create_interface_in_kernel(tgen, "r1", "dummy0", "192.0.2.100/32", vrf="dummy-vrf")
for rname, router in tgen.routers().items():
diff --git a/tests/topotests/bgp_route_map_vpn_import/test_bgp_route_map_vpn_import.py b/tests/topotests/bgp_route_map_vpn_import/test_bgp_route_map_vpn_import.py
index a6641348f7..409542fa5e 100644
--- a/tests/topotests/bgp_route_map_vpn_import/test_bgp_route_map_vpn_import.py
+++ b/tests/topotests/bgp_route_map_vpn_import/test_bgp_route_map_vpn_import.py
@@ -24,6 +24,7 @@ sys.path.append(os.path.join(CWD, "../"))
# pylint: disable=C0413
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
+from lib.common_config import shutdown_bringup_interface_in_kernel
pytestmark = [pytest.mark.bgpd]
@@ -51,10 +52,10 @@ def setup_module(mod):
r1 = tgen.gears["r1"]
r1.run("ip link add Customer type vrf table 1001")
- r1.run("ip link set up dev Customer")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "Customer", True)
r1.run("ip link set r1-eth0 master Customer")
r1.run("ip link add Service type vrf table 1002")
- r1.run("ip link set up dev Service")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "Service", True)
r1.run("ip link set r1-eth1 master Service")
r1.run("ip link set r1-eth3 master Customer")
diff --git a/tests/topotests/bgp_rpki_topo1/test_bgp_rpki_topo1.py b/tests/topotests/bgp_rpki_topo1/test_bgp_rpki_topo1.py
index 09e5bacce1..e31d11b4da 100644
--- a/tests/topotests/bgp_rpki_topo1/test_bgp_rpki_topo1.py
+++ b/tests/topotests/bgp_rpki_topo1/test_bgp_rpki_topo1.py
@@ -16,7 +16,7 @@ sys.path.append(os.path.join(CWD, "../"))
# pylint: disable=C0413
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
-from lib.common_config import step
+from lib.common_config import step, shutdown_bringup_interface_in_kernel
from lib.topolog import logger
pytestmark = [pytest.mark.bgpd, pytest.mark.staticd]
@@ -59,7 +59,12 @@ def setup_module(mod):
)
tgen.gears["r2"].run("ip link add vrf10 type vrf table 10")
- tgen.gears["r2"].run("ip link set vrf10 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r2'].tgen,
+ tgen.gears['r2'].name,
+ "vrf10",
+ True,
+ )
tgen.gears["r2"].run("ip link set r2-eth1 master vrf10")
diff --git a/tests/topotests/bgp_snmp_mplsl3vpn/test_bgp_snmp_mplsvpn.py b/tests/topotests/bgp_snmp_mplsl3vpn/test_bgp_snmp_mplsvpn.py
index 354b628ec6..346c1851d9 100755
--- a/tests/topotests/bgp_snmp_mplsl3vpn/test_bgp_snmp_mplsvpn.py
+++ b/tests/topotests/bgp_snmp_mplsl3vpn/test_bgp_snmp_mplsvpn.py
@@ -27,6 +27,7 @@ sys.path.append(os.path.join(CWD, "../"))
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.snmptest import SnmpTester
from lib import topotest
+from lib.common_config import shutdown_bringup_interface_in_kernel
# Required to instantiate the topology builder class.
@@ -121,11 +122,11 @@ def setup_module(mod):
# setup VRF-a in r1
r1.run("ip link add VRF-a type vrf table 1001")
- r1.run("ip link set up dev VRF-a")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "VRF-a", True)
r1.run("ip link add VRF-b type vrf table 1002")
- r1.run("ip link set up dev VRF-b")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "VRF-b", True)
r4.run("ip link add VRF-a type vrf table 1001")
- r4.run("ip link set up dev VRF-a")
+ shutdown_bringup_interface_in_kernel(r4.tgen, r4.name, "VRF-a", True)
# enslave vrf interfaces
r1.run("ip link set r1-eth3 master VRF-a")
@@ -380,7 +381,7 @@ def test_r1_mplsvpn_IfTable():
assert r1_snmp.test_oid_walk(item, iftable_up_test[item], oids), assertmsg
# an inactive vrf should not affect these values
- r1.cmd("ip link set r1-eth5 down")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "r1-eth5", False)
def _check_iftable(expected):
for item in expected.keys():
@@ -393,7 +394,7 @@ def test_r1_mplsvpn_IfTable():
)
assert result is True, "mplsL3VpnIf table did not converge after link down"
- r1.cmd("ip link set r1-eth5 up")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "r1-eth5", True)
vrftable_test = {
@@ -487,7 +488,7 @@ def test_r1_mplsvpn_VrfTable():
)
ts_val_last_1 = get_timetick_val(ts_last)
r1.cmd("ip link set r1-eth6 master VRF-a")
- r1.cmd("ip link set r1-eth6 up")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "r1-eth6", True)
def _check_vrf_associated_and_last_changed(last_changed_before):
associated_int = r1_snmp.get(
@@ -509,7 +510,7 @@ def test_r1_mplsvpn_VrfTable():
result is True
), "VRF associated interface/timestamp did not converge after interface move"
r1.cmd("ip link del r1-eth6 master VRF-a")
- r1.cmd("ip link set r1-eth6 down")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "r1-eth6", False)
rt_table_test = {
diff --git a/tests/topotests/bgp_soo/test_bgp_soo.py b/tests/topotests/bgp_soo/test_bgp_soo.py
index 952643bdb4..594d7d0c95 100644
--- a/tests/topotests/bgp_soo/test_bgp_soo.py
+++ b/tests/topotests/bgp_soo/test_bgp_soo.py
@@ -34,7 +34,7 @@ sys.path.append(os.path.join(CWD, "../"))
# pylint: disable=C0413
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
-from lib.common_config import step
+from lib.common_config import step, shutdown_bringup_interface_in_kernel
pytestmark = [pytest.mark.bgpd, pytest.mark.ldpd, pytest.mark.ospfd]
@@ -70,9 +70,9 @@ def setup_module(mod):
pe2 = tgen.gears["pe2"]
pe1.run("ip link add RED type vrf table 1001")
- pe1.run("ip link set up dev RED")
+ shutdown_bringup_interface_in_kernel(pe1.tgen, pe1.name, "RED", True)
pe2.run("ip link add RED type vrf table 1001")
- pe2.run("ip link set up dev RED")
+ shutdown_bringup_interface_in_kernel(pe2.tgen, pe2.name, "RED", True)
pe1.run("ip link set pe1-eth0 master RED")
pe2.run("ip link set pe2-eth1 master RED")
diff --git a/tests/topotests/bgp_srv6_evpn_rt5/test_bgp_srv6_evpn_rt5.py b/tests/topotests/bgp_srv6_evpn_rt5/test_bgp_srv6_evpn_rt5.py
index 257e4e62f8..07d320295b 100644
--- a/tests/topotests/bgp_srv6_evpn_rt5/test_bgp_srv6_evpn_rt5.py
+++ b/tests/topotests/bgp_srv6_evpn_rt5/test_bgp_srv6_evpn_rt5.py
@@ -32,7 +32,10 @@ from lib import topotest
from lib.bgp import bgp_vpn_router_json_cmp_exact_filter
from lib.topogen import Topogen, get_topogen
from lib.topolog import logger
-from lib.common_config import required_linux_kernel_version
+from lib.common_config import (
+ required_linux_kernel_version,
+ shutdown_bringup_interface_in_kernel,
+)
from lib.checkping import check_ping
pytestmark = [pytest.mark.bgpd]
@@ -78,18 +81,38 @@ def setup_module(mod):
tgen.gears["r1"].run("sysctl net.vrf.strict_mode=1")
tgen.gears["r1"].run("ip link add vrf10 type vrf table 10")
- tgen.gears["r1"].run("ip link set vrf10 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r1'].tgen,
+ tgen.gears['r1'].name,
+ "vrf10",
+ True,
+ )
tgen.gears["r1"].run("ip link add vrf20 type vrf table 20")
- tgen.gears["r1"].run("ip link set vrf20 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r1'].tgen,
+ tgen.gears['r1'].name,
+ "vrf20",
+ True,
+ )
tgen.gears["r1"].run("ip link set eth1 master vrf10")
tgen.gears["r1"].run("ip link set eth2 master vrf10")
tgen.gears["r1"].run("ip link set eth3 master vrf20")
tgen.gears["r2"].run("sysctl net.vrf.strict_mode=1")
tgen.gears["r2"].run("ip link add vrf10 type vrf table 10")
- tgen.gears["r2"].run("ip link set vrf10 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r2'].tgen,
+ tgen.gears['r2'].name,
+ "vrf10",
+ True,
+ )
tgen.gears["r2"].run("ip link add vrf20 type vrf table 20")
- tgen.gears["r2"].run("ip link set vrf20 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r2'].tgen,
+ tgen.gears['r2'].name,
+ "vrf20",
+ True,
+ )
tgen.gears["r2"].run("ip link set eth1 master vrf10")
tgen.gears["r2"].run("ip link set eth2 master vrf20")
tgen.gears["r2"].run("ip link set eth3 master vrf20")
diff --git a/tests/topotests/bgp_srv6_sid_reachability/test_bgp_srv6_sid_reachability.py b/tests/topotests/bgp_srv6_sid_reachability/test_bgp_srv6_sid_reachability.py
index 4b8d7278d6..b2ca08e15c 100755
--- a/tests/topotests/bgp_srv6_sid_reachability/test_bgp_srv6_sid_reachability.py
+++ b/tests/topotests/bgp_srv6_sid_reachability/test_bgp_srv6_sid_reachability.py
@@ -18,7 +18,10 @@ sys.path.append(os.path.join(CWD, "../"))
# Import topogen and topotest helpers
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
-from lib.common_config import required_linux_kernel_version
+from lib.common_config import (
+ required_linux_kernel_version,
+ shutdown_bringup_interface_in_kernel,
+)
from lib.checkping import check_ping
pytestmark = [pytest.mark.bgpd, pytest.mark.staticd]
@@ -74,25 +77,55 @@ def setup_module(mod):
tgen.gears["r1"].run("sysctl net.vrf.strict_mode=1")
tgen.gears["r1"].run("ip link add vrf10 type vrf table 10")
- tgen.gears["r1"].run("ip link set vrf10 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r1'].tgen,
+ tgen.gears['r1'].name,
+ "vrf10",
+ True,
+ )
tgen.gears["r1"].run("ip link add vrf20 type vrf table 20")
- tgen.gears["r1"].run("ip link set vrf20 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r1'].tgen,
+ tgen.gears['r1'].name,
+ "vrf20",
+ True,
+ )
tgen.gears["r1"].run("ip link set eth2 master vrf10")
tgen.gears["r1"].run("ip link set eth3 master vrf20")
tgen.gears["r2"].run("sysctl net.vrf.strict_mode=1")
tgen.gears["r2"].run("ip link add vrf10 type vrf table 10")
- tgen.gears["r2"].run("ip link set vrf10 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r2'].tgen,
+ tgen.gears['r2'].name,
+ "vrf10",
+ True,
+ )
tgen.gears["r2"].run("ip link add vrf20 type vrf table 20")
- tgen.gears["r2"].run("ip link set vrf20 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r2'].tgen,
+ tgen.gears['r2'].name,
+ "vrf20",
+ True,
+ )
tgen.gears["r2"].run("ip link set eth1 master vrf10")
tgen.gears["r2"].run("ip link set eth2 master vrf20")
tgen.gears["r3"].run("sysctl net.vrf.strict_mode=1")
tgen.gears["r3"].run("ip link add vrf10 type vrf table 10")
- tgen.gears["r3"].run("ip link set vrf10 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r3'].tgen,
+ tgen.gears['r3'].name,
+ "vrf10",
+ True,
+ )
tgen.gears["r3"].run("ip link add vrf20 type vrf table 20")
- tgen.gears["r3"].run("ip link set vrf20 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r3'].tgen,
+ tgen.gears['r3'].name,
+ "vrf20",
+ True,
+ )
tgen.gears["r3"].run("ip link set eth1 master vrf10")
tgen.gears["r3"].run("ip link set eth2 master vrf20")
diff --git a/tests/topotests/bgp_srv6_unicast/test_bgp_srv6_unicast.py b/tests/topotests/bgp_srv6_unicast/test_bgp_srv6_unicast.py
index c402bbb4b6..467c0853bf 100644
--- a/tests/topotests/bgp_srv6_unicast/test_bgp_srv6_unicast.py
+++ b/tests/topotests/bgp_srv6_unicast/test_bgp_srv6_unicast.py
@@ -37,7 +37,11 @@ import functools
CWD = os.path.dirname(os.path.realpath(__file__))
sys.path.append(os.path.join(CWD, "../"))
-from lib.common_config import create_interface_in_kernel, retry
+from lib.common_config import (
+ create_interface_in_kernel,
+ retry,
+ shutdown_bringup_interface_in_kernel,
+)
from lib import topotest
from lib.topogen import Topogen, get_topogen
from lib.topolog import logger
@@ -62,21 +66,21 @@ def setup_module(mod):
tgen.start_topology()
router_list = tgen.routers()
- tgen.net["r1"].cmd(
+ tgen.net['r1'].cmd(
"""
+
sysctl -w net.vrf.strict_mode=1
ip link add vrfdefault type vrf table 254
- ip link set up dev vrfdefault
- """
- )
+ """)
+ shutdown_bringup_interface_in_kernel(tgen, 'r1', "vrfdefault", True)
create_interface_in_kernel(tgen, "r1", "sr0")
- tgen.net["r3"].cmd(
+ tgen.net['r3'].cmd(
"""
+
sysctl -w net.vrf.strict_mode=1
ip link add vrfdefault type vrf table 254
- ip link set up dev vrfdefault
- """
- )
+ """)
+ shutdown_bringup_interface_in_kernel(tgen, 'r3', "vrfdefault", True)
create_interface_in_kernel(tgen, "r3", "sr0")
for router in router_list.values():
diff --git a/tests/topotests/bgp_srv6l3vpn_over_ipv6/test_bgp_srv6l3vpn_over_ipv6.py b/tests/topotests/bgp_srv6l3vpn_over_ipv6/test_bgp_srv6l3vpn_over_ipv6.py
index ae06d2e2cc..9d586b868d 100755
--- a/tests/topotests/bgp_srv6l3vpn_over_ipv6/test_bgp_srv6l3vpn_over_ipv6.py
+++ b/tests/topotests/bgp_srv6l3vpn_over_ipv6/test_bgp_srv6l3vpn_over_ipv6.py
@@ -19,7 +19,10 @@ sys.path.append(os.path.join(CWD, "../"))
# Import topogen and topotest helpers
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
-from lib.common_config import required_linux_kernel_version
+from lib.common_config import (
+ required_linux_kernel_version,
+ shutdown_bringup_interface_in_kernel,
+)
from lib.checkping import check_ping
pytestmark = [pytest.mark.bgpd, pytest.mark.staticd]
@@ -75,25 +78,55 @@ def setup_module(mod):
tgen.gears["r1"].run("sysctl net.vrf.strict_mode=1")
tgen.gears["r1"].run("ip link add vrf10 type vrf table 10")
- tgen.gears["r1"].run("ip link set vrf10 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r1'].tgen,
+ tgen.gears['r1'].name,
+ "vrf10",
+ True,
+ )
tgen.gears["r1"].run("ip link add vrf20 type vrf table 20")
- tgen.gears["r1"].run("ip link set vrf20 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r1'].tgen,
+ tgen.gears['r1'].name,
+ "vrf20",
+ True,
+ )
tgen.gears["r1"].run("ip link set eth2 master vrf10")
tgen.gears["r1"].run("ip link set eth3 master vrf20")
tgen.gears["r2"].run("sysctl net.vrf.strict_mode=1")
tgen.gears["r2"].run("ip link add vrf10 type vrf table 10")
- tgen.gears["r2"].run("ip link set vrf10 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r2'].tgen,
+ tgen.gears['r2'].name,
+ "vrf10",
+ True,
+ )
tgen.gears["r2"].run("ip link add vrf20 type vrf table 20")
- tgen.gears["r2"].run("ip link set vrf20 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r2'].tgen,
+ tgen.gears['r2'].name,
+ "vrf20",
+ True,
+ )
tgen.gears["r2"].run("ip link set eth1 master vrf10")
tgen.gears["r2"].run("ip link set eth2 master vrf20")
tgen.gears["r3"].run("sysctl net.vrf.strict_mode=1")
tgen.gears["r3"].run("ip link add vrf10 type vrf table 10")
- tgen.gears["r3"].run("ip link set vrf10 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r3'].tgen,
+ tgen.gears['r3'].name,
+ "vrf10",
+ True,
+ )
tgen.gears["r3"].run("ip link add vrf20 type vrf table 20")
- tgen.gears["r3"].run("ip link set vrf20 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r3'].tgen,
+ tgen.gears['r3'].name,
+ "vrf20",
+ True,
+ )
tgen.gears["r3"].run("ip link set eth1 master vrf10")
tgen.gears["r3"].run("ip link set eth2 master vrf20")
diff --git a/tests/topotests/bgp_srv6l3vpn_route_leak/test_bgp_srv6l3vpn_route_leak.py b/tests/topotests/bgp_srv6l3vpn_route_leak/test_bgp_srv6l3vpn_route_leak.py
index 89c250154b..7d3c4e597d 100755
--- a/tests/topotests/bgp_srv6l3vpn_route_leak/test_bgp_srv6l3vpn_route_leak.py
+++ b/tests/topotests/bgp_srv6l3vpn_route_leak/test_bgp_srv6l3vpn_route_leak.py
@@ -18,6 +18,7 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
+from lib.common_config import shutdown_bringup_interface_in_kernel
pytestmark = [pytest.mark.bgpd]
@@ -42,9 +43,19 @@ def setup_module(mod):
)
tgen.gears["pe1"].run("ip link add vrf10 type vrf table 10")
- tgen.gears["pe1"].run("ip link set vrf10 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['pe1'].tgen,
+ tgen.gears['pe1'].name,
+ "vrf10",
+ True,
+ )
tgen.gears["pe1"].run("ip link add vrf20 type vrf table 20")
- tgen.gears["pe1"].run("ip link set vrf20 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['pe1'].tgen,
+ tgen.gears['pe1'].name,
+ "vrf20",
+ True,
+ )
tgen.gears["pe1"].run("ip link set eth0 master vrf10")
tgen.start_router()
diff --git a/tests/topotests/bgp_srv6l3vpn_sid/test_bgp_srv6l3vpn_sid.py b/tests/topotests/bgp_srv6l3vpn_sid/test_bgp_srv6l3vpn_sid.py
index 8c08f650f5..68cb32d3f8 100755
--- a/tests/topotests/bgp_srv6l3vpn_sid/test_bgp_srv6l3vpn_sid.py
+++ b/tests/topotests/bgp_srv6l3vpn_sid/test_bgp_srv6l3vpn_sid.py
@@ -35,7 +35,11 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
-from lib.common_config import required_linux_kernel_version, retry
+from lib.common_config import (
+ required_linux_kernel_version,
+ retry,
+ shutdown_bringup_interface_in_kernel,
+)
from lib.checkping import check_ping
@@ -125,11 +129,26 @@ def setup_module(mod):
)
tgen.gears["r1"].run("ip link add vrf10 type vrf table 10")
- tgen.gears["r1"].run("ip link set vrf10 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r1'].tgen,
+ tgen.gears['r1'].name,
+ "vrf10",
+ True,
+ )
tgen.gears["r1"].run("ip link add vrf20 type vrf table 20")
- tgen.gears["r1"].run("ip link set vrf20 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r1'].tgen,
+ tgen.gears['r1'].name,
+ "vrf20",
+ True,
+ )
tgen.gears["r1"].run("ip link add vrf30 type vrf table 30")
- tgen.gears["r1"].run("ip link set vrf30 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r1'].tgen,
+ tgen.gears['r1'].name,
+ "vrf30",
+ True,
+ )
tgen.gears["r1"].run("ip link set eth1 master vrf10")
tgen.gears["r1"].run("ip link set eth2 master vrf10")
tgen.gears["r1"].run("ip link set eth3 master vrf20")
@@ -143,9 +162,19 @@ def setup_module(mod):
tgen.gears["r1"].run("sysctl net.ipv4.conf.vrf10.rp_filter=0")
tgen.gears["r2"].run("ip link add vrf10 type vrf table 10")
- tgen.gears["r2"].run("ip link set vrf10 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r2'].tgen,
+ tgen.gears['r2'].name,
+ "vrf10",
+ True,
+ )
tgen.gears["r2"].run("ip link add vrf20 type vrf table 20")
- tgen.gears["r2"].run("ip link set vrf20 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r2'].tgen,
+ tgen.gears['r2'].name,
+ "vrf20",
+ True,
+ )
tgen.gears["r2"].run("ip link set eth1 master vrf10")
tgen.gears["r2"].run("ip link set eth2 master vrf20")
tgen.gears["r2"].run("ip link set eth3 master vrf20")
diff --git a/tests/topotests/bgp_srv6l3vpn_to_bgp_vrf/test_bgp_srv6l3vpn_to_bgp_vrf.py b/tests/topotests/bgp_srv6l3vpn_to_bgp_vrf/test_bgp_srv6l3vpn_to_bgp_vrf.py
index 069ec1a61c..fe0f53dff6 100755
--- a/tests/topotests/bgp_srv6l3vpn_to_bgp_vrf/test_bgp_srv6l3vpn_to_bgp_vrf.py
+++ b/tests/topotests/bgp_srv6l3vpn_to_bgp_vrf/test_bgp_srv6l3vpn_to_bgp_vrf.py
@@ -22,7 +22,10 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
-from lib.common_config import required_linux_kernel_version
+from lib.common_config import (
+ required_linux_kernel_version,
+ shutdown_bringup_interface_in_kernel,
+)
from lib.checkping import check_ping
pytestmark = [pytest.mark.bgpd]
@@ -99,17 +102,37 @@ def setup_module(mod):
router.load_frr_config()
tgen.gears["r1"].run("ip link add vrf10 type vrf table 10")
- tgen.gears["r1"].run("ip link set vrf10 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r1'].tgen,
+ tgen.gears['r1'].name,
+ "vrf10",
+ True,
+ )
tgen.gears["r1"].run("ip link add vrf20 type vrf table 20")
- tgen.gears["r1"].run("ip link set vrf20 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r1'].tgen,
+ tgen.gears['r1'].name,
+ "vrf20",
+ True,
+ )
tgen.gears["r1"].run("ip link set eth1 master vrf10")
tgen.gears["r1"].run("ip link set eth2 master vrf10")
tgen.gears["r1"].run("ip link set eth3 master vrf20")
tgen.gears["r2"].run("ip link add vrf10 type vrf table 10")
- tgen.gears["r2"].run("ip link set vrf10 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r2'].tgen,
+ tgen.gears['r2'].name,
+ "vrf10",
+ True,
+ )
tgen.gears["r2"].run("ip link add vrf20 type vrf table 20")
- tgen.gears["r2"].run("ip link set vrf20 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r2'].tgen,
+ tgen.gears['r2'].name,
+ "vrf20",
+ True,
+ )
tgen.gears["r2"].run("ip link set eth1 master vrf10")
tgen.gears["r2"].run("ip link set eth2 master vrf20")
tgen.gears["r2"].run("ip link set eth3 master vrf20")
diff --git a/tests/topotests/bgp_srv6l3vpn_to_bgp_vrf2/test_bgp_srv6l3vpn_to_bgp_vrf2.py b/tests/topotests/bgp_srv6l3vpn_to_bgp_vrf2/test_bgp_srv6l3vpn_to_bgp_vrf2.py
index ed909e3c74..bb67723451 100755
--- a/tests/topotests/bgp_srv6l3vpn_to_bgp_vrf2/test_bgp_srv6l3vpn_to_bgp_vrf2.py
+++ b/tests/topotests/bgp_srv6l3vpn_to_bgp_vrf2/test_bgp_srv6l3vpn_to_bgp_vrf2.py
@@ -22,7 +22,10 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
-from lib.common_config import required_linux_kernel_version
+from lib.common_config import (
+ required_linux_kernel_version,
+ shutdown_bringup_interface_in_kernel,
+)
from lib.checkping import check_ping
pytestmark = [pytest.mark.bgpd]
@@ -73,13 +76,23 @@ def setup_module(mod):
tgen.gears["r1"].run("sysctl net.vrf.strict_mode=1")
tgen.gears["r1"].run("ip link add vrf10 type vrf table 10")
- tgen.gears["r1"].run("ip link set vrf10 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r1'].tgen,
+ tgen.gears['r1'].name,
+ "vrf10",
+ True,
+ )
tgen.gears["r1"].run("ip route add table 10 unreachable default metric 4278198272")
tgen.gears["r1"].run(
"ip -6 route add table 10 unreachable default metric 4278198272"
)
tgen.gears["r1"].run("ip link add vrf20 type vrf table 20")
- tgen.gears["r1"].run("ip link set vrf20 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r1'].tgen,
+ tgen.gears['r1'].name,
+ "vrf20",
+ True,
+ )
tgen.gears["r1"].run("ip route add table 20 unreachable default metric 4278198272")
tgen.gears["r1"].run(
"ip -6 route add table 20 unreachable default metric 4278198272"
@@ -90,13 +103,23 @@ def setup_module(mod):
tgen.gears["r2"].run("sysctl net.vrf.strict_mode=1")
tgen.gears["r2"].run("ip link add vrf10 type vrf table 10")
- tgen.gears["r2"].run("ip link set vrf10 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r2'].tgen,
+ tgen.gears['r2'].name,
+ "vrf10",
+ True,
+ )
tgen.gears["r2"].run("ip route add table 10 unreachable default metric 4278198272")
tgen.gears["r2"].run(
"ip -6 route add table 10 unreachable default metric 4278198272"
)
tgen.gears["r2"].run("ip link add vrf20 type vrf table 20")
- tgen.gears["r2"].run("ip link set vrf20 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r2'].tgen,
+ tgen.gears['r2'].name,
+ "vrf20",
+ True,
+ )
tgen.gears["r2"].run("ip route add table 20 unreachable default metric 4278198272")
tgen.gears["r2"].run(
"ip -6 route add table 20 unreachable default metric 4278198272"
diff --git a/tests/topotests/bgp_srv6l3vpn_to_bgp_vrf3/test_bgp_srv6l3vpn_to_bgp_vrf3.py b/tests/topotests/bgp_srv6l3vpn_to_bgp_vrf3/test_bgp_srv6l3vpn_to_bgp_vrf3.py
index 96a403ed8a..8a142f96b1 100644
--- a/tests/topotests/bgp_srv6l3vpn_to_bgp_vrf3/test_bgp_srv6l3vpn_to_bgp_vrf3.py
+++ b/tests/topotests/bgp_srv6l3vpn_to_bgp_vrf3/test_bgp_srv6l3vpn_to_bgp_vrf3.py
@@ -21,7 +21,10 @@ from lib import topotest
from lib.bgp import bgp_vpn_router_json_cmp_exact_filter
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
-from lib.common_config import required_linux_kernel_version
+from lib.common_config import (
+ required_linux_kernel_version,
+ shutdown_bringup_interface_in_kernel,
+)
from lib.checkping import check_ping
pytestmark = [pytest.mark.bgpd]
@@ -72,18 +75,38 @@ def setup_module(mod):
tgen.gears["r1"].run("sysctl net.vrf.strict_mode=1")
tgen.gears["r1"].run("ip link add vrf10 type vrf table 10")
- tgen.gears["r1"].run("ip link set vrf10 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r1'].tgen,
+ tgen.gears['r1'].name,
+ "vrf10",
+ True,
+ )
tgen.gears["r1"].run("ip link add vrf20 type vrf table 20")
- tgen.gears["r1"].run("ip link set vrf20 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r1'].tgen,
+ tgen.gears['r1'].name,
+ "vrf20",
+ True,
+ )
tgen.gears["r1"].run("ip link set eth1 master vrf10")
tgen.gears["r1"].run("ip link set eth2 master vrf10")
tgen.gears["r1"].run("ip link set eth3 master vrf20")
tgen.gears["r2"].run("sysctl net.vrf.strict_mode=1")
tgen.gears["r2"].run("ip link add vrf10 type vrf table 10")
- tgen.gears["r2"].run("ip link set vrf10 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r2'].tgen,
+ tgen.gears['r2'].name,
+ "vrf10",
+ True,
+ )
tgen.gears["r2"].run("ip link add vrf20 type vrf table 20")
- tgen.gears["r2"].run("ip link set vrf20 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r2'].tgen,
+ tgen.gears['r2'].name,
+ "vrf20",
+ True,
+ )
tgen.gears["r2"].run("ip link set eth1 master vrf10")
tgen.gears["r2"].run("ip link set eth2 master vrf20")
tgen.gears["r2"].run("ip link set eth3 master vrf20")
diff --git a/tests/topotests/bgp_table_direct_topo1/test_bgp_table_direct_topo1.py b/tests/topotests/bgp_table_direct_topo1/test_bgp_table_direct_topo1.py
index 127f1b5f34..897408533a 100644
--- a/tests/topotests/bgp_table_direct_topo1/test_bgp_table_direct_topo1.py
+++ b/tests/topotests/bgp_table_direct_topo1/test_bgp_table_direct_topo1.py
@@ -33,6 +33,7 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
from lib.pim import McastTesterHelper
+from lib.common_config import shutdown_bringup_interface_in_kernel
pytestmark = [pytest.mark.bgpd, pytest.mark.pimd]
@@ -73,7 +74,12 @@ def setup_module(mod):
router.load_frr_config()
tgen.gears["r1"].run("ip link add blue type vrf table 10")
- tgen.gears["r1"].run("ip link set blue up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r1'].tgen,
+ tgen.gears['r1'].name,
+ "blue",
+ True,
+ )
tgen.gears["r1"].run("ip link set r1-eth1 master blue")
# Initialize all routers.
diff --git a/tests/topotests/bgp_vpn_5549_route_map/test_bgp_vpn_5549_route_map.py b/tests/topotests/bgp_vpn_5549_route_map/test_bgp_vpn_5549_route_map.py
index d91d0e2b82..65a76e20d8 100644
--- a/tests/topotests/bgp_vpn_5549_route_map/test_bgp_vpn_5549_route_map.py
+++ b/tests/topotests/bgp_vpn_5549_route_map/test_bgp_vpn_5549_route_map.py
@@ -22,6 +22,7 @@ sys.path.append(os.path.join(CWD, "../"))
# pylint: disable=C0413
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
+from lib.common_config import shutdown_bringup_interface_in_kernel
pytestmark = [pytest.mark.bgpd, pytest.mark.ldpd, pytest.mark.ospf6d]
@@ -53,9 +54,9 @@ def setup_module(mod):
pe2 = tgen.gears["pe2"]
pe1.run("ip link add RED type vrf table 1001")
- pe1.run("ip link set up dev RED")
+ shutdown_bringup_interface_in_kernel(pe1.tgen, pe1.name, "RED", True)
pe2.run("ip link add RED type vrf table 1001")
- pe2.run("ip link set up dev RED")
+ shutdown_bringup_interface_in_kernel(pe2.tgen, pe2.name, "RED", True)
pe1.run("ip link set pe1-eth0 master RED")
pe2.run("ip link set pe2-eth1 master RED")
diff --git a/tests/topotests/bgp_vpn_import_nexthop_default_vrf/test_bgp_vpn_import_nexthop_default_vrf.py b/tests/topotests/bgp_vpn_import_nexthop_default_vrf/test_bgp_vpn_import_nexthop_default_vrf.py
index b3fd26984c..4db4a700fc 100644
--- a/tests/topotests/bgp_vpn_import_nexthop_default_vrf/test_bgp_vpn_import_nexthop_default_vrf.py
+++ b/tests/topotests/bgp_vpn_import_nexthop_default_vrf/test_bgp_vpn_import_nexthop_default_vrf.py
@@ -18,6 +18,7 @@ sys.path.append(os.path.join(CWD, "../"))
# pylint: disable=C0413
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
+from lib.common_config import shutdown_bringup_interface_in_kernel
pytestmark = [pytest.mark.bgpd]
@@ -45,11 +46,11 @@ def setup_module(mod):
r2 = tgen.gears["r2"]
r1.run("ip link add CUSTOMER-A type vrf table 1001")
- r1.run("ip link set up dev CUSTOMER-A")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "CUSTOMER-A", True)
r1.run("ip link set r1-eth1 master CUSTOMER-A")
r2.run("ip link add CUSTOMER-A type vrf table 1001")
- r2.run("ip link set up dev CUSTOMER-A")
+ shutdown_bringup_interface_in_kernel(r2.tgen, r2.name, "CUSTOMER-A", True)
r2.run("ip link set r2-eth1 master CUSTOMER-A")
router_list = tgen.routers()
diff --git a/tests/topotests/bgp_vpnv4_asbr/test_bgp_vpnv4_asbr.py b/tests/topotests/bgp_vpnv4_asbr/test_bgp_vpnv4_asbr.py
index fb1868c46e..83dc4cef24 100644
--- a/tests/topotests/bgp_vpnv4_asbr/test_bgp_vpnv4_asbr.py
+++ b/tests/topotests/bgp_vpnv4_asbr/test_bgp_vpnv4_asbr.py
@@ -58,7 +58,10 @@ from lib.bgpcheck import (
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
from lib.checkping import check_ping
-from lib.common_config import retry
+from lib.common_config import (
+ retry,
+ shutdown_bringup_interface_in_kernel,
+)
# Required to instantiate the topology builder class.
@@ -111,16 +114,21 @@ def _populate_iface():
cmds_list = [
"ip link add vrf1 type vrf table 10",
"echo 100000 > /proc/sys/net/mpls/platform_labels",
- "ip link set dev vrf1 up",
+ ("up", "vrf1"),
"ip link set dev {0}-eth1 master vrf1",
"echo 1 > /proc/sys/net/mpls/conf/{0}-eth0/input",
]
for rname in ("r1", "r3"):
for cmd in cmds_list:
- input = cmd.format(rname)
+ if isinstance(cmd, tuple):
+ shutdown_bringup_interface_in_kernel(
+ tgen, rname, cmd[1].format(rname), cmd[0] == "up"
+ )
+ continue
+ formatted = cmd.format(rname)
logger.info("input: " + cmd)
- output = tgen.net[rname].cmd(cmd.format(rname))
+ output = tgen.net[rname].cmd(formatted)
logger.info("output: " + output)
cmds_list = [
diff --git a/tests/topotests/bgp_vpnv4_ebgp/test_bgp_vpnv4_ebgp.py b/tests/topotests/bgp_vpnv4_ebgp/test_bgp_vpnv4_ebgp.py
index ac88be9076..c212404b7b 100644
--- a/tests/topotests/bgp_vpnv4_ebgp/test_bgp_vpnv4_ebgp.py
+++ b/tests/topotests/bgp_vpnv4_ebgp/test_bgp_vpnv4_ebgp.py
@@ -31,6 +31,7 @@ from lib.bgpcheck import (
)
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
+from lib.common_config import shutdown_bringup_interface_in_kernel
# Required to instantiate the topology builder class.
@@ -68,28 +69,22 @@ def _populate_iface():
cmds_list = [
"ip link add vrf1 type vrf table 10",
"echo 100000 > /proc/sys/net/mpls/platform_labels",
- "ip link set dev vrf1 up",
+ ("up", "vrf1"),
"ip link set dev {0}-eth1 master vrf1",
"echo 1 > /proc/sys/net/mpls/conf/{0}-eth0/input",
]
- for cmd in cmds_list:
- input = cmd.format("r1")
- logger.info("input: " + cmd)
- output = tgen.net["r1"].cmd(cmd.format("r1"))
- logger.info("output: " + output)
-
- for cmd in cmds_list:
- input = cmd.format("r2")
- logger.info("input: " + cmd)
- output = tgen.net["r2"].cmd(cmd.format("r2"))
- logger.info("output: " + output)
-
- for cmd in cmds_list:
- input = cmd.format("r3")
- logger.info("input: " + cmd)
- output = tgen.net["r3"].cmd(cmd.format("r3"))
- logger.info("output: " + output)
+ for rname in ("r1", "r2", "r3"):
+ for cmd in cmds_list:
+ if isinstance(cmd, tuple):
+ shutdown_bringup_interface_in_kernel(
+ tgen, rname, cmd[1].format(rname), cmd[0] == "up"
+ )
+ continue
+ formatted = cmd.format(rname)
+ logger.info("input: " + cmd)
+ output = tgen.net[rname].cmd(formatted)
+ logger.info("output: " + output)
def setup_module(mod):
diff --git a/tests/topotests/bgp_vpnv4_ebgp_vpn_auto/test_bgp_vpnv4_vpn_auto.py b/tests/topotests/bgp_vpnv4_ebgp_vpn_auto/test_bgp_vpnv4_vpn_auto.py
index e8d3081219..5141710860 100644
--- a/tests/topotests/bgp_vpnv4_ebgp_vpn_auto/test_bgp_vpnv4_vpn_auto.py
+++ b/tests/topotests/bgp_vpnv4_ebgp_vpn_auto/test_bgp_vpnv4_vpn_auto.py
@@ -30,6 +30,7 @@ from lib.bgpcheck import (
)
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
+from lib.common_config import shutdown_bringup_interface_in_kernel
# Required to instantiate the topology builder class.
@@ -66,29 +67,29 @@ def _populate_iface():
tgen = get_topogen()
cmds_list = [
"ip link add vrf{} type vrf table {}",
- "ip link set dev vrf{} up",
+ ("up", "vrf{}"),
"ip link set dev r1-eth{} master vrf{}",
"echo 1 > /proc/sys/net/mpls/conf/r1-eth{}/input",
]
cmds_list2 = [
"ip link add vrf{} type vrf table {}",
- "ip link set dev vrf{} up",
+ ("up", "vrf{}"),
"ip link set dev r2-eth{} master vrf{}",
"echo 1 > /proc/sys/net/mpls/conf/r2-eth{}/input",
]
for i in range(1, 6):
- for cmd in cmds_list:
- input = cmd.format(i, i)
- logger.info("input: " + cmd)
- output = tgen.net["r1"].cmd(cmd.format(i, i))
- logger.info("output: " + output)
-
- for cmd in cmds_list2:
- input = cmd.format(i, i)
- logger.info("input: " + cmd)
- output = tgen.net["r2"].cmd(cmd.format(i, i))
- logger.info("output: " + output)
+ for rname, cmds in (("r1", cmds_list), ("r2", cmds_list2)):
+ for cmd in cmds:
+ if isinstance(cmd, tuple):
+ shutdown_bringup_interface_in_kernel(
+ tgen, rname, cmd[1].format(i, i), cmd[0] == "up"
+ )
+ continue
+ formatted = cmd.format(i, i)
+ logger.info("input: " + cmd)
+ output = tgen.net[rname].cmd(formatted)
+ logger.info("output: " + output)
def setup_module(mod):
"Sets up the pytest environment"
diff --git a/tests/topotests/bgp_vpnv4_gr_stale/test_bgp_vpnv4_gr_stale.py b/tests/topotests/bgp_vpnv4_gr_stale/test_bgp_vpnv4_gr_stale.py
index 08c24ee7b1..fe78645d2f 100644
--- a/tests/topotests/bgp_vpnv4_gr_stale/test_bgp_vpnv4_gr_stale.py
+++ b/tests/topotests/bgp_vpnv4_gr_stale/test_bgp_vpnv4_gr_stale.py
@@ -26,7 +26,7 @@ sys.path.append(os.path.join(CWD, "../"))
# pylint: disable=C0413
from lib import topotest
from lib.topogen import Topogen, get_topogen
-from lib.common_config import step
+from lib.common_config import step, shutdown_bringup_interface_in_kernel
pytestmark = [pytest.mark.bgpd]
@@ -59,7 +59,7 @@ def setup_module(mod):
r1 = tgen.gears["r1"]
r1.cmd_raises("ip link add vrf1 type vrf table 10")
- r1.cmd_raises("ip link set dev vrf1 up")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "vrf1", True)
r1.load_frr_config(os.path.join(CWD, "r1/frr.conf"))
tgen.start_router()
diff --git a/tests/topotests/bgp_vpnv4_gre/test_bgp_vpnv4_gre.py b/tests/topotests/bgp_vpnv4_gre/test_bgp_vpnv4_gre.py
index 8847b26a0e..a8a9b0e6e4 100644
--- a/tests/topotests/bgp_vpnv4_gre/test_bgp_vpnv4_gre.py
+++ b/tests/topotests/bgp_vpnv4_gre/test_bgp_vpnv4_gre.py
@@ -29,7 +29,7 @@ sys.path.append(os.path.join(CWD, "../"))
# Import topogen and topotest helpers
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
-from lib.common_config import retry
+from lib.common_config import retry, shutdown_bringup_interface_in_kernel
from lib.topolog import logger
# Required to instantiate the topology builder class.
@@ -71,25 +71,28 @@ def _populate_iface(mod):
cmds_list = [
"ip link add vrf1 type vrf table 10",
"echo 10 > /proc/sys/net/mpls/platform_labels",
- "ip link set dev vrf1 up",
+ ("up", "vrf1"),
"ip link set dev {0}-eth1 master vrf1",
"echo 1 > /proc/sys/net/mpls/conf/{0}-eth0/input",
"ip link add {0}-gre0 type {3} ttl 64 dev {0}-eth0 local 10.125.0.{1} remote 10.125.0.{2}",
- "ip link set dev {0}-gre0 up",
+ ("up", "{0}-gre0"),
"echo 1 > /proc/sys/net/mpls/conf/{0}-gre0/input",
]
- for cmd in cmds_list:
- input = cmd.format("r1", "1", "2", TUNNEL_TYPE)
- logger.info("input: " + input)
- output = tgen.net["r1"].cmd(cmd.format("r1", "1", "2", TUNNEL_TYPE))
- logger.info("output: " + output)
-
- for cmd in cmds_list:
- input = cmd.format("r2", "2", "1", TUNNEL_TYPE)
- logger.info("input: " + input)
- output = tgen.net["r2"].cmd(cmd.format("r2", "2", "1", TUNNEL_TYPE))
- logger.info("output: " + output)
+ for rname, local, remote in (("r1", "1", "2"), ("r2", "2", "1")):
+ for cmd in cmds_list:
+ if isinstance(cmd, tuple):
+ shutdown_bringup_interface_in_kernel(
+ tgen,
+ rname,
+ cmd[1].format(rname, local, remote, TUNNEL_TYPE),
+ cmd[0] == "up",
+ )
+ continue
+ formatted = cmd.format(rname, local, remote, TUNNEL_TYPE)
+ logger.info("input: " + formatted)
+ output = tgen.net[rname].cmd(formatted)
+ logger.info("output: " + output)
def setup_module(mod):
diff --git a/tests/topotests/bgp_vpnv4_import_allowas_in/test_bgp_vpnv4_import_allowas_in.py b/tests/topotests/bgp_vpnv4_import_allowas_in/test_bgp_vpnv4_import_allowas_in.py
index 10b7b1a82f..fcf72a76dd 100644
--- a/tests/topotests/bgp_vpnv4_import_allowas_in/test_bgp_vpnv4_import_allowas_in.py
+++ b/tests/topotests/bgp_vpnv4_import_allowas_in/test_bgp_vpnv4_import_allowas_in.py
@@ -18,6 +18,7 @@ sys.path.append(os.path.join(CWD, "../"))
# pylint: disable=C0413
from lib import topotest
from lib.topogen import Topogen, get_topogen
+from lib.common_config import shutdown_bringup_interface_in_kernel
pytestmark = [pytest.mark.bgpd]
@@ -45,11 +46,11 @@ def setup_module(mod):
r2 = tgen.gears["r2"]
r1.run("ip link add CUSTOMER-A type vrf table 1001")
- r1.run("ip link set up dev CUSTOMER-A")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "CUSTOMER-A", True)
r1.run("ip link set r1-eth1 master CUSTOMER-A")
r2.run("ip link add CUSTOMER-A type vrf table 1001")
- r2.run("ip link set up dev CUSTOMER-A")
+ shutdown_bringup_interface_in_kernel(r2.tgen, r2.name, "CUSTOMER-A", True)
r2.run("ip link set r2-eth1 master CUSTOMER-A")
router_list = tgen.routers()
diff --git a/tests/topotests/bgp_vpnv4_import_allowas_in_between_vrf/test_bgp_vpnv4_import_allowas_in_between_vrf.py b/tests/topotests/bgp_vpnv4_import_allowas_in_between_vrf/test_bgp_vpnv4_import_allowas_in_between_vrf.py
index 94502517a8..2023aab258 100644
--- a/tests/topotests/bgp_vpnv4_import_allowas_in_between_vrf/test_bgp_vpnv4_import_allowas_in_between_vrf.py
+++ b/tests/topotests/bgp_vpnv4_import_allowas_in_between_vrf/test_bgp_vpnv4_import_allowas_in_between_vrf.py
@@ -18,6 +18,7 @@ sys.path.append(os.path.join(CWD, "../"))
# pylint: disable=C0413
from lib import topotest
from lib.topogen import Topogen, get_topogen
+from lib.common_config import shutdown_bringup_interface_in_kernel
pytestmark = [pytest.mark.bgpd]
@@ -45,19 +46,19 @@ def setup_module(mod):
r2 = tgen.gears["r2"]
r1.run("ip link add CUSTOMER-A type vrf table 1001")
- r1.run("ip link set up dev CUSTOMER-A")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "CUSTOMER-A", True)
r1.run("ip link set r1-eth0 master CUSTOMER-A")
r1.run("ip link add CUSTOMER-B type vrf table 1002")
- r1.run("ip link set up dev CUSTOMER-B")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "CUSTOMER-B", True)
r1.run("ip link set r1-eth1 master CUSTOMER-B")
r2.run("ip link add CUSTOMER-A type vrf table 1001")
- r2.run("ip link set up dev CUSTOMER-A")
+ shutdown_bringup_interface_in_kernel(r2.tgen, r2.name, "CUSTOMER-A", True)
r2.run("ip link set r2-eth0 master CUSTOMER-A")
r2.run("ip link add CUSTOMER-B type vrf table 1002")
- r2.run("ip link set up dev CUSTOMER-B")
+ shutdown_bringup_interface_in_kernel(r2.tgen, r2.name, "CUSTOMER-B", True)
r2.run("ip link set r2-eth1 master CUSTOMER-B")
router_list = tgen.routers()
diff --git a/tests/topotests/bgp_vpnv4_noretain/test_bgp_vpnv4_noretain.py b/tests/topotests/bgp_vpnv4_noretain/test_bgp_vpnv4_noretain.py
index 28cd6789d0..7c4df9669c 100644
--- a/tests/topotests/bgp_vpnv4_noretain/test_bgp_vpnv4_noretain.py
+++ b/tests/topotests/bgp_vpnv4_noretain/test_bgp_vpnv4_noretain.py
@@ -29,6 +29,7 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
+from lib.common_config import shutdown_bringup_interface_in_kernel
# Required to instantiate the topology builder class.
@@ -74,34 +75,37 @@ def _populate_iface():
"modprobe mpls_router",
"echo 100000 > /proc/sys/net/mpls/platform_labels",
"ip link add vrf1 type vrf table 10",
- "ip link set dev vrf1 up",
+ ("up", "vrf1"),
"ip link set dev {0}-eth1 master vrf1",
"echo 1 > /proc/sys/net/mpls/conf/vrf1/input",
"ip link add vrf2 type vrf table 20",
- "ip link set dev vrf2 up",
+ ("up", "vrf2"),
"ip link set dev {0}-eth2 master vrf2",
"echo 1 > /proc/sys/net/mpls/conf/vrf2/input",
"ip link add vrf3 type vrf table 30",
- "ip link set dev vrf3 up",
+ ("up", "vrf3"),
"ip link set dev {0}-eth3 master vrf3",
"echo 1 > /proc/sys/net/mpls/conf/vrf3/input",
"ip link add vrf4 type vrf table 40",
- "ip link set dev vrf4 up",
+ ("up", "vrf4"),
"ip link set dev {0}-eth4 master vrf4",
"echo 1 > /proc/sys/net/mpls/conf/vrf4/input",
]
- for cmd in cmds_list:
- input = cmd.format("r1", "1", "2")
- logger.info("input: " + cmd)
- output = tgen.net["r1"].cmd(cmd.format("r1", "1", "2"))
- logger.info("output: " + output)
-
- for cmd in cmds_list:
- input = cmd.format("r2", "2", "1")
- logger.info("input: " + cmd)
- output = tgen.net["r2"].cmd(cmd.format("r2", "2", "1"))
- logger.info("output: " + output)
+ for rname, local, remote in (("r1", "1", "2"), ("r2", "2", "1")):
+ for cmd in cmds_list:
+ if isinstance(cmd, tuple):
+ shutdown_bringup_interface_in_kernel(
+ tgen,
+ rname,
+ cmd[1].format(rname, local, remote),
+ cmd[0] == "up",
+ )
+ continue
+ formatted = cmd.format(rname, local, remote)
+ logger.info("input: " + cmd)
+ output = tgen.net[rname].cmd(formatted)
+ logger.info("output: " + output)
def setup_module(mod):
diff --git a/tests/topotests/bgp_vpnv4_per_nexthop_label/test_bgp_vpnv4_per_nexthop_label.py b/tests/topotests/bgp_vpnv4_per_nexthop_label/test_bgp_vpnv4_per_nexthop_label.py
index 76a3af26be..66119589a3 100644
--- a/tests/topotests/bgp_vpnv4_per_nexthop_label/test_bgp_vpnv4_per_nexthop_label.py
+++ b/tests/topotests/bgp_vpnv4_per_nexthop_label/test_bgp_vpnv4_per_nexthop_label.py
@@ -47,6 +47,7 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
+from lib.common_config import shutdown_bringup_interface_in_kernel
pytestmark = [pytest.mark.bgpd]
@@ -97,7 +98,7 @@ def _populate_iface():
cmds_list = [
"ip link add vrf1 type vrf table 10",
"echo 100000 > /proc/sys/net/mpls/platform_labels",
- "ip link set dev vrf1 up",
+ ("up", "vrf1"),
"ip link set dev {0}-eth1 master vrf1",
"echo 1 > /proc/sys/net/mpls/conf/{0}-eth0/input",
]
@@ -106,9 +107,14 @@ def _populate_iface():
]
for cmd in cmds_list:
- input = cmd.format("r1")
+ if isinstance(cmd, tuple):
+ shutdown_bringup_interface_in_kernel(
+ tgen, "r1", cmd[1].format("r1"), cmd[0] == "up"
+ )
+ continue
+ formatted = cmd.format("r1")
logger.info("input: " + cmd)
- output = tgen.net["r1"].cmd(cmd.format("r1"))
+ output = tgen.net["r1"].cmd(formatted)
logger.info("output: " + output)
for cmd in cmds_list_plus:
@@ -118,9 +124,14 @@ def _populate_iface():
logger.info("output: " + output)
for cmd in cmds_list:
- input = cmd.format("r2")
+ if isinstance(cmd, tuple):
+ shutdown_bringup_interface_in_kernel(
+ tgen, "r2", cmd[1].format("r2"), cmd[0] == "up"
+ )
+ continue
+ formatted = cmd.format("r2")
logger.info("input: " + cmd)
- output = tgen.net["r2"].cmd(cmd.format("r2"))
+ output = tgen.net["r2"].cmd(formatted)
logger.info("output: " + output)
diff --git a/tests/topotests/bgp_vpnv6_per_nexthop_label/test_bgp_vpnv6_per_nexthop_label.py b/tests/topotests/bgp_vpnv6_per_nexthop_label/test_bgp_vpnv6_per_nexthop_label.py
index 8c24656f5d..1c4daf2fa0 100644
--- a/tests/topotests/bgp_vpnv6_per_nexthop_label/test_bgp_vpnv6_per_nexthop_label.py
+++ b/tests/topotests/bgp_vpnv6_per_nexthop_label/test_bgp_vpnv6_per_nexthop_label.py
@@ -47,6 +47,7 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
+from lib.common_config import shutdown_bringup_interface_in_kernel
pytestmark = [pytest.mark.bgpd]
@@ -96,7 +97,7 @@ def _populate_iface():
cmds_list = [
"ip link add vrf1 type vrf table 10",
"echo 100000 > /proc/sys/net/mpls/platform_labels",
- "ip link set dev vrf1 up",
+ ("up", "vrf1"),
"ip link set dev {0}-eth1 master vrf1",
"echo 1 > /proc/sys/net/mpls/conf/{0}-eth0/input",
]
@@ -105,9 +106,14 @@ def _populate_iface():
]
for cmd in cmds_list:
- input = cmd.format("r1")
+ if isinstance(cmd, tuple):
+ shutdown_bringup_interface_in_kernel(
+ tgen, "r1", cmd[1].format("r1"), cmd[0] == "up"
+ )
+ continue
+ formatted = cmd.format("r1")
logger.info("input: " + cmd)
- output = tgen.net["r1"].cmd(cmd.format("r1"))
+ output = tgen.net["r1"].cmd(formatted)
logger.info("output: " + output)
for cmd in cmds_list_plus:
@@ -117,9 +123,14 @@ def _populate_iface():
logger.info("output: " + output)
for cmd in cmds_list:
- input = cmd.format("r2")
+ if isinstance(cmd, tuple):
+ shutdown_bringup_interface_in_kernel(
+ tgen, "r2", cmd[1].format("r2"), cmd[0] == "up"
+ )
+ continue
+ formatted = cmd.format("r2")
logger.info("input: " + cmd)
- output = tgen.net["r2"].cmd(cmd.format("r2"))
+ output = tgen.net["r2"].cmd(formatted)
logger.info("output: " + output)
diff --git a/tests/topotests/bgp_vrf_different_asn/test_bgp_vrf_different_asn.py b/tests/topotests/bgp_vrf_different_asn/test_bgp_vrf_different_asn.py
index cb895b100c..3ddf574a33 100644
--- a/tests/topotests/bgp_vrf_different_asn/test_bgp_vrf_different_asn.py
+++ b/tests/topotests/bgp_vrf_different_asn/test_bgp_vrf_different_asn.py
@@ -18,6 +18,7 @@ sys.path.append(os.path.join(CWD, "../"))
# pylint: disable=C0413
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
+from lib.common_config import shutdown_bringup_interface_in_kernel
pytestmark = [pytest.mark.bgpd]
@@ -36,7 +37,7 @@ def setup_module(mod):
r1 = tgen.gears["r1"]
r1.run("ip link add vrf100 type vrf table 1001")
- r1.run("ip link set up dev vrf100")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "vrf100", True)
r1.run("ip link set r1-eth0 master vrf100")
router_list = tgen.routers()
diff --git a/tests/topotests/bgp_vrf_dynamic_md5_listen_late/test_bgp_vrf_dynamic_md5_listen_late.py b/tests/topotests/bgp_vrf_dynamic_md5_listen_late/test_bgp_vrf_dynamic_md5_listen_late.py
index 26854f5b19..2b334e32cc 100644
--- a/tests/topotests/bgp_vrf_dynamic_md5_listen_late/test_bgp_vrf_dynamic_md5_listen_late.py
+++ b/tests/topotests/bgp_vrf_dynamic_md5_listen_late/test_bgp_vrf_dynamic_md5_listen_late.py
@@ -35,6 +35,7 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.checkping import check_ping
from lib.topogen import Topogen, get_topogen
+from lib.common_config import shutdown_bringup_interface_in_kernel
pytestmark = [pytest.mark.bgpd]
@@ -178,17 +179,17 @@ def setup_module(mod):
s3 = tgen.gears["switch3"]
s1.cmd_raises("ip link add {} type vrf table {}".format(VRF_NAME, VRF_TABLE_S1))
- s1.cmd_raises("ip link set up dev {}".format(VRF_NAME))
+ shutdown_bringup_interface_in_kernel(s1.tgen, s1.name, VRF_NAME, True)
s1.cmd_raises("ip link set switch1-eth0 master {}".format(VRF_NAME))
- s1.cmd_raises("ip link set up dev switch1-eth0")
- s1.cmd_raises("ip link set up dev switch1-eth1")
+ shutdown_bringup_interface_in_kernel(s1.tgen, s1.name, "switch1-eth0", True)
+ shutdown_bringup_interface_in_kernel(s1.tgen, s1.name, "switch1-eth1", True)
s2.cmd_raises("ip link add {} type vrf table {}".format(VRF_NAME, VRF_TABLE_S2))
- s2.cmd_raises("ip link set up dev {}".format(VRF_NAME))
+ shutdown_bringup_interface_in_kernel(s2.tgen, s2.name, VRF_NAME, True)
s2.cmd_raises("ip link set switch2-eth0 master {}".format(VRF_NAME))
- s2.cmd_raises("ip link set up dev switch2-eth0")
+ shutdown_bringup_interface_in_kernel(s2.tgen, s2.name, "switch2-eth0", True)
- s3.cmd_raises("ip link set up dev switch3-eth0")
+ shutdown_bringup_interface_in_kernel(s3.tgen, s3.name, "switch3-eth0", True)
for r in (s1, s2, s3):
r.cmd_raises("sysctl -w net.ipv4.tcp_l3mdev_accept=1")
diff --git a/tests/topotests/bgp_vrf_import_route_map/test_bgp_vrf_import_route_map.py b/tests/topotests/bgp_vrf_import_route_map/test_bgp_vrf_import_route_map.py
index d261c69e86..4b90b8d780 100644
--- a/tests/topotests/bgp_vrf_import_route_map/test_bgp_vrf_import_route_map.py
+++ b/tests/topotests/bgp_vrf_import_route_map/test_bgp_vrf_import_route_map.py
@@ -29,13 +29,14 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.common_config import (
- step,
apply_raw_config,
+ check_address_types,
create_interface_in_kernel,
create_route_maps,
- check_address_types,
- reset_config_on_routers,
required_linux_kernel_version,
+ reset_config_on_routers,
+ shutdown_bringup_interface_in_kernel,
+ step,
)
from lib.bgp import verify_bgp_rib
@@ -63,17 +64,17 @@ def setup_module(mod):
# Create VRFs in Linux namespace before loading configurations
r1 = tgen.gears["r1"]
r1.cmd_raises("ip link add vrf1 type vrf table 10")
- r1.cmd_raises("ip link set up dev vrf1")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "vrf1", True)
r1.cmd_raises("ip link add vrf2 type vrf table 20")
- r1.cmd_raises("ip link set up dev vrf2")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "vrf2", True)
create_interface_in_kernel(tgen, "r1", "r1-eth1", vrf="vrf1")
create_interface_in_kernel(tgen, "r1", "r1-eth2", vrf="vrf2")
r2 = tgen.gears["r2"]
r2.cmd_raises("ip link add vrf3 type vrf table 30")
- r2.cmd_raises("ip link set up dev vrf3")
+ shutdown_bringup_interface_in_kernel(r2.tgen, r2.name, "vrf3", True)
r2.cmd_raises("ip link add vrf4 type vrf table 40")
- r2.cmd_raises("ip link set up dev vrf4")
+ shutdown_bringup_interface_in_kernel(r2.tgen, r2.name, "vrf4", True)
create_interface_in_kernel(tgen, "r2", "r2-eth1", vrf="vrf3")
create_interface_in_kernel(tgen, "r2", "r2-eth2", vrf="vrf4")
diff --git a/tests/topotests/bgp_vrf_leaking_5549_routes/test_bgp_vrf_leaking.py b/tests/topotests/bgp_vrf_leaking_5549_routes/test_bgp_vrf_leaking.py
index c4ba43c2bd..67aa27870d 100755
--- a/tests/topotests/bgp_vrf_leaking_5549_routes/test_bgp_vrf_leaking.py
+++ b/tests/topotests/bgp_vrf_leaking_5549_routes/test_bgp_vrf_leaking.py
@@ -18,6 +18,7 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
+from lib.common_config import shutdown_bringup_interface_in_kernel
pytestmark = [pytest.mark.bgpd]
@@ -42,9 +43,19 @@ def setup_module(mod):
)
tgen.gears["pe1"].run("ip link add vrf10 type vrf table 10")
- tgen.gears["pe1"].run("ip link set vrf10 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['pe1'].tgen,
+ tgen.gears['pe1'].name,
+ "vrf10",
+ True,
+ )
tgen.gears["pe1"].run("ip link add vrf20 type vrf table 20")
- tgen.gears["pe1"].run("ip link set vrf20 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['pe1'].tgen,
+ tgen.gears['pe1'].name,
+ "vrf20",
+ True,
+ )
tgen.gears["pe1"].run("ip link set eth0 master vrf10")
tgen.start_router()
diff --git a/tests/topotests/bgp_vrf_leaking_rt_change_route_maps/test_bgp_vrf_leaking_rt_change_route_maps.py b/tests/topotests/bgp_vrf_leaking_rt_change_route_maps/test_bgp_vrf_leaking_rt_change_route_maps.py
index 42cbf1e33e..e010963d73 100644
--- a/tests/topotests/bgp_vrf_leaking_rt_change_route_maps/test_bgp_vrf_leaking_rt_change_route_maps.py
+++ b/tests/topotests/bgp_vrf_leaking_rt_change_route_maps/test_bgp_vrf_leaking_rt_change_route_maps.py
@@ -24,7 +24,7 @@ sys.path.append(os.path.join(CWD, "../"))
# pylint: disable=C0413
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
-from lib.common_config import step
+from lib.common_config import step, shutdown_bringup_interface_in_kernel
pytestmark = [pytest.mark.bgpd]
@@ -39,9 +39,9 @@ def setup_module(mod):
router = tgen.gears["r1"]
router.cmd_raises("ip link add vrf1 type vrf table 10")
- router.cmd_raises("ip link set up dev vrf1")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "vrf1", True)
router.cmd_raises("ip link add vrf2 type vrf table 20")
- router.cmd_raises("ip link set up dev vrf2")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "vrf2", True)
router.load_config(TopoRouter.RD_ZEBRA, os.path.join(CWD, "r1/zebra.conf"))
router.load_config(TopoRouter.RD_BGP, os.path.join(CWD, "r1/bgpd.conf"))
router.start()
diff --git a/tests/topotests/bgp_vrf_lite_ipv6_rtadv/test_bgp_vrf_lite_ipv6_rtadv.py b/tests/topotests/bgp_vrf_lite_ipv6_rtadv/test_bgp_vrf_lite_ipv6_rtadv.py
index 4c8408defd..e1895a9ab0 100644
--- a/tests/topotests/bgp_vrf_lite_ipv6_rtadv/test_bgp_vrf_lite_ipv6_rtadv.py
+++ b/tests/topotests/bgp_vrf_lite_ipv6_rtadv/test_bgp_vrf_lite_ipv6_rtadv.py
@@ -28,7 +28,11 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
-from lib.common_config import create_interface_in_kernel, required_linux_kernel_version
+from lib.common_config import (
+ create_interface_in_kernel,
+ required_linux_kernel_version,
+ shutdown_bringup_interface_in_kernel,
+)
# Required to instantiate the topology builder class.
@@ -64,12 +68,17 @@ def setup_module(mod):
cmds = [
"ip link add {0}-cust1 type vrf table 1001",
- "ip link set {0}-cust1 up",
+ ("up", "{0}-cust1"),
"ip link set {0}-eth0 master {0}-cust1",
]
for rname, router in router_list.items():
for cmd in cmds:
+ if isinstance(cmd, tuple):
+ shutdown_bringup_interface_in_kernel(
+ tgen, rname, cmd[1].format(rname), cmd[0] == "up"
+ )
+ continue
output = tgen.net[rname].cmd(cmd.format(rname))
create_interface_in_kernel(
tgen, rname, "loop1", vrf="{}-cust1".format(rname)
diff --git a/tests/topotests/bgp_vrf_md5_peering/test_bgp_vrf_md5_peering.py b/tests/topotests/bgp_vrf_md5_peering/test_bgp_vrf_md5_peering.py
index 8d425cc037..8c83cb85a0 100644
--- a/tests/topotests/bgp_vrf_md5_peering/test_bgp_vrf_md5_peering.py
+++ b/tests/topotests/bgp_vrf_md5_peering/test_bgp_vrf_md5_peering.py
@@ -22,6 +22,7 @@ sys.path.append(os.path.join(CWD, "../"))
# pylint: disable=C0413
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
+from lib.common_config import shutdown_bringup_interface_in_kernel
pytestmark = [pytest.mark.bgpd]
@@ -43,7 +44,7 @@ def setup_module(mod):
# VRF 'public'
r1.cmd_raises("ip link add public type vrf table 1001")
- r1.cmd_raises("ip link set up dev public")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "public", True)
r1.cmd_raises("ip link set r1-eth0 master public")
r1.load_config(TopoRouter.RD_ZEBRA, os.path.join(CWD, "r1/zebra.conf"))
diff --git a/tests/topotests/bgp_vrf_rt_rid_change/test_bgp_vrf_rt_rid_change.py b/tests/topotests/bgp_vrf_rt_rid_change/test_bgp_vrf_rt_rid_change.py
index bb2ee182bb..921d9738dd 100644
--- a/tests/topotests/bgp_vrf_rt_rid_change/test_bgp_vrf_rt_rid_change.py
+++ b/tests/topotests/bgp_vrf_rt_rid_change/test_bgp_vrf_rt_rid_change.py
@@ -14,7 +14,7 @@ sys.path.append(os.path.join(CWD, "../"))
# pylint: disable=C0413
from lib import topotest
-from lib.common_config import step
+from lib.common_config import step, shutdown_bringup_interface_in_kernel
from lib.topogen import Topogen, get_topogen
pytestmark = [pytest.mark.bgpd]
@@ -32,9 +32,9 @@ def setup_module(mod):
router = tgen.gears["r1"]
router.cmd_raises("ip link add RED type vrf table 10")
- router.cmd_raises("ip link set RED up")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "RED", True)
router.cmd_raises("ip link add BLUE type vrf table 20")
- router.cmd_raises("ip link set BLUE up")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "BLUE", True)
router.load_frr_config()
tgen.start_router()
diff --git a/tests/topotests/bgp_wcmp_zebra_link_bandwidth/test_bgp_wcmp_zebra_link_bandwidth.py b/tests/topotests/bgp_wcmp_zebra_link_bandwidth/test_bgp_wcmp_zebra_link_bandwidth.py
index e3ad898328..d151d5f6e0 100644
--- a/tests/topotests/bgp_wcmp_zebra_link_bandwidth/test_bgp_wcmp_zebra_link_bandwidth.py
+++ b/tests/topotests/bgp_wcmp_zebra_link_bandwidth/test_bgp_wcmp_zebra_link_bandwidth.py
@@ -18,6 +18,7 @@ sys.path.append(os.path.join(CWD, "../"))
# pylint: disable=C0413
from lib import topotest
from lib.topogen import Topogen, get_topogen
+from lib.common_config import shutdown_bringup_interface_in_kernel
pytestmark = [pytest.mark.bgpd]
@@ -37,11 +38,11 @@ def setup_module(mod):
r1 = tgen.gears["r1"]
r1.cmd_raises("ip link add main type vrf table 666")
- r1.cmd_raises("ip link set up dev main")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "main", True)
r1.cmd_raises("ip link add red type vrf table 100")
- r1.cmd_raises("ip link set up dev red")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "red", True)
r1.cmd_raises("ip link add blue type vrf table 200")
- r1.cmd_raises("ip link set up dev blue")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "blue", True)
r1.cmd_raises("ip link set dev r1-eth0 vrf red")
r1.cmd_raises("ip link set dev r1-eth1 vrf blue")
diff --git a/tests/topotests/eigrp_topo1/test_eigrp_topo1.py b/tests/topotests/eigrp_topo1/test_eigrp_topo1.py
index 7ab1572dae..9fa03622b4 100644
--- a/tests/topotests/eigrp_topo1/test_eigrp_topo1.py
+++ b/tests/topotests/eigrp_topo1/test_eigrp_topo1.py
@@ -31,6 +31,7 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
+from lib.common_config import shutdown_bringup_interface_in_kernel
# Required to instantiate the topology builder class.
@@ -160,9 +161,9 @@ def test_shut_interface_and_recover():
tgen = get_topogen()
router = tgen.gears["r1"]
- router.run("ip link set r1-eth1 down")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "r1-eth1", False)
topotest.sleep(5, "Waiting for EIGRP convergence")
- router.run("ip link set r1-eth1 up")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "r1-eth1", True)
def test_shutdown_check_stderr():
diff --git a/tests/topotests/evpn_pim_1/test_evpn_pim_topo1.py b/tests/topotests/evpn_pim_1/test_evpn_pim_topo1.py
index 5779741758..5136473810 100644
--- a/tests/topotests/evpn_pim_1/test_evpn_pim_topo1.py
+++ b/tests/topotests/evpn_pim_1/test_evpn_pim_topo1.py
@@ -31,6 +31,7 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
+from lib.common_config import shutdown_bringup_interface_in_kernel
#####################################################
@@ -87,8 +88,8 @@ def setup_module(module):
leaf1.run("brctl addbr brleaf1")
leaf2.run("brctl addbr brleaf2")
- leaf1.run("ip link set dev brleaf1 up")
- leaf2.run("ip link set dev brleaf2 up")
+ shutdown_bringup_interface_in_kernel(leaf1.tgen, leaf1.name, "brleaf1", True)
+ shutdown_bringup_interface_in_kernel(leaf2.tgen, leaf2.name, "brleaf2", True)
leaf1.run(
"ip link add vxlan0 type vxlan id 42 group 239.1.1.1 dev leaf1-eth1 dstport 4789"
)
@@ -97,8 +98,8 @@ def setup_module(module):
)
leaf1.run("brctl addif brleaf1 vxlan0")
leaf2.run("brctl addif brleaf2 vxlan0")
- leaf1.run("ip link set up dev vxlan0")
- leaf2.run("ip link set up dev vxlan0")
+ shutdown_bringup_interface_in_kernel(leaf1.tgen, leaf1.name, "vxlan0", True)
+ shutdown_bringup_interface_in_kernel(leaf2.tgen, leaf2.name, "vxlan0", True)
# tgen.mininet_cli()
# This is a sample of configuration loading.
router_list = tgen.routers()
diff --git a/tests/topotests/frr_reload_vrf/dataplane_lib.py b/tests/topotests/frr_reload_vrf/dataplane_lib.py
index 18cf082772..3e4e5c11fb 100644
--- a/tests/topotests/frr_reload_vrf/dataplane_lib.py
+++ b/tests/topotests/frr_reload_vrf/dataplane_lib.py
@@ -166,15 +166,15 @@ def plumb_pe(node, num_vrfs, num_mcast_vrfs):
vrf = vrf_name(v)
cmds += [
"ip link add {} type vrf table {}".format(vrf, vrf_table(v)),
- "ip link set dev {} up".format(vrf),
+ ("up", vrf),
"ip link add brl3{} type bridge".format(v),
"ip link set dev brl3{} master {}".format(v, vrf),
- "ip link set dev brl3{} up".format(v),
+ ("up", "brl3{}".format(v)),
"ip link add vxl3{} type vxlan id {} dstport 4789 local {} nolearning".format(
v, l3vni(v), lo
),
"ip link set dev vxl3{} master brl3{}".format(v, v),
- "ip link set dev vxl3{} up".format(v),
+ ("up", "vxl3{}".format(v)),
# Enslave the tenant access iface to the vrf and bring it up. Its
# IPv4 address is assigned via the zebra config (interface stanza),
# NOT here: a raw "ip addr add" on a munet-managed veth does not
@@ -183,14 +183,14 @@ def plumb_pe(node, num_vrfs, num_mcast_vrfs):
# with. Dummy interfaces (loop-rp) are unaffected but are handled the
# same way for consistency.
"ip link set dev {}-eth{} master {}".format(node, access_ifidx(v), vrf),
- "ip link set dev {}-eth{} up".format(node, access_ifidx(v)),
+ ("up", "{}-eth{}".format(node, access_ifidx(v))),
]
if node == MCAST_PE and v <= num_mcast_vrfs:
rxidx = rx_ifidx(num_vrfs, v)
cmds += [
# receiver access iface in the vrf (address via zebra config)
"ip link set dev {}-eth{} master {}".format(node, rxidx, vrf),
- "ip link set dev {}-eth{} up".format(node, rxidx),
+ ("up", "{}-eth{}".format(node, rxidx)),
]
return cmds
@@ -199,7 +199,7 @@ def plumb_host(node, pe, v, rx=False):
gw = rx_gw(v) if rx else tenant_gw(pe, v)
ip = rx_host(v) if rx else tenant_host(pe, v)
return "{}/24".format(ip), [
- "ip link set dev {}-eth0 up".format(node),
+ ("up", "{}-eth0".format(node)),
"ip route add default via {}".format(gw),
]
diff --git a/tests/topotests/frr_reload_vrf/test_frr_reload_evpn_rt_import_scale.py b/tests/topotests/frr_reload_vrf/test_frr_reload_evpn_rt_import_scale.py
index fdf63774e1..1f14065bde 100644
--- a/tests/topotests/frr_reload_vrf/test_frr_reload_evpn_rt_import_scale.py
+++ b/tests/topotests/frr_reload_vrf/test_frr_reload_evpn_rt_import_scale.py
@@ -43,6 +43,7 @@ from lib import topotest
from lib.common_config import (
create_address_on_interface,
required_linux_kernel_version,
+ shutdown_bringup_interface_in_kernel,
step,
)
from lib.evpn import (
@@ -230,7 +231,12 @@ def tgen(request):
create_address_on_interface(
tg, name, "{}-eth0".format(name), "{}/24".format(ip)
)
- router.cmd_raises("ip link set dev {}-eth0 up".format(name))
+ shutdown_bringup_interface_in_kernel(
+ router.tgen,
+ router.name,
+ f"{name}-eth0",
+ True,
+ )
evpn_plumb_l3vni(router, VRF, VRF_TABLE, L3VNI, ip)
for name, lines in (("pe1", pe1_config()), ("pe2", pe2_config(False))):
diff --git a/tests/topotests/frr_reload_vrf/test_frr_reload_evpn_rt_scale.py b/tests/topotests/frr_reload_vrf/test_frr_reload_evpn_rt_scale.py
index fd49fa62f4..5670247e47 100644
--- a/tests/topotests/frr_reload_vrf/test_frr_reload_evpn_rt_scale.py
+++ b/tests/topotests/frr_reload_vrf/test_frr_reload_evpn_rt_scale.py
@@ -53,6 +53,7 @@ from lib.topotest import iproute2_is_vrf_capable
from lib.common_config import (
create_address_on_interface,
required_linux_kernel_version,
+ shutdown_bringup_interface_in_kernel,
)
import frr_reload_lib as f_reload
@@ -198,7 +199,7 @@ def tgen(request):
create_address_on_interface(tg, "r1", "lo", "{}/32".format(VTEP_IP))
evpn_plumb_l3vni(r1, VRF, VRF_TABLE, L3VNI, VTEP_IP)
r1.cmd_raises("ip link set dev r1-eth0 master {}".format(VRF))
- r1.cmd_raises("ip link set dev r1-eth0 up")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "r1-eth0", True)
# Start with Type-5 static routes and no import RTs so the test can add
# and then roll back the RT set through frr-reload.py --reload.
diff --git a/tests/topotests/frr_reload_vrf/test_frr_reload_vrf_dataplane.py b/tests/topotests/frr_reload_vrf/test_frr_reload_vrf_dataplane.py
index de178683dc..520c2e1247 100644
--- a/tests/topotests/frr_reload_vrf/test_frr_reload_vrf_dataplane.py
+++ b/tests/topotests/frr_reload_vrf/test_frr_reload_vrf_dataplane.py
@@ -49,6 +49,7 @@ from lib.common_config import (
create_address_on_interface,
create_interface_in_kernel,
required_linux_kernel_version,
+ shutdown_bringup_interface_in_kernel,
)
from lib.pim import McastTesterHelper
@@ -108,7 +109,7 @@ def tgen(request):
for pe in D.PES:
node = tg.gears[pe]
for cmd in D.plumb_pe(pe, NUM_VRFS, NUM_MCAST_VRFS):
- node.cmd_raises(cmd)
+ _run_plumb(node, cmd)
if pe == D.MCAST_PE:
for v in range(1, NUM_MCAST_VRFS + 1):
create_interface_in_kernel(
@@ -135,7 +136,7 @@ def tgen(request):
ip, cmds = D.plumb_host(hname, pe, v, rx=rx)
create_address_on_interface(tg, hname, "{}-eth0".format(hname), ip)
for cmd in cmds:
- tg.gears[hname].cmd_raises(cmd)
+ _run_plumb(tg.gears[hname], cmd)
yield tg
tg.stop_topology()
@@ -146,6 +147,15 @@ def tgen(request):
# ---------------------------------------------------------------------------
+def _run_plumb(node, cmd):
+ if isinstance(cmd, tuple):
+ shutdown_bringup_interface_in_kernel(
+ node.tgen, node.name, cmd[1], cmd[0] == "up"
+ )
+ return
+ node.cmd_raises(cmd)
+
+
def _skip_if_broken(tgen):
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
diff --git a/tests/topotests/high_ecmp/test_high_ecmp_unnumbered.py b/tests/topotests/high_ecmp/test_high_ecmp_unnumbered.py
index 708088c1cc..bfdb83996d 100644
--- a/tests/topotests/high_ecmp/test_high_ecmp_unnumbered.py
+++ b/tests/topotests/high_ecmp/test_high_ecmp_unnumbered.py
@@ -26,6 +26,7 @@ from time import sleep
from lib.common_config import (
kill_router_daemons,
+ shutdown_bringup_interface_in_kernel,
start_router_daemons,
)
@@ -198,10 +199,11 @@ def test_v6_rtadv():
logger.info("Remove r1-eth200")
existing_config = tgen.gears["r1"].vtysh_cmd("show interface r1-eth200")
- tgen.gears["r1"].cmd(
- """
- sudo ip link set dev r1-eth200 down
- """
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r1'].tgen,
+ tgen.gears['r1'].name,
+ "r1-eth200",
+ False,
)
# Verify interface is down after ip link set down
@@ -223,10 +225,11 @@ def test_v6_rtadv():
ra_sent_count1 == ra_sent_count2
), f"RA sent count changed from {ra_sent_count1} to {ra_sent_count2} within {ra_interval + 1} seconds while interface is down"
- tgen.gears["r1"].cmd(
- """
- sudo ip link set dev r1-eth200 up
- """
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r1'].tgen,
+ tgen.gears['r1'].name,
+ "r1-eth200",
+ True,
)
# Verify interface is up after ip link set up
@@ -360,7 +363,7 @@ def test_bgp_route_cleanup():
# Phase 1: Shutdown all interfaces
for interface in interfaces:
- net["r1"].cmd(f"ip link set {interface} down")
+ shutdown_bringup_interface_in_kernel(get_topogen(), 'r1', interface, False)
# Define test functions for route checking
def _check_ipv4_routes_removed():
@@ -399,7 +402,7 @@ def test_bgp_route_cleanup():
# Phase 2: Bring interfaces back up
for interface in interfaces:
- net["r1"].cmd(f"ip link set {interface} up")
+ shutdown_bringup_interface_in_kernel(get_topogen(), 'r1', interface, True)
# Define test functions for route restoration checking
def _check_ipv4_routes_restored():
@@ -463,7 +466,7 @@ def test_bgp_route_cleanup():
# Phase 1: Shutdown interfaces on r2
for interface in r2_interfaces:
- net["r2"].cmd(f"ip link set {interface} down")
+ shutdown_bringup_interface_in_kernel(get_topogen(), 'r2', interface, False)
# Wait for routes to be deleted (even with GR, routes should be deleted when interfaces go down)
test_func = functools.partial(_check_ipv4_routes_removed)
@@ -486,7 +489,7 @@ def test_bgp_route_cleanup():
# Phase 2: Bring r2 interfaces back up
for interface in r2_interfaces:
- net["r2"].cmd(f"ip link set {interface} up")
+ shutdown_bringup_interface_in_kernel(get_topogen(), 'r2', interface, True)
# Wait for route restoration
test_func = functools.partial(_check_ipv4_routes_restored)
diff --git a/tests/topotests/isis_lfa_topo1/test_isis_lfa_topo1.py b/tests/topotests/isis_lfa_topo1/test_isis_lfa_topo1.py
index c60e9ca16f..46f245bb20 100755
--- a/tests/topotests/isis_lfa_topo1/test_isis_lfa_topo1.py
+++ b/tests/topotests/isis_lfa_topo1/test_isis_lfa_topo1.py
@@ -54,6 +54,7 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
+from lib.common_config import shutdown_bringup_interface_in_kernel
# Required to instantiate the topology builder class.
@@ -644,7 +645,7 @@ def test_rib_ipv6_step15():
pytest.skip(tgen.errors)
logger.info("Shut the interface to rt2 from the switch side and check fast-reroute")
- tgen.net.cmd_raises("ip link set %s down" % tgen.net["s1"].intfs[0])
+ shutdown_bringup_interface_in_kernel(tgen, "s1", tgen.net["s1"].intfs[0], False)
for rname in ["rt1"]:
router_compare_json_output(
@@ -707,7 +708,7 @@ def test_rib_ipv6_step17():
logger.info(
"Unshut the interface to rt2 from the switch side and check fast-reroute"
)
- tgen.net.cmd_raises("ip link set %s up" % tgen.net["s1"].intfs[0])
+ shutdown_bringup_interface_in_kernel(tgen, "s1", tgen.net["s1"].intfs[0], True)
logger.info("Setting spf-delay-ietf init-delay of 15s")
tgen.net[rname].cmd(
@@ -815,7 +816,7 @@ def test_rib_ipv6_step18():
pytest.skip(tgen.errors)
logger.info("Drop traffic between rt1 and rt2")
- tgen.net.cmd_raises("ip link set s1 down")
+ shutdown_bringup_interface_in_kernel(tgen, "s1", "s1", False)
rname = "rt1"
router = tgen.gears[rname]
@@ -883,7 +884,7 @@ def test_rib_ipv6_step20():
logger.info(
"Unshut the interface to rt2 from the switch side and check fast-reroute"
)
- tgen.net.cmd_raises("ip link set s1 up")
+ shutdown_bringup_interface_in_kernel(tgen, "s1", "s1", True)
logger.info("Setting spf-delay-ietf init-delay of 15s")
tgen.net[rname].cmd(
@@ -1017,7 +1018,7 @@ def test_rib_ipv6_step24():
pytest.skip(tgen.errors)
logger.info("Shut the interface to rt2 from the switch side and check fast-reroute")
- tgen.net.cmd_raises("ip link set s1 down")
+ shutdown_bringup_interface_in_kernel(tgen, "s1", "s1", False)
rname = "rt1"
router = tgen.gears[rname]
diff --git a/tests/topotests/isis_sr_flex_algo_topo1/test_isis_sr_flex_algo_topo1.py b/tests/topotests/isis_sr_flex_algo_topo1/test_isis_sr_flex_algo_topo1.py
index 6838aa8a0e..4f123ae05f 100755
--- a/tests/topotests/isis_sr_flex_algo_topo1/test_isis_sr_flex_algo_topo1.py
+++ b/tests/topotests/isis_sr_flex_algo_topo1/test_isis_sr_flex_algo_topo1.py
@@ -49,6 +49,7 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
+from lib.common_config import shutdown_bringup_interface_in_kernel
pytestmark = [pytest.mark.isisd, pytest.mark.pathd]
@@ -67,13 +68,33 @@ def build_topo(tgen):
switch.add_link(tgen.gears[left], nodeif="eth-{}".format(right))
switch.add_link(tgen.gears[right], nodeif="eth-{}".format(left))
l_addr = "52:54:00:{}:{}:{}".format(left_idx, right_idx, left_idx)
- tgen.gears[left].run("ip link set eth-{} down".format(right))
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears[left].tgen,
+ tgen.gears[left].name,
+ f"eth-{right}",
+ False,
+ )
tgen.gears[left].run("ip link set eth-{} address {}".format(right, l_addr))
- tgen.gears[left].run("ip link set eth-{} up".format(right))
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears[left].tgen,
+ tgen.gears[left].name,
+ f"eth-{right}",
+ True,
+ )
r_addr = "52:54:00:{}:{}:{}".format(left_idx, right_idx, right_idx)
- tgen.gears[right].run("ip link set eth-{} down".format(left))
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears[right].tgen,
+ tgen.gears[right].name,
+ f"eth-{left}",
+ False,
+ )
tgen.gears[right].run("ip link set eth-{} address {}".format(left, r_addr))
- tgen.gears[right].run("ip link set eth-{} up".format(left))
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears[right].tgen,
+ tgen.gears[right].name,
+ f"eth-{left}",
+ True,
+ )
tgen.add_router("rt1")
tgen.add_router("rt2")
diff --git a/tests/topotests/isis_sr_flex_algo_topo2/test_isis_sr_flex_algo_topo2.py b/tests/topotests/isis_sr_flex_algo_topo2/test_isis_sr_flex_algo_topo2.py
index b3b3256cc2..e26929398c 100755
--- a/tests/topotests/isis_sr_flex_algo_topo2/test_isis_sr_flex_algo_topo2.py
+++ b/tests/topotests/isis_sr_flex_algo_topo2/test_isis_sr_flex_algo_topo2.py
@@ -56,7 +56,10 @@ sys.path.append(os.path.join(CWD, "../"))
# pylint: disable=C0413
# Import topogen and topotest helpers
from lib import topotest
-from lib.common_config import create_interface_in_kernel
+from lib.common_config import (
+ create_interface_in_kernel,
+ shutdown_bringup_interface_in_kernel,
+)
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
@@ -78,14 +81,34 @@ def build_topo(tgen):
switch.add_link(tgen.gears[left], nodeif="eth-{}".format(right))
switch.add_link(tgen.gears[right], nodeif="eth-{}".format(left))
l_addr = "52:54:00:{}:{}:{}".format(left_idx, right_idx, left_idx)
- tgen.gears[left].run("ip link set eth-{} down".format(right))
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears[left].tgen,
+ tgen.gears[left].name,
+ f"eth-{right}",
+ False,
+ )
tgen.gears[left].run("ip link set eth-{} address {}".format(right, l_addr))
- tgen.gears[left].run("ip link set eth-{} up".format(right))
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears[left].tgen,
+ tgen.gears[left].name,
+ f"eth-{right}",
+ True,
+ )
tgen.gears[left].run("sysctl -w net.mpls.conf.eth-{}.input=1".format(right))
r_addr = "52:54:00:{}:{}:{}".format(left_idx, right_idx, right_idx)
- tgen.gears[right].run("ip link set eth-{} down".format(left))
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears[right].tgen,
+ tgen.gears[right].name,
+ f"eth-{left}",
+ False,
+ )
tgen.gears[right].run("ip link set eth-{} address {}".format(left, r_addr))
- tgen.gears[right].run("ip link set eth-{} up".format(left))
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears[right].tgen,
+ tgen.gears[right].name,
+ f"eth-{left}",
+ True,
+ )
tgen.gears[right].run("sysctl -w net.mpls.conf.eth-{}.input=1".format(left))
connect_routers(tgen, 0, 1)
diff --git a/tests/topotests/isis_tilfa_topo1/test_isis_tilfa_topo1.py b/tests/topotests/isis_tilfa_topo1/test_isis_tilfa_topo1.py
index b734d95f33..22d66c50ca 100755
--- a/tests/topotests/isis_tilfa_topo1/test_isis_tilfa_topo1.py
+++ b/tests/topotests/isis_tilfa_topo1/test_isis_tilfa_topo1.py
@@ -66,6 +66,7 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
+from lib.common_config import shutdown_bringup_interface_in_kernel
# Required to instantiate the topology builder class.
@@ -887,7 +888,7 @@ def test_rib_ipv4_step10():
logger.info(
"Shutting down rt5 interface to rt6 from the switch side to test fast-reroute"
)
- tgen.net.cmd_raises("ip link set %s down" % tgen.net["s8"].intfs[0])
+ shutdown_bringup_interface_in_kernel(tgen, "s8", tgen.net["s8"].intfs[0], False)
logger.info("Verifying if the BFD session is down")
expect = (
diff --git a/tests/topotests/nhrp_nhs_priority/test_nhrp_nhs_priority.py b/tests/topotests/nhrp_nhs_priority/test_nhrp_nhs_priority.py
index dd2557595b..05dbebb88c 100644
--- a/tests/topotests/nhrp_nhs_priority/test_nhrp_nhs_priority.py
+++ b/tests/topotests/nhrp_nhs_priority/test_nhrp_nhs_priority.py
@@ -21,6 +21,7 @@ from lib.common_config import (
required_linux_kernel_version,
shutdown_bringup_interface,
retry, step,
+ shutdown_bringup_interface_in_kernel,
)
"""
@@ -101,7 +102,7 @@ def _populate_iface():
tgen = get_topogen()
cmds_tot_hub = [
"ip tunnel add {0}-gre0 mode gre ttl 64 key 42 dev {0}-eth0 local 192.168.1.{1} remote 0.0.0.0",
- "ip link set dev {0}-gre0 up",
+ ("up", "{0}-gre0"),
"echo 0 > /proc/sys/net/ipv4/ip_forward_use_pmtu",
"echo 1 > /proc/sys/net/ipv6/conf/{0}-eth0/disable_ipv6",
"echo 1 > /proc/sys/net/ipv6/conf/{0}-gre0/disable_ipv6",
@@ -110,38 +111,35 @@ def _populate_iface():
cmds_tot = [
"ip tunnel add {0}-gre0 mode gre ttl 64 key 42 dev {0}-eth0 local 192.168.2.{1} remote 0.0.0.0",
- "ip link set dev {0}-gre0 up",
+ ("up", "{0}-gre0"),
"echo 0 > /proc/sys/net/ipv4/ip_forward_use_pmtu",
"echo 1 > /proc/sys/net/ipv6/conf/{0}-eth0/disable_ipv6",
"echo 1 > /proc/sys/net/ipv6/conf/{0}-gre0/disable_ipv6",
]
for cmd in cmds_tot_hub:
- input = cmd.format("nhs1", "1")
- logger.info("input: " + input)
- output = tgen.net["nhs1"].cmd(input)
- logger.info("output: " + output)
-
- input = cmd.format("nhs2", "2")
- logger.info("input: " + input)
- output = tgen.net["nhs2"].cmd(input)
- logger.info("output: " + output)
-
- input = cmd.format("nhs3", "3")
- logger.info("input: " + input)
- output = tgen.net["nhs3"].cmd(input)
- logger.info("output: " + output)
+ for rname, unit in (("nhs1", "1"), ("nhs2", "2"), ("nhs3", "3")):
+ if isinstance(cmd, tuple):
+ shutdown_bringup_interface_in_kernel(
+ tgen, rname, cmd[1].format(rname, unit), cmd[0] == "up"
+ )
+ continue
+ input = cmd.format(rname, unit)
+ logger.info("input: " + input)
+ output = tgen.net[rname].cmd(input)
+ logger.info("output: " + output)
for cmd in cmds_tot:
- input = cmd.format("nhc1", "4")
- logger.info("input: " + input)
- output = tgen.net["nhc1"].cmd(input)
- logger.info("output: " + output)
-
- input = cmd.format("nhc2", "5")
- logger.info("input: " + input)
- output = tgen.net["nhc2"].cmd(input)
- logger.info("output: " + output)
+ for rname, unit in (("nhc1", "4"), ("nhc2", "5")):
+ if isinstance(cmd, tuple):
+ shutdown_bringup_interface_in_kernel(
+ tgen, rname, cmd[1].format(rname, unit), cmd[0] == "up"
+ )
+ continue
+ input = cmd.format(rname, unit)
+ logger.info("input: " + input)
+ output = tgen.net[rname].cmd(input)
+ logger.info("output: " + output)
def _verify_iptables():
diff --git a/tests/topotests/nhrp_redundancy/test_nhrp_redundancy.py b/tests/topotests/nhrp_redundancy/test_nhrp_redundancy.py
index 37bf3fde04..6bf0aa9ca7 100644
--- a/tests/topotests/nhrp_redundancy/test_nhrp_redundancy.py
+++ b/tests/topotests/nhrp_redundancy/test_nhrp_redundancy.py
@@ -24,6 +24,7 @@ from lib.common_config import (
required_linux_kernel_version,
shutdown_bringup_interface,
retry,
+ shutdown_bringup_interface_in_kernel,
)
"""
@@ -102,11 +103,23 @@ def build_topo(tgen):
switch.add_link(tgen.gears["nhc2"])
+def _apply_nhrp_cmd(tgen, cmd, rname, unit):
+ if isinstance(cmd, tuple):
+ shutdown_bringup_interface_in_kernel(
+ tgen, rname, cmd[1].format(rname, unit), cmd[0] == "up"
+ )
+ return
+ formatted = cmd.format(rname, unit)
+ logger.info("input: " + formatted)
+ output = tgen.net[rname].cmd(formatted)
+ logger.info("output: " + output)
+
+
def _populate_iface():
tgen = get_topogen()
cmds_tot_hub = [
"ip tunnel add {0}-gre0 mode gre ttl 64 key 42 dev {0}-eth0 local 192.168.1.{1} remote 0.0.0.0",
- "ip link set dev {0}-gre0 up",
+ ("up", "{0}-gre0"),
"echo 0 > /proc/sys/net/ipv4/ip_forward_use_pmtu",
"echo 1 > /proc/sys/net/ipv6/conf/{0}-eth0/disable_ipv6",
"echo 1 > /proc/sys/net/ipv6/conf/{0}-gre0/disable_ipv6",
@@ -115,38 +128,19 @@ def _populate_iface():
cmds_tot = [
"ip tunnel add {0}-gre0 mode gre ttl 64 key 42 dev {0}-eth0 local 192.168.2.{1} remote 0.0.0.0",
- "ip link set dev {0}-gre0 up",
+ ("up", "{0}-gre0"),
"echo 0 > /proc/sys/net/ipv4/ip_forward_use_pmtu",
"echo 1 > /proc/sys/net/ipv6/conf/{0}-eth0/disable_ipv6",
"echo 1 > /proc/sys/net/ipv6/conf/{0}-gre0/disable_ipv6",
]
for cmd in cmds_tot_hub:
- input = cmd.format("nhs1", "1")
- logger.info("input: " + input)
- output = tgen.net["nhs1"].cmd(input)
- logger.info("output: " + output)
-
- input = cmd.format("nhs2", "2")
- logger.info("input: " + input)
- output = tgen.net["nhs2"].cmd(input)
- logger.info("output: " + output)
-
- input = cmd.format("nhs3", "3")
- logger.info("input: " + input)
- output = tgen.net["nhs3"].cmd(input)
- logger.info("output: " + output)
+ for rname, unit in (("nhs1", "1"), ("nhs2", "2"), ("nhs3", "3")):
+ _apply_nhrp_cmd(tgen, cmd, rname, unit)
for cmd in cmds_tot:
- input = cmd.format("nhc1", "4")
- logger.info("input: " + input)
- output = tgen.net["nhc1"].cmd(input)
- logger.info("output: " + output)
-
- input = cmd.format("nhc2", "5")
- logger.info("input: " + input)
- output = tgen.net["nhc2"].cmd(input)
- logger.info("output: " + output)
+ for rname, unit in (("nhc1", "4"), ("nhc2", "5")):
+ _apply_nhrp_cmd(tgen, cmd, rname, unit)
def _verify_iptables():
diff --git a/tests/topotests/nhrp_topo/test_nhrp_topo.py b/tests/topotests/nhrp_topo/test_nhrp_topo.py
index 06f0c9d2e1..a4777c9a77 100644
--- a/tests/topotests/nhrp_topo/test_nhrp_topo.py
+++ b/tests/topotests/nhrp_topo/test_nhrp_topo.py
@@ -28,7 +28,11 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
-from lib.common_config import required_linux_kernel_version, retry
+from lib.common_config import (
+ required_linux_kernel_version,
+ retry,
+ shutdown_bringup_interface_in_kernel,
+)
# Required to instantiate the topology builder class.
@@ -91,11 +95,23 @@ def build_topo(tgen):
switch.add_link(tgen.gears["r4"])
+def _apply_nhrp_cmd(tgen, cmd, rname, unit):
+ if isinstance(cmd, tuple):
+ shutdown_bringup_interface_in_kernel(
+ tgen, rname, cmd[1].format(rname, unit), cmd[0] == "up"
+ )
+ return
+ formatted = cmd.format(rname, unit)
+ logger.info("input: " + formatted)
+ output = tgen.net[rname].cmd(formatted)
+ logger.info("output: " + output)
+
+
def _populate_iface():
tgen = get_topogen()
cmds_tot_hub = [
"ip tunnel add {0}-gre0 mode gre ttl 64 key 42 dev {0}-eth0 local 10.2.1.{1} remote 0.0.0.0",
- "ip link set dev {0}-gre0 up",
+ ("up", "{0}-gre0"),
"echo 0 > /proc/sys/net/ipv4/ip_forward_use_pmtu",
"echo 1 > /proc/sys/net/ipv6/conf/{0}-eth0/disable_ipv6",
"echo 1 > /proc/sys/net/ipv6/conf/{0}-gre0/disable_ipv6",
@@ -104,28 +120,18 @@ def _populate_iface():
cmds_tot = [
"ip tunnel add {0}-gre0 mode gre ttl 64 key 42 dev {0}-eth0 local 10.1.1.{1} remote 0.0.0.0",
- "ip link set dev {0}-gre0 up",
+ ("up", "{0}-gre0"),
"echo 0 > /proc/sys/net/ipv4/ip_forward_use_pmtu",
"echo 1 > /proc/sys/net/ipv6/conf/{0}-eth0/disable_ipv6",
"echo 1 > /proc/sys/net/ipv6/conf/{0}-gre0/disable_ipv6",
]
for cmd in cmds_tot_hub:
- input = cmd.format("r2", "2")
- logger.info("input: " + input)
- output = tgen.net["r2"].cmd(input)
- logger.info("output: " + output)
+ _apply_nhrp_cmd(tgen, cmd, "r2", "2")
for cmd in cmds_tot:
- input = cmd.format("r1", "1")
- logger.info("input: " + input)
- output = tgen.net["r1"].cmd(input)
- logger.info("output: " + output)
-
- input = cmd.format("r4", "4")
- logger.info("input: " + input)
- output = tgen.net["r4"].cmd(input)
- logger.info("output: " + output)
+ _apply_nhrp_cmd(tgen, cmd, "r1", "1")
+ _apply_nhrp_cmd(tgen, cmd, "r4", "4")
def _verify_iptables():
diff --git a/tests/topotests/ospf6_ecmp_inter_area/test_ospf6_ecmp_inter_area.py b/tests/topotests/ospf6_ecmp_inter_area/test_ospf6_ecmp_inter_area.py
index 1c0c2277f8..669177205f 100644
--- a/tests/topotests/ospf6_ecmp_inter_area/test_ospf6_ecmp_inter_area.py
+++ b/tests/topotests/ospf6_ecmp_inter_area/test_ospf6_ecmp_inter_area.py
@@ -82,7 +82,12 @@ sys.path.append(os.path.join(CWD, "../"))
# Import topogen and topotest helpers
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
-from lib.common_config import write_test_header, write_test_footer, step
+from lib.common_config import (
+ write_test_header,
+ write_test_footer,
+ step,
+ shutdown_bringup_interface_in_kernel,
+)
# Required to instantiate the topology builder class.
@@ -212,18 +217,38 @@ def test_ecmp_inter_area(request):
pytest.skip(tgen.errors)
step("triggering R3-R6 link down")
- tgen.gears["r3"].run("ip link set r3-eth1 down")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r3'].tgen,
+ tgen.gears['r3'].name,
+ "r3-eth1",
+ False,
+ )
expect_routes_json("r1", "show_ipv6_routes_ospf6-2.json", "post-R3-R6-link-down")
step("triggering R2-R5 link down")
- tgen.gears["r2"].run("ip link set r2-eth1 down")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r2'].tgen,
+ tgen.gears['r2'].name,
+ "r2-eth1",
+ False,
+ )
expect_routes_json("r1", "show_ipv6_routes_ospf6-3.json", "post-R2-R5-link-down")
step("restoring links R2-R5/R3-R6")
- tgen.gears["r3"].run("ip link set r3-eth1 up")
- tgen.gears["r2"].run("ip link set r2-eth1 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r3'].tgen,
+ tgen.gears['r3'].name,
+ "r3-eth1",
+ True,
+ )
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r2'].tgen,
+ tgen.gears['r2'].name,
+ "r2-eth1",
+ True,
+ )
expect_routes_json(
"r1", "show_ipv6_routes_ospf6-1.json", "post-R2-R5/R3-R6-link-up"
@@ -245,19 +270,49 @@ def test_multipath_inter_area(request):
pytest.skip(tgen.errors)
step("links R1-R3/R3-R6/R5-R8/R6-R8 down (simplify topology, disconnect R3/R8)")
- tgen.gears["r3"].run("ip link set r3-eth0 down")
- tgen.gears["r3"].run("ip link set r3-eth1 down")
- tgen.gears["r8"].run("ip link set r8-eth0 down")
- tgen.gears["r8"].run("ip link set r8-eth1 down")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r3'].tgen,
+ tgen.gears['r3'].name,
+ "r3-eth0",
+ False,
+ )
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r3'].tgen,
+ tgen.gears['r3'].name,
+ "r3-eth1",
+ False,
+ )
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r8'].tgen,
+ tgen.gears['r8'].name,
+ "r8-eth0",
+ False,
+ )
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r8'].tgen,
+ tgen.gears['r8'].name,
+ "r8-eth1",
+ False,
+ )
step("link R6-R7 down (initial summary LSAs)")
- tgen.gears["r6"].run("ip link set r6-eth2 down")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r6'].tgen,
+ tgen.gears['r6'].name,
+ "r6-eth2",
+ False,
+ )
expect_routes_json(
"r1", "show_ipv6_routes_ospf6-4.json", "post-R3-R6/R6-R7-link-down"
)
step("triggering R6-R7 link up")
- tgen.gears["r6"].run("ip link set r6-eth2 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r6'].tgen,
+ tgen.gears['r6'].name,
+ "r6-eth2",
+ True,
+ )
expect_routes_json("r1", "show_ipv6_routes_ospf6-5.json", "post-R6-R7-link-up")
diff --git a/tests/topotests/ospf_4222_recommendation_5/test_ospf_broadcast_router_dynamic_pacing.py b/tests/topotests/ospf_4222_recommendation_5/test_ospf_broadcast_router_dynamic_pacing.py
index 1f15a1d965..caa92b668c 100644
--- a/tests/topotests/ospf_4222_recommendation_5/test_ospf_broadcast_router_dynamic_pacing.py
+++ b/tests/topotests/ospf_4222_recommendation_5/test_ospf_broadcast_router_dynamic_pacing.py
@@ -20,6 +20,7 @@ from lib.topolog import logger
from lib.common_config import (
create_address_on_interface,
delete_address_on_interface,
+ shutdown_bringup_interface_in_kernel,
step,
)
from util_pcap import PerInterfacePcapManager
@@ -622,10 +623,10 @@ def test_ospf_dynamic_pacing_queue_kick_on_limit_increase():
flap_ifaces[rname] = wait_for_ospf_ifname(tgen.gears[rname])
for rname, ifn in flap_ifaces.items():
- tgen.net[rname].cmd(f"ip link set {ifn} down")
+ shutdown_bringup_interface_in_kernel(tgen, rname, ifn, False)
time.sleep(1)
for rname, ifn in flap_ifaces.items():
- tgen.net[rname].cmd(f"ip link set {ifn} up")
+ shutdown_bringup_interface_in_kernel(tgen, rname, ifn, True)
# Step 4b: Wait for the flap to actually produce an AIMD trigger before
# spending any of the congestion-detection budget below. Hello exchange
diff --git a/tests/topotests/ospf_metric_propagation/test_ospf_metric_propagation.py b/tests/topotests/ospf_metric_propagation/test_ospf_metric_propagation.py
index def0321012..dc16a69e75 100644
--- a/tests/topotests/ospf_metric_propagation/test_ospf_metric_propagation.py
+++ b/tests/topotests/ospf_metric_propagation/test_ospf_metric_propagation.py
@@ -19,6 +19,7 @@ import pytest
from lib import topotest
from lib.topogen import Topogen, get_topogen
from lib.topolog import logger
+from lib.common_config import shutdown_bringup_interface_in_kernel
"""
@@ -132,20 +133,16 @@ def setup_module(mod):
tgen = Topogen(build_topo, mod.__name__)
tgen.start_topology()
- vrf_setup_cmds = [
- "ip link add name blue type vrf table 11",
- "ip link set dev blue up",
- "ip link add name green type vrf table 12",
- "ip link set dev green up",
- ]
-
# Starting Routers
router_list = tgen.routers()
# Create VRFs and bind to interfaces
for routern in range(1, 5):
- for cmd in vrf_setup_cmds:
- tgen.net["r{}".format(routern)].cmd(cmd)
+ rname = "r{}".format(routern)
+ tgen.net[rname].cmd("ip link add name blue type vrf table 11")
+ shutdown_bringup_interface_in_kernel(tgen, rname, "blue", True)
+ tgen.net[rname].cmd("ip link add name green type vrf table 12")
+ shutdown_bringup_interface_in_kernel(tgen, rname, "green", True)
for routern in range(1, 5):
tgen.net["r{}".format(routern)].cmd(
"ip link set dev r{}-eth1 vrf blue up".format(routern)
@@ -179,24 +176,24 @@ def set_link_states(tgen, link1_up, link2_up, link3_up, link4_up):
link4: r4-eth1 (R4 to Rb in VRF blue)
"""
if link1_up:
- tgen.net["r1"].cmd("ip link set dev r1-eth1 up")
+ shutdown_bringup_interface_in_kernel(tgen, 'r1', "r1-eth1", True)
else:
- tgen.net["r1"].cmd("ip link set dev r1-eth1 down")
+ shutdown_bringup_interface_in_kernel(tgen, 'r1', "r1-eth1", False)
if link2_up:
- tgen.net["r2"].cmd("ip link set dev r2-eth1 up")
+ shutdown_bringup_interface_in_kernel(tgen, 'r2', "r2-eth1", True)
else:
- tgen.net["r2"].cmd("ip link set dev r2-eth1 down")
+ shutdown_bringup_interface_in_kernel(tgen, 'r2', "r2-eth1", False)
if link3_up:
- tgen.net["r3"].cmd("ip link set dev r3-eth1 up")
+ shutdown_bringup_interface_in_kernel(tgen, 'r3', "r3-eth1", True)
else:
- tgen.net["r3"].cmd("ip link set dev r3-eth1 down")
+ shutdown_bringup_interface_in_kernel(tgen, 'r3', "r3-eth1", False)
if link4_up:
- tgen.net["r4"].cmd("ip link set dev r4-eth1 up")
+ shutdown_bringup_interface_in_kernel(tgen, 'r4', "r4-eth1", True)
else:
- tgen.net["r4"].cmd("ip link set dev r4-eth1 down")
+ shutdown_bringup_interface_in_kernel(tgen, 'r4', "r4-eth1", False)
def test_all_links_up():
@@ -269,10 +266,10 @@ def test_link_1_2_down():
# Explicitly set link states: link1 down, link2 down, link3 up, link4 up
set_link_states(tgen, link1_up=False, link2_up=False, link3_up=True, link4_up=True)
# Bounce r1-eth0 and r2-eth2 to trigger route recalculation
- tgen.net["r1"].cmd("ip link set dev r1-eth0 down")
- tgen.net["r2"].cmd("ip link set dev r2-eth2 down")
- tgen.net["r2"].cmd("ip link set dev r2-eth2 up")
- tgen.net["r1"].cmd("ip link set dev r1-eth0 up")
+ shutdown_bringup_interface_in_kernel(tgen, 'r1', "r1-eth0", False)
+ shutdown_bringup_interface_in_kernel(tgen, 'r2', "r2-eth2", False)
+ shutdown_bringup_interface_in_kernel(tgen, 'r2', "r2-eth2", True)
+ shutdown_bringup_interface_in_kernel(tgen, 'r1', "r1-eth0", True)
r1 = tgen.gears["r1"]
json_file = "{}/r1/show_ip_route-3.json".format(CWD)
@@ -296,10 +293,10 @@ def test_link_1_2_3_down():
# Explicitly set link states: link1 down, link2 down, link3 down, link4 up
set_link_states(tgen, link1_up=False, link2_up=False, link3_up=False, link4_up=True)
# Bounce r1-eth0 and r3-eth0 to trigger route recalculation
- tgen.net["r1"].cmd("ip link set dev r1-eth0 down")
- tgen.net["r3"].cmd("ip link set dev r3-eth0 down")
- tgen.net["r3"].cmd("ip link set dev r3-eth0 up")
- tgen.net["r1"].cmd("ip link set dev r1-eth0 up")
+ shutdown_bringup_interface_in_kernel(tgen, 'r1', "r1-eth0", False)
+ shutdown_bringup_interface_in_kernel(tgen, 'r3', "r3-eth0", False)
+ shutdown_bringup_interface_in_kernel(tgen, 'r3', "r3-eth0", True)
+ shutdown_bringup_interface_in_kernel(tgen, 'r1', "r1-eth0", True)
r1 = tgen.gears["r1"]
json_file = "{}/r1/show_ip_route-4.json".format(CWD)
diff --git a/tests/topotests/ospf_multi_vrf_bgp_route_leak/test_ospf_multi_vrf_bgp_route_leak.py b/tests/topotests/ospf_multi_vrf_bgp_route_leak/test_ospf_multi_vrf_bgp_route_leak.py
index 95ac4a7295..e435a0b28b 100644
--- a/tests/topotests/ospf_multi_vrf_bgp_route_leak/test_ospf_multi_vrf_bgp_route_leak.py
+++ b/tests/topotests/ospf_multi_vrf_bgp_route_leak/test_ospf_multi_vrf_bgp_route_leak.py
@@ -18,6 +18,7 @@ import pytest
from lib import topotest
from lib.topogen import Topogen, get_topogen
from lib.topolog import logger
+from lib.common_config import shutdown_bringup_interface_in_kernel
"""
@@ -106,25 +107,16 @@ def setup_module(mod):
tgen = Topogen(build_topo, mod.__name__)
tgen.start_topology()
- r1_vrf_setup_cmds = [
- "ip link add name neno type vrf table 11",
- "ip link set dev neno up",
- "ip link set dev r1-eth2 vrf neno up",
- ]
- r2_vrf_setup_cmds = [
- "ip link add name ray type vrf table 11",
- "ip link set dev ray up",
- "ip link set dev r2-eth2 vrf ray up",
- ]
-
# Starting Routers
router_list = tgen.routers()
# Create VRFs on r1/r2 and bind to interfaces
- for cmd in r1_vrf_setup_cmds:
- tgen.net["r1"].cmd(cmd)
- for cmd in r2_vrf_setup_cmds:
- tgen.net["r2"].cmd(cmd)
+ tgen.net["r1"].cmd("ip link add name neno type vrf table 11")
+ shutdown_bringup_interface_in_kernel(tgen, "r1", "neno", True)
+ tgen.net["r1"].cmd("ip link set dev r1-eth2 vrf neno up")
+ tgen.net["r2"].cmd("ip link add name ray type vrf table 11")
+ shutdown_bringup_interface_in_kernel(tgen, "r2", "ray", True)
+ tgen.net["r2"].cmd("ip link set dev r2-eth2 vrf ray up")
logger.info("Testing OSPF VRF support")
diff --git a/tests/topotests/ospf_nssa_type7_recovery/test_ospf_nssa_type7_recovery.py b/tests/topotests/ospf_nssa_type7_recovery/test_ospf_nssa_type7_recovery.py
index fb5118a450..5d480efeff 100644
--- a/tests/topotests/ospf_nssa_type7_recovery/test_ospf_nssa_type7_recovery.py
+++ b/tests/topotests/ospf_nssa_type7_recovery/test_ospf_nssa_type7_recovery.py
@@ -50,6 +50,7 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.topogen import Topogen, get_topogen
from lib.topolog import logger
+from lib.common_config import shutdown_bringup_interface_in_kernel
pytestmark = [pytest.mark.ospfd]
@@ -148,7 +149,7 @@ def test_ospf_nssa_type7_recovery():
# 1. Remove the only usable NSSA forwarding address.
logger.info("bringing r1-eth0 down (no usable NSSA forwarding address)")
- r1.run("ip link set r1-eth0 down")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "r1-eth0", False)
# 2. Redistribute a static route while no forwarding address exists; the
# Type-7 origination attempt fails to build a forwarding address.
@@ -187,7 +188,7 @@ def test_ospf_nssa_type7_recovery():
# 4. Bring the NSSA interface back up: a forwarding address is now
# available, so the Type-7 must be re-originated and the route learned.
logger.info("bringing r1-eth0 back up; Type-7 must now be re-originated")
- r1.run("ip link set r1-eth0 up")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "r1-eth0", True)
_, result = topotest.run_and_expect(
partial(_r1_type7, True), None, count=45, wait=1
diff --git a/tests/topotests/ospf_nssa_type7_recovery_bgp/test_ospf_nssa_type7_recovery_bgp.py b/tests/topotests/ospf_nssa_type7_recovery_bgp/test_ospf_nssa_type7_recovery_bgp.py
index d8619c5655..3ff6c4d440 100644
--- a/tests/topotests/ospf_nssa_type7_recovery_bgp/test_ospf_nssa_type7_recovery_bgp.py
+++ b/tests/topotests/ospf_nssa_type7_recovery_bgp/test_ospf_nssa_type7_recovery_bgp.py
@@ -48,6 +48,7 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.topogen import Topogen, get_topogen
from lib.topolog import logger
+from lib.common_config import shutdown_bringup_interface_in_kernel
pytestmark = [pytest.mark.bgpd, pytest.mark.ospfd]
@@ -158,7 +159,7 @@ def test_ospf_nssa_type7_recovery_bgp():
# 1. Remove the only usable NSSA forwarding address.
logger.info("bringing r1-eth0 down (no usable NSSA forwarding address)")
- r1.run("ip link set r1-eth0 down")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "r1-eth0", False)
# 2. Have r4 advertise a prefix that r1 redistributes from BGP while no
# forwarding address exists; the Type-7 origination attempt fails to
@@ -207,7 +208,7 @@ def test_ospf_nssa_type7_recovery_bgp():
# 4. Bring the NSSA interface back up: a forwarding address is now
# available, so the Type-7 must be re-originated and the route learned.
logger.info("bringing r1-eth0 back up; Type-7 must now be re-originated")
- r1.run("ip link set r1-eth0 up")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "r1-eth0", True)
_, result = topotest.run_and_expect(
partial(_r1_type7, True), None, count=45, wait=1
diff --git a/tests/topotests/ospf_rfc4222_r4/test_ospf_broadcast_lsa_pacing.py b/tests/topotests/ospf_rfc4222_r4/test_ospf_broadcast_lsa_pacing.py
index b34ba43f2d..b2cc6cb76d 100644
--- a/tests/topotests/ospf_rfc4222_r4/test_ospf_broadcast_lsa_pacing.py
+++ b/tests/topotests/ospf_rfc4222_r4/test_ospf_broadcast_lsa_pacing.py
@@ -11,7 +11,7 @@ from functools import partial
import pytest
from lib import topotest
-from lib.common_config import step
+from lib.common_config import step, shutdown_bringup_interface_in_kernel
from lib.topogen import Topogen
from lib.topolog import logger
@@ -343,10 +343,10 @@ def _exercise_adj_and_lsa_pacing(tgen, constrained):
)
for rname in ["r3", "r4", "r5"]:
- tgen.net[rname].cmd("ip link set {}-eth0 down".format(rname))
+ shutdown_bringup_interface_in_kernel(tgen, rname, f"{rname}-eth0", False)
time.sleep(1)
for rname in ["r3", "r4", "r5"]:
- tgen.net[rname].cmd("ip link set {}-eth0 up".format(rname))
+ shutdown_bringup_interface_in_kernel(tgen, rname, f"{rname}-eth0", True)
_wait_all_full(tgen, routers=["r3", "r4", "r5"], timeout_s=40)
diff --git a/tests/topotests/ospf_rfc4222_r4/test_ospf_lsa_pacing_opaque.py b/tests/topotests/ospf_rfc4222_r4/test_ospf_lsa_pacing_opaque.py
index 265019d945..f5947b2f7d 100644
--- a/tests/topotests/ospf_rfc4222_r4/test_ospf_lsa_pacing_opaque.py
+++ b/tests/topotests/ospf_rfc4222_r4/test_ospf_lsa_pacing_opaque.py
@@ -17,6 +17,7 @@ import pytest
from lib import topotest
from lib.topogen import Topogen
+from lib.common_config import shutdown_bringup_interface_in_kernel
pytestmark = [pytest.mark.ospfd]
@@ -104,9 +105,9 @@ def test_opaque_lsa_with_rec4_pacing_survives_interface_flap(tgen):
_wait_for_te_router(r4, "r4", "3.3.3.3")
_wait_for_te_router(r4, "r4", "4.4.4.4")
- tgen.net["r3"].cmd("ip link set eth1 down")
+ shutdown_bringup_interface_in_kernel(tgen, 'r3', "eth1", False)
time.sleep(2)
- tgen.net["r3"].cmd("ip link set eth1 up")
+ shutdown_bringup_interface_in_kernel(tgen, 'r3', "eth1", True)
_wait_neighbor_full(r3, "4.4.4.4")
_wait_neighbor_full(r4, "3.3.3.3")
diff --git a/tests/topotests/ospf_topo2/test_ospf_topo2.py b/tests/topotests/ospf_topo2/test_ospf_topo2.py
index baa9c24f57..a8588a7405 100644
--- a/tests/topotests/ospf_topo2/test_ospf_topo2.py
+++ b/tests/topotests/ospf_topo2/test_ospf_topo2.py
@@ -24,6 +24,7 @@ import sys
import time
from lib.topogen import Topogen
+from lib.common_config import shutdown_bringup_interface_in_kernel
pytestmark = [
@@ -228,8 +229,18 @@ def test_interface_down(tgen, ip_version):
before = time.monotonic()
# Take the links between r1 and r2 down
- routers["r1"].cmd_raises("ip link set down dev eth1")
- routers["r1"].cmd_raises("ip link set down dev eth2")
+ shutdown_bringup_interface_in_kernel(
+ routers['r1'].tgen,
+ routers['r1'].name,
+ "eth1",
+ False,
+ )
+ shutdown_bringup_interface_in_kernel(
+ routers['r1'].tgen,
+ routers['r1'].name,
+ "eth2",
+ False,
+ )
# Wait for OSPF to converge
wait_for_ospf(routers["r1"], ip_version=ip_version, neighbors=1)
@@ -274,15 +285,35 @@ def test_interface_flap(tgen, ip_version):
before = time.monotonic()
# Take the links between r1 and r2 down
- routers["r1"].cmd_raises("ip link set down dev eth1")
- routers["r2"].cmd_raises("ip link set down dev eth2")
+ shutdown_bringup_interface_in_kernel(
+ routers['r1'].tgen,
+ routers['r1'].name,
+ "eth1",
+ False,
+ )
+ shutdown_bringup_interface_in_kernel(
+ routers['r2'].tgen,
+ routers['r2'].name,
+ "eth2",
+ False,
+ )
# Wait for OSPF to converge
wait_for_ospf(routers["r1"], ip_version=ip_version, neighbors=1)
# Take the links between r1 and r2 up
- routers["r1"].cmd_raises("ip link set up dev eth1")
- routers["r2"].cmd_raises("ip link set up dev eth2")
+ shutdown_bringup_interface_in_kernel(
+ routers['r1'].tgen,
+ routers['r1'].name,
+ "eth1",
+ True,
+ )
+ shutdown_bringup_interface_in_kernel(
+ routers['r2'].tgen,
+ routers['r2'].name,
+ "eth2",
+ True,
+ )
# Wait for OSPF to converge
wait_for_ospf(routers["r1"], ip_version=ip_version, neighbors=3)
diff --git a/tests/topotests/pbr_topo1/test_pbr_topo1.py b/tests/topotests/pbr_topo1/test_pbr_topo1.py
index 85acbae91f..157931aff8 100644
--- a/tests/topotests/pbr_topo1/test_pbr_topo1.py
+++ b/tests/topotests/pbr_topo1/test_pbr_topo1.py
@@ -33,7 +33,11 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
-from lib.common_config import create_interface_in_kernel, shutdown_bringup_interface
+from lib.common_config import (
+ create_interface_in_kernel,
+ shutdown_bringup_interface,
+ shutdown_bringup_interface_in_kernel,
+)
# Required to instantiate the topology builder class.
@@ -81,7 +85,12 @@ def setup_module(module):
# Install vrf into the kernel and slave eth3
router.run("ip link add vrf-chiyoda type vrf table 1000")
router.run("ip link set dev {}-eth3 master vrf-chiyoda".format(rname))
- router.run("ip link set vrf-chiyoda up")
+ shutdown_bringup_interface_in_kernel(
+ router.tgen,
+ router.name,
+ "vrf-chiyoda",
+ True,
+ )
router.load_config(
TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(rname))
@@ -588,7 +597,7 @@ def test_pbr_nhg_with_vrf_disable_enable():
logger.info("Step 2: Disabling VRF vrf-chiyoda")
router.run("ip link set dev r1-eth3 nomaster")
- router.run("ip link set vrf-chiyoda down")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "vrf-chiyoda", False)
router.run("ip link del dev vrf-chiyoda")
# Allow time for VRF deletion to propagate
@@ -605,7 +614,7 @@ def test_pbr_nhg_with_vrf_disable_enable():
logger.info("Step 4: Re-enabling VRF vrf-chiyoda")
router.run("ip link add vrf-chiyoda type vrf table 1000")
router.run("ip link set dev r1-eth3 master vrf-chiyoda")
- router.run("ip link set vrf-chiyoda up")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "vrf-chiyoda", True)
logger.info("Step 5: Verifying nexthop-group C is valid after VRF is enabled")
diff --git a/tests/topotests/pim_igmp_vrf/test_pim_vrf.py b/tests/topotests/pim_igmp_vrf/test_pim_vrf.py
index e1d38122fb..c500e9347f 100755
--- a/tests/topotests/pim_igmp_vrf/test_pim_vrf.py
+++ b/tests/topotests/pim_igmp_vrf/test_pim_vrf.py
@@ -119,7 +119,10 @@ from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
from lib.topotest import iproute2_is_vrf_capable
-from lib.common_config import required_linux_kernel_version
+from lib.common_config import (
+ required_linux_kernel_version,
+ shutdown_bringup_interface_in_kernel,
+)
from lib.pim import McastTesterHelper
@@ -194,8 +197,6 @@ def setup_module(module):
vrf_setup_cmds = [
"ip link add name blue type vrf table 11",
"ip link add name red type vrf table 12",
- "ip link set dev blue up",
- "ip link set dev red up",
"ip link set dev r1-eth0 vrf blue up",
"ip link set dev r1-eth1 vrf blue up",
"ip link set dev r1-eth2 vrf red up",
@@ -205,8 +206,12 @@ def setup_module(module):
# Starting Routers
router_list = tgen.routers()
- # Create VRF on r2 first and add it's interfaces
- for cmd in vrf_setup_cmds:
+ # Create VRF on r1 and add its interfaces
+ tgen.net["r1"].cmd(vrf_setup_cmds[0])
+ tgen.net["r1"].cmd(vrf_setup_cmds[1])
+ shutdown_bringup_interface_in_kernel(tgen, "r1", "blue", True)
+ shutdown_bringup_interface_in_kernel(tgen, "r1", "red", True)
+ for cmd in vrf_setup_cmds[2:]:
tgen.net["r1"].cmd(cmd)
for router in router_list.values():
diff --git a/tests/topotests/pim_nocache_forward/test_pim_nocache_forward.py b/tests/topotests/pim_nocache_forward/test_pim_nocache_forward.py
index ccb3d65990..089b4506d7 100644
--- a/tests/topotests/pim_nocache_forward/test_pim_nocache_forward.py
+++ b/tests/topotests/pim_nocache_forward/test_pim_nocache_forward.py
@@ -59,6 +59,7 @@ from lib import topotest
from lib.common_config import (
create_address_on_interface,
delete_address_on_interface,
+ shutdown_bringup_interface_in_kernel,
step,
write_test_footer,
write_test_header,
@@ -671,7 +672,7 @@ def test_wrongvif_prefer_kernel_ingress(request):
step("Move source traffic to alternate ingress {}".format(FHR_TO_TUNNEL))
create_address_on_interface(tgen, "h_src", "h_src-eth1", f"{source}/16")
- h_src.run("ip link set h_src-eth1 up")
+ shutdown_bringup_interface_in_kernel(h_src.tgen, h_src.name, "h_src-eth1", True)
h_src.run(f"ip route replace {WRONGVIF_TUNNEL_GW}/32 dev h_src-eth1 || true")
app_helper.stop_traffic_senders()
assert app_helper.run_traffic("h_src", group, bind_intf="h_src-eth1") is True
diff --git a/tests/topotests/srv6_sid_manager/test_srv6_sid_manager.py b/tests/topotests/srv6_sid_manager/test_srv6_sid_manager.py
index 58e66d88c6..78f6b61b4e 100644
--- a/tests/topotests/srv6_sid_manager/test_srv6_sid_manager.py
+++ b/tests/topotests/srv6_sid_manager/test_srv6_sid_manager.py
@@ -74,8 +74,9 @@ from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
from lib.common_config import (
- required_linux_kernel_version,
create_interface_in_kernel,
+ required_linux_kernel_version,
+ shutdown_bringup_interface_in_kernel,
)
from lib.checkping import check_ping
@@ -153,24 +154,54 @@ def build_topo(tgen):
tgen.add_link(tgen.gears["ce7"], tgen.gears["rt5"], "eth-rt5", "eth-ce7")
tgen.gears["rt1"].run("ip link add vrf10 type vrf table 10")
- tgen.gears["rt1"].run("ip link set vrf10 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['rt1'].tgen,
+ tgen.gears['rt1'].name,
+ "vrf10",
+ True,
+ )
tgen.gears["rt1"].run("ip link add vrf20 type vrf table 20")
- tgen.gears["rt1"].run("ip link set vrf20 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['rt1'].tgen,
+ tgen.gears['rt1'].name,
+ "vrf20",
+ True,
+ )
tgen.gears["rt1"].run("ip link set eth-ce1 master vrf10")
tgen.gears["rt1"].run("ip link set eth-ce3 master vrf10")
tgen.gears["rt1"].run("ip link set eth-ce5 master vrf20")
tgen.gears["rt5"].run("ip link add vrf10 type vrf table 10")
- tgen.gears["rt5"].run("ip link set vrf10 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['rt5'].tgen,
+ tgen.gears['rt5'].name,
+ "vrf10",
+ True,
+ )
tgen.gears["rt5"].run("ip link set eth-dst2 master vrf10")
tgen.gears["rt5"].run("ip link add vrf20 type vrf table 20")
- tgen.gears["rt5"].run("ip link set vrf20 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['rt5'].tgen,
+ tgen.gears['rt5'].name,
+ "vrf20",
+ True,
+ )
tgen.gears["rt5"].run("ip link set eth-ce7 master vrf20")
tgen.gears["rt6"].run("ip link add vrf10 type vrf table 10")
- tgen.gears["rt6"].run("ip link set vrf10 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['rt6'].tgen,
+ tgen.gears['rt6'].name,
+ "vrf10",
+ True,
+ )
tgen.gears["rt6"].run("ip link add vrf20 type vrf table 20")
- tgen.gears["rt6"].run("ip link set vrf20 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['rt6'].tgen,
+ tgen.gears['rt6'].name,
+ "vrf20",
+ True,
+ )
tgen.gears["rt6"].run("ip link set eth-ce2 master vrf10")
tgen.gears["rt6"].run("ip link set eth-ce4 master vrf20")
tgen.gears["rt6"].run("ip link set eth-ce6 master vrf20")
diff --git a/tests/topotests/static_cross_vrf_nexthop/test_static_cross_vrf_nexthop.py b/tests/topotests/static_cross_vrf_nexthop/test_static_cross_vrf_nexthop.py
index a295a8c3d0..bfa6da61f7 100644
--- a/tests/topotests/static_cross_vrf_nexthop/test_static_cross_vrf_nexthop.py
+++ b/tests/topotests/static_cross_vrf_nexthop/test_static_cross_vrf_nexthop.py
@@ -25,7 +25,10 @@ sys.path.append(os.path.join(CWD, "../"))
# pylint: disable=C0413
from lib import topotest
-from lib.common_config import create_interface_in_kernel
+from lib.common_config import (
+ create_interface_in_kernel,
+ shutdown_bringup_interface_in_kernel,
+)
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
from time import sleep
@@ -418,10 +421,10 @@ no ip route 10.3.0.0/24 10.2.0.2 vrf vrf_b
)
r1.run("ip link delete dummy_b")
r1.run("ip link add vrf_a type vrf table 100")
- r1.run("ip link set vrf_a up")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "vrf_a", True)
r1.vtysh_cmd("configure terminal\nvrf vrf_a\nexit-vrf\n")
r1.run("ip link set r1-eth0 master vrf_a")
- r1.run("ip link set r1-eth0 up")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "r1-eth0", True)
assert result is None, result
diff --git a/tests/topotests/static_nht_self_match/test_static_nht_self_match.py b/tests/topotests/static_nht_self_match/test_static_nht_self_match.py
index d086bf44c1..e0b434675b 100644
--- a/tests/topotests/static_nht_self_match/test_static_nht_self_match.py
+++ b/tests/topotests/static_nht_self_match/test_static_nht_self_match.py
@@ -38,7 +38,7 @@ sys.path.append(os.path.join(CWD, "../"))
# pylint: disable=C0413
from lib import topotest
from lib.topogen import Topogen, get_topogen
-from lib.common_config import step
+from lib.common_config import step, shutdown_bringup_interface_in_kernel
pytestmark = [pytest.mark.staticd, pytest.mark.sharpd]
@@ -57,14 +57,14 @@ def setup_module(mod):
r1.net.add_l3vrf("vrf_a", 100)
r1.net.add_l3vrf("vrf_b", 200)
r1.run("ip link add dummy5 type dummy")
- r1.run("ip link set dummy5 up")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "dummy5", True)
# interface IFNAME vrf NAME does not enslave on the l3mdev backend.
# The connected cover has to be in vrf_b before FRR adds the address.
r1.run("ip link add dummy_b type dummy")
r1.net.attach_iface_to_l3vrf("dummy_b", "vrf_b")
- r1.run("ip link set dummy_b up")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "dummy_b", True)
r1.run("ip link add dummy_c type dummy")
- r1.run("ip link set dummy_c up")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "dummy_c", True)
for router in tgen.routers().values():
router.load_frr_config(extra_daemons=["sharpd"])
diff --git a/tests/topotests/static_srv6_sids/test_static_srv6_sids.py b/tests/topotests/static_srv6_sids/test_static_srv6_sids.py
index ec73a2dff9..fe9a97568e 100755
--- a/tests/topotests/static_srv6_sids/test_static_srv6_sids.py
+++ b/tests/topotests/static_srv6_sids/test_static_srv6_sids.py
@@ -29,6 +29,7 @@ from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
from lib.checkping import check_ping
+from lib.common_config import shutdown_bringup_interface_in_kernel
pytestmark = [pytest.mark.staticd]
@@ -400,7 +401,7 @@ def test_srv6_static_sids_interface_down_up():
# Bring down sr0 interface using ip link
logger.info("Bringing down sr0 interface using ip link")
- router.run("ip link set sr0 down")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "sr0", False)
# Verify routes using sr0 are removed
logger.info("Verifying routes using sr0 are removed")
@@ -408,7 +409,7 @@ def test_srv6_static_sids_interface_down_up():
# Bring up sr0 interface using ip link
logger.info("Bringing up sr0 interface using ip link")
- router.run("ip link set sr0 up")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "sr0", True)
# Verify routes are restored
logger.info("Verifying routes are restored")
@@ -519,7 +520,12 @@ def test_srv6_static_sids_ua_neighbor_down():
# Bring down r2 interface
logger.info("Taking down r2-eth0 interface")
- tgen.gears["r2"].run("ip link set r2-eth0 down")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r2'].tgen,
+ tgen.gears['r2'].name,
+ "r2-eth0",
+ False,
+ )
# Flush neighbor entry on r1 to simulate neighbor unreachable
logger.info("Flushing neighbor entry on r1")
@@ -546,7 +552,12 @@ def test_srv6_static_sids_ua_neighbor_recovery():
# Bring up r2 interface
logger.info("Bringing up r2-eth0 interface")
- tgen.gears["r2"].run("ip link set r2-eth0 up")
+ shutdown_bringup_interface_in_kernel(
+ tgen.gears['r2'].tgen,
+ tgen.gears['r2'].name,
+ "r2-eth0",
+ True,
+ )
# Wait for neighbor discovery and verify SID is installed
check_ping("r1", "2001::2", True, 10, 1)
diff --git a/tests/topotests/two_layer_wucmp/test_two_layer_wuecmp.py b/tests/topotests/two_layer_wucmp/test_two_layer_wuecmp.py
index df217a8364..7a5586e7e5 100644
--- a/tests/topotests/two_layer_wucmp/test_two_layer_wuecmp.py
+++ b/tests/topotests/two_layer_wucmp/test_two_layer_wuecmp.py
@@ -25,7 +25,7 @@ from lib import topotest
from lib.topogen import Topogen, get_topogen
from lib.topolog import logger
from lib.bgp import verify_bgp_convergence, verify_bgp_convergence_from_running_config
-from lib.common_config import step
+from lib.common_config import step, shutdown_bringup_interface_in_kernel
"""
@@ -665,7 +665,12 @@ def test_single_link_down():
# Bring down interface
logger.info("Bringing down interface: leaf1-eth0")
- down_output = net["leaf1"].cmd("ip link set leaf1-eth0 down")
+ down_output = shutdown_bringup_interface_in_kernel(
+ tgen,
+ 'leaf1',
+ "leaf1-eth0",
+ False,
+ )
def verify_after_link_down():
# Get current NHG state
@@ -738,7 +743,7 @@ def test_single_link_up():
# Bring up interface
logger.info("Bringing up interface: leaf1-eth0")
- net["leaf1"].cmd("ip link set leaf1-eth0 up")
+ shutdown_bringup_interface_in_kernel(tgen, 'leaf1', "leaf1-eth0", True)
def verify_after_link_up():
(
@@ -808,7 +813,7 @@ def test_partial_links_towards_spine1_down():
# Bring down 16 interfaces towards spine1
logger.info("Bringing down 16 interfaces towards spine1: leaf1-eth0 to leaf1-eth15")
for i in range(16):
- net["leaf1"].cmd(f"ip link set leaf1-eth{i} down")
+ shutdown_bringup_interface_in_kernel(tgen, 'leaf1', f"leaf1-eth{i}", False)
def verify_after_partial_links_down():
(
@@ -881,7 +886,7 @@ def test_partial_links_towards_spine1_up():
# Bring up 16 interfaces towards spine1
logger.info("Bringing up 16 interfaces towards spine1: leaf1-eth0 to leaf1-eth15")
for i in range(16):
- net["leaf1"].cmd(f"ip link set leaf1-eth{i} up")
+ shutdown_bringup_interface_in_kernel(tgen, 'leaf1', f"leaf1-eth{i}", True)
def verify_after_partial_links_up():
(
diff --git a/tests/topotests/zebra_ipv6_dad/test_zebra_ipv6_tentative_connected.py b/tests/topotests/zebra_ipv6_dad/test_zebra_ipv6_tentative_connected.py
index 9a86914374..f08fa41d80 100644
--- a/tests/topotests/zebra_ipv6_dad/test_zebra_ipv6_tentative_connected.py
+++ b/tests/topotests/zebra_ipv6_dad/test_zebra_ipv6_tentative_connected.py
@@ -26,7 +26,11 @@ sys.path.append(os.path.join(CWD, "../"))
# pylint: disable=C0413
from lib import topotest
-from lib.common_config import create_address_on_interface, step
+from lib.common_config import (
+ create_address_on_interface,
+ step,
+ shutdown_bringup_interface_in_kernel,
+)
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
@@ -115,8 +119,8 @@ def test_zebra_ipv6_tentative_not_in_rib():
step("Create a veth pair so DAD actually runs (dummy is NOARP and skips DAD)")
r1.run("ip link del {} >/dev/null 2>&1 || true".format(IFNAME))
r1.run("ip link add {} type veth peer name {}".format(IFNAME, PEER))
- r1.run("ip link set {} up".format(PEER))
- r1.run("ip link set {} down".format(IFNAME))
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, PEER, True)
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, IFNAME, False)
step("Stretch DAD to 60 NS transmissions (~60s)")
r1.run("echo 1 > /proc/sys/net/ipv6/conf/{}/accept_dad".format(IFNAME))
@@ -151,7 +155,7 @@ def test_zebra_ipv6_tentative_not_in_rib():
)
step("Bring the interface up; kernel DAD is still in progress")
- r1.run("ip link set {} up".format(IFNAME))
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, IFNAME, True)
def _iface_operative():
try:
diff --git a/tests/topotests/zebra_multiple_connected/test_zebra_multiple_connected.py b/tests/topotests/zebra_multiple_connected/test_zebra_multiple_connected.py
index 55c574dbb1..7ae66889d7 100644
--- a/tests/topotests/zebra_multiple_connected/test_zebra_multiple_connected.py
+++ b/tests/topotests/zebra_multiple_connected/test_zebra_multiple_connected.py
@@ -22,6 +22,7 @@ from functools import partial
from lib.common_config import (
create_address_on_interface,
create_interface_in_kernel,
+ shutdown_bringup_interface_in_kernel,
step,
)
from lib.topolog import logger
@@ -110,7 +111,7 @@ def test_zebra_connected_multiple():
router = tgen.gears["r1"]
router.run("ip route add 192.168.1.1/32 via 10.0.1.99 dev r1-eth1")
create_interface_in_kernel(tgen, router.name, "dummy1")
- router.run("ip link set dummy1 down")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "dummy1", False)
routes = "{}/{}/ip_route.json".format(CWD, router.name)
expected = json.loads(open(routes).read())
@@ -134,7 +135,7 @@ def test_zebra_system_recursion():
router.run("ip route add 10.0.1.30/32 dev r1-eth1")
router.run("ip route add 10.9.9.0/24 via 10.0.1.30 dev r1-eth1")
create_interface_in_kernel(tgen, router.name, "dummy2")
- router.run("ip link set dummy2 down")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "dummy2", False)
routes = "{}/{}/ip_route2.json".format(CWD, router.name)
expected = json.loads(open(routes).read())
@@ -212,7 +213,7 @@ def test_zebra_kernel_route_blackhole_add():
router = tgen.gears["r1"]
router.run("ip route add blackhole default")
- router.run("ip link set dev r1-eth1 down")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "r1-eth1", False)
kernel = "{}/{}/ip_route_kernel_blackhole.json".format(CWD, router.name)
expected = json.loads(open(kernel).read())
@@ -245,7 +246,7 @@ def test_zebra_kernel_route_interface_linkdown():
# link down
router2 = tgen.gears["r2"]
- router2.run("ip link set dev r2-eth2 down")
+ shutdown_bringup_interface_in_kernel(router2.tgen, router2.name, "r2-eth2", False)
kernel = "{}/{}/ip_route_kernel_interface_down.json".format(CWD, router.name)
expected = json.loads(open(kernel).read())
@@ -258,7 +259,7 @@ def test_zebra_kernel_route_interface_linkdown():
# link up
router2 = tgen.gears["r2"]
- router2.run("ip link set dev r2-eth2 up")
+ shutdown_bringup_interface_in_kernel(router2.tgen, router2.name, "r2-eth2", True)
kernel = "{}/{}/ip_route_kernel_interface_up.json".format(CWD, router.name)
expected = json.loads(open(kernel).read())
diff --git a/tests/topotests/zebra_nhg_check/test_zebra_nhg.py b/tests/topotests/zebra_nhg_check/test_zebra_nhg.py
index 3843b496c3..affe1f38b1 100644
--- a/tests/topotests/zebra_nhg_check/test_zebra_nhg.py
+++ b/tests/topotests/zebra_nhg_check/test_zebra_nhg.py
@@ -23,6 +23,7 @@ import json
from lib.common_config import (
kill_router_daemons,
+ shutdown_bringup_interface_in_kernel,
start_router_daemons,
)
@@ -392,7 +393,7 @@ def test_bgp_shutdown_some_links():
# Shutdown interfaces r2-eth30 through r2-eth49
step("Shutdown interfaces r2-eth30 through r2-eth49")
for i in range(30, 50):
- net["r2"].cmd(f"ip link set r2-eth{i} down")
+ shutdown_bringup_interface_in_kernel(tgen, 'r2', f"r2-eth{i}", False)
step("Test that 20 BGP peers are failed")
@@ -490,7 +491,7 @@ def test_bgp_shutdown_some_links():
step("Bring interfaces r2-eth30 through r2-eth49 back up")
# Bring interfaces r2-eth30 through r2-eth49 back up
for i in range(30, 50):
- net["r2"].cmd(f"ip link set r2-eth{i} up")
+ shutdown_bringup_interface_in_kernel(tgen, 'r2', f"r2-eth{i}", True)
step("Test that all BGP peers are established")
diff --git a/tests/topotests/zebra_nhg_delete_race/test_zebra_nhg_delete_race.py b/tests/topotests/zebra_nhg_delete_race/test_zebra_nhg_delete_race.py
index 87ccd85ae8..b762e7661f 100644
--- a/tests/topotests/zebra_nhg_delete_race/test_zebra_nhg_delete_race.py
+++ b/tests/topotests/zebra_nhg_delete_race/test_zebra_nhg_delete_race.py
@@ -46,6 +46,9 @@ errors are produced.
import os
import sys
import json
+import threading
+from time import sleep
+
import pytest
CWD = os.path.dirname(os.path.realpath(__file__))
@@ -55,7 +58,7 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
-from lib.common_config import step
+from lib.common_config import shutdown_bringup_interface_in_kernel, step
pytestmark = [pytest.mark.staticd]
@@ -171,7 +174,10 @@ def test_nhg_delete_race_with_kernel_cleanup():
r1.vtysh_cmd("\n".join(cfg_lines))
step("Bring interfaces down at ~1s (kernel GCs NHG, races with timer expiry)")
- r1.run("(sleep 1 && ip link set dev r1-eth0 down && ip link set dev r1-eth1 down) &")
+
+ sleep(1)
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "r1-eth0", False)
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "r1-eth1", False)
step("Wait for NHG to be fully cleaned up from zebra")
diff --git a/tests/topotests/zebra_protodown_connected/test_zebra_protodown_connected.py b/tests/topotests/zebra_protodown_connected/test_zebra_protodown_connected.py
index 7cb6016ac3..ce2df6c760 100644
--- a/tests/topotests/zebra_protodown_connected/test_zebra_protodown_connected.py
+++ b/tests/topotests/zebra_protodown_connected/test_zebra_protodown_connected.py
@@ -15,7 +15,10 @@ CWD = os.path.dirname(os.path.realpath(__file__))
sys.path.append(os.path.join(CWD, "../"))
# pylint: disable=C0413
-from lib.common_config import create_address_on_interface
+from lib.common_config import (
+ create_address_on_interface,
+ shutdown_bringup_interface_in_kernel,
+)
from lib.topogen import Topogen, get_topogen
from lib.topolog import logger
@@ -81,8 +84,13 @@ def test_physical_updown():
# Toggle up/down
for _ in range(20):
- vrrp2.run("ip link set vrrp2-eth0 down")
- vrrp2.run("ip link set vrrp2-eth0 up")
+ shutdown_bringup_interface_in_kernel(
+ vrrp2.tgen,
+ vrrp2.name,
+ "vrrp2-eth0",
+ False,
+ )
+ shutdown_bringup_interface_in_kernel(vrrp2.tgen, vrrp2.name, "vrrp2-eth0", True)
sleep(2)
@@ -109,13 +117,13 @@ def test_vlan_updown():
cmd = "ip link add link vrrp2-eth0 name {} type vlan id 101"
vrrp2.run(cmd.format(vlan_if))
create_address_on_interface(tgen, vrrp2.name, vlan_if, "50.0.0.1/24")
- vrrp2.run("ip link set {} up".format(vlan_if))
+ shutdown_bringup_interface_in_kernel(vrrp2.tgen, vrrp2.name, vlan_if, True)
sleep(2)
# Toggle up/down
for _ in range(20):
- vrrp2.run("ip link set {} down".format(vlan_if))
- vrrp2.run("ip link set {} up".format(vlan_if))
+ shutdown_bringup_interface_in_kernel(vrrp2.tgen, vrrp2.name, vlan_if, False)
+ shutdown_bringup_interface_in_kernel(vrrp2.tgen, vrrp2.name, vlan_if, True)
sleep(2)
@@ -144,13 +152,13 @@ def test_macvlan_updown():
cmd = "ip link add {} link vrrp2-eth0 type macvlan mode bridge"
vrrp2.run(cmd.format(macvlan))
create_address_on_interface(tgen, vrrp2.name, macvlan, "10.99.0.1/24")
- vrrp2.run("ip link set {} up".format(macvlan))
+ shutdown_bringup_interface_in_kernel(vrrp2.tgen, vrrp2.name, macvlan, True)
sleep(2)
# Toggle up/down
for _ in range(20):
- vrrp2.run("ip link set {} down".format(macvlan))
- vrrp2.run("ip link set {} up".format(macvlan))
+ shutdown_bringup_interface_in_kernel(vrrp2.tgen, vrrp2.name, macvlan, False)
+ shutdown_bringup_interface_in_kernel(vrrp2.tgen, vrrp2.name, macvlan, True)
sleep(2)
@@ -179,13 +187,13 @@ def test_rapid_updown():
cmd = "ip link add link vrrp2-eth0 name {} type vlan id 102"
vrrp2.run(cmd.format(vlan_if))
create_address_on_interface(tgen, vrrp2.name, vlan_if, "60.0.0.1/24")
- vrrp2.run("ip link set {} up".format(vlan_if))
+ shutdown_bringup_interface_in_kernel(vrrp2.tgen, vrrp2.name, vlan_if, True)
sleep(2)
# Rapid up/down
for _ in range(30):
- vrrp2.run("ip link set {} down".format(vlan_if))
- vrrp2.run("ip link set {} up".format(vlan_if))
+ shutdown_bringup_interface_in_kernel(vrrp2.tgen, vrrp2.name, vlan_if, False)
+ shutdown_bringup_interface_in_kernel(vrrp2.tgen, vrrp2.name, vlan_if, True)
sleep(2)
diff --git a/tests/topotests/zebra_rib/test_zebra_rib.py b/tests/topotests/zebra_rib/test_zebra_rib.py
index b028b9d99f..27955ee465 100644
--- a/tests/topotests/zebra_rib/test_zebra_rib.py
+++ b/tests/topotests/zebra_rib/test_zebra_rib.py
@@ -27,7 +27,7 @@ sys.path.append(os.path.join(CWD, "../"))
# pylint: disable=C0413
# Import topogen and topotest helpers
from lib import topotest
-from lib.common_config import step
+from lib.common_config import step, shutdown_bringup_interface_in_kernel
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
from time import sleep
@@ -47,7 +47,7 @@ def config_macvlan(tgen, r_str, device, macvlan):
router.run(
"ip link add {} link {} type macvlan mode bridge".format(macvlan, device)
)
- router.run("ip link set {} up".format(macvlan))
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, macvlan, True)
def setup_module(mod):
@@ -167,7 +167,7 @@ configure terminal
step("Add VRF {} and assign it r1-eth0 interface".format(vrf))
r1.run("ip link add {} type vrf table {}".format(vrf, table_id))
- r1.run("ip link set {} up".format(vrf))
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, vrf, True)
r1.run("ip link set dev r1-eth0 master {}".format(vrf))
step("Add static routes to VRF {}".format(vrf))
diff --git a/tests/topotests/zebra_startup_speeds/test_zebra_startup_speeds.py b/tests/topotests/zebra_startup_speeds/test_zebra_startup_speeds.py
index 2c39b6ba40..dce68e4de0 100644
--- a/tests/topotests/zebra_startup_speeds/test_zebra_startup_speeds.py
+++ b/tests/topotests/zebra_startup_speeds/test_zebra_startup_speeds.py
@@ -18,7 +18,7 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
-from lib.common_config import step
+from lib.common_config import step, shutdown_bringup_interface_in_kernel
from time import sleep
@@ -143,19 +143,29 @@ def test_bond_coming_up():
step("Shutdown r1-eth[0-9] interfaces")
for i in range(10):
- router.cmd(f"ip link set r1-eth{i} down")
+ shutdown_bringup_interface_in_kernel(
+ router.tgen,
+ router.name,
+ f"r1-eth{i}",
+ False,
+ )
step("Create bond0")
router.cmd(f"ip link add bond0 type bond")
- router.cmd(f"ip link set bond0 up")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "bond0", True)
# This is intentionally sleeping 3 seconds between
# the addition of each member to the bond. I want
# the speed to be checked multiple times in zebra
step("Add interfaces to the bond")
for i in range(10):
router.cmd(f"ip link set r1-eth{i} master bond0")
- router.cmd(f"ip link set r1-eth{i} up")
+ shutdown_bringup_interface_in_kernel(
+ router.tgen,
+ router.name,
+ f"r1-eth{i}",
+ True,
+ )
sleep(3)
step("Check that bond0 speed is 100000")
@@ -185,8 +195,8 @@ def test_bond_interfaces_going_up_down():
pytest.skip("Skipped because of router(s) failure")
router = tgen.gears["r1"]
- router.cmd(f"ip link set r1-eth5 down")
- router.cmd(f"ip link set r1-eth6 down")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "r1-eth5", False)
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "r1-eth6", False)
step("Ensure that bond0's speed actually changes to 80000")
test_func = partial(check_interface_speed, router, "bond0", 80000)
@@ -195,7 +205,7 @@ def test_bond_interfaces_going_up_down():
assert success, f"bond0 speed check failed: {result}"
step("Ensure that bond0's speed goes up to 90000")
- router.cmd(f"ip link set r1-eth5 up")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "r1-eth5", True)
test_func = partial(check_interface_speed, router, "bond0", 90000)
success, result = topotest.run_and_expect(test_func, None, count=20, wait=1)
@@ -203,7 +213,7 @@ def test_bond_interfaces_going_up_down():
assert success, f"bond0 speed check failed: {result}"
step("Ensure that bond0's speed goes up to 100k again")
- router.cmd(f"ip link set r1-eth6 up")
+ shutdown_bringup_interface_in_kernel(router.tgen, router.name, "r1-eth6", True)
test_func = partial(check_interface_speed, router, "bond0", 100000)
success, result = topotest.run_and_expect(test_func, None, count=20, wait=1)
diff --git a/tests/topotests/zebra_vrf_metaq_leak/test_zebra_vrf_metaq_leak.py b/tests/topotests/zebra_vrf_metaq_leak/test_zebra_vrf_metaq_leak.py
index ddd4e41134..e7230e242e 100644
--- a/tests/topotests/zebra_vrf_metaq_leak/test_zebra_vrf_metaq_leak.py
+++ b/tests/topotests/zebra_vrf_metaq_leak/test_zebra_vrf_metaq_leak.py
@@ -50,7 +50,11 @@ sys.path.append(os.path.join(CWD, ".."))
# pylint: disable=C0413
from lib import topotest
-from lib.common_config import create_interface_in_kernel, step
+from lib.common_config import (
+ create_interface_in_kernel,
+ step,
+ shutdown_bringup_interface_in_kernel,
+)
from lib.topogen import Topogen, get_topogen
from lib.topolog import logger
@@ -76,9 +80,9 @@ def teardown_module():
def _add_vrf_netdev(r1):
r1.run("ip link add {} type vrf table {}".format(VRF, TABLE))
- r1.run("ip link set {} up".format(VRF))
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, VRF, True)
r1.run("ip link set dev r1-eth0 master {}".format(VRF))
- r1.run("ip link set dev r1-eth0 up")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "r1-eth0", True)
def _add_kernel_routes(r1):
@@ -140,8 +144,8 @@ def test_vrf_disable_metaq_leak():
step("Flap an interface: parks RED's kernel route nodes on the frozen queue")
for _ in range(3):
- r1.run("ip link set metaqflap down")
- r1.run("ip link set metaqflap up")
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "metaqflap", False)
+ shutdown_bringup_interface_in_kernel(r1.tgen, r1.name, "metaqflap", True)
step("Disable VRF RED (remove netdev) -> meta_queue_free() flushes the queue")
# NOTE: "VRF disable" here is the zebra lifecycle event zebra_vrf_disable(),