diff --git a/src/lxc/lxc_process.c b/src/lxc/lxc_process.c index 3353dc1c2948493db9d9d22fcd1e76957fd87185..ed30c37fd12b991921ffceffbd2893785b1e2547 100644 --- a/src/lxc/lxc_process.c +++ b/src/lxc/lxc_process.c @@ -331,12 +331,12 @@ char *virLXCProcessSetupInterfaceDirect(virConnectPtr conn, net->ifname, &net->mac, virDomainNetGetActualDirectDev(net), virDomainNetGetActualDirectMode(net), - false, false, def->uuid, + false, def->uuid, virDomainNetGetActualVirtPortProfile(net), &res_ifname, VIR_NETDEV_VPORT_PROFILE_OP_CREATE, cfg->stateDir, - virDomainNetGetActualBandwidth(net)) < 0) + virDomainNetGetActualBandwidth(net), 0) < 0) goto cleanup; ret = res_ifname; diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 2184caa9dae2c1ba5fc19839e025a9664fc368e3..c84c7c3c947bd4be0b1a711a40c7a33aa6eb39fa 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -177,6 +177,7 @@ qemuPhysIfaceConnect(virDomainDefPtr def, char *res_ifname = NULL; int vnet_hdr = 0; virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); + unsigned int macvlan_create_flags = VIR_NETDEV_MACVLAN_CREATE_WITH_TAP; if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_VNET_HDR) && net->model && STREQ(net->model, "virtio")) @@ -186,11 +187,12 @@ qemuPhysIfaceConnect(virDomainDefPtr def, net->ifname, &net->mac, virDomainNetGetActualDirectDev(net), virDomainNetGetActualDirectMode(net), - true, vnet_hdr, def->uuid, + vnet_hdr, def->uuid, virDomainNetGetActualVirtPortProfile(net), &res_ifname, vmop, cfg->stateDir, - virDomainNetGetActualBandwidth(net)); + virDomainNetGetActualBandwidth(net), + macvlan_create_flags); if (rc >= 0) { virDomainAuditNetDevice(def, net, res_ifname, true); VIR_FREE(net->ifname); diff --git a/src/util/virnetdevmacvlan.c b/src/util/virnetdevmacvlan.c index 054194b84b522b4f7918b6964ae4488d2065a8a4..50aabc58cca8d324a3a41e403c1d05b893e54d9b 100644 --- a/src/util/virnetdevmacvlan.c +++ b/src/util/virnetdevmacvlan.c @@ -796,26 +796,31 @@ virNetDevMacVLanVPortProfileRegisterCallback(const char *ifname, * @res_ifname: Pointer to a string pointer where the actual name of the * interface will be stored into if everything succeeded. It is up * to the caller to free the string. + * @flags: OR of virNetDevMacVLanCreateFlags. * - * Returns file descriptor of the tap device in case of success with @withTap, - * otherwise returns 0; returns -1 on error. + * Returns file descriptor of the tap device in case of success with + * @flags & VIR_NETDEV_MACVLAN_CREATE_WITH_TAP, otherwise returns 0; returns + * -1 on error. */ int virNetDevMacVLanCreateWithVPortProfile(const char *tgifname, const virMacAddr *macaddress, const char *linkdev, virNetDevMacVLanMode mode, - bool withTap, int vnet_hdr, const unsigned char *vmuuid, virNetDevVPortProfilePtr virtPortProfile, char **res_ifname, virNetDevVPortProfileOp vmOp, char *stateDir, - virNetDevBandwidthPtr bandwidth) + virNetDevBandwidthPtr bandwidth, + unsigned int flags) { - const char *type = withTap ? "macvtap" : "macvlan"; - const char *prefix = withTap ? MACVTAP_NAME_PREFIX : MACVLAN_NAME_PREFIX; - const char *pattern = withTap ? MACVTAP_NAME_PATTERN : MACVLAN_NAME_PATTERN; + const char *type = (flags & VIR_NETDEV_MACVLAN_CREATE_WITH_TAP) ? + "macvtap" : "macvlan"; + const char *prefix = (flags & VIR_NETDEV_MACVLAN_CREATE_WITH_TAP) ? + MACVTAP_NAME_PREFIX : MACVLAN_NAME_PREFIX; + const char *pattern = (flags & VIR_NETDEV_MACVLAN_CREATE_WITH_TAP) ? + MACVTAP_NAME_PATTERN : MACVLAN_NAME_PATTERN; int c, rc; char ifname[IFNAMSIZ]; int retries, do_retry = 0; @@ -903,7 +908,7 @@ int virNetDevMacVLanCreateWithVPortProfile(const char *tgifname, goto disassociate_exit; } - if (withTap) { + if (flags & VIR_NETDEV_MACVLAN_CREATE_WITH_TAP) { if ((rc = virNetDevMacVLanTapOpen(cr_ifname, 10)) < 0) goto disassociate_exit; @@ -922,7 +927,7 @@ int virNetDevMacVLanCreateWithVPortProfile(const char *tgifname, } if (virNetDevBandwidthSet(cr_ifname, bandwidth, false) < 0) { - if (withTap) + if (flags & VIR_NETDEV_MACVLAN_CREATE_WITH_TAP) VIR_FORCE_CLOSE(rc); /* sets rc to -1 */ else rc = -1; @@ -1066,15 +1071,16 @@ int virNetDevMacVLanCreateWithVPortProfile(const char *ifname ATTRIBUTE_UNUSED, const virMacAddr *macaddress ATTRIBUTE_UNUSED, const char *linkdev ATTRIBUTE_UNUSED, virNetDevMacVLanMode mode ATTRIBUTE_UNUSED, - bool withTap ATTRIBUTE_UNUSED, int vnet_hdr ATTRIBUTE_UNUSED, const unsigned char *vmuuid ATTRIBUTE_UNUSED, virNetDevVPortProfilePtr virtPortProfile ATTRIBUTE_UNUSED, char **res_ifname ATTRIBUTE_UNUSED, virNetDevVPortProfileOp vmop ATTRIBUTE_UNUSED, char *stateDir ATTRIBUTE_UNUSED, - virNetDevBandwidthPtr bandwidth ATTRIBUTE_UNUSED) + virNetDevBandwidthPtr bandwidth ATTRIBUTE_UNUSED, + unsigned int flags) { + virCheckFlags(0, -1); virReportSystemError(ENOSYS, "%s", _("Cannot create macvlan devices on this platform")); return -1; diff --git a/src/util/virnetdevmacvlan.h b/src/util/virnetdevmacvlan.h index 9b15a31b20809b2a953a87ca7fd86514f355e90f..41aa4e20836af9c1dc4f9feca12ad09c9071846c 100644 --- a/src/util/virnetdevmacvlan.h +++ b/src/util/virnetdevmacvlan.h @@ -40,6 +40,12 @@ typedef enum { } virNetDevMacVLanMode; VIR_ENUM_DECL(virNetDevMacVLanMode) +typedef enum { + VIR_NETDEV_MACVLAN_CREATE_NONE = 0, + /* Create with a tap device */ + VIR_NETDEV_MACVLAN_CREATE_WITH_TAP = 1 << 0, +} virNetDevMacVLanCreateFlags; + int virNetDevMacVLanCreate(const char *ifname, const char *type, const virMacAddr *macaddress, @@ -56,16 +62,16 @@ int virNetDevMacVLanCreateWithVPortProfile(const char *ifname, const virMacAddr *macaddress, const char *linkdev, virNetDevMacVLanMode mode, - bool withTap, int vnet_hdr, const unsigned char *vmuuid, virNetDevVPortProfilePtr virtPortProfile, char **res_ifname, virNetDevVPortProfileOp vmop, char *stateDir, - virNetDevBandwidthPtr bandwidth) - ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(7) - ATTRIBUTE_NONNULL(9) ATTRIBUTE_NONNULL(11) ATTRIBUTE_RETURN_CHECK; + virNetDevBandwidthPtr bandwidth, + unsigned int flags) + ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(6) + ATTRIBUTE_NONNULL(8) ATTRIBUTE_NONNULL(10) ATTRIBUTE_RETURN_CHECK; int virNetDevMacVLanDeleteWithVPortProfile(const char *ifname, const virMacAddr *macaddress,