提交 caf808c7 编写于 作者: D Daniel P. Berrange

Remove macvtap dependency on domain configuration

Files under src/util must not depend on src/conf
Solve the macvtap problem by moving the definition
of macvtap modes from domain_conf.h into macvtap.h

* src/util/macvtap.c, src/util/macvtap.h: Add enum
  for macvtap modes
* src/conf/domain_conf.c, src/conf/domain_conf.h: Remove
  enum for macvtap modes
上级 73b9246d
...@@ -447,12 +447,6 @@ VIR_ENUM_IMPL(virDomainSeclabel, VIR_DOMAIN_SECLABEL_LAST, ...@@ -447,12 +447,6 @@ VIR_ENUM_IMPL(virDomainSeclabel, VIR_DOMAIN_SECLABEL_LAST,
"dynamic", "dynamic",
"static") "static")
VIR_ENUM_IMPL(virDomainNetdevMacvtap, VIR_DOMAIN_NETDEV_MACVTAP_MODE_LAST,
"vepa",
"private",
"bridge",
"passthrough")
VIR_ENUM_IMPL(virVirtualPort, VIR_VIRTUALPORT_TYPE_LAST, VIR_ENUM_IMPL(virVirtualPort, VIR_VIRTUALPORT_TYPE_LAST,
"none", "none",
"802.1Qbg", "802.1Qbg",
...@@ -2974,14 +2968,14 @@ virDomainNetDefParseXML(virCapsPtr caps, ...@@ -2974,14 +2968,14 @@ virDomainNetDefParseXML(virCapsPtr caps,
if (mode != NULL) { if (mode != NULL) {
int m; int m;
if ((m = virDomainNetdevMacvtapTypeFromString(mode)) < 0) { if ((m = virMacvtapModeTypeFromString(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_DOMAIN_NETDEV_MACVTAP_MODE_VEPA; def->data.direct.mode = VIR_MACVTAP_MODE_VEPA;
if (virtPortParsed) if (virtPortParsed)
def->data.direct.virtPortProfile = virtPort; def->data.direct.virtPortProfile = virtPort;
...@@ -8634,7 +8628,7 @@ virDomainNetDefFormat(virBufferPtr buf, ...@@ -8634,7 +8628,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'",
virDomainNetdevMacvtapTypeToString(def->data.direct.mode)); virMacvtapModeTypeToString(def->data.direct.mode));
virBufferAddLit(buf, "/>\n"); virBufferAddLit(buf, "/>\n");
virVirtualPortProfileFormat(buf, &def->data.direct.virtPortProfile, virVirtualPortProfileFormat(buf, &def->data.direct.virtPortProfile,
" "); " ");
......
...@@ -348,17 +348,6 @@ enum virDomainNetVirtioTxModeType { ...@@ -348,17 +348,6 @@ enum virDomainNetVirtioTxModeType {
VIR_DOMAIN_NET_VIRTIO_TX_MODE_LAST, VIR_DOMAIN_NET_VIRTIO_TX_MODE_LAST,
}; };
/* the mode type for macvtap devices */
enum virDomainNetdevMacvtapType {
VIR_DOMAIN_NETDEV_MACVTAP_MODE_VEPA,
VIR_DOMAIN_NETDEV_MACVTAP_MODE_PRIVATE,
VIR_DOMAIN_NETDEV_MACVTAP_MODE_BRIDGE,
VIR_DOMAIN_NETDEV_MACVTAP_MODE_PASSTHRU,
VIR_DOMAIN_NETDEV_MACVTAP_MODE_LAST,
};
/* Stores the virtual network interface configuration */ /* Stores the virtual network interface configuration */
typedef struct _virDomainNetDef virDomainNetDef; typedef struct _virDomainNetDef virDomainNetDef;
typedef virDomainNetDef *virDomainNetDefPtr; typedef virDomainNetDef *virDomainNetDefPtr;
...@@ -396,7 +385,7 @@ struct _virDomainNetDef { ...@@ -396,7 +385,7 @@ struct _virDomainNetDef {
} internal; } internal;
struct { struct {
char *linkdev; char *linkdev;
int mode; int mode; /* enum virMacvtapMode from util/macvtap.h */
virVirtualPortProfileParams virtPortProfile; virVirtualPortProfileParams virtPortProfile;
} direct; } direct;
} data; } data;
...@@ -1615,8 +1604,6 @@ int virDomainStateReasonFromString(virDomainState state, const char *reason); ...@@ -1615,8 +1604,6 @@ int virDomainStateReasonFromString(virDomainState state, const char *reason);
VIR_ENUM_DECL(virDomainSeclabel) VIR_ENUM_DECL(virDomainSeclabel)
VIR_ENUM_DECL(virDomainClockOffset) VIR_ENUM_DECL(virDomainClockOffset)
VIR_ENUM_DECL(virDomainNetdevMacvtap)
VIR_ENUM_DECL(virDomainTimerName) VIR_ENUM_DECL(virDomainTimerName)
VIR_ENUM_DECL(virDomainTimerTrack) VIR_ENUM_DECL(virDomainTimerTrack)
VIR_ENUM_DECL(virDomainTimerTickpolicy) VIR_ENUM_DECL(virDomainTimerTickpolicy)
......
...@@ -55,12 +55,17 @@ ...@@ -55,12 +55,17 @@
#include "util.h" #include "util.h"
#include "macvtap.h" #include "macvtap.h"
VIR_ENUM_IMPL(virMacvtapMode, VIR_MACVTAP_MODE_LAST,
"vepa",
"private",
"bridge",
"passthrough")
#if WITH_MACVTAP || WITH_VIRTUALPORT #if WITH_MACVTAP || WITH_VIRTUALPORT
# include "memory.h" # include "memory.h"
# include "logging.h" # include "logging.h"
# include "interface.h" # include "interface.h"
# include "conf/domain_conf.h"
# include "virterror_internal.h" # include "virterror_internal.h"
# include "uuid.h" # include "uuid.h"
# include "files.h" # include "files.h"
...@@ -468,26 +473,6 @@ int openTap(const char *ifname, ...@@ -468,26 +473,6 @@ int openTap(const char *ifname,
} }
static uint32_t
macvtapModeFromInt(enum virDomainNetdevMacvtapType mode)
{
switch (mode) {
case VIR_DOMAIN_NETDEV_MACVTAP_MODE_PRIVATE:
return MACVLAN_MODE_PRIVATE;
case VIR_DOMAIN_NETDEV_MACVTAP_MODE_BRIDGE:
return MACVLAN_MODE_BRIDGE;
case VIR_DOMAIN_NETDEV_MACVTAP_MODE_PASSTHRU:
return MACVLAN_MODE_PASSTHRU;
case VIR_DOMAIN_NETDEV_MACVTAP_MODE_VEPA:
default:
return MACVLAN_MODE_VEPA;
}
}
/** /**
* configMacvtapTap: * configMacvtapTap:
* @tapfd: file descriptor of the macvtap tap * @tapfd: file descriptor of the macvtap tap
...@@ -643,6 +628,13 @@ restoreMacAddress(const char *linkdev, ...@@ -643,6 +628,13 @@ restoreMacAddress(const char *linkdev,
return 0; return 0;
} }
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,
};
/** /**
* openMacvtapTap: * openMacvtapTap:
* Create an instance of a macvtap device and open its tap character * Create an instance of a macvtap device and open its tap character
...@@ -667,7 +659,7 @@ int ...@@ -667,7 +659,7 @@ int
openMacvtapTap(const char *tgifname, openMacvtapTap(const char *tgifname,
const unsigned char *macaddress, const unsigned char *macaddress,
const char *linkdev, const char *linkdev,
int mode, enum virMacvtapMode mode,
int vnet_hdr, int vnet_hdr,
const unsigned char *vmuuid, const unsigned char *vmuuid,
virVirtualPortProfileParamsPtr virtPortProfile, virVirtualPortProfileParamsPtr virtPortProfile,
...@@ -679,10 +671,12 @@ openMacvtapTap(const char *tgifname, ...@@ -679,10 +671,12 @@ openMacvtapTap(const char *tgifname,
int c, rc; int c, rc;
char ifname[IFNAMSIZ]; char ifname[IFNAMSIZ];
int retries, do_retry = 0; int retries, do_retry = 0;
uint32_t macvtapMode = macvtapModeFromInt(mode); uint32_t macvtapMode;
const char *cr_ifname; const char *cr_ifname;
int ifindex; int ifindex;
macvtapMode = modeMap[mode];
*res_ifname = NULL; *res_ifname = NULL;
VIR_DEBUG("%s: VM OPERATION: %s", __FUNCTION__, virVMOperationTypeToString(vmOp)); VIR_DEBUG("%s: VM OPERATION: %s", __FUNCTION__, virVMOperationTypeToString(vmOp));
...@@ -694,7 +688,7 @@ openMacvtapTap(const char *tgifname, ...@@ -694,7 +688,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_DOMAIN_NETDEV_MACVTAP_MODE_PASSTHRU) { if (mode == VIR_MACVTAP_MODE_PASSTHRU) {
if (replaceMacAdress(macaddress, linkdev, stateDir) != 0) { if (replaceMacAdress(macaddress, linkdev, stateDir) != 0) {
return -1; return -1;
} }
...@@ -799,7 +793,7 @@ delMacvtap(const char *ifname, ...@@ -799,7 +793,7 @@ delMacvtap(const char *ifname,
virVirtualPortProfileParamsPtr virtPortProfile, virVirtualPortProfileParamsPtr virtPortProfile,
char *stateDir) char *stateDir)
{ {
if (mode == VIR_DOMAIN_NETDEV_MACVTAP_MODE_PASSTHRU) { if (mode == VIR_MACVTAP_MODE_PASSTHRU) {
restoreMacAddress(linkdev, stateDir); restoreMacAddress(linkdev, stateDir);
} }
......
...@@ -34,6 +34,17 @@ enum virVirtualPortType { ...@@ -34,6 +34,17 @@ enum virVirtualPortType {
VIR_VIRTUALPORT_TYPE_LAST, VIR_VIRTUALPORT_TYPE_LAST,
}; };
/* the mode type for macvtap devices */
enum virMacvtapMode {
VIR_MACVTAP_MODE_VEPA,
VIR_MACVTAP_MODE_PRIVATE,
VIR_MACVTAP_MODE_BRIDGE,
VIR_MACVTAP_MODE_PASSTHRU,
VIR_MACVTAP_MODE_LAST,
};
# ifdef IFLA_VF_PORT_PROFILE_MAX # ifdef IFLA_VF_PORT_PROFILE_MAX
# define LIBVIRT_IFLA_VF_PORT_PROFILE_MAX IFLA_VF_PORT_PROFILE_MAX # define LIBVIRT_IFLA_VF_PORT_PROFILE_MAX IFLA_VF_PORT_PROFILE_MAX
# else # else
...@@ -78,7 +89,7 @@ enum virVMOperationType { ...@@ -78,7 +89,7 @@ enum virVMOperationType {
int openMacvtapTap(const char *ifname, int openMacvtapTap(const char *ifname,
const unsigned char *macaddress, const unsigned char *macaddress,
const char *linkdev, const char *linkdev,
int mode, enum virMacvtapMode mode,
int vnet_hdr, int vnet_hdr,
const unsigned char *vmuuid, const unsigned char *vmuuid,
virVirtualPortProfileParamsPtr virtPortProfile, virVirtualPortProfileParamsPtr virtPortProfile,
...@@ -110,5 +121,6 @@ int vpDisassociatePortProfileId(const char *macvtap_ifname, ...@@ -110,5 +121,6 @@ int vpDisassociatePortProfileId(const char *macvtap_ifname,
VIR_ENUM_DECL(virVirtualPort) VIR_ENUM_DECL(virVirtualPort)
VIR_ENUM_DECL(virVMOperation) VIR_ENUM_DECL(virVMOperation)
VIR_ENUM_DECL(virMacvtapMode)
#endif /* __UTIL_MACVTAP_H__ */ #endif /* __UTIL_MACVTAP_H__ */
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册