about summary refs log tree commit diff
path: root/src/core/devices/nm-device-veth.c
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2022-10-04 00:56:46 +0200
committerMichael Biebl <biebl@debian.org>2022-10-04 00:56:46 +0200
commit3612e6355f3f40d264ec4657547761069baa5430 (patch)
tree768e4f5b37b66f540dd7030aa2eaff2ac7bb0168 /src/core/devices/nm-device-veth.c
parent7e9f00a3be8f65535e6620b344443ec4d403212b (diff)
parent6f7fcde10e47d8af865af336becf1fd8a446e62e (diff)
Merge tag 'debian/1.40.0-1' into debian/bullseye-backports
network-manager Debian release 1.40.0-1
Diffstat (limited to 'src/core/devices/nm-device-veth.c')
-rw-r--r--src/core/devices/nm-device-veth.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/core/devices/nm-device-veth.c b/src/core/devices/nm-device-veth.c
index 8c95a293..63dfd8bb 100644
--- a/src/core/devices/nm-device-veth.c
+++ b/src/core/devices/nm-device-veth.c
@@ -82,6 +82,8 @@ create_and_realize(NMDevice              *device,
                    GError               **error)
 {
     const char    *iface = nm_device_get_iface(device);
+    const char    *peer;
+    NMDevice      *peer_device;
     NMSettingVeth *s_veth;
     int            r;
 
@@ -96,10 +98,15 @@ create_and_realize(NMDevice              *device,
         return FALSE;
     }
 
-    r = nm_platform_link_veth_add(nm_device_get_platform(device),
-                                  iface,
-                                  nm_setting_veth_get_peer(s_veth),
-                                  out_plink);
+    peer        = nm_setting_veth_get_peer(s_veth);
+    peer_device = nm_manager_get_device(NM_MANAGER_GET, peer, NM_DEVICE_TYPE_VETH);
+    if (peer_device) {
+        /* The veth device and its peer already exist. No need to create it again. */
+        if (nm_streq0(nm_device_get_iface(nm_device_parent_get_device(peer_device)), iface))
+            return TRUE;
+    }
+
+    r = nm_platform_link_veth_add(nm_device_get_platform(device), iface, peer, out_plink);
     if (r < 0) {
         g_set_error(error,
                     NM_DEVICE_ERROR,