On 04/08/2018 05:40 PM, Roman Bogorodskiy wrote:
> virNetDevTapGetRealDeviceName() is used on FreeBSD because interface
> names (such as one sees in output of tools like ifconfig(8)) might not
> match their /dev entity names, and for bhyve we need the latter.
> 
> Current implementation is not very efficient because in order to find
> /dev name, it goes through all /dev/tap* entries and tries to issue
> TAPGIFNAME ioctl on it. Not only this is slow, but also there's a bug in
> this implementation when more than one NIC is passed to a VM: once we
> find the tap interface we're looking for, we set its state to UP because
> opening it for issuing ioctl sets it DOWN, even if it was UP before.
> When we have more than 1 NIC for a VM, we have only last one UP because
> others remain DOWN after unsuccessful attempts to match interface name.
> 
> New implementation just uses sysctl(3), so it should be faster and
> won't make interfaces go down to get name.
> ---
>  src/util/virnetdevtap.c | 71 
> +++++++++++++++++++++----------------------------
>  1 file changed, 30 insertions(+), 41 deletions(-)

ACK with this squashed in:

diff --git i/src/util/virnetdevtap.c w/src/util/virnetdevtap.c
index afe4f0b3c1..bd0710ad2e 100644
--- i/src/util/virnetdevtap.c
+++ w/src/util/virnetdevtap.c
@@ -40,7 +40,6 @@
 #include <string.h>
 #include <unistd.h>
 #include <regex.h>
-#include <dirent.h>
 #include <sys/types.h>
 #include <sys/ioctl.h>
 #include <net/if.h>
@@ -129,13 +128,14 @@ virNetDevTapGetRealDeviceName(char *ifname 
ATTRIBUTE_UNUSED)
         return NULL;
     }
 
-    ret = malloc(len);
+    if (VIR_ALLOC_N(ret, len) < 0)
+        return NULL;
 
     if (sysctl(name, 6, ret, &len, 0, 0) < 0) {
         virReportSystemError(errno,
                              _("Unable to get driver name for '%s'"),
                              ifname);
-        free(ret);
+        VIR_FREE(ret);
         return NULL;
     }
 


Michal

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to