conf: don't ignore <target dev='blah'/> for macvtap interfaces

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
This commit is contained in:
Laine Stump 2017-03-26 21:57:54 -04:00
parent a05400ef55
commit 9cb891141c
2 changed files with 9 additions and 4 deletions

View File

@ -5210,9 +5210,9 @@ qemu-kvm -net nic,model=? /dev/null
If no target is specified, certain hypervisors will If no target is specified, certain hypervisors will
automatically generate a name for the created tun device. This automatically generate a name for the created tun device. This
name can be manually specified, however the name <i>should not name can be manually specified, however the name <i>should not
start with either 'vnet' or 'vif'</i>, which are prefixes start with either 'vnet', 'vif', 'macvtap', or 'macvlan'</i>,
reserved by libvirt and certain hypervisors. Manually specified which are prefixes reserved by libvirt and certain hypervisors.
targets using these prefixes may be ignored. Manually specified targets using these prefixes may be ignored.
</p> </p>
<p> <p>

View File

@ -55,6 +55,7 @@
#include "virtpm.h" #include "virtpm.h"
#include "virstring.h" #include "virstring.h"
#include "virnetdev.h" #include "virnetdev.h"
#include "virnetdevmacvlan.h"
#include "virhostdev.h" #include "virhostdev.h"
#include "virmdev.h" #include "virmdev.h"
@ -10029,8 +10030,12 @@ virDomainNetDefParseXML(virDomainXMLOptionPtr xmlopt,
def->data.direct.linkdev = dev; def->data.direct.linkdev = dev;
dev = NULL; 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); VIR_FREE(ifname);
}
break; break;