mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
conf: virDomainNetDef points to (rather than contains) virtPortProfile
The virtPortProfile in the domain interface struct is now a separately allocated object *pointed to by* (rather than contained in) the main virDomainNetDef object. This is done to make it easier to figure out when a virtualPortProfile has/hasn't been specified in a particular config.
This commit is contained in:
parent
a3d95b550b
commit
524655eea2
@ -770,6 +770,7 @@ void virDomainNetDefFree(virDomainNetDefPtr def)
|
|||||||
|
|
||||||
case VIR_DOMAIN_NET_TYPE_DIRECT:
|
case VIR_DOMAIN_NET_TYPE_DIRECT:
|
||||||
VIR_FREE(def->data.direct.linkdev);
|
VIR_FREE(def->data.direct.linkdev);
|
||||||
|
VIR_FREE(def->data.direct.virtPortProfile);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VIR_DOMAIN_NET_TYPE_USER:
|
case VIR_DOMAIN_NET_TYPE_USER:
|
||||||
@ -2617,8 +2618,7 @@ virDomainNetDefParseXML(virCapsPtr caps,
|
|||||||
char *devaddr = NULL;
|
char *devaddr = NULL;
|
||||||
char *mode = NULL;
|
char *mode = NULL;
|
||||||
virNWFilterHashTablePtr filterparams = NULL;
|
virNWFilterHashTablePtr filterparams = NULL;
|
||||||
virVirtualPortProfileParams virtPort;
|
virVirtualPortProfileParamsPtr virtPort = NULL;
|
||||||
bool virtPortParsed = false;
|
|
||||||
xmlNodePtr oldnode = ctxt->node;
|
xmlNodePtr oldnode = ctxt->node;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
@ -2664,12 +2664,11 @@ virDomainNetDefParseXML(virCapsPtr caps,
|
|||||||
xmlStrEqual(cur->name, BAD_CAST "source")) {
|
xmlStrEqual(cur->name, BAD_CAST "source")) {
|
||||||
dev = virXMLPropString(cur, "dev");
|
dev = virXMLPropString(cur, "dev");
|
||||||
mode = virXMLPropString(cur, "mode");
|
mode = virXMLPropString(cur, "mode");
|
||||||
} else if (!virtPortParsed &&
|
} else if ((virtPort == NULL) &&
|
||||||
(def->type == VIR_DOMAIN_NET_TYPE_DIRECT) &&
|
(def->type == VIR_DOMAIN_NET_TYPE_DIRECT) &&
|
||||||
xmlStrEqual(cur->name, BAD_CAST "virtualport")) {
|
xmlStrEqual(cur->name, BAD_CAST "virtualport")) {
|
||||||
if (virVirtualPortProfileParseXML(cur, &virtPort))
|
if (virVirtualPortProfileParseXML(cur, &virtPort) < 0)
|
||||||
goto error;
|
goto error;
|
||||||
virtPortParsed = true;
|
|
||||||
} else if ((network == NULL) &&
|
} else if ((network == NULL) &&
|
||||||
((def->type == VIR_DOMAIN_NET_TYPE_SERVER) ||
|
((def->type == VIR_DOMAIN_NET_TYPE_SERVER) ||
|
||||||
(def->type == VIR_DOMAIN_NET_TYPE_CLIENT) ||
|
(def->type == VIR_DOMAIN_NET_TYPE_CLIENT) ||
|
||||||
@ -2853,9 +2852,8 @@ virDomainNetDefParseXML(virCapsPtr caps,
|
|||||||
} else
|
} else
|
||||||
def->data.direct.mode = VIR_MACVTAP_MODE_VEPA;
|
def->data.direct.mode = VIR_MACVTAP_MODE_VEPA;
|
||||||
|
|
||||||
if (virtPortParsed)
|
def->data.direct.virtPortProfile = virtPort;
|
||||||
def->data.direct.virtPortProfile = virtPort;
|
virtPort = NULL;
|
||||||
|
|
||||||
def->data.direct.linkdev = dev;
|
def->data.direct.linkdev = dev;
|
||||||
dev = NULL;
|
dev = NULL;
|
||||||
|
|
||||||
@ -2962,6 +2960,7 @@ cleanup:
|
|||||||
VIR_FREE(port);
|
VIR_FREE(port);
|
||||||
VIR_FREE(ifname);
|
VIR_FREE(ifname);
|
||||||
VIR_FREE(dev);
|
VIR_FREE(dev);
|
||||||
|
VIR_FREE(virtPort);
|
||||||
VIR_FREE(script);
|
VIR_FREE(script);
|
||||||
VIR_FREE(bridge);
|
VIR_FREE(bridge);
|
||||||
VIR_FREE(model);
|
VIR_FREE(model);
|
||||||
@ -8609,7 +8608,7 @@ virDomainNetDefFormat(virBufferPtr buf,
|
|||||||
virBufferAsprintf(buf, " mode='%s'",
|
virBufferAsprintf(buf, " mode='%s'",
|
||||||
virMacvtapModeTypeToString(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,
|
||||||
" ");
|
" ");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -381,7 +381,7 @@ struct _virDomainNetDef {
|
|||||||
struct {
|
struct {
|
||||||
char *linkdev;
|
char *linkdev;
|
||||||
int mode; /* enum virMacvtapMode from util/macvtap.h */
|
int mode; /* enum virMacvtapMode from util/macvtap.h */
|
||||||
virVirtualPortProfileParams virtPortProfile;
|
virVirtualPortProfileParamsPtr virtPortProfile;
|
||||||
} direct;
|
} direct;
|
||||||
} data;
|
} data;
|
||||||
struct {
|
struct {
|
||||||
|
@ -127,7 +127,7 @@ qemuPhysIfaceConnect(virDomainDefPtr def,
|
|||||||
|
|
||||||
rc = openMacvtapTap(net->ifname, net->mac, net->data.direct.linkdev,
|
rc = openMacvtapTap(net->ifname, net->mac, net->data.direct.linkdev,
|
||||||
net->data.direct.mode, vnet_hdr, def->uuid,
|
net->data.direct.mode, vnet_hdr, def->uuid,
|
||||||
&net->data.direct.virtPortProfile, &res_ifname,
|
net->data.direct.virtPortProfile, &res_ifname,
|
||||||
vmop, driver->stateDir);
|
vmop, driver->stateDir);
|
||||||
if (rc >= 0) {
|
if (rc >= 0) {
|
||||||
virDomainAuditNetDevice(def, net, res_ifname, true);
|
virDomainAuditNetDevice(def, net, res_ifname, true);
|
||||||
@ -150,7 +150,7 @@ qemuPhysIfaceConnect(virDomainDefPtr def,
|
|||||||
VIR_FORCE_CLOSE(rc);
|
VIR_FORCE_CLOSE(rc);
|
||||||
delMacvtap(net->ifname, net->mac, net->data.direct.linkdev,
|
delMacvtap(net->ifname, net->mac, net->data.direct.linkdev,
|
||||||
net->data.direct.mode,
|
net->data.direct.mode,
|
||||||
&net->data.direct.virtPortProfile,
|
net->data.direct.virtPortProfile,
|
||||||
driver->stateDir);
|
driver->stateDir);
|
||||||
VIR_FREE(net->ifname);
|
VIR_FREE(net->ifname);
|
||||||
}
|
}
|
||||||
|
@ -1616,7 +1616,7 @@ int qemuDomainDetachNetDevice(struct qemud_driver *driver,
|
|||||||
if (detach->type == VIR_DOMAIN_NET_TYPE_DIRECT) {
|
if (detach->type == VIR_DOMAIN_NET_TYPE_DIRECT) {
|
||||||
delMacvtap(detach->ifname, detach->mac, detach->data.direct.linkdev,
|
delMacvtap(detach->ifname, detach->mac, detach->data.direct.linkdev,
|
||||||
detach->data.direct.mode,
|
detach->data.direct.mode,
|
||||||
&detach->data.direct.virtPortProfile,
|
detach->data.direct.virtPortProfile,
|
||||||
driver->stateDir);
|
driver->stateDir);
|
||||||
VIR_FREE(detach->ifname);
|
VIR_FREE(detach->ifname);
|
||||||
}
|
}
|
||||||
|
@ -2347,7 +2347,7 @@ qemuMigrationVPAssociatePortProfiles(virDomainDefPtr def) {
|
|||||||
if (vpAssociatePortProfileId(net->ifname,
|
if (vpAssociatePortProfileId(net->ifname,
|
||||||
net->mac,
|
net->mac,
|
||||||
net->data.direct.linkdev,
|
net->data.direct.linkdev,
|
||||||
&net->data.direct.virtPortProfile,
|
net->data.direct.virtPortProfile,
|
||||||
def->uuid,
|
def->uuid,
|
||||||
VIR_VM_OP_MIGRATE_IN_FINISH) != 0)
|
VIR_VM_OP_MIGRATE_IN_FINISH) != 0)
|
||||||
goto err_exit;
|
goto err_exit;
|
||||||
@ -2364,7 +2364,7 @@ err_exit:
|
|||||||
vpDisassociatePortProfileId(net->ifname,
|
vpDisassociatePortProfileId(net->ifname,
|
||||||
net->mac,
|
net->mac,
|
||||||
net->data.direct.linkdev,
|
net->data.direct.linkdev,
|
||||||
&net->data.direct.virtPortProfile,
|
net->data.direct.virtPortProfile,
|
||||||
VIR_VM_OP_MIGRATE_IN_FINISH);
|
VIR_VM_OP_MIGRATE_IN_FINISH);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3021,7 +3021,7 @@ void qemuProcessStop(struct qemud_driver *driver,
|
|||||||
if (net->type == VIR_DOMAIN_NET_TYPE_DIRECT) {
|
if (net->type == VIR_DOMAIN_NET_TYPE_DIRECT) {
|
||||||
delMacvtap(net->ifname, net->mac, net->data.direct.linkdev,
|
delMacvtap(net->ifname, net->mac, net->data.direct.linkdev,
|
||||||
net->data.direct.mode,
|
net->data.direct.mode,
|
||||||
&net->data.direct.virtPortProfile, driver->stateDir);
|
net->data.direct.virtPortProfile, driver->stateDir);
|
||||||
VIR_FREE(net->ifname);
|
VIR_FREE(net->ifname);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -685,7 +685,7 @@ VIR_ENUM_IMPL(virVirtualPort, VIR_VIRTUALPORT_TYPE_LAST,
|
|||||||
|
|
||||||
int
|
int
|
||||||
virVirtualPortProfileParseXML(xmlNodePtr node,
|
virVirtualPortProfileParseXML(xmlNodePtr node,
|
||||||
virVirtualPortProfileParamsPtr virtPort)
|
virVirtualPortProfileParamsPtr *def)
|
||||||
{
|
{
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
char *virtPortType;
|
char *virtPortType;
|
||||||
@ -694,8 +694,14 @@ virVirtualPortProfileParseXML(xmlNodePtr node,
|
|||||||
char *virtPortTypeIDVersion = NULL;
|
char *virtPortTypeIDVersion = NULL;
|
||||||
char *virtPortInstanceID = NULL;
|
char *virtPortInstanceID = NULL;
|
||||||
char *virtPortProfileID = NULL;
|
char *virtPortProfileID = NULL;
|
||||||
|
virVirtualPortProfileParamsPtr virtPort = NULL;
|
||||||
xmlNodePtr cur = node->children;
|
xmlNodePtr cur = node->children;
|
||||||
|
|
||||||
|
if (VIR_ALLOC(virtPort) < 0) {
|
||||||
|
virReportOOMError();
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
virtPortType = virXMLPropString(node, "type");
|
virtPortType = virXMLPropString(node, "type");
|
||||||
if (!virtPortType) {
|
if (!virtPortType) {
|
||||||
virSocketError(VIR_ERR_XML_ERROR, "%s",
|
virSocketError(VIR_ERR_XML_ERROR, "%s",
|
||||||
@ -785,7 +791,7 @@ virVirtualPortProfileParseXML(xmlNodePtr node,
|
|||||||
}
|
}
|
||||||
|
|
||||||
virtPort->virtPortType = VIR_VIRTUALPORT_8021QBG;
|
virtPort->virtPortType = VIR_VIRTUALPORT_8021QBG;
|
||||||
ret = 0;
|
|
||||||
} else {
|
} else {
|
||||||
virSocketError(VIR_ERR_XML_ERROR, "%s",
|
virSocketError(VIR_ERR_XML_ERROR, "%s",
|
||||||
_("a parameter is missing for 802.1Qbg description"));
|
_("a parameter is missing for 802.1Qbg description"));
|
||||||
@ -798,7 +804,6 @@ virVirtualPortProfileParseXML(xmlNodePtr node,
|
|||||||
if (virStrcpyStatic(virtPort->u.virtPort8021Qbh.profileID,
|
if (virStrcpyStatic(virtPort->u.virtPort8021Qbh.profileID,
|
||||||
virtPortProfileID) != NULL) {
|
virtPortProfileID) != NULL) {
|
||||||
virtPort->virtPortType = VIR_VIRTUALPORT_8021QBH;
|
virtPort->virtPortType = VIR_VIRTUALPORT_8021QBH;
|
||||||
ret = 0;
|
|
||||||
} else {
|
} else {
|
||||||
virSocketError(VIR_ERR_XML_ERROR, "%s",
|
virSocketError(VIR_ERR_XML_ERROR, "%s",
|
||||||
_("profileid parameter too long"));
|
_("profileid parameter too long"));
|
||||||
@ -821,7 +826,11 @@ virVirtualPortProfileParseXML(xmlNodePtr node,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ret = 0;
|
||||||
|
*def = virtPort;
|
||||||
|
virtPort = NULL;
|
||||||
error:
|
error:
|
||||||
|
VIR_FREE(virtPort);
|
||||||
VIR_FREE(virtPortManagerID);
|
VIR_FREE(virtPortManagerID);
|
||||||
VIR_FREE(virtPortTypeID);
|
VIR_FREE(virtPortTypeID);
|
||||||
VIR_FREE(virtPortTypeIDVersion);
|
VIR_FREE(virtPortTypeIDVersion);
|
||||||
|
@ -130,7 +130,7 @@ struct _virVirtualPortProfileParams {
|
|||||||
|
|
||||||
int
|
int
|
||||||
virVirtualPortProfileParseXML(xmlNodePtr node,
|
virVirtualPortProfileParseXML(xmlNodePtr node,
|
||||||
virVirtualPortProfileParamsPtr virtPort);
|
virVirtualPortProfileParamsPtr *virtPort);
|
||||||
void
|
void
|
||||||
virVirtualPortProfileFormat(virBufferPtr buf,
|
virVirtualPortProfileFormat(virBufferPtr buf,
|
||||||
virVirtualPortProfileParamsPtr virtPort,
|
virVirtualPortProfileParamsPtr virtPort,
|
||||||
|
Loading…
Reference in New Issue
Block a user