mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-20 07:59:00 +00:00
Rename Macvtap management APIs
In preparation for code re-organization, rename the Macvtap management APIs to have the following patterns virNetDevMacVLanXXXXX - macvlan/macvtap interface management virNetDevVPortProfileXXXX - virtual port profile management * src/util/macvtap.c, src/util/macvtap.h: Rename APIs * src/conf/domain_conf.c, src/network/bridge_driver.c, src/qemu/qemu_command.c, src/qemu/qemu_command.h, src/qemu/qemu_driver.c, src/qemu/qemu_hotplug.c, src/qemu/qemu_migration.c, src/qemu/qemu_process.c, src/qemu/qemu_process.h: Update for renamed APIs
This commit is contained in:
parent
a7c6ce0d52
commit
43925db7ca
@ -3102,7 +3102,7 @@ virDomainActualNetDefParseXML(xmlNodePtr node,
|
||||
mode = virXPathString("string(./source[1]/@mode)", ctxt);
|
||||
if (mode) {
|
||||
int m;
|
||||
if ((m = virMacvtapModeTypeFromString(mode)) < 0) {
|
||||
if ((m = virNetDevMacVLanModeTypeFromString(mode)) < 0) {
|
||||
virDomainReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("Unkown mode '%s' in interface <actual> element"),
|
||||
mode);
|
||||
@ -3416,14 +3416,14 @@ virDomainNetDefParseXML(virCapsPtr caps,
|
||||
|
||||
if (mode != NULL) {
|
||||
int m;
|
||||
if ((m = virMacvtapModeTypeFromString(mode)) < 0) {
|
||||
if ((m = virNetDevMacVLanModeTypeFromString(mode)) < 0) {
|
||||
virDomainReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
_("Unkown mode has been specified"));
|
||||
goto error;
|
||||
}
|
||||
def->data.direct.mode = m;
|
||||
} else
|
||||
def->data.direct.mode = VIR_MACVTAP_MODE_VEPA;
|
||||
def->data.direct.mode = VIR_NETDEV_MACVLAN_MODE_VEPA;
|
||||
|
||||
def->data.direct.virtPortProfile = virtPort;
|
||||
virtPort = NULL;
|
||||
@ -9720,7 +9720,7 @@ virDomainActualNetDefFormat(virBufferPtr buf,
|
||||
virBufferEscapeString(buf, " dev='%s'",
|
||||
def->data.direct.linkdev);
|
||||
|
||||
mode = virMacvtapModeTypeToString(def->data.direct.mode);
|
||||
mode = virNetDevMacVLanModeTypeToString(def->data.direct.mode);
|
||||
if (!mode) {
|
||||
virDomainReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("unexpected source mode %d"),
|
||||
@ -9825,7 +9825,7 @@ virDomainNetDefFormat(virBufferPtr buf,
|
||||
virBufferEscapeString(buf, " <source dev='%s'",
|
||||
def->data.direct.linkdev);
|
||||
virBufferAsprintf(buf, " mode='%s'",
|
||||
virMacvtapModeTypeToString(def->data.direct.mode));
|
||||
virNetDevMacVLanModeTypeToString(def->data.direct.mode));
|
||||
virBufferAddLit(buf, "/>\n");
|
||||
virBufferAdjustIndent(buf, 6);
|
||||
if (virNetDevVPortProfileFormat(def->data.direct.virtPortProfile, buf) < 0)
|
||||
|
@ -739,8 +739,8 @@ virLogUnlock;
|
||||
|
||||
|
||||
# macvtap.h
|
||||
virVMOperationTypeFromString;
|
||||
virVMOperationTypeToString;
|
||||
virNetDevVPortProfileOpTypeFromString;
|
||||
virNetDevVPortProfileOpTypeToString;
|
||||
|
||||
|
||||
# memory.h
|
||||
|
@ -2781,16 +2781,16 @@ networkAllocateActualDevice(virDomainNetDefPtr iface)
|
||||
iface->data.network.actual->type = VIR_DOMAIN_NET_TYPE_DIRECT;
|
||||
switch (netdef->forwardType) {
|
||||
case VIR_NETWORK_FORWARD_BRIDGE:
|
||||
iface->data.network.actual->data.direct.mode = VIR_MACVTAP_MODE_BRIDGE;
|
||||
iface->data.network.actual->data.direct.mode = VIR_NETDEV_MACVLAN_MODE_BRIDGE;
|
||||
break;
|
||||
case VIR_NETWORK_FORWARD_PRIVATE:
|
||||
iface->data.network.actual->data.direct.mode = VIR_MACVTAP_MODE_PRIVATE;
|
||||
iface->data.network.actual->data.direct.mode = VIR_NETDEV_MACVLAN_MODE_PRIVATE;
|
||||
break;
|
||||
case VIR_NETWORK_FORWARD_VEPA:
|
||||
iface->data.network.actual->data.direct.mode = VIR_MACVTAP_MODE_VEPA;
|
||||
iface->data.network.actual->data.direct.mode = VIR_NETDEV_MACVLAN_MODE_VEPA;
|
||||
break;
|
||||
case VIR_NETWORK_FORWARD_PASSTHROUGH:
|
||||
iface->data.network.actual->data.direct.mode = VIR_MACVTAP_MODE_PASSTHRU;
|
||||
iface->data.network.actual->data.direct.mode = VIR_NETDEV_MACVLAN_MODE_PASSTHRU;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -139,7 +139,7 @@ qemuPhysIfaceConnect(virDomainDefPtr def,
|
||||
struct qemud_driver *driver,
|
||||
virDomainNetDefPtr net,
|
||||
virBitmapPtr qemuCaps,
|
||||
enum virVMOperationType vmop)
|
||||
enum virNetDevVPortProfileOp vmop)
|
||||
{
|
||||
int rc;
|
||||
#if WITH_MACVTAP
|
||||
@ -150,14 +150,14 @@ qemuPhysIfaceConnect(virDomainDefPtr def,
|
||||
net->model && STREQ(net->model, "virtio"))
|
||||
vnet_hdr = 1;
|
||||
|
||||
rc = openMacvtapTap(net->ifname, net->mac,
|
||||
virDomainNetGetActualDirectDev(net),
|
||||
virDomainNetGetActualDirectMode(net),
|
||||
vnet_hdr, def->uuid,
|
||||
virDomainNetGetActualDirectVirtPortProfile(net),
|
||||
&res_ifname,
|
||||
vmop, driver->stateDir,
|
||||
virDomainNetGetActualBandwidth(net));
|
||||
rc = virNetDevMacVLanCreate(net->ifname, net->mac,
|
||||
virDomainNetGetActualDirectDev(net),
|
||||
virDomainNetGetActualDirectMode(net),
|
||||
vnet_hdr, def->uuid,
|
||||
virDomainNetGetActualDirectVirtPortProfile(net),
|
||||
&res_ifname,
|
||||
vmop, driver->stateDir,
|
||||
virDomainNetGetActualBandwidth(net));
|
||||
if (rc >= 0) {
|
||||
virDomainAuditNetDevice(def, net, res_ifname, true);
|
||||
VIR_FREE(net->ifname);
|
||||
@ -3479,7 +3479,7 @@ qemuBuildCommandLine(virConnectPtr conn,
|
||||
const char *migrateFrom,
|
||||
int migrateFd,
|
||||
virDomainSnapshotObjPtr snapshot,
|
||||
enum virVMOperationType vmop)
|
||||
enum virNetDevVPortProfileOp vmop)
|
||||
{
|
||||
int i;
|
||||
struct utsname ut;
|
||||
|
@ -50,7 +50,7 @@ virCommandPtr qemuBuildCommandLine(virConnectPtr conn,
|
||||
const char *migrateFrom,
|
||||
int migrateFd,
|
||||
virDomainSnapshotObjPtr current_snapshot,
|
||||
enum virVMOperationType vmop)
|
||||
enum virNetDevVPortProfileOp vmop)
|
||||
ATTRIBUTE_NONNULL(1);
|
||||
|
||||
/* With vlan == -1, use netdev syntax, else old hostnet */
|
||||
@ -135,7 +135,7 @@ int qemuPhysIfaceConnect(virDomainDefPtr def,
|
||||
struct qemud_driver *driver,
|
||||
virDomainNetDefPtr net,
|
||||
virBitmapPtr qemuCaps,
|
||||
enum virVMOperationType vmop);
|
||||
enum virNetDevVPortProfileOp vmop);
|
||||
|
||||
int qemuOpenVhostNet(virDomainDefPtr def,
|
||||
virDomainNetDefPtr net,
|
||||
|
@ -1325,7 +1325,7 @@ static virDomainPtr qemudDomainCreate(virConnectPtr conn, const char *xml,
|
||||
if (qemuProcessStart(conn, driver, vm, NULL,
|
||||
(flags & VIR_DOMAIN_START_PAUSED) != 0,
|
||||
(flags & VIR_DOMAIN_START_AUTODESTROY) != 0,
|
||||
-1, NULL, NULL, VIR_VM_OP_CREATE) < 0) {
|
||||
-1, NULL, NULL, VIR_NETDEV_VPORT_PROFILE_OP_CREATE) < 0) {
|
||||
virDomainAuditStart(vm, "booted", false);
|
||||
if (qemuDomainObjEndJob(driver, vm) > 0)
|
||||
qemuDomainRemoveInactive(driver, vm);
|
||||
@ -4099,7 +4099,7 @@ qemuDomainSaveImageStartVM(virConnectPtr conn,
|
||||
|
||||
/* Set the migration source and start it up. */
|
||||
ret = qemuProcessStart(conn, driver, vm, "stdio", true,
|
||||
false, *fd, path, NULL, VIR_VM_OP_RESTORE);
|
||||
false, *fd, path, NULL, VIR_NETDEV_VPORT_PROFILE_OP_RESTORE);
|
||||
|
||||
if (intermediatefd != -1) {
|
||||
if (ret < 0) {
|
||||
@ -4619,7 +4619,7 @@ static char *qemuDomainXMLToNative(virConnectPtr conn,
|
||||
|
||||
if (!(cmd = qemuBuildCommandLine(conn, driver, def,
|
||||
&monConfig, monitor_json, qemuCaps,
|
||||
NULL, -1, NULL, VIR_VM_OP_NO_OP)))
|
||||
NULL, -1, NULL, VIR_NETDEV_VPORT_PROFILE_OP_NO_OP)))
|
||||
goto cleanup;
|
||||
|
||||
ret = virCommandToString(cmd);
|
||||
@ -4701,7 +4701,7 @@ qemuDomainObjStart(virConnectPtr conn,
|
||||
}
|
||||
|
||||
ret = qemuProcessStart(conn, driver, vm, NULL, start_paused,
|
||||
autodestroy, -1, NULL, NULL, VIR_VM_OP_CREATE);
|
||||
autodestroy, -1, NULL, NULL, VIR_NETDEV_VPORT_PROFILE_OP_CREATE);
|
||||
virDomainAuditStart(vm, "booted", ret >= 0);
|
||||
if (ret >= 0) {
|
||||
virDomainEventPtr event =
|
||||
@ -10052,7 +10052,7 @@ static int qemuDomainRevertToSnapshot(virDomainSnapshotPtr snapshot,
|
||||
|
||||
rc = qemuProcessStart(snapshot->domain->conn, driver, vm, NULL,
|
||||
true, false, -1, NULL, snap,
|
||||
VIR_VM_OP_CREATE);
|
||||
VIR_NETDEV_VPORT_PROFILE_OP_CREATE);
|
||||
virDomainAuditStart(vm, "from-snapshot", rc >= 0);
|
||||
detail = VIR_DOMAIN_EVENT_STARTED_FROM_SNAPSHOT;
|
||||
event = virDomainEventNewFromObj(vm,
|
||||
@ -10142,7 +10142,7 @@ static int qemuDomainRevertToSnapshot(virDomainSnapshotPtr snapshot,
|
||||
qemuDomainEventQueue(driver, event);
|
||||
rc = qemuProcessStart(snapshot->domain->conn, driver, vm, NULL,
|
||||
paused, false, -1, NULL, NULL,
|
||||
VIR_VM_OP_CREATE);
|
||||
VIR_NETDEV_VPORT_PROFILE_OP_CREATE);
|
||||
virDomainAuditStart(vm, "from-snapshot", rc >= 0);
|
||||
if (rc < 0) {
|
||||
if (!vm->persistent) {
|
||||
|
@ -678,7 +678,7 @@ int qemuDomainAttachNetDevice(virConnectPtr conn,
|
||||
} else if (actualType == VIR_DOMAIN_NET_TYPE_DIRECT) {
|
||||
if ((tapfd = qemuPhysIfaceConnect(vm->def, driver, net,
|
||||
priv->qemuCaps,
|
||||
VIR_VM_OP_CREATE)) < 0)
|
||||
VIR_NETDEV_VPORT_PROFILE_OP_CREATE)) < 0)
|
||||
goto cleanup;
|
||||
iface_connected = true;
|
||||
if (qemuOpenVhostNet(vm->def, net, priv->qemuCaps, &vhostfd) < 0)
|
||||
@ -1911,11 +1911,11 @@ int qemuDomainDetachNetDevice(struct qemud_driver *driver,
|
||||
|
||||
#if WITH_MACVTAP
|
||||
if (virDomainNetGetActualType(detach) == VIR_DOMAIN_NET_TYPE_DIRECT) {
|
||||
delMacvtap(detach->ifname, detach->mac,
|
||||
virDomainNetGetActualDirectDev(detach),
|
||||
virDomainNetGetActualDirectMode(detach),
|
||||
virDomainNetGetActualDirectVirtPortProfile(detach),
|
||||
driver->stateDir);
|
||||
ignore_value(virNetDevMacVLanDelete(detach->ifname, detach->mac,
|
||||
virDomainNetGetActualDirectDev(detach),
|
||||
virDomainNetGetActualDirectMode(detach),
|
||||
virDomainNetGetActualDirectVirtPortProfile(detach),
|
||||
driver->stateDir));
|
||||
VIR_FREE(detach->ifname);
|
||||
}
|
||||
#endif
|
||||
|
@ -1147,7 +1147,7 @@ qemuMigrationPrepareAny(struct qemud_driver *driver,
|
||||
*/
|
||||
if (qemuProcessStart(dconn, driver, vm, migrateFrom, true,
|
||||
true, dataFD[0], NULL, NULL,
|
||||
VIR_VM_OP_MIGRATE_IN_START) < 0) {
|
||||
VIR_NETDEV_VPORT_PROFILE_OP_MIGRATE_IN_START) < 0) {
|
||||
virDomainAuditStart(vm, "migrated", false);
|
||||
/* Note that we don't set an error here because qemuProcessStart
|
||||
* should have already done that.
|
||||
@ -2522,12 +2522,12 @@ qemuMigrationVPAssociatePortProfiles(virDomainDefPtr def) {
|
||||
for (i = 0; i < def->nnets; i++) {
|
||||
net = def->nets[i];
|
||||
if (virDomainNetGetActualType(net) == VIR_DOMAIN_NET_TYPE_DIRECT) {
|
||||
if (vpAssociatePortProfileId(net->ifname,
|
||||
net->mac,
|
||||
virDomainNetGetActualDirectDev(net),
|
||||
virDomainNetGetActualDirectVirtPortProfile(net),
|
||||
def->uuid,
|
||||
VIR_VM_OP_MIGRATE_IN_FINISH) < 0)
|
||||
if (virNetDevVPortProfileAssociate(net->ifname,
|
||||
virDomainNetGetActualDirectVirtPortProfile(net),
|
||||
net->mac,
|
||||
virDomainNetGetActualDirectDev(net),
|
||||
def->uuid,
|
||||
VIR_NETDEV_VPORT_PROFILE_OP_MIGRATE_IN_FINISH) < 0)
|
||||
goto err_exit;
|
||||
}
|
||||
last_good_net = i;
|
||||
@ -2539,11 +2539,11 @@ err_exit:
|
||||
for (i = 0; i < last_good_net; i++) {
|
||||
net = def->nets[i];
|
||||
if (virDomainNetGetActualType(net) == VIR_DOMAIN_NET_TYPE_DIRECT) {
|
||||
vpDisassociatePortProfileId(net->ifname,
|
||||
net->mac,
|
||||
virDomainNetGetActualDirectDev(net),
|
||||
virDomainNetGetActualDirectVirtPortProfile(net),
|
||||
VIR_VM_OP_MIGRATE_IN_FINISH);
|
||||
ignore_value(virNetDevVPortProfileDisassociate(net->ifname,
|
||||
virDomainNetGetActualDirectVirtPortProfile(net),
|
||||
net->mac,
|
||||
virDomainNetGetActualDirectDev(net),
|
||||
VIR_NETDEV_VPORT_PROFILE_OP_MIGRATE_IN_FINISH));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2816,7 +2816,7 @@ int qemuProcessStart(virConnectPtr conn,
|
||||
int stdin_fd,
|
||||
const char *stdin_path,
|
||||
virDomainSnapshotObjPtr snapshot,
|
||||
enum virVMOperationType vmop)
|
||||
enum virNetDevVPortProfileOp vmop)
|
||||
{
|
||||
int ret;
|
||||
off_t pos = -1;
|
||||
@ -3412,11 +3412,11 @@ void qemuProcessStop(struct qemud_driver *driver,
|
||||
virDomainNetDefPtr net = def->nets[i];
|
||||
#if WITH_MACVTAP
|
||||
if (virDomainNetGetActualType(net) == VIR_DOMAIN_NET_TYPE_DIRECT) {
|
||||
delMacvtap(net->ifname, net->mac,
|
||||
virDomainNetGetActualDirectDev(net),
|
||||
virDomainNetGetActualDirectMode(net),
|
||||
virDomainNetGetActualDirectVirtPortProfile(net),
|
||||
driver->stateDir);
|
||||
ignore_value(virNetDevMacVLanDelete(net->ifname, net->mac,
|
||||
virDomainNetGetActualDirectDev(net),
|
||||
virDomainNetGetActualDirectMode(net),
|
||||
virDomainNetGetActualDirectVirtPortProfile(net),
|
||||
driver->stateDir));
|
||||
VIR_FREE(net->ifname);
|
||||
}
|
||||
#endif
|
||||
|
@ -53,7 +53,7 @@ int qemuProcessStart(virConnectPtr conn,
|
||||
int stdin_fd,
|
||||
const char *stdin_path,
|
||||
virDomainSnapshotObjPtr snapshot,
|
||||
enum virVMOperationType vmop);
|
||||
enum virNetDevVPortProfileOp vmop);
|
||||
|
||||
void qemuProcessStop(struct qemud_driver *driver,
|
||||
virDomainObjPtr vm,
|
||||
|
@ -52,7 +52,7 @@
|
||||
#include "macvtap.h"
|
||||
#include "virnetdev.h"
|
||||
|
||||
VIR_ENUM_IMPL(virMacvtapMode, VIR_MACVTAP_MODE_LAST,
|
||||
VIR_ENUM_IMPL(virNetDevMacVLanMode, VIR_NETDEV_MACVLAN_MODE_LAST,
|
||||
"vepa",
|
||||
"private",
|
||||
"bridge",
|
||||
@ -101,15 +101,17 @@ enum virNetDevVPortProfileLinkOp {
|
||||
|
||||
# if WITH_MACVTAP
|
||||
|
||||
/* Open the macvtap's tap device.
|
||||
/**
|
||||
* virNetDevMacVLanTapOpen:
|
||||
* Open the macvtap's tap device.
|
||||
* @ifname: Name of the macvtap interface
|
||||
* @retries : Number of retries in case udev for example may need to be
|
||||
* waited for to create the tap chardev
|
||||
* Returns negative value in case of error, the file descriptor otherwise.
|
||||
*/
|
||||
static
|
||||
int openTap(const char *ifname,
|
||||
int retries)
|
||||
int virNetDevMacVLanTapOpen(const char *ifname,
|
||||
int retries)
|
||||
{
|
||||
FILE *file;
|
||||
char path[64];
|
||||
@ -173,7 +175,7 @@ int openTap(const char *ifname,
|
||||
|
||||
|
||||
/**
|
||||
* configMacvtapTap:
|
||||
* virNetDevMacVLanTapSetup:
|
||||
* @tapfd: file descriptor of the macvtap tap
|
||||
* @vnet_hdr: 1 to enable IFF_VNET_HDR, 0 to disable it
|
||||
*
|
||||
@ -187,7 +189,7 @@ int openTap(const char *ifname,
|
||||
* macvtap device should not be used.
|
||||
*/
|
||||
static int
|
||||
configMacvtapTap(int tapfd, int vnet_hdr)
|
||||
virNetDevMacVLanTapSetup(int tapfd, int vnet_hdr)
|
||||
{
|
||||
unsigned int features;
|
||||
struct ifreq ifreq;
|
||||
@ -233,15 +235,15 @@ configMacvtapTap(int tapfd, int vnet_hdr)
|
||||
}
|
||||
|
||||
|
||||
static const uint32_t modeMap[VIR_MACVTAP_MODE_LAST] = {
|
||||
[VIR_MACVTAP_MODE_VEPA] = MACVLAN_MODE_VEPA,
|
||||
[VIR_MACVTAP_MODE_PRIVATE] = MACVLAN_MODE_PRIVATE,
|
||||
[VIR_MACVTAP_MODE_BRIDGE] = MACVLAN_MODE_BRIDGE,
|
||||
[VIR_MACVTAP_MODE_PASSTHRU] = MACVLAN_MODE_PASSTHRU,
|
||||
static const uint32_t modeMap[VIR_NETDEV_MACVLAN_MODE_LAST] = {
|
||||
[VIR_NETDEV_MACVLAN_MODE_VEPA] = MACVLAN_MODE_VEPA,
|
||||
[VIR_NETDEV_MACVLAN_MODE_PRIVATE] = MACVLAN_MODE_PRIVATE,
|
||||
[VIR_NETDEV_MACVLAN_MODE_BRIDGE] = MACVLAN_MODE_BRIDGE,
|
||||
[VIR_NETDEV_MACVLAN_MODE_PASSTHRU] = MACVLAN_MODE_PASSTHRU,
|
||||
};
|
||||
|
||||
/**
|
||||
* openMacvtapTap:
|
||||
* virNetDevMacVLanCreate:
|
||||
* Create an instance of a macvtap device and open its tap character
|
||||
* device.
|
||||
* @tgifname: Interface name that the macvtap is supposed to have. May
|
||||
@ -260,18 +262,17 @@ static const uint32_t modeMap[VIR_MACVTAP_MODE_LAST] = {
|
||||
* negative value otherwise with error reported.
|
||||
*
|
||||
*/
|
||||
int
|
||||
openMacvtapTap(const char *tgifname,
|
||||
const unsigned char *macaddress,
|
||||
const char *linkdev,
|
||||
enum virMacvtapMode mode,
|
||||
int vnet_hdr,
|
||||
const unsigned char *vmuuid,
|
||||
virNetDevVPortProfilePtr virtPortProfile,
|
||||
char **res_ifname,
|
||||
enum virVMOperationType vmOp,
|
||||
char *stateDir,
|
||||
virNetDevBandwidthPtr bandwidth)
|
||||
int virNetDevMacVLanCreate(const char *tgifname,
|
||||
const unsigned char *macaddress,
|
||||
const char *linkdev,
|
||||
enum virNetDevMacVLanMode mode,
|
||||
int vnet_hdr,
|
||||
const unsigned char *vmuuid,
|
||||
virNetDevVPortProfilePtr virtPortProfile,
|
||||
char **res_ifname,
|
||||
enum virNetDevVPortProfileOp vmOp,
|
||||
char *stateDir,
|
||||
virNetDevBandwidthPtr bandwidth)
|
||||
{
|
||||
const char *type = "macvtap";
|
||||
int c, rc;
|
||||
@ -285,7 +286,7 @@ openMacvtapTap(const char *tgifname,
|
||||
|
||||
*res_ifname = NULL;
|
||||
|
||||
VIR_DEBUG("%s: VM OPERATION: %s", __FUNCTION__, virVMOperationTypeToString(vmOp));
|
||||
VIR_DEBUG("%s: VM OPERATION: %s", __FUNCTION__, virNetDevVPortProfileOpTypeToString(vmOp));
|
||||
|
||||
/** Note: When using PASSTHROUGH mode with MACVTAP devices the link
|
||||
* device's MAC address must be set to the VMs MAC address. In
|
||||
@ -294,7 +295,7 @@ openMacvtapTap(const char *tgifname,
|
||||
* This is especially important when using SRIOV capable cards that
|
||||
* emulate their switch in firmware.
|
||||
*/
|
||||
if (mode == VIR_MACVTAP_MODE_PASSTHRU) {
|
||||
if (mode == VIR_NETDEV_MACVLAN_MODE_PASSTHRU) {
|
||||
if (ifaceReplaceMacAddress(macaddress, linkdev, stateDir) < 0) {
|
||||
return -1;
|
||||
}
|
||||
@ -334,11 +335,11 @@ create_name:
|
||||
cr_ifname = ifname;
|
||||
}
|
||||
|
||||
if (vpAssociatePortProfileId(cr_ifname,
|
||||
macaddress,
|
||||
linkdev,
|
||||
virtPortProfile,
|
||||
vmuuid, vmOp) < 0) {
|
||||
if (virNetDevVPortProfileAssociate(cr_ifname,
|
||||
virtPortProfile,
|
||||
macaddress,
|
||||
linkdev,
|
||||
vmuuid, vmOp) < 0) {
|
||||
rc = -1;
|
||||
goto link_del_exit;
|
||||
}
|
||||
@ -348,9 +349,9 @@ create_name:
|
||||
goto disassociate_exit;
|
||||
}
|
||||
|
||||
rc = openTap(cr_ifname, 10);
|
||||
rc = virNetDevMacVLanTapOpen(cr_ifname, 10);
|
||||
if (rc >= 0) {
|
||||
if (configMacvtapTap(rc, vnet_hdr) < 0) {
|
||||
if (virNetDevMacVLanTapSetup(rc, vnet_hdr) < 0) {
|
||||
VIR_FORCE_CLOSE(rc); /* sets rc to -1 */
|
||||
goto disassociate_exit;
|
||||
}
|
||||
@ -370,11 +371,11 @@ create_name:
|
||||
return rc;
|
||||
|
||||
disassociate_exit:
|
||||
vpDisassociatePortProfileId(cr_ifname,
|
||||
macaddress,
|
||||
linkdev,
|
||||
virtPortProfile,
|
||||
vmOp);
|
||||
ignore_value(virNetDevVPortProfileDisassociate(cr_ifname,
|
||||
virtPortProfile,
|
||||
macaddress,
|
||||
linkdev,
|
||||
vmOp));
|
||||
|
||||
link_del_exit:
|
||||
ifaceLinkDel(cr_ifname);
|
||||
@ -393,25 +394,29 @@ link_del_exit:
|
||||
* it with the switch if port profile parameters
|
||||
* were provided.
|
||||
*/
|
||||
void
|
||||
delMacvtap(const char *ifname,
|
||||
const unsigned char *macaddr,
|
||||
const char *linkdev,
|
||||
int mode,
|
||||
virNetDevVPortProfilePtr virtPortProfile,
|
||||
char *stateDir)
|
||||
int virNetDevMacVLanDelete(const char *ifname,
|
||||
const unsigned char *macaddr,
|
||||
const char *linkdev,
|
||||
int mode,
|
||||
virNetDevVPortProfilePtr virtPortProfile,
|
||||
char *stateDir)
|
||||
{
|
||||
if (mode == VIR_MACVTAP_MODE_PASSTHRU) {
|
||||
int ret = 0;
|
||||
if (mode == VIR_NETDEV_MACVLAN_MODE_PASSTHRU) {
|
||||
ifaceRestoreMacAddress(linkdev, stateDir);
|
||||
}
|
||||
|
||||
if (ifname) {
|
||||
vpDisassociatePortProfileId(ifname, macaddr,
|
||||
linkdev,
|
||||
virtPortProfile,
|
||||
VIR_VM_OP_DESTROY);
|
||||
ifaceLinkDel(ifname);
|
||||
if (virNetDevVPortProfileDisassociate(ifname,
|
||||
virtPortProfile,
|
||||
macaddr,
|
||||
linkdev,
|
||||
VIR_NETDEV_VPORT_PROFILE_OP_DESTROY) < 0)
|
||||
ret = -1;
|
||||
if (ifaceLinkDel(ifname) < 0)
|
||||
ret = -1;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
# endif /* WITH_MACVTAP */
|
||||
@ -425,7 +430,7 @@ static struct nla_policy ifla_port_policy[IFLA_PORT_MAX + 1] =
|
||||
|
||||
|
||||
static uint32_t
|
||||
getLldpadPid(void) {
|
||||
virNetDevVPortProfileGetLldpadPid(void) {
|
||||
int fd;
|
||||
uint32_t pid = 0;
|
||||
|
||||
@ -458,7 +463,7 @@ getLldpadPid(void) {
|
||||
|
||||
|
||||
/**
|
||||
* getPortProfileStatus
|
||||
* virNetDevVPortProfileGetStatus:
|
||||
*
|
||||
* tb: top level netlink response attributes + values
|
||||
* vf: The virtual function used in the request
|
||||
@ -470,11 +475,11 @@ getLldpadPid(void) {
|
||||
* case of success, < 0 otherwise with error having been reported
|
||||
*/
|
||||
static int
|
||||
getPortProfileStatus(struct nlattr **tb, int32_t vf,
|
||||
const unsigned char *instanceId,
|
||||
bool nltarget_kernel,
|
||||
bool is8021Qbg,
|
||||
uint16_t *status)
|
||||
virNetDevVPortProfileGetStatus(struct nlattr **tb, int32_t vf,
|
||||
const unsigned char *instanceId,
|
||||
bool nltarget_kernel,
|
||||
bool is8021Qbg,
|
||||
uint16_t *status)
|
||||
{
|
||||
int rc = -1;
|
||||
const char *msg = NULL;
|
||||
@ -557,16 +562,16 @@ err_exit:
|
||||
|
||||
|
||||
static int
|
||||
doPortProfileOpSetLink(bool nltarget_kernel,
|
||||
const char *ifname, int ifindex,
|
||||
const unsigned char *macaddr,
|
||||
int vlanid,
|
||||
const char *profileId,
|
||||
struct ifla_port_vsi *portVsi,
|
||||
const unsigned char *instanceId,
|
||||
const unsigned char *hostUUID,
|
||||
int32_t vf,
|
||||
uint8_t op)
|
||||
virNetDevVPortProfileOpSetLink(const char *ifname, int ifindex,
|
||||
bool nltarget_kernel,
|
||||
const unsigned char *macaddr,
|
||||
int vlanid,
|
||||
const char *profileId,
|
||||
struct ifla_port_vsi *portVsi,
|
||||
const unsigned char *instanceId,
|
||||
const unsigned char *hostUUID,
|
||||
int32_t vf,
|
||||
uint8_t op)
|
||||
{
|
||||
int rc = -1;
|
||||
struct nlmsghdr *resp;
|
||||
@ -685,7 +690,7 @@ doPortProfileOpSetLink(bool nltarget_kernel,
|
||||
}
|
||||
|
||||
if (!nltarget_kernel) {
|
||||
pid = getLldpadPid();
|
||||
pid = virNetDevVPortProfileGetLldpadPid();
|
||||
if (pid == 0)
|
||||
goto err_exit;
|
||||
}
|
||||
@ -747,16 +752,16 @@ buffer_too_small:
|
||||
|
||||
/* Returns 0 on success, -1 on general failure, and -2 on timeout */
|
||||
static int
|
||||
doPortProfileOpCommon(bool nltarget_kernel,
|
||||
const char *ifname, int ifindex,
|
||||
const unsigned char *macaddr,
|
||||
int vlanid,
|
||||
const char *profileId,
|
||||
struct ifla_port_vsi *portVsi,
|
||||
const unsigned char *instanceId,
|
||||
const unsigned char *hostUUID,
|
||||
int32_t vf,
|
||||
uint8_t op)
|
||||
virNetDevVPortProfileOpCommon(const char *ifname, int ifindex,
|
||||
bool nltarget_kernel,
|
||||
const unsigned char *macaddr,
|
||||
int vlanid,
|
||||
const char *profileId,
|
||||
struct ifla_port_vsi *portVsi,
|
||||
const unsigned char *instanceId,
|
||||
const unsigned char *hostUUID,
|
||||
int32_t vf,
|
||||
uint8_t op)
|
||||
{
|
||||
int rc;
|
||||
unsigned char *recvbuf = NULL;
|
||||
@ -765,16 +770,16 @@ doPortProfileOpCommon(bool nltarget_kernel,
|
||||
uint16_t status = 0;
|
||||
bool is8021Qbg = (profileId == NULL);
|
||||
|
||||
rc = doPortProfileOpSetLink(nltarget_kernel,
|
||||
ifname, ifindex,
|
||||
macaddr,
|
||||
vlanid,
|
||||
profileId,
|
||||
portVsi,
|
||||
instanceId,
|
||||
hostUUID,
|
||||
vf,
|
||||
op);
|
||||
rc = virNetDevVPortProfileOpSetLink(ifname, ifindex,
|
||||
nltarget_kernel,
|
||||
macaddr,
|
||||
vlanid,
|
||||
profileId,
|
||||
portVsi,
|
||||
instanceId,
|
||||
hostUUID,
|
||||
vf,
|
||||
op);
|
||||
if (rc < 0) {
|
||||
macvtapError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
_("sending of PortProfileRequest failed."));
|
||||
@ -783,12 +788,12 @@ doPortProfileOpCommon(bool nltarget_kernel,
|
||||
|
||||
while (--repeats >= 0) {
|
||||
rc = ifaceMacvtapLinkDump(nltarget_kernel, NULL, ifindex, tb,
|
||||
&recvbuf, getLldpadPid);
|
||||
&recvbuf, virNetDevVPortProfileGetLldpadPid);
|
||||
if (rc < 0)
|
||||
goto err_exit;
|
||||
|
||||
rc = getPortProfileStatus(tb, vf, instanceId, nltarget_kernel,
|
||||
is8021Qbg, &status);
|
||||
rc = virNetDevVPortProfileGetStatus(tb, vf, instanceId, nltarget_kernel,
|
||||
is8021Qbg, &status);
|
||||
if (rc < 0)
|
||||
goto err_exit;
|
||||
if (status == PORT_PROFILE_RESPONSE_SUCCESS ||
|
||||
@ -828,8 +833,8 @@ err_exit:
|
||||
# ifdef IFLA_VF_PORT_MAX
|
||||
|
||||
static int
|
||||
getPhysdevAndVlan(const char *ifname, int *root_ifindex, char *root_ifname,
|
||||
int *vlanid)
|
||||
virNetDevVPortProfileGetPhysdevAndVlan(const char *ifname, int *root_ifindex, char *root_ifname,
|
||||
int *vlanid)
|
||||
{
|
||||
int ret;
|
||||
unsigned int nth;
|
||||
@ -858,10 +863,10 @@ getPhysdevAndVlan(const char *ifname, int *root_ifindex, char *root_ifname,
|
||||
|
||||
/* Returns 0 on success, -1 on general failure, and -2 on timeout */
|
||||
static int
|
||||
doPortProfileOp8021Qbg(const char *ifname,
|
||||
const unsigned char *macaddr,
|
||||
const virNetDevVPortProfilePtr virtPort,
|
||||
enum virNetDevVPortProfileLinkOp virtPortOp)
|
||||
virNetDevVPortProfileOp8021Qbg(const char *ifname,
|
||||
const unsigned char *macaddr,
|
||||
const virNetDevVPortProfilePtr virtPort,
|
||||
enum virNetDevVPortProfileLinkOp virtPortOp)
|
||||
{
|
||||
int rc = 0;
|
||||
|
||||
@ -888,8 +893,8 @@ doPortProfileOp8021Qbg(const char *ifname,
|
||||
char physdev_ifname[IFNAMSIZ] = { 0, };
|
||||
int vf = PORT_SELF_VF;
|
||||
|
||||
if (getPhysdevAndVlan(ifname, &physdev_ifindex, physdev_ifname,
|
||||
&vlanid) < 0) {
|
||||
if (virNetDevVPortProfileGetPhysdevAndVlan(ifname, &physdev_ifindex, physdev_ifname,
|
||||
&vlanid) < 0) {
|
||||
rc = -1;
|
||||
goto err_exit;
|
||||
}
|
||||
@ -918,16 +923,16 @@ doPortProfileOp8021Qbg(const char *ifname,
|
||||
goto err_exit;
|
||||
}
|
||||
|
||||
rc = doPortProfileOpCommon(nltarget_kernel,
|
||||
physdev_ifname, physdev_ifindex,
|
||||
macaddr,
|
||||
vlanid,
|
||||
NULL,
|
||||
&portVsi,
|
||||
virtPort->u.virtPort8021Qbg.instanceID,
|
||||
NULL,
|
||||
vf,
|
||||
op);
|
||||
rc = virNetDevVPortProfileOpCommon(physdev_ifname, physdev_ifindex,
|
||||
nltarget_kernel,
|
||||
macaddr,
|
||||
vlanid,
|
||||
NULL,
|
||||
&portVsi,
|
||||
virtPort->u.virtPort8021Qbg.instanceID,
|
||||
NULL,
|
||||
vf,
|
||||
op);
|
||||
|
||||
err_exit:
|
||||
|
||||
@ -939,9 +944,9 @@ err_exit:
|
||||
|
||||
# ifdef IFLA_VF_PORT_MAX
|
||||
static int
|
||||
getPhysfnDev(const char *linkdev,
|
||||
int32_t *vf,
|
||||
char **physfndev)
|
||||
virNetDevVPortProfileGetPhysfnDev(const char *linkdev,
|
||||
int32_t *vf,
|
||||
char **physfndev)
|
||||
{
|
||||
int rc = -1;
|
||||
|
||||
@ -975,11 +980,11 @@ err_exit:
|
||||
|
||||
/* Returns 0 on success, -1 on general failure, and -2 on timeout */
|
||||
static int
|
||||
doPortProfileOp8021Qbh(const char *ifname,
|
||||
const unsigned char *macaddr,
|
||||
const virNetDevVPortProfilePtr virtPort,
|
||||
const unsigned char *vm_uuid,
|
||||
enum virNetDevVPortProfileLinkOp virtPortOp)
|
||||
virNetDevVPortProfileOp8021Qbh(const char *ifname,
|
||||
const unsigned char *macaddr,
|
||||
const virNetDevVPortProfilePtr virtPort,
|
||||
const unsigned char *vm_uuid,
|
||||
enum virNetDevVPortProfileLinkOp virtPortOp)
|
||||
{
|
||||
int rc = 0;
|
||||
|
||||
@ -1003,7 +1008,7 @@ doPortProfileOp8021Qbh(const char *ifname,
|
||||
int ifindex;
|
||||
int vlanid = -1;
|
||||
|
||||
rc = getPhysfnDev(ifname, &vf, &physfndev);
|
||||
rc = virNetDevVPortProfileGetPhysfnDev(ifname, &vf, &physfndev);
|
||||
if (rc < 0)
|
||||
goto err_exit;
|
||||
|
||||
@ -1020,40 +1025,43 @@ doPortProfileOp8021Qbh(const char *ifname,
|
||||
goto err_exit;
|
||||
}
|
||||
|
||||
rc = doPortProfileOpCommon(nltarget_kernel, NULL, ifindex,
|
||||
macaddr,
|
||||
vlanid,
|
||||
virtPort->u.virtPort8021Qbh.profileID,
|
||||
NULL,
|
||||
vm_uuid,
|
||||
hostuuid,
|
||||
vf,
|
||||
(virtPortOp == VIR_NETDEV_VPORT_PROFILE_LINK_OP_PREASSOCIATE_RR) ?
|
||||
PORT_REQUEST_PREASSOCIATE_RR
|
||||
: PORT_REQUEST_ASSOCIATE);
|
||||
rc = virNetDevVPortProfileOpCommon(NULL, ifindex,
|
||||
nltarget_kernel,
|
||||
macaddr,
|
||||
vlanid,
|
||||
virtPort->u.virtPort8021Qbh.profileID,
|
||||
NULL,
|
||||
vm_uuid,
|
||||
hostuuid,
|
||||
vf,
|
||||
(virtPortOp == VIR_NETDEV_VPORT_PROFILE_LINK_OP_PREASSOCIATE_RR) ?
|
||||
PORT_REQUEST_PREASSOCIATE_RR
|
||||
: PORT_REQUEST_ASSOCIATE);
|
||||
if (rc == -2)
|
||||
/* Association timed out, disassociate */
|
||||
doPortProfileOpCommon(nltarget_kernel, NULL, ifindex,
|
||||
NULL,
|
||||
vlanid,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
vf,
|
||||
PORT_REQUEST_DISASSOCIATE);
|
||||
virNetDevVPortProfileOpCommon(NULL, ifindex,
|
||||
nltarget_kernel,
|
||||
NULL,
|
||||
vlanid,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
vf,
|
||||
PORT_REQUEST_DISASSOCIATE);
|
||||
break;
|
||||
|
||||
case VIR_NETDEV_VPORT_PROFILE_LINK_OP_DISASSOCIATE:
|
||||
rc = doPortProfileOpCommon(nltarget_kernel, NULL, ifindex,
|
||||
NULL,
|
||||
vlanid,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
vf,
|
||||
PORT_REQUEST_DISASSOCIATE);
|
||||
rc = virNetDevVPortProfileOpCommon(NULL, ifindex,
|
||||
nltarget_kernel,
|
||||
NULL,
|
||||
vlanid,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
vf,
|
||||
PORT_REQUEST_DISASSOCIATE);
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -1071,7 +1079,7 @@ err_exit:
|
||||
}
|
||||
|
||||
/**
|
||||
* vpAssociatePortProfile
|
||||
* virNetDevVPortProfileAssociate:
|
||||
*
|
||||
* @macvtap_ifname: The name of the macvtap device
|
||||
* @virtPort: pointer to the object holding port profile parameters
|
||||
@ -1088,21 +1096,21 @@ err_exit:
|
||||
* having been reported.
|
||||
*/
|
||||
int
|
||||
vpAssociatePortProfileId(const char *macvtap_ifname,
|
||||
const unsigned char *macvtap_macaddr,
|
||||
const char *linkdev,
|
||||
const virNetDevVPortProfilePtr virtPort,
|
||||
const unsigned char *vmuuid,
|
||||
enum virVMOperationType vmOp)
|
||||
virNetDevVPortProfileAssociate(const char *macvtap_ifname,
|
||||
const virNetDevVPortProfilePtr virtPort,
|
||||
const unsigned char *macvtap_macaddr,
|
||||
const char *linkdev,
|
||||
const unsigned char *vmuuid,
|
||||
enum virNetDevVPortProfileOp vmOp)
|
||||
{
|
||||
int rc = 0;
|
||||
|
||||
VIR_DEBUG("Associating port profile '%p' on link device '%s'",
|
||||
virtPort, macvtap_ifname);
|
||||
|
||||
VIR_DEBUG("%s: VM OPERATION: %s", __FUNCTION__, virVMOperationTypeToString(vmOp));
|
||||
VIR_DEBUG("%s: VM OPERATION: %s", __FUNCTION__, virNetDevVPortProfileOpTypeToString(vmOp));
|
||||
|
||||
if (!virtPort || vmOp == VIR_VM_OP_NO_OP)
|
||||
if (!virtPort || vmOp == VIR_NETDEV_VPORT_PROFILE_OP_NO_OP)
|
||||
return 0;
|
||||
|
||||
switch (virtPort->virtPortType) {
|
||||
@ -1111,20 +1119,20 @@ vpAssociatePortProfileId(const char *macvtap_ifname,
|
||||
break;
|
||||
|
||||
case VIR_NETDEV_VPORT_PROFILE_8021QBG:
|
||||
rc = doPortProfileOp8021Qbg(macvtap_ifname, macvtap_macaddr,
|
||||
virtPort,
|
||||
(vmOp == VIR_VM_OP_MIGRATE_IN_START)
|
||||
? VIR_NETDEV_VPORT_PROFILE_LINK_OP_PREASSOCIATE
|
||||
: VIR_NETDEV_VPORT_PROFILE_LINK_OP_ASSOCIATE);
|
||||
rc = virNetDevVPortProfileOp8021Qbg(macvtap_ifname, macvtap_macaddr,
|
||||
virtPort,
|
||||
(vmOp == VIR_NETDEV_VPORT_PROFILE_OP_MIGRATE_IN_START)
|
||||
? VIR_NETDEV_VPORT_PROFILE_LINK_OP_PREASSOCIATE
|
||||
: VIR_NETDEV_VPORT_PROFILE_LINK_OP_ASSOCIATE);
|
||||
break;
|
||||
|
||||
case VIR_NETDEV_VPORT_PROFILE_8021QBH:
|
||||
rc = doPortProfileOp8021Qbh(linkdev, macvtap_macaddr,
|
||||
virtPort, vmuuid,
|
||||
(vmOp == VIR_VM_OP_MIGRATE_IN_START)
|
||||
? VIR_NETDEV_VPORT_PROFILE_LINK_OP_PREASSOCIATE_RR
|
||||
: VIR_NETDEV_VPORT_PROFILE_LINK_OP_ASSOCIATE);
|
||||
if (vmOp != VIR_VM_OP_MIGRATE_IN_START && !rc) {
|
||||
rc = virNetDevVPortProfileOp8021Qbh(linkdev, macvtap_macaddr,
|
||||
virtPort, vmuuid,
|
||||
(vmOp == VIR_NETDEV_VPORT_PROFILE_OP_MIGRATE_IN_START)
|
||||
? VIR_NETDEV_VPORT_PROFILE_LINK_OP_PREASSOCIATE_RR
|
||||
: VIR_NETDEV_VPORT_PROFILE_LINK_OP_ASSOCIATE);
|
||||
if (vmOp != VIR_NETDEV_VPORT_PROFILE_OP_MIGRATE_IN_START && !rc) {
|
||||
/* XXX bogus error handling */
|
||||
ignore_value(virNetDevSetOnline(linkdev, true));
|
||||
}
|
||||
@ -1137,7 +1145,7 @@ vpAssociatePortProfileId(const char *macvtap_ifname,
|
||||
|
||||
|
||||
/**
|
||||
* vpDisassociatePortProfile
|
||||
* virNetDevVPortProfileDisassociate:
|
||||
*
|
||||
* @macvtap_ifname: The name of the macvtap device
|
||||
* @macvtap_macaddr : The MAC address of the macvtap
|
||||
@ -1148,18 +1156,18 @@ vpAssociatePortProfileId(const char *macvtap_ifname,
|
||||
* having been reported.
|
||||
*/
|
||||
int
|
||||
vpDisassociatePortProfileId(const char *macvtap_ifname,
|
||||
const unsigned char *macvtap_macaddr,
|
||||
const char *linkdev,
|
||||
const virNetDevVPortProfilePtr virtPort,
|
||||
enum virVMOperationType vmOp)
|
||||
virNetDevVPortProfileDisassociate(const char *macvtap_ifname,
|
||||
const virNetDevVPortProfilePtr virtPort,
|
||||
const unsigned char *macvtap_macaddr,
|
||||
const char *linkdev,
|
||||
enum virNetDevVPortProfileOp vmOp)
|
||||
{
|
||||
int rc = 0;
|
||||
|
||||
VIR_DEBUG("Disassociating port profile id '%p' on link device '%s' ",
|
||||
virtPort, macvtap_ifname);
|
||||
|
||||
VIR_DEBUG("%s: VM OPERATION: %s", __FUNCTION__, virVMOperationTypeToString(vmOp));
|
||||
VIR_DEBUG("%s: VM OPERATION: %s", __FUNCTION__, virNetDevVPortProfileOpTypeToString(vmOp));
|
||||
|
||||
if (!virtPort)
|
||||
return 0;
|
||||
@ -1170,18 +1178,18 @@ vpDisassociatePortProfileId(const char *macvtap_ifname,
|
||||
break;
|
||||
|
||||
case VIR_NETDEV_VPORT_PROFILE_8021QBG:
|
||||
rc = doPortProfileOp8021Qbg(macvtap_ifname, macvtap_macaddr,
|
||||
virtPort, VIR_NETDEV_VPORT_PROFILE_LINK_OP_DISASSOCIATE);
|
||||
rc = virNetDevVPortProfileOp8021Qbg(macvtap_ifname, macvtap_macaddr,
|
||||
virtPort, VIR_NETDEV_VPORT_PROFILE_LINK_OP_DISASSOCIATE);
|
||||
break;
|
||||
|
||||
case VIR_NETDEV_VPORT_PROFILE_8021QBH:
|
||||
/* avoid disassociating twice */
|
||||
if (vmOp == VIR_VM_OP_MIGRATE_IN_FINISH)
|
||||
if (vmOp == VIR_NETDEV_VPORT_PROFILE_OP_MIGRATE_IN_FINISH)
|
||||
break;
|
||||
ignore_value(virNetDevSetOnline(linkdev, false));
|
||||
rc = doPortProfileOp8021Qbh(linkdev, macvtap_macaddr,
|
||||
virtPort, NULL,
|
||||
VIR_NETDEV_VPORT_PROFILE_LINK_OP_DISASSOCIATE);
|
||||
rc = virNetDevVPortProfileOp8021Qbh(linkdev, macvtap_macaddr,
|
||||
virtPort, NULL,
|
||||
VIR_NETDEV_VPORT_PROFILE_LINK_OP_DISASSOCIATE);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1190,12 +1198,12 @@ vpDisassociatePortProfileId(const char *macvtap_ifname,
|
||||
|
||||
#endif /* WITH_MACVTAP || WITH_VIRTUALPORT */
|
||||
|
||||
VIR_ENUM_IMPL(virVMOperation, VIR_VM_OP_LAST,
|
||||
"create",
|
||||
"save",
|
||||
"restore",
|
||||
"destroy",
|
||||
"migrate out",
|
||||
"migrate in start",
|
||||
"migrate in finish",
|
||||
"no-op")
|
||||
VIR_ENUM_IMPL(virNetDevVPortProfileOp, VIR_NETDEV_VPORT_PROFILE_OP_LAST,
|
||||
"create",
|
||||
"save",
|
||||
"restore",
|
||||
"destroy",
|
||||
"migrate out",
|
||||
"migrate in start",
|
||||
"migrate in finish",
|
||||
"no-op")
|
||||
|
@ -29,65 +29,73 @@
|
||||
# include "virnetdevvportprofile.h"
|
||||
|
||||
/* the mode type for macvtap devices */
|
||||
enum virMacvtapMode {
|
||||
VIR_MACVTAP_MODE_VEPA,
|
||||
VIR_MACVTAP_MODE_PRIVATE,
|
||||
VIR_MACVTAP_MODE_BRIDGE,
|
||||
VIR_MACVTAP_MODE_PASSTHRU,
|
||||
enum virNetDevMacVLanMode {
|
||||
VIR_NETDEV_MACVLAN_MODE_VEPA,
|
||||
VIR_NETDEV_MACVLAN_MODE_PRIVATE,
|
||||
VIR_NETDEV_MACVLAN_MODE_BRIDGE,
|
||||
VIR_NETDEV_MACVLAN_MODE_PASSTHRU,
|
||||
|
||||
VIR_MACVTAP_MODE_LAST,
|
||||
VIR_NETDEV_MACVLAN_MODE_LAST,
|
||||
};
|
||||
|
||||
enum virVMOperationType {
|
||||
VIR_VM_OP_CREATE,
|
||||
VIR_VM_OP_SAVE,
|
||||
VIR_VM_OP_RESTORE,
|
||||
VIR_VM_OP_DESTROY,
|
||||
VIR_VM_OP_MIGRATE_OUT,
|
||||
VIR_VM_OP_MIGRATE_IN_START,
|
||||
VIR_VM_OP_MIGRATE_IN_FINISH,
|
||||
VIR_VM_OP_NO_OP,
|
||||
enum virNetDevVPortProfileOp {
|
||||
VIR_NETDEV_VPORT_PROFILE_OP_CREATE,
|
||||
VIR_NETDEV_VPORT_PROFILE_OP_SAVE,
|
||||
VIR_NETDEV_VPORT_PROFILE_OP_RESTORE,
|
||||
VIR_NETDEV_VPORT_PROFILE_OP_DESTROY,
|
||||
VIR_NETDEV_VPORT_PROFILE_OP_MIGRATE_OUT,
|
||||
VIR_NETDEV_VPORT_PROFILE_OP_MIGRATE_IN_START,
|
||||
VIR_NETDEV_VPORT_PROFILE_OP_MIGRATE_IN_FINISH,
|
||||
VIR_NETDEV_VPORT_PROFILE_OP_NO_OP,
|
||||
|
||||
VIR_VM_OP_LAST
|
||||
VIR_NETDEV_VPORT_PROFILE_OP_LAST
|
||||
};
|
||||
|
||||
# if WITH_MACVTAP
|
||||
|
||||
int openMacvtapTap(const char *ifname,
|
||||
const unsigned char *macaddress,
|
||||
const char *linkdev,
|
||||
enum virMacvtapMode mode,
|
||||
int vnet_hdr,
|
||||
const unsigned char *vmuuid,
|
||||
virNetDevVPortProfilePtr virtPortProfile,
|
||||
char **res_ifname,
|
||||
enum virVMOperationType vmop,
|
||||
char *stateDir,
|
||||
virNetDevBandwidthPtr bandwidth);
|
||||
int virNetDevMacVLanCreate(const char *ifname,
|
||||
const unsigned char *macaddress,
|
||||
const char *linkdev,
|
||||
enum virNetDevMacVLanMode mode,
|
||||
int vnet_hdr,
|
||||
const unsigned char *vmuuid,
|
||||
virNetDevVPortProfilePtr virtPortProfile,
|
||||
char **res_ifname,
|
||||
enum virNetDevVPortProfileOp vmop,
|
||||
char *stateDir,
|
||||
virNetDevBandwidthPtr bandwidth)
|
||||
ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(6)
|
||||
ATTRIBUTE_NONNULL(8) ATTRIBUTE_NONNULL(10) ATTRIBUTE_RETURN_CHECK;
|
||||
|
||||
void delMacvtap(const char *ifname,
|
||||
const unsigned char *macaddress,
|
||||
const char *linkdev,
|
||||
int mode,
|
||||
virNetDevVPortProfilePtr virtPortProfile,
|
||||
char *stateDir);
|
||||
int virNetDevMacVLanDelete(const char *ifname,
|
||||
const unsigned char *macaddress,
|
||||
const char *linkdev,
|
||||
int mode,
|
||||
virNetDevVPortProfilePtr virtPortProfile,
|
||||
char *stateDir)
|
||||
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3)
|
||||
ATTRIBUTE_NONNULL(6) ATTRIBUTE_RETURN_CHECK;
|
||||
|
||||
int vpAssociatePortProfileId(const char *macvtap_ifname,
|
||||
const unsigned char *macvtap_macaddr,
|
||||
const char *linkdev,
|
||||
const virNetDevVPortProfilePtr virtPort,
|
||||
const unsigned char *vmuuid,
|
||||
enum virVMOperationType vmOp);
|
||||
int virNetDevVPortProfileAssociate(const char *ifname,
|
||||
const virNetDevVPortProfilePtr virtPort,
|
||||
const unsigned char *macaddr,
|
||||
const char *linkdev,
|
||||
const unsigned char *vmuuid,
|
||||
enum virNetDevVPortProfileOp vmOp)
|
||||
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(4)
|
||||
ATTRIBUTE_NONNULL(5) ATTRIBUTE_RETURN_CHECK;
|
||||
|
||||
int vpDisassociatePortProfileId(const char *macvtap_ifname,
|
||||
const unsigned char *macvtap_macaddr,
|
||||
const char *linkdev,
|
||||
const virNetDevVPortProfilePtr virtPort,
|
||||
enum virVMOperationType vmOp);
|
||||
int virNetDevVPortProfileDisassociate(const char *ifname,
|
||||
const virNetDevVPortProfilePtr virtPort,
|
||||
const unsigned char *macaddr,
|
||||
const char *linkdev,
|
||||
enum virNetDevVPortProfileOp vmOp)
|
||||
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(4)
|
||||
ATTRIBUTE_RETURN_CHECK;
|
||||
|
||||
# endif /* WITH_MACVTAP */
|
||||
|
||||
VIR_ENUM_DECL(virVMOperation)
|
||||
VIR_ENUM_DECL(virMacvtapMode)
|
||||
VIR_ENUM_DECL(virNetDevVPortProfileOp)
|
||||
VIR_ENUM_DECL(virNetDevMacVLanMode)
|
||||
|
||||
#endif /* __UTIL_MACVTAP_H__ */
|
||||
|
@ -180,7 +180,7 @@ static int testCompareXMLToArgvFiles(const char *xml,
|
||||
if (!(cmd = qemuBuildCommandLine(conn, &driver,
|
||||
vmdef, &monitor_chr, json, extraFlags,
|
||||
migrateFrom, migrateFd, NULL,
|
||||
VIR_VM_OP_NO_OP)))
|
||||
VIR_NETDEV_VPORT_PROFILE_OP_NO_OP)))
|
||||
goto fail;
|
||||
|
||||
if (!!virGetLastError() != expectError) {
|
||||
|
@ -124,7 +124,7 @@ static int testCompareXMLToArgvFiles(const char *xml,
|
||||
if (!(cmd = qemuBuildCommandLine(conn, &driver,
|
||||
vmdef, &monitor_chr, json, extraFlags,
|
||||
migrateFrom, migrateFd, NULL,
|
||||
VIR_VM_OP_NO_OP)))
|
||||
VIR_NETDEV_VPORT_PROFILE_OP_NO_OP)))
|
||||
goto fail;
|
||||
|
||||
if (!!virGetLastError() != expectError) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user