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:
Daniel P. Berrange 2011-11-02 16:51:01 +00:00
parent a7c6ce0d52
commit 43925db7ca
14 changed files with 308 additions and 292 deletions

View File

@ -3102,7 +3102,7 @@ virDomainActualNetDefParseXML(xmlNodePtr node,
mode = virXPathString("string(./source[1]/@mode)", ctxt); mode = virXPathString("string(./source[1]/@mode)", ctxt);
if (mode) { if (mode) {
int m; int m;
if ((m = virMacvtapModeTypeFromString(mode)) < 0) { if ((m = virNetDevMacVLanModeTypeFromString(mode)) < 0) {
virDomainReportError(VIR_ERR_INTERNAL_ERROR, virDomainReportError(VIR_ERR_INTERNAL_ERROR,
_("Unkown mode '%s' in interface <actual> element"), _("Unkown mode '%s' in interface <actual> element"),
mode); mode);
@ -3416,14 +3416,14 @@ virDomainNetDefParseXML(virCapsPtr caps,
if (mode != NULL) { if (mode != NULL) {
int m; int m;
if ((m = virMacvtapModeTypeFromString(mode)) < 0) { if ((m = virNetDevMacVLanModeTypeFromString(mode)) < 0) {
virDomainReportError(VIR_ERR_INTERNAL_ERROR, "%s", virDomainReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("Unkown mode has been specified")); _("Unkown mode has been specified"));
goto error; goto error;
} }
def->data.direct.mode = m; def->data.direct.mode = m;
} else } else
def->data.direct.mode = VIR_MACVTAP_MODE_VEPA; def->data.direct.mode = VIR_NETDEV_MACVLAN_MODE_VEPA;
def->data.direct.virtPortProfile = virtPort; def->data.direct.virtPortProfile = virtPort;
virtPort = NULL; virtPort = NULL;
@ -9720,7 +9720,7 @@ virDomainActualNetDefFormat(virBufferPtr buf,
virBufferEscapeString(buf, " dev='%s'", virBufferEscapeString(buf, " dev='%s'",
def->data.direct.linkdev); def->data.direct.linkdev);
mode = virMacvtapModeTypeToString(def->data.direct.mode); mode = virNetDevMacVLanModeTypeToString(def->data.direct.mode);
if (!mode) { if (!mode) {
virDomainReportError(VIR_ERR_INTERNAL_ERROR, virDomainReportError(VIR_ERR_INTERNAL_ERROR,
_("unexpected source mode %d"), _("unexpected source mode %d"),
@ -9825,7 +9825,7 @@ virDomainNetDefFormat(virBufferPtr buf,
virBufferEscapeString(buf, " <source dev='%s'", virBufferEscapeString(buf, " <source dev='%s'",
def->data.direct.linkdev); def->data.direct.linkdev);
virBufferAsprintf(buf, " mode='%s'", virBufferAsprintf(buf, " mode='%s'",
virMacvtapModeTypeToString(def->data.direct.mode)); virNetDevMacVLanModeTypeToString(def->data.direct.mode));
virBufferAddLit(buf, "/>\n"); virBufferAddLit(buf, "/>\n");
virBufferAdjustIndent(buf, 6); virBufferAdjustIndent(buf, 6);
if (virNetDevVPortProfileFormat(def->data.direct.virtPortProfile, buf) < 0) if (virNetDevVPortProfileFormat(def->data.direct.virtPortProfile, buf) < 0)

View File

@ -739,8 +739,8 @@ virLogUnlock;
# macvtap.h # macvtap.h
virVMOperationTypeFromString; virNetDevVPortProfileOpTypeFromString;
virVMOperationTypeToString; virNetDevVPortProfileOpTypeToString;
# memory.h # memory.h

View File

@ -2781,16 +2781,16 @@ networkAllocateActualDevice(virDomainNetDefPtr iface)
iface->data.network.actual->type = VIR_DOMAIN_NET_TYPE_DIRECT; iface->data.network.actual->type = VIR_DOMAIN_NET_TYPE_DIRECT;
switch (netdef->forwardType) { switch (netdef->forwardType) {
case VIR_NETWORK_FORWARD_BRIDGE: 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; break;
case VIR_NETWORK_FORWARD_PRIVATE: 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; break;
case VIR_NETWORK_FORWARD_VEPA: 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; break;
case VIR_NETWORK_FORWARD_PASSTHROUGH: 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; break;
} }

View File

@ -139,7 +139,7 @@ qemuPhysIfaceConnect(virDomainDefPtr def,
struct qemud_driver *driver, struct qemud_driver *driver,
virDomainNetDefPtr net, virDomainNetDefPtr net,
virBitmapPtr qemuCaps, virBitmapPtr qemuCaps,
enum virVMOperationType vmop) enum virNetDevVPortProfileOp vmop)
{ {
int rc; int rc;
#if WITH_MACVTAP #if WITH_MACVTAP
@ -150,14 +150,14 @@ qemuPhysIfaceConnect(virDomainDefPtr def,
net->model && STREQ(net->model, "virtio")) net->model && STREQ(net->model, "virtio"))
vnet_hdr = 1; vnet_hdr = 1;
rc = openMacvtapTap(net->ifname, net->mac, rc = virNetDevMacVLanCreate(net->ifname, net->mac,
virDomainNetGetActualDirectDev(net), virDomainNetGetActualDirectDev(net),
virDomainNetGetActualDirectMode(net), virDomainNetGetActualDirectMode(net),
vnet_hdr, def->uuid, vnet_hdr, def->uuid,
virDomainNetGetActualDirectVirtPortProfile(net), virDomainNetGetActualDirectVirtPortProfile(net),
&res_ifname, &res_ifname,
vmop, driver->stateDir, vmop, driver->stateDir,
virDomainNetGetActualBandwidth(net)); virDomainNetGetActualBandwidth(net));
if (rc >= 0) { if (rc >= 0) {
virDomainAuditNetDevice(def, net, res_ifname, true); virDomainAuditNetDevice(def, net, res_ifname, true);
VIR_FREE(net->ifname); VIR_FREE(net->ifname);
@ -3479,7 +3479,7 @@ qemuBuildCommandLine(virConnectPtr conn,
const char *migrateFrom, const char *migrateFrom,
int migrateFd, int migrateFd,
virDomainSnapshotObjPtr snapshot, virDomainSnapshotObjPtr snapshot,
enum virVMOperationType vmop) enum virNetDevVPortProfileOp vmop)
{ {
int i; int i;
struct utsname ut; struct utsname ut;

View File

@ -50,7 +50,7 @@ virCommandPtr qemuBuildCommandLine(virConnectPtr conn,
const char *migrateFrom, const char *migrateFrom,
int migrateFd, int migrateFd,
virDomainSnapshotObjPtr current_snapshot, virDomainSnapshotObjPtr current_snapshot,
enum virVMOperationType vmop) enum virNetDevVPortProfileOp vmop)
ATTRIBUTE_NONNULL(1); ATTRIBUTE_NONNULL(1);
/* With vlan == -1, use netdev syntax, else old hostnet */ /* With vlan == -1, use netdev syntax, else old hostnet */
@ -135,7 +135,7 @@ int qemuPhysIfaceConnect(virDomainDefPtr def,
struct qemud_driver *driver, struct qemud_driver *driver,
virDomainNetDefPtr net, virDomainNetDefPtr net,
virBitmapPtr qemuCaps, virBitmapPtr qemuCaps,
enum virVMOperationType vmop); enum virNetDevVPortProfileOp vmop);
int qemuOpenVhostNet(virDomainDefPtr def, int qemuOpenVhostNet(virDomainDefPtr def,
virDomainNetDefPtr net, virDomainNetDefPtr net,

View File

@ -1325,7 +1325,7 @@ static virDomainPtr qemudDomainCreate(virConnectPtr conn, const char *xml,
if (qemuProcessStart(conn, driver, vm, NULL, if (qemuProcessStart(conn, driver, vm, NULL,
(flags & VIR_DOMAIN_START_PAUSED) != 0, (flags & VIR_DOMAIN_START_PAUSED) != 0,
(flags & VIR_DOMAIN_START_AUTODESTROY) != 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); virDomainAuditStart(vm, "booted", false);
if (qemuDomainObjEndJob(driver, vm) > 0) if (qemuDomainObjEndJob(driver, vm) > 0)
qemuDomainRemoveInactive(driver, vm); qemuDomainRemoveInactive(driver, vm);
@ -4099,7 +4099,7 @@ qemuDomainSaveImageStartVM(virConnectPtr conn,
/* Set the migration source and start it up. */ /* Set the migration source and start it up. */
ret = qemuProcessStart(conn, driver, vm, "stdio", true, 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 (intermediatefd != -1) {
if (ret < 0) { if (ret < 0) {
@ -4619,7 +4619,7 @@ static char *qemuDomainXMLToNative(virConnectPtr conn,
if (!(cmd = qemuBuildCommandLine(conn, driver, def, if (!(cmd = qemuBuildCommandLine(conn, driver, def,
&monConfig, monitor_json, qemuCaps, &monConfig, monitor_json, qemuCaps,
NULL, -1, NULL, VIR_VM_OP_NO_OP))) NULL, -1, NULL, VIR_NETDEV_VPORT_PROFILE_OP_NO_OP)))
goto cleanup; goto cleanup;
ret = virCommandToString(cmd); ret = virCommandToString(cmd);
@ -4701,7 +4701,7 @@ qemuDomainObjStart(virConnectPtr conn,
} }
ret = qemuProcessStart(conn, driver, vm, NULL, start_paused, 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); virDomainAuditStart(vm, "booted", ret >= 0);
if (ret >= 0) { if (ret >= 0) {
virDomainEventPtr event = virDomainEventPtr event =
@ -10052,7 +10052,7 @@ static int qemuDomainRevertToSnapshot(virDomainSnapshotPtr snapshot,
rc = qemuProcessStart(snapshot->domain->conn, driver, vm, NULL, rc = qemuProcessStart(snapshot->domain->conn, driver, vm, NULL,
true, false, -1, NULL, snap, true, false, -1, NULL, snap,
VIR_VM_OP_CREATE); VIR_NETDEV_VPORT_PROFILE_OP_CREATE);
virDomainAuditStart(vm, "from-snapshot", rc >= 0); virDomainAuditStart(vm, "from-snapshot", rc >= 0);
detail = VIR_DOMAIN_EVENT_STARTED_FROM_SNAPSHOT; detail = VIR_DOMAIN_EVENT_STARTED_FROM_SNAPSHOT;
event = virDomainEventNewFromObj(vm, event = virDomainEventNewFromObj(vm,
@ -10142,7 +10142,7 @@ static int qemuDomainRevertToSnapshot(virDomainSnapshotPtr snapshot,
qemuDomainEventQueue(driver, event); qemuDomainEventQueue(driver, event);
rc = qemuProcessStart(snapshot->domain->conn, driver, vm, NULL, rc = qemuProcessStart(snapshot->domain->conn, driver, vm, NULL,
paused, false, -1, NULL, NULL, paused, false, -1, NULL, NULL,
VIR_VM_OP_CREATE); VIR_NETDEV_VPORT_PROFILE_OP_CREATE);
virDomainAuditStart(vm, "from-snapshot", rc >= 0); virDomainAuditStart(vm, "from-snapshot", rc >= 0);
if (rc < 0) { if (rc < 0) {
if (!vm->persistent) { if (!vm->persistent) {

View File

@ -678,7 +678,7 @@ int qemuDomainAttachNetDevice(virConnectPtr conn,
} else if (actualType == VIR_DOMAIN_NET_TYPE_DIRECT) { } else if (actualType == VIR_DOMAIN_NET_TYPE_DIRECT) {
if ((tapfd = qemuPhysIfaceConnect(vm->def, driver, net, if ((tapfd = qemuPhysIfaceConnect(vm->def, driver, net,
priv->qemuCaps, priv->qemuCaps,
VIR_VM_OP_CREATE)) < 0) VIR_NETDEV_VPORT_PROFILE_OP_CREATE)) < 0)
goto cleanup; goto cleanup;
iface_connected = true; iface_connected = true;
if (qemuOpenVhostNet(vm->def, net, priv->qemuCaps, &vhostfd) < 0) if (qemuOpenVhostNet(vm->def, net, priv->qemuCaps, &vhostfd) < 0)
@ -1911,11 +1911,11 @@ int qemuDomainDetachNetDevice(struct qemud_driver *driver,
#if WITH_MACVTAP #if WITH_MACVTAP
if (virDomainNetGetActualType(detach) == VIR_DOMAIN_NET_TYPE_DIRECT) { if (virDomainNetGetActualType(detach) == VIR_DOMAIN_NET_TYPE_DIRECT) {
delMacvtap(detach->ifname, detach->mac, ignore_value(virNetDevMacVLanDelete(detach->ifname, detach->mac,
virDomainNetGetActualDirectDev(detach), virDomainNetGetActualDirectDev(detach),
virDomainNetGetActualDirectMode(detach), virDomainNetGetActualDirectMode(detach),
virDomainNetGetActualDirectVirtPortProfile(detach), virDomainNetGetActualDirectVirtPortProfile(detach),
driver->stateDir); driver->stateDir));
VIR_FREE(detach->ifname); VIR_FREE(detach->ifname);
} }
#endif #endif

View File

@ -1147,7 +1147,7 @@ qemuMigrationPrepareAny(struct qemud_driver *driver,
*/ */
if (qemuProcessStart(dconn, driver, vm, migrateFrom, true, if (qemuProcessStart(dconn, driver, vm, migrateFrom, true,
true, dataFD[0], NULL, NULL, 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); virDomainAuditStart(vm, "migrated", false);
/* Note that we don't set an error here because qemuProcessStart /* Note that we don't set an error here because qemuProcessStart
* should have already done that. * should have already done that.
@ -2522,12 +2522,12 @@ qemuMigrationVPAssociatePortProfiles(virDomainDefPtr def) {
for (i = 0; i < def->nnets; i++) { for (i = 0; i < def->nnets; i++) {
net = def->nets[i]; net = def->nets[i];
if (virDomainNetGetActualType(net) == VIR_DOMAIN_NET_TYPE_DIRECT) { if (virDomainNetGetActualType(net) == VIR_DOMAIN_NET_TYPE_DIRECT) {
if (vpAssociatePortProfileId(net->ifname, if (virNetDevVPortProfileAssociate(net->ifname,
net->mac, virDomainNetGetActualDirectVirtPortProfile(net),
virDomainNetGetActualDirectDev(net), net->mac,
virDomainNetGetActualDirectVirtPortProfile(net), virDomainNetGetActualDirectDev(net),
def->uuid, def->uuid,
VIR_VM_OP_MIGRATE_IN_FINISH) < 0) VIR_NETDEV_VPORT_PROFILE_OP_MIGRATE_IN_FINISH) < 0)
goto err_exit; goto err_exit;
} }
last_good_net = i; last_good_net = i;
@ -2539,11 +2539,11 @@ err_exit:
for (i = 0; i < last_good_net; i++) { for (i = 0; i < last_good_net; i++) {
net = def->nets[i]; net = def->nets[i];
if (virDomainNetGetActualType(net) == VIR_DOMAIN_NET_TYPE_DIRECT) { if (virDomainNetGetActualType(net) == VIR_DOMAIN_NET_TYPE_DIRECT) {
vpDisassociatePortProfileId(net->ifname, ignore_value(virNetDevVPortProfileDisassociate(net->ifname,
net->mac, virDomainNetGetActualDirectVirtPortProfile(net),
virDomainNetGetActualDirectDev(net), net->mac,
virDomainNetGetActualDirectVirtPortProfile(net), virDomainNetGetActualDirectDev(net),
VIR_VM_OP_MIGRATE_IN_FINISH); VIR_NETDEV_VPORT_PROFILE_OP_MIGRATE_IN_FINISH));
} }
} }
} }

View File

@ -2816,7 +2816,7 @@ int qemuProcessStart(virConnectPtr conn,
int stdin_fd, int stdin_fd,
const char *stdin_path, const char *stdin_path,
virDomainSnapshotObjPtr snapshot, virDomainSnapshotObjPtr snapshot,
enum virVMOperationType vmop) enum virNetDevVPortProfileOp vmop)
{ {
int ret; int ret;
off_t pos = -1; off_t pos = -1;
@ -3412,11 +3412,11 @@ void qemuProcessStop(struct qemud_driver *driver,
virDomainNetDefPtr net = def->nets[i]; virDomainNetDefPtr net = def->nets[i];
#if WITH_MACVTAP #if WITH_MACVTAP
if (virDomainNetGetActualType(net) == VIR_DOMAIN_NET_TYPE_DIRECT) { if (virDomainNetGetActualType(net) == VIR_DOMAIN_NET_TYPE_DIRECT) {
delMacvtap(net->ifname, net->mac, ignore_value(virNetDevMacVLanDelete(net->ifname, net->mac,
virDomainNetGetActualDirectDev(net), virDomainNetGetActualDirectDev(net),
virDomainNetGetActualDirectMode(net), virDomainNetGetActualDirectMode(net),
virDomainNetGetActualDirectVirtPortProfile(net), virDomainNetGetActualDirectVirtPortProfile(net),
driver->stateDir); driver->stateDir));
VIR_FREE(net->ifname); VIR_FREE(net->ifname);
} }
#endif #endif

View File

@ -53,7 +53,7 @@ int qemuProcessStart(virConnectPtr conn,
int stdin_fd, int stdin_fd,
const char *stdin_path, const char *stdin_path,
virDomainSnapshotObjPtr snapshot, virDomainSnapshotObjPtr snapshot,
enum virVMOperationType vmop); enum virNetDevVPortProfileOp vmop);
void qemuProcessStop(struct qemud_driver *driver, void qemuProcessStop(struct qemud_driver *driver,
virDomainObjPtr vm, virDomainObjPtr vm,

View File

@ -52,7 +52,7 @@
#include "macvtap.h" #include "macvtap.h"
#include "virnetdev.h" #include "virnetdev.h"
VIR_ENUM_IMPL(virMacvtapMode, VIR_MACVTAP_MODE_LAST, VIR_ENUM_IMPL(virNetDevMacVLanMode, VIR_NETDEV_MACVLAN_MODE_LAST,
"vepa", "vepa",
"private", "private",
"bridge", "bridge",
@ -101,15 +101,17 @@ enum virNetDevVPortProfileLinkOp {
# if WITH_MACVTAP # if WITH_MACVTAP
/* Open the macvtap's tap device. /**
* virNetDevMacVLanTapOpen:
* Open the macvtap's tap device.
* @ifname: Name of the macvtap interface * @ifname: Name of the macvtap interface
* @retries : Number of retries in case udev for example may need to be * @retries : Number of retries in case udev for example may need to be
* waited for to create the tap chardev * waited for to create the tap chardev
* Returns negative value in case of error, the file descriptor otherwise. * Returns negative value in case of error, the file descriptor otherwise.
*/ */
static static
int openTap(const char *ifname, int virNetDevMacVLanTapOpen(const char *ifname,
int retries) int retries)
{ {
FILE *file; FILE *file;
char path[64]; char path[64];
@ -173,7 +175,7 @@ int openTap(const char *ifname,
/** /**
* configMacvtapTap: * virNetDevMacVLanTapSetup:
* @tapfd: file descriptor of the macvtap tap * @tapfd: file descriptor of the macvtap tap
* @vnet_hdr: 1 to enable IFF_VNET_HDR, 0 to disable it * @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. * macvtap device should not be used.
*/ */
static int static int
configMacvtapTap(int tapfd, int vnet_hdr) virNetDevMacVLanTapSetup(int tapfd, int vnet_hdr)
{ {
unsigned int features; unsigned int features;
struct ifreq ifreq; struct ifreq ifreq;
@ -233,15 +235,15 @@ configMacvtapTap(int tapfd, int vnet_hdr)
} }
static const uint32_t modeMap[VIR_MACVTAP_MODE_LAST] = { static const uint32_t modeMap[VIR_NETDEV_MACVLAN_MODE_LAST] = {
[VIR_MACVTAP_MODE_VEPA] = MACVLAN_MODE_VEPA, [VIR_NETDEV_MACVLAN_MODE_VEPA] = MACVLAN_MODE_VEPA,
[VIR_MACVTAP_MODE_PRIVATE] = MACVLAN_MODE_PRIVATE, [VIR_NETDEV_MACVLAN_MODE_PRIVATE] = MACVLAN_MODE_PRIVATE,
[VIR_MACVTAP_MODE_BRIDGE] = MACVLAN_MODE_BRIDGE, [VIR_NETDEV_MACVLAN_MODE_BRIDGE] = MACVLAN_MODE_BRIDGE,
[VIR_MACVTAP_MODE_PASSTHRU] = MACVLAN_MODE_PASSTHRU, [VIR_NETDEV_MACVLAN_MODE_PASSTHRU] = MACVLAN_MODE_PASSTHRU,
}; };
/** /**
* openMacvtapTap: * virNetDevMacVLanCreate:
* Create an instance of a macvtap device and open its tap character * Create an instance of a macvtap device and open its tap character
* device. * device.
* @tgifname: Interface name that the macvtap is supposed to have. May * @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. * negative value otherwise with error reported.
* *
*/ */
int int virNetDevMacVLanCreate(const char *tgifname,
openMacvtapTap(const char *tgifname, const unsigned char *macaddress,
const unsigned char *macaddress, const char *linkdev,
const char *linkdev, enum virNetDevMacVLanMode mode,
enum virMacvtapMode mode, int vnet_hdr,
int vnet_hdr, const unsigned char *vmuuid,
const unsigned char *vmuuid, virNetDevVPortProfilePtr virtPortProfile,
virNetDevVPortProfilePtr virtPortProfile, char **res_ifname,
char **res_ifname, enum virNetDevVPortProfileOp vmOp,
enum virVMOperationType vmOp, char *stateDir,
char *stateDir, virNetDevBandwidthPtr bandwidth)
virNetDevBandwidthPtr bandwidth)
{ {
const char *type = "macvtap"; const char *type = "macvtap";
int c, rc; int c, rc;
@ -285,7 +286,7 @@ openMacvtapTap(const char *tgifname,
*res_ifname = NULL; *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 /** Note: When using PASSTHROUGH mode with MACVTAP devices the link
* device's MAC address must be set to the VMs MAC address. In * 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 * This is especially important when using SRIOV capable cards that
* emulate their switch in firmware. * emulate their switch in firmware.
*/ */
if (mode == VIR_MACVTAP_MODE_PASSTHRU) { if (mode == VIR_NETDEV_MACVLAN_MODE_PASSTHRU) {
if (ifaceReplaceMacAddress(macaddress, linkdev, stateDir) < 0) { if (ifaceReplaceMacAddress(macaddress, linkdev, stateDir) < 0) {
return -1; return -1;
} }
@ -334,11 +335,11 @@ create_name:
cr_ifname = ifname; cr_ifname = ifname;
} }
if (vpAssociatePortProfileId(cr_ifname, if (virNetDevVPortProfileAssociate(cr_ifname,
macaddress, virtPortProfile,
linkdev, macaddress,
virtPortProfile, linkdev,
vmuuid, vmOp) < 0) { vmuuid, vmOp) < 0) {
rc = -1; rc = -1;
goto link_del_exit; goto link_del_exit;
} }
@ -348,9 +349,9 @@ create_name:
goto disassociate_exit; goto disassociate_exit;
} }
rc = openTap(cr_ifname, 10); rc = virNetDevMacVLanTapOpen(cr_ifname, 10);
if (rc >= 0) { if (rc >= 0) {
if (configMacvtapTap(rc, vnet_hdr) < 0) { if (virNetDevMacVLanTapSetup(rc, vnet_hdr) < 0) {
VIR_FORCE_CLOSE(rc); /* sets rc to -1 */ VIR_FORCE_CLOSE(rc); /* sets rc to -1 */
goto disassociate_exit; goto disassociate_exit;
} }
@ -370,11 +371,11 @@ create_name:
return rc; return rc;
disassociate_exit: disassociate_exit:
vpDisassociatePortProfileId(cr_ifname, ignore_value(virNetDevVPortProfileDisassociate(cr_ifname,
macaddress, virtPortProfile,
linkdev, macaddress,
virtPortProfile, linkdev,
vmOp); vmOp));
link_del_exit: link_del_exit:
ifaceLinkDel(cr_ifname); ifaceLinkDel(cr_ifname);
@ -393,25 +394,29 @@ link_del_exit:
* it with the switch if port profile parameters * it with the switch if port profile parameters
* were provided. * were provided.
*/ */
void int virNetDevMacVLanDelete(const char *ifname,
delMacvtap(const char *ifname, const unsigned char *macaddr,
const unsigned char *macaddr, const char *linkdev,
const char *linkdev, int mode,
int mode, virNetDevVPortProfilePtr virtPortProfile,
virNetDevVPortProfilePtr virtPortProfile, char *stateDir)
char *stateDir)
{ {
if (mode == VIR_MACVTAP_MODE_PASSTHRU) { int ret = 0;
if (mode == VIR_NETDEV_MACVLAN_MODE_PASSTHRU) {
ifaceRestoreMacAddress(linkdev, stateDir); ifaceRestoreMacAddress(linkdev, stateDir);
} }
if (ifname) { if (ifname) {
vpDisassociatePortProfileId(ifname, macaddr, if (virNetDevVPortProfileDisassociate(ifname,
linkdev, virtPortProfile,
virtPortProfile, macaddr,
VIR_VM_OP_DESTROY); linkdev,
ifaceLinkDel(ifname); VIR_NETDEV_VPORT_PROFILE_OP_DESTROY) < 0)
ret = -1;
if (ifaceLinkDel(ifname) < 0)
ret = -1;
} }
return ret;
} }
# endif /* WITH_MACVTAP */ # endif /* WITH_MACVTAP */
@ -425,7 +430,7 @@ static struct nla_policy ifla_port_policy[IFLA_PORT_MAX + 1] =
static uint32_t static uint32_t
getLldpadPid(void) { virNetDevVPortProfileGetLldpadPid(void) {
int fd; int fd;
uint32_t pid = 0; uint32_t pid = 0;
@ -458,7 +463,7 @@ getLldpadPid(void) {
/** /**
* getPortProfileStatus * virNetDevVPortProfileGetStatus:
* *
* tb: top level netlink response attributes + values * tb: top level netlink response attributes + values
* vf: The virtual function used in the request * vf: The virtual function used in the request
@ -470,11 +475,11 @@ getLldpadPid(void) {
* case of success, < 0 otherwise with error having been reported * case of success, < 0 otherwise with error having been reported
*/ */
static int static int
getPortProfileStatus(struct nlattr **tb, int32_t vf, virNetDevVPortProfileGetStatus(struct nlattr **tb, int32_t vf,
const unsigned char *instanceId, const unsigned char *instanceId,
bool nltarget_kernel, bool nltarget_kernel,
bool is8021Qbg, bool is8021Qbg,
uint16_t *status) uint16_t *status)
{ {
int rc = -1; int rc = -1;
const char *msg = NULL; const char *msg = NULL;
@ -557,16 +562,16 @@ err_exit:
static int static int
doPortProfileOpSetLink(bool nltarget_kernel, virNetDevVPortProfileOpSetLink(const char *ifname, int ifindex,
const char *ifname, int ifindex, bool nltarget_kernel,
const unsigned char *macaddr, const unsigned char *macaddr,
int vlanid, int vlanid,
const char *profileId, const char *profileId,
struct ifla_port_vsi *portVsi, struct ifla_port_vsi *portVsi,
const unsigned char *instanceId, const unsigned char *instanceId,
const unsigned char *hostUUID, const unsigned char *hostUUID,
int32_t vf, int32_t vf,
uint8_t op) uint8_t op)
{ {
int rc = -1; int rc = -1;
struct nlmsghdr *resp; struct nlmsghdr *resp;
@ -685,7 +690,7 @@ doPortProfileOpSetLink(bool nltarget_kernel,
} }
if (!nltarget_kernel) { if (!nltarget_kernel) {
pid = getLldpadPid(); pid = virNetDevVPortProfileGetLldpadPid();
if (pid == 0) if (pid == 0)
goto err_exit; goto err_exit;
} }
@ -747,16 +752,16 @@ buffer_too_small:
/* Returns 0 on success, -1 on general failure, and -2 on timeout */ /* Returns 0 on success, -1 on general failure, and -2 on timeout */
static int static int
doPortProfileOpCommon(bool nltarget_kernel, virNetDevVPortProfileOpCommon(const char *ifname, int ifindex,
const char *ifname, int ifindex, bool nltarget_kernel,
const unsigned char *macaddr, const unsigned char *macaddr,
int vlanid, int vlanid,
const char *profileId, const char *profileId,
struct ifla_port_vsi *portVsi, struct ifla_port_vsi *portVsi,
const unsigned char *instanceId, const unsigned char *instanceId,
const unsigned char *hostUUID, const unsigned char *hostUUID,
int32_t vf, int32_t vf,
uint8_t op) uint8_t op)
{ {
int rc; int rc;
unsigned char *recvbuf = NULL; unsigned char *recvbuf = NULL;
@ -765,16 +770,16 @@ doPortProfileOpCommon(bool nltarget_kernel,
uint16_t status = 0; uint16_t status = 0;
bool is8021Qbg = (profileId == NULL); bool is8021Qbg = (profileId == NULL);
rc = doPortProfileOpSetLink(nltarget_kernel, rc = virNetDevVPortProfileOpSetLink(ifname, ifindex,
ifname, ifindex, nltarget_kernel,
macaddr, macaddr,
vlanid, vlanid,
profileId, profileId,
portVsi, portVsi,
instanceId, instanceId,
hostUUID, hostUUID,
vf, vf,
op); op);
if (rc < 0) { if (rc < 0) {
macvtapError(VIR_ERR_INTERNAL_ERROR, "%s", macvtapError(VIR_ERR_INTERNAL_ERROR, "%s",
_("sending of PortProfileRequest failed.")); _("sending of PortProfileRequest failed."));
@ -783,12 +788,12 @@ doPortProfileOpCommon(bool nltarget_kernel,
while (--repeats >= 0) { while (--repeats >= 0) {
rc = ifaceMacvtapLinkDump(nltarget_kernel, NULL, ifindex, tb, rc = ifaceMacvtapLinkDump(nltarget_kernel, NULL, ifindex, tb,
&recvbuf, getLldpadPid); &recvbuf, virNetDevVPortProfileGetLldpadPid);
if (rc < 0) if (rc < 0)
goto err_exit; goto err_exit;
rc = getPortProfileStatus(tb, vf, instanceId, nltarget_kernel, rc = virNetDevVPortProfileGetStatus(tb, vf, instanceId, nltarget_kernel,
is8021Qbg, &status); is8021Qbg, &status);
if (rc < 0) if (rc < 0)
goto err_exit; goto err_exit;
if (status == PORT_PROFILE_RESPONSE_SUCCESS || if (status == PORT_PROFILE_RESPONSE_SUCCESS ||
@ -828,8 +833,8 @@ err_exit:
# ifdef IFLA_VF_PORT_MAX # ifdef IFLA_VF_PORT_MAX
static int static int
getPhysdevAndVlan(const char *ifname, int *root_ifindex, char *root_ifname, virNetDevVPortProfileGetPhysdevAndVlan(const char *ifname, int *root_ifindex, char *root_ifname,
int *vlanid) int *vlanid)
{ {
int ret; int ret;
unsigned int nth; 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 */ /* Returns 0 on success, -1 on general failure, and -2 on timeout */
static int static int
doPortProfileOp8021Qbg(const char *ifname, virNetDevVPortProfileOp8021Qbg(const char *ifname,
const unsigned char *macaddr, const unsigned char *macaddr,
const virNetDevVPortProfilePtr virtPort, const virNetDevVPortProfilePtr virtPort,
enum virNetDevVPortProfileLinkOp virtPortOp) enum virNetDevVPortProfileLinkOp virtPortOp)
{ {
int rc = 0; int rc = 0;
@ -888,8 +893,8 @@ doPortProfileOp8021Qbg(const char *ifname,
char physdev_ifname[IFNAMSIZ] = { 0, }; char physdev_ifname[IFNAMSIZ] = { 0, };
int vf = PORT_SELF_VF; int vf = PORT_SELF_VF;
if (getPhysdevAndVlan(ifname, &physdev_ifindex, physdev_ifname, if (virNetDevVPortProfileGetPhysdevAndVlan(ifname, &physdev_ifindex, physdev_ifname,
&vlanid) < 0) { &vlanid) < 0) {
rc = -1; rc = -1;
goto err_exit; goto err_exit;
} }
@ -918,16 +923,16 @@ doPortProfileOp8021Qbg(const char *ifname,
goto err_exit; goto err_exit;
} }
rc = doPortProfileOpCommon(nltarget_kernel, rc = virNetDevVPortProfileOpCommon(physdev_ifname, physdev_ifindex,
physdev_ifname, physdev_ifindex, nltarget_kernel,
macaddr, macaddr,
vlanid, vlanid,
NULL, NULL,
&portVsi, &portVsi,
virtPort->u.virtPort8021Qbg.instanceID, virtPort->u.virtPort8021Qbg.instanceID,
NULL, NULL,
vf, vf,
op); op);
err_exit: err_exit:
@ -939,9 +944,9 @@ err_exit:
# ifdef IFLA_VF_PORT_MAX # ifdef IFLA_VF_PORT_MAX
static int static int
getPhysfnDev(const char *linkdev, virNetDevVPortProfileGetPhysfnDev(const char *linkdev,
int32_t *vf, int32_t *vf,
char **physfndev) char **physfndev)
{ {
int rc = -1; int rc = -1;
@ -975,11 +980,11 @@ err_exit:
/* Returns 0 on success, -1 on general failure, and -2 on timeout */ /* Returns 0 on success, -1 on general failure, and -2 on timeout */
static int static int
doPortProfileOp8021Qbh(const char *ifname, virNetDevVPortProfileOp8021Qbh(const char *ifname,
const unsigned char *macaddr, const unsigned char *macaddr,
const virNetDevVPortProfilePtr virtPort, const virNetDevVPortProfilePtr virtPort,
const unsigned char *vm_uuid, const unsigned char *vm_uuid,
enum virNetDevVPortProfileLinkOp virtPortOp) enum virNetDevVPortProfileLinkOp virtPortOp)
{ {
int rc = 0; int rc = 0;
@ -1003,7 +1008,7 @@ doPortProfileOp8021Qbh(const char *ifname,
int ifindex; int ifindex;
int vlanid = -1; int vlanid = -1;
rc = getPhysfnDev(ifname, &vf, &physfndev); rc = virNetDevVPortProfileGetPhysfnDev(ifname, &vf, &physfndev);
if (rc < 0) if (rc < 0)
goto err_exit; goto err_exit;
@ -1020,40 +1025,43 @@ doPortProfileOp8021Qbh(const char *ifname,
goto err_exit; goto err_exit;
} }
rc = doPortProfileOpCommon(nltarget_kernel, NULL, ifindex, rc = virNetDevVPortProfileOpCommon(NULL, ifindex,
macaddr, nltarget_kernel,
vlanid, macaddr,
virtPort->u.virtPort8021Qbh.profileID, vlanid,
NULL, virtPort->u.virtPort8021Qbh.profileID,
vm_uuid, NULL,
hostuuid, vm_uuid,
vf, hostuuid,
(virtPortOp == VIR_NETDEV_VPORT_PROFILE_LINK_OP_PREASSOCIATE_RR) ? vf,
PORT_REQUEST_PREASSOCIATE_RR (virtPortOp == VIR_NETDEV_VPORT_PROFILE_LINK_OP_PREASSOCIATE_RR) ?
: PORT_REQUEST_ASSOCIATE); PORT_REQUEST_PREASSOCIATE_RR
: PORT_REQUEST_ASSOCIATE);
if (rc == -2) if (rc == -2)
/* Association timed out, disassociate */ /* Association timed out, disassociate */
doPortProfileOpCommon(nltarget_kernel, NULL, ifindex, virNetDevVPortProfileOpCommon(NULL, ifindex,
NULL, nltarget_kernel,
vlanid, NULL,
NULL, vlanid,
NULL, NULL,
NULL, NULL,
NULL, NULL,
vf, NULL,
PORT_REQUEST_DISASSOCIATE); vf,
PORT_REQUEST_DISASSOCIATE);
break; break;
case VIR_NETDEV_VPORT_PROFILE_LINK_OP_DISASSOCIATE: case VIR_NETDEV_VPORT_PROFILE_LINK_OP_DISASSOCIATE:
rc = doPortProfileOpCommon(nltarget_kernel, NULL, ifindex, rc = virNetDevVPortProfileOpCommon(NULL, ifindex,
NULL, nltarget_kernel,
vlanid, NULL,
NULL, vlanid,
NULL, NULL,
NULL, NULL,
NULL, NULL,
vf, NULL,
PORT_REQUEST_DISASSOCIATE); vf,
PORT_REQUEST_DISASSOCIATE);
break; break;
default: default:
@ -1071,7 +1079,7 @@ err_exit:
} }
/** /**
* vpAssociatePortProfile * virNetDevVPortProfileAssociate:
* *
* @macvtap_ifname: The name of the macvtap device * @macvtap_ifname: The name of the macvtap device
* @virtPort: pointer to the object holding port profile parameters * @virtPort: pointer to the object holding port profile parameters
@ -1088,21 +1096,21 @@ err_exit:
* having been reported. * having been reported.
*/ */
int int
vpAssociatePortProfileId(const char *macvtap_ifname, virNetDevVPortProfileAssociate(const char *macvtap_ifname,
const unsigned char *macvtap_macaddr, const virNetDevVPortProfilePtr virtPort,
const char *linkdev, const unsigned char *macvtap_macaddr,
const virNetDevVPortProfilePtr virtPort, const char *linkdev,
const unsigned char *vmuuid, const unsigned char *vmuuid,
enum virVMOperationType vmOp) enum virNetDevVPortProfileOp vmOp)
{ {
int rc = 0; int rc = 0;
VIR_DEBUG("Associating port profile '%p' on link device '%s'", VIR_DEBUG("Associating port profile '%p' on link device '%s'",
virtPort, macvtap_ifname); 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; return 0;
switch (virtPort->virtPortType) { switch (virtPort->virtPortType) {
@ -1111,20 +1119,20 @@ vpAssociatePortProfileId(const char *macvtap_ifname,
break; break;
case VIR_NETDEV_VPORT_PROFILE_8021QBG: case VIR_NETDEV_VPORT_PROFILE_8021QBG:
rc = doPortProfileOp8021Qbg(macvtap_ifname, macvtap_macaddr, rc = virNetDevVPortProfileOp8021Qbg(macvtap_ifname, macvtap_macaddr,
virtPort, virtPort,
(vmOp == VIR_VM_OP_MIGRATE_IN_START) (vmOp == VIR_NETDEV_VPORT_PROFILE_OP_MIGRATE_IN_START)
? VIR_NETDEV_VPORT_PROFILE_LINK_OP_PREASSOCIATE ? VIR_NETDEV_VPORT_PROFILE_LINK_OP_PREASSOCIATE
: VIR_NETDEV_VPORT_PROFILE_LINK_OP_ASSOCIATE); : VIR_NETDEV_VPORT_PROFILE_LINK_OP_ASSOCIATE);
break; break;
case VIR_NETDEV_VPORT_PROFILE_8021QBH: case VIR_NETDEV_VPORT_PROFILE_8021QBH:
rc = doPortProfileOp8021Qbh(linkdev, macvtap_macaddr, rc = virNetDevVPortProfileOp8021Qbh(linkdev, macvtap_macaddr,
virtPort, vmuuid, virtPort, vmuuid,
(vmOp == VIR_VM_OP_MIGRATE_IN_START) (vmOp == VIR_NETDEV_VPORT_PROFILE_OP_MIGRATE_IN_START)
? VIR_NETDEV_VPORT_PROFILE_LINK_OP_PREASSOCIATE_RR ? VIR_NETDEV_VPORT_PROFILE_LINK_OP_PREASSOCIATE_RR
: VIR_NETDEV_VPORT_PROFILE_LINK_OP_ASSOCIATE); : VIR_NETDEV_VPORT_PROFILE_LINK_OP_ASSOCIATE);
if (vmOp != VIR_VM_OP_MIGRATE_IN_START && !rc) { if (vmOp != VIR_NETDEV_VPORT_PROFILE_OP_MIGRATE_IN_START && !rc) {
/* XXX bogus error handling */ /* XXX bogus error handling */
ignore_value(virNetDevSetOnline(linkdev, true)); 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_ifname: The name of the macvtap device
* @macvtap_macaddr : The MAC address of the macvtap * @macvtap_macaddr : The MAC address of the macvtap
@ -1148,18 +1156,18 @@ vpAssociatePortProfileId(const char *macvtap_ifname,
* having been reported. * having been reported.
*/ */
int int
vpDisassociatePortProfileId(const char *macvtap_ifname, virNetDevVPortProfileDisassociate(const char *macvtap_ifname,
const unsigned char *macvtap_macaddr, const virNetDevVPortProfilePtr virtPort,
const char *linkdev, const unsigned char *macvtap_macaddr,
const virNetDevVPortProfilePtr virtPort, const char *linkdev,
enum virVMOperationType vmOp) enum virNetDevVPortProfileOp vmOp)
{ {
int rc = 0; int rc = 0;
VIR_DEBUG("Disassociating port profile id '%p' on link device '%s' ", VIR_DEBUG("Disassociating port profile id '%p' on link device '%s' ",
virtPort, macvtap_ifname); virtPort, macvtap_ifname);
VIR_DEBUG("%s: VM OPERATION: %s", __FUNCTION__, virVMOperationTypeToString(vmOp)); VIR_DEBUG("%s: VM OPERATION: %s", __FUNCTION__, virNetDevVPortProfileOpTypeToString(vmOp));
if (!virtPort) if (!virtPort)
return 0; return 0;
@ -1170,18 +1178,18 @@ vpDisassociatePortProfileId(const char *macvtap_ifname,
break; break;
case VIR_NETDEV_VPORT_PROFILE_8021QBG: case VIR_NETDEV_VPORT_PROFILE_8021QBG:
rc = doPortProfileOp8021Qbg(macvtap_ifname, macvtap_macaddr, rc = virNetDevVPortProfileOp8021Qbg(macvtap_ifname, macvtap_macaddr,
virtPort, VIR_NETDEV_VPORT_PROFILE_LINK_OP_DISASSOCIATE); virtPort, VIR_NETDEV_VPORT_PROFILE_LINK_OP_DISASSOCIATE);
break; break;
case VIR_NETDEV_VPORT_PROFILE_8021QBH: case VIR_NETDEV_VPORT_PROFILE_8021QBH:
/* avoid disassociating twice */ /* avoid disassociating twice */
if (vmOp == VIR_VM_OP_MIGRATE_IN_FINISH) if (vmOp == VIR_NETDEV_VPORT_PROFILE_OP_MIGRATE_IN_FINISH)
break; break;
ignore_value(virNetDevSetOnline(linkdev, false)); ignore_value(virNetDevSetOnline(linkdev, false));
rc = doPortProfileOp8021Qbh(linkdev, macvtap_macaddr, rc = virNetDevVPortProfileOp8021Qbh(linkdev, macvtap_macaddr,
virtPort, NULL, virtPort, NULL,
VIR_NETDEV_VPORT_PROFILE_LINK_OP_DISASSOCIATE); VIR_NETDEV_VPORT_PROFILE_LINK_OP_DISASSOCIATE);
break; break;
} }
@ -1190,12 +1198,12 @@ vpDisassociatePortProfileId(const char *macvtap_ifname,
#endif /* WITH_MACVTAP || WITH_VIRTUALPORT */ #endif /* WITH_MACVTAP || WITH_VIRTUALPORT */
VIR_ENUM_IMPL(virVMOperation, VIR_VM_OP_LAST, VIR_ENUM_IMPL(virNetDevVPortProfileOp, VIR_NETDEV_VPORT_PROFILE_OP_LAST,
"create", "create",
"save", "save",
"restore", "restore",
"destroy", "destroy",
"migrate out", "migrate out",
"migrate in start", "migrate in start",
"migrate in finish", "migrate in finish",
"no-op") "no-op")

View File

@ -29,65 +29,73 @@
# include "virnetdevvportprofile.h" # include "virnetdevvportprofile.h"
/* the mode type for macvtap devices */ /* the mode type for macvtap devices */
enum virMacvtapMode { enum virNetDevMacVLanMode {
VIR_MACVTAP_MODE_VEPA, VIR_NETDEV_MACVLAN_MODE_VEPA,
VIR_MACVTAP_MODE_PRIVATE, VIR_NETDEV_MACVLAN_MODE_PRIVATE,
VIR_MACVTAP_MODE_BRIDGE, VIR_NETDEV_MACVLAN_MODE_BRIDGE,
VIR_MACVTAP_MODE_PASSTHRU, VIR_NETDEV_MACVLAN_MODE_PASSTHRU,
VIR_MACVTAP_MODE_LAST, VIR_NETDEV_MACVLAN_MODE_LAST,
}; };
enum virVMOperationType { enum virNetDevVPortProfileOp {
VIR_VM_OP_CREATE, VIR_NETDEV_VPORT_PROFILE_OP_CREATE,
VIR_VM_OP_SAVE, VIR_NETDEV_VPORT_PROFILE_OP_SAVE,
VIR_VM_OP_RESTORE, VIR_NETDEV_VPORT_PROFILE_OP_RESTORE,
VIR_VM_OP_DESTROY, VIR_NETDEV_VPORT_PROFILE_OP_DESTROY,
VIR_VM_OP_MIGRATE_OUT, VIR_NETDEV_VPORT_PROFILE_OP_MIGRATE_OUT,
VIR_VM_OP_MIGRATE_IN_START, VIR_NETDEV_VPORT_PROFILE_OP_MIGRATE_IN_START,
VIR_VM_OP_MIGRATE_IN_FINISH, VIR_NETDEV_VPORT_PROFILE_OP_MIGRATE_IN_FINISH,
VIR_VM_OP_NO_OP, VIR_NETDEV_VPORT_PROFILE_OP_NO_OP,
VIR_VM_OP_LAST VIR_NETDEV_VPORT_PROFILE_OP_LAST
}; };
# if WITH_MACVTAP # if WITH_MACVTAP
int openMacvtapTap(const char *ifname, int virNetDevMacVLanCreate(const char *ifname,
const unsigned char *macaddress, const unsigned char *macaddress,
const char *linkdev, const char *linkdev,
enum virMacvtapMode mode, enum virNetDevMacVLanMode mode,
int vnet_hdr, int vnet_hdr,
const unsigned char *vmuuid, const unsigned char *vmuuid,
virNetDevVPortProfilePtr virtPortProfile, virNetDevVPortProfilePtr virtPortProfile,
char **res_ifname, char **res_ifname,
enum virVMOperationType vmop, enum virNetDevVPortProfileOp vmop,
char *stateDir, char *stateDir,
virNetDevBandwidthPtr bandwidth); 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, int virNetDevMacVLanDelete(const char *ifname,
const unsigned char *macaddress, const unsigned char *macaddress,
const char *linkdev, const char *linkdev,
int mode, int mode,
virNetDevVPortProfilePtr virtPortProfile, virNetDevVPortProfilePtr virtPortProfile,
char *stateDir); char *stateDir)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3)
ATTRIBUTE_NONNULL(6) ATTRIBUTE_RETURN_CHECK;
int vpAssociatePortProfileId(const char *macvtap_ifname, int virNetDevVPortProfileAssociate(const char *ifname,
const unsigned char *macvtap_macaddr, const virNetDevVPortProfilePtr virtPort,
const char *linkdev, const unsigned char *macaddr,
const virNetDevVPortProfilePtr virtPort, const char *linkdev,
const unsigned char *vmuuid, const unsigned char *vmuuid,
enum virVMOperationType vmOp); enum virNetDevVPortProfileOp vmOp)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(4)
ATTRIBUTE_NONNULL(5) ATTRIBUTE_RETURN_CHECK;
int vpDisassociatePortProfileId(const char *macvtap_ifname, int virNetDevVPortProfileDisassociate(const char *ifname,
const unsigned char *macvtap_macaddr, const virNetDevVPortProfilePtr virtPort,
const char *linkdev, const unsigned char *macaddr,
const virNetDevVPortProfilePtr virtPort, const char *linkdev,
enum virVMOperationType vmOp); enum virNetDevVPortProfileOp vmOp)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(4)
ATTRIBUTE_RETURN_CHECK;
# endif /* WITH_MACVTAP */ # endif /* WITH_MACVTAP */
VIR_ENUM_DECL(virVMOperation) VIR_ENUM_DECL(virNetDevVPortProfileOp)
VIR_ENUM_DECL(virMacvtapMode) VIR_ENUM_DECL(virNetDevMacVLanMode)
#endif /* __UTIL_MACVTAP_H__ */ #endif /* __UTIL_MACVTAP_H__ */

View File

@ -180,7 +180,7 @@ static int testCompareXMLToArgvFiles(const char *xml,
if (!(cmd = qemuBuildCommandLine(conn, &driver, if (!(cmd = qemuBuildCommandLine(conn, &driver,
vmdef, &monitor_chr, json, extraFlags, vmdef, &monitor_chr, json, extraFlags,
migrateFrom, migrateFd, NULL, migrateFrom, migrateFd, NULL,
VIR_VM_OP_NO_OP))) VIR_NETDEV_VPORT_PROFILE_OP_NO_OP)))
goto fail; goto fail;
if (!!virGetLastError() != expectError) { if (!!virGetLastError() != expectError) {

View File

@ -124,7 +124,7 @@ static int testCompareXMLToArgvFiles(const char *xml,
if (!(cmd = qemuBuildCommandLine(conn, &driver, if (!(cmd = qemuBuildCommandLine(conn, &driver,
vmdef, &monitor_chr, json, extraFlags, vmdef, &monitor_chr, json, extraFlags,
migrateFrom, migrateFd, NULL, migrateFrom, migrateFd, NULL,
VIR_VM_OP_NO_OP))) VIR_NETDEV_VPORT_PROFILE_OP_NO_OP)))
goto fail; goto fail;
if (!!virGetLastError() != expectError) { if (!!virGetLastError() != expectError) {