[libvirt] [PATCHv2] virNetDevVethCreate: assign container if name based on parent if name

Oskari Saarenmaa os at ohmu.fi
Thu Aug 29 10:00:15 UTC 2013


Replace the loop trying to find a free veth interface name for the container
by assigning the container if name to parent name + 'p' by default.
Interface name selection logic is susceptible to race conditions, so try to
select just one name by default and use that as a template for the second
name.  The parent name can also be overriden in domain configuration.

Signed-off-by: Oskari Saarenmaa <os at ohmu.fi>
---
v2: generate first name as before (if it wasn't given by the caller), and
use the parent if name as a template for the container if name so that the
caller doesn't have to select two names (which is not possible at the
moment.)

 src/util/virnetdevveth.c | 12 +++---------
 1 file changed, 3 insertions(+), 9 deletions(-)

diff --git a/src/util/virnetdevveth.c b/src/util/virnetdevveth.c
index 039767f..91e2829 100644
--- a/src/util/virnetdevveth.c
+++ b/src/util/virnetdevveth.c
@@ -114,20 +114,14 @@ int virNetDevVethCreate(char** veth1, char** veth2)
     }
     argv[3] = *veth1;
 
-    while (*veth2 == NULL) {
-        if ((vethDev = virNetDevVethGetFreeName(veth2, vethDev)) < 0) {
+    if (*veth2 == NULL) {
+        /* Append a 'p' to veth1 if name */
+        if (virAsprintf(veth2, "%sp", *veth1) < 0) {
             if (veth1_alloc)
                 VIR_FREE(*veth1);
             goto cleanup;
         }
 
-        /* Just make sure they didn't accidentally get same name */
-        if (STREQ(*veth1, *veth2)) {
-            vethDev++;
-            VIR_FREE(*veth2);
-            continue;
-        }
-
         VIR_DEBUG("Assigned guest: %s", *veth2);
         veth2_alloc = true;
     }
-- 
1.8.3.1




More information about the libvir-list mailing list