From 94f345340f69333dbb06fcf5f59caa8176ebecc6 Mon Sep 17 00:00:00 2001
From: Viacheslav Hletenko <v.gletenko@vyos.io>
Date: Fri, 2 Dec 2022 14:16:18 +0000
Subject: T4825: Verify if you are trying to add a new vethX to exists pair

Verify if you are trying to add a new vethX to exists pair:

  set int virtual-ethernet veth0 peer-name 'veth1'
  set int virtual-ethernet veth1 peer-name 'veth0'
  set int virtual-ethernet veth12 peer-name 'veth0'

Verify veth-name and peer-name cannot be the same:

  set interfaces virtual-ethernet veth0 peer-name veth0
---
 src/conf_mode/interfaces-virtual-ethernet.py | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

(limited to 'src')

diff --git a/src/conf_mode/interfaces-virtual-ethernet.py b/src/conf_mode/interfaces-virtual-ethernet.py
index 53422ad2d..8efe89c41 100755
--- a/src/conf_mode/interfaces-virtual-ethernet.py
+++ b/src/conf_mode/interfaces-virtual-ethernet.py
@@ -68,12 +68,21 @@ def verify(veth):
     if 'peer_name' not in veth:
         raise ConfigError(f'Remote peer name must be set for "{veth["ifname"]}"!')
 
+    peer_name = veth['peer_name']
+    ifname = veth['ifname']
+
     if veth['peer_name'] not in veth['other_interfaces']:
-        peer_name = veth['peer_name']
-        ifname = veth['ifname']
         raise ConfigError(f'Used peer-name "{peer_name}" on interface "{ifname}" ' \
                           'is not configured!')
 
+    if veth['other_interfaces'][peer_name]['peer_name'] != ifname:
+        raise ConfigError(
+            f'Configuration mismatch between "{ifname}" and "{peer_name}"!')
+
+    if peer_name == ifname:
+        raise ConfigError(
+            f'Peer-name "{peer_name}" cannot be the same as interface "{ifname}"!')
+
     return None
 
 
-- 
cgit v1.2.3