]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
conf: don't ignore <target dev='blah'/> for macvtap interfaces
authorLaine Stump <laine@laine.org>
Mon, 27 Mar 2017 01:57:54 +0000 (21:57 -0400)
committerLaine Stump <laine@laine.org>
Fri, 28 Apr 2017 13:43:52 +0000 (09:43 -0400)
The parser had been clearing out *all* suggested device names for
type='direct' (aka macvtap) interfaces. All of the code implementing
macvtap allows for a user-specified device name, so we should allow
it. In the case that an interface name starts with "macvtap" or
"macvlan" though, we do still clear it out, just as we do with "vnet"
(which is the prefix used for automatically generated tap device
names), since those are the prefixes for the names we autogenerate for
macvtap and macvlan devices.

Resolves: https://bugzilla.redhat.com/1335798

docs/formatdomain.html.in
src/conf/domain_conf.c

index 8f88dd6854700253643cbfa073916c8185536f88..8c884f4af9cb4bd8ef47c6be42d8d13d5ed38fe9 100644 (file)
@@ -5210,9 +5210,9 @@ qemu-kvm -net nic,model=? /dev/null
       If no target is specified, certain hypervisors will
       automatically generate a name for the created tun device. This
       name can be manually specified, however the name <i>should not
-      start with either 'vnet' or 'vif'</i>, which are prefixes
-      reserved by libvirt and certain hypervisors. Manually specified
-      targets using these prefixes may be ignored.
+      start with either 'vnet', 'vif', 'macvtap', or 'macvlan'</i>,
+      which are prefixes reserved by libvirt and certain hypervisors.
+      Manually specified targets using these prefixes may be ignored.
     </p>
 
     <p>
index 7f5da4e32f795b8837af42bf43003d5bf9d4dd5f..f25a60570cbca70848518f3cb1bde8acff8eec2c 100644 (file)
@@ -55,6 +55,7 @@
 #include "virtpm.h"
 #include "virstring.h"
 #include "virnetdev.h"
+#include "virnetdevmacvlan.h"
 #include "virhostdev.h"
 #include "virmdev.h"
 
@@ -10029,8 +10030,12 @@ virDomainNetDefParseXML(virDomainXMLOptionPtr xmlopt,
         def->data.direct.linkdev = dev;
         dev = NULL;
 
-        if (flags & VIR_DOMAIN_DEF_PARSE_INACTIVE)
+        if (ifname &&
+            flags & VIR_DOMAIN_DEF_PARSE_INACTIVE &&
+            (STRPREFIX(ifname, VIR_NET_GENERATED_MACVTAP_PREFIX) ||
+             STRPREFIX(ifname, VIR_NET_GENERATED_MACVTAP_PREFIX))) {
             VIR_FREE(ifname);
+        }
 
         break;