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(a)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