summaryrefslogtreecommitdiff
path: root/smoketest/scripts/cli
diff options
context:
space:
mode:
authorChristian Breunig <christian@breunig.cc>2025-02-23 13:38:13 +0100
committerChristian Breunig <christian@breunig.cc>2025-02-23 13:41:13 +0100
commit3c0033508e671db72057cfdb535c530423e3b44f (patch)
treead36d494adcab2b8a557321d1adb5b8f1193bb3c /smoketest/scripts/cli
parent5d9d232fd93ad5bf89ba44a2d0ec3b196599fa74 (diff)
downloadvyos-1x-3c0033508e671db72057cfdb535c530423e3b44f.tar.gz
vyos-1x-3c0033508e671db72057cfdb535c530423e3b44f.zip
bridge: T7192: fix verify() to not allow member interface used multiple times
When configuring set interfaces bridge br10 member interface eth1 set interfaces bridge br20 member interface eth1 commit Checking the interface assignment afterwards shows 242: br20: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000 link/ether 62:34:3a:8a:fe:49 brd ff:ff:ff:ff:ff:ff [edit] 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br20 state UP mode DEFAULT group default qlen 1000 link/ether 00:50:56:b3:cd:ba brd ff:ff:ff:ff:ff:ff altname enp0s19 altname ens19 The later addition wins and the CLI reports eth1 is assigned to br20 "master br20". A member interface can not be used multiple times.
Diffstat (limited to 'smoketest/scripts/cli')
-rwxr-xr-xsmoketest/scripts/cli/test_interfaces_bridge.py15
1 files changed, 15 insertions, 0 deletions
diff --git a/smoketest/scripts/cli/test_interfaces_bridge.py b/smoketest/scripts/cli/test_interfaces_bridge.py
index 54c981adc..4041b3ef3 100755
--- a/smoketest/scripts/cli/test_interfaces_bridge.py
+++ b/smoketest/scripts/cli/test_interfaces_bridge.py
@@ -158,6 +158,21 @@ class BridgeInterfaceTest(BasicInterfaceTest.TestCase):
# verify member is assigned to the bridge
self.assertEqual(interface, tmp['master'])
+ def test_bridge_multi_use_member(self):
+ # Define available bonding hash policies
+ bridges = ['br10', 'br20', 'br30']
+ for interface in bridges:
+ for member in self._members:
+ self.cli_set(self._base_path + [interface, 'member', 'interface', member])
+
+ # check validate() - can not use the same member interfaces multiple times
+ with self.assertRaises(ConfigSessionError):
+ self.cli_commit()
+ # only keep the first bond interface configuration
+ for interface in bridges[1:]:
+ self.cli_delete(self._base_path + [interface])
+
+ self.cli_commit()
def test_add_remove_bridge_member(self):
# Add member interfaces to bridge and set STP cost/priority