summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xsmoketest/scripts/cli/test_interfaces_virtual-ethernet.py18
-rwxr-xr-xsrc/conf_mode/interfaces_virtual-ethernet.py3
2 files changed, 20 insertions, 1 deletions
diff --git a/smoketest/scripts/cli/test_interfaces_virtual-ethernet.py b/smoketest/scripts/cli/test_interfaces_virtual-ethernet.py
index 9bcc1cb1f..96ca36830 100755
--- a/smoketest/scripts/cli/test_interfaces_virtual-ethernet.py
+++ b/smoketest/scripts/cli/test_interfaces_virtual-ethernet.py
@@ -19,6 +19,9 @@ import unittest
from base_interfaces_test import BasicInterfaceTest
from base_vyostest_shim import VyOSUnitTestSHIM
+from vyos.configsession import ConfigSessionError
+from vyos.utils.network import interface_exists
+
class VEthInterfaceTest(BasicInterfaceTest.TestCase):
@classmethod
def setUpClass(cls):
@@ -32,5 +35,20 @@ class VEthInterfaceTest(BasicInterfaceTest.TestCase):
# call base-classes classmethod
super(VEthInterfaceTest, cls).setUpClass()
+ def test_invalid_peers(self):
+ peer = ('veth1001', 'veth1002')
+ self.cli_set(self._base_path + [peer[0]])
+ self.cli_set(self._base_path + [peer[1], 'peer-name', peer[0]])
+
+ # Configuration mismatch between "veth1001" and "veth1001"
+ with self.assertRaises(ConfigSessionError):
+ self.cli_commit()
+
+ self.cli_set(self._base_path + [peer[0], 'peer-name', peer[1]])
+ self.cli_commit()
+
+ self.assertTrue(interface_exists(peer[0]))
+ self.assertTrue(interface_exists(peer[1]))
+
if __name__ == '__main__':
unittest.main(verbosity=2, failfast=VyOSUnitTestSHIM.TestCase.debug_on())
diff --git a/src/conf_mode/interfaces_virtual-ethernet.py b/src/conf_mode/interfaces_virtual-ethernet.py
index 81a12c581..4bcabe304 100755
--- a/src/conf_mode/interfaces_virtual-ethernet.py
+++ b/src/conf_mode/interfaces_virtual-ethernet.py
@@ -27,6 +27,7 @@ from vyos.configverify import verify_bridge_delete
from vyos.configverify import verify_vrf
from vyos.configverify import verify_mtu_ipv6
from vyos.ifconfig import VethIf
+from vyos.utils.dict import dict_search
from vyos.utils.network import interface_exists
airbag.enable()
@@ -82,7 +83,7 @@ def verify(veth):
raise ConfigError(f'Used peer-name "{peer_name}" on interface "{ifname}" ' \
'is not configured!')
- if veth['other_interfaces'][peer_name]['peer_name'] != ifname:
+ if dict_search(f'other_interfaces.{peer_name}.peer_name', veth) != ifname:
raise ConfigError(
f'Configuration mismatch between "{ifname}" and "{peer_name}"!')