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);
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)

View File

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

View File

@ -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;
}

View File

@ -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;

View File

@ -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,

View File

@ -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) {

View File

@ -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

View File

@ -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));
}
}
}

View File

@ -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

View File

@ -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,

View File

@ -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")

View File

@ -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__ */

View File

@ -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) {

View File

@ -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) {