if (!(xml = virNetworkGetXMLDesc(net, 0)))
goto cleanup;
- if (!(def = virNetworkDefParseString(xml)))
+ if (!(def = virNetworkDefParseString(xml, NULL)))
goto cleanup;
switch ((virNetworkForwardType) def->forward.type) {
* Returns a new NetworkDef on success, or NULL on failure.
*/
virNetworkDefPtr
-virNetworkDefCopy(virNetworkDefPtr def, unsigned int flags)
+virNetworkDefCopy(virNetworkDefPtr def,
+ virNetworkXMLOptionPtr xmlopt,
+ unsigned int flags)
{
char *xml = NULL;
virNetworkDefPtr newDef = NULL;
}
/* deep copy with a format/parse cycle */
- if (!(xml = virNetworkDefFormat(def, flags)))
+ if (!(xml = virNetworkDefFormat(def, xmlopt, flags)))
goto cleanup;
- newDef = virNetworkDefParseString(xml);
+ newDef = virNetworkDefParseString(xml, xmlopt);
cleanup:
VIR_FREE(xml);
return newDef;
virNetworkDefPtr
-virNetworkDefParseXML(xmlXPathContextPtr ctxt)
+virNetworkDefParseXML(xmlXPathContextPtr ctxt,
+ virNetworkXMLOptionPtr xmlopt ATTRIBUTE_UNUSED)
{
virNetworkDefPtr def;
char *tmp = NULL;
static virNetworkDefPtr
virNetworkDefParse(const char *xmlStr,
- const char *filename)
+ const char *filename,
+ virNetworkXMLOptionPtr xmlopt)
{
xmlDocPtr xml;
virNetworkDefPtr def = NULL;
int keepBlanksDefault = xmlKeepBlanksDefault(0);
if ((xml = virXMLParse(filename, xmlStr, _("(network_definition)")))) {
- def = virNetworkDefParseNode(xml, xmlDocGetRootElement(xml));
+ def = virNetworkDefParseNode(xml, xmlDocGetRootElement(xml), xmlopt);
xmlFreeDoc(xml);
}
virNetworkDefPtr
-virNetworkDefParseString(const char *xmlStr)
+virNetworkDefParseString(const char *xmlStr,
+ virNetworkXMLOptionPtr xmlopt)
{
- return virNetworkDefParse(xmlStr, NULL);
+ return virNetworkDefParse(xmlStr, NULL, xmlopt);
}
virNetworkDefPtr
-virNetworkDefParseFile(const char *filename)
+virNetworkDefParseFile(const char *filename,
+ virNetworkXMLOptionPtr xmlopt)
{
- return virNetworkDefParse(NULL, filename);
+ return virNetworkDefParse(NULL, filename, xmlopt);
}
virNetworkDefPtr
virNetworkDefParseNode(xmlDocPtr xml,
- xmlNodePtr root)
+ xmlNodePtr root,
+ virNetworkXMLOptionPtr xmlopt)
{
xmlXPathContextPtr ctxt = NULL;
virNetworkDefPtr def = NULL;
}
ctxt->node = root;
- def = virNetworkDefParseXML(ctxt);
+ def = virNetworkDefParseXML(ctxt, xmlopt);
cleanup:
xmlXPathFreeContext(ctxt);
int
virNetworkDefFormatBuf(virBufferPtr buf,
const virNetworkDef *def,
+ virNetworkXMLOptionPtr xmlopt ATTRIBUTE_UNUSED,
unsigned int flags)
{
const unsigned char *uuid;
char *
virNetworkDefFormat(const virNetworkDef *def,
+ virNetworkXMLOptionPtr xmlopt,
unsigned int flags)
{
virBuffer buf = VIR_BUFFER_INITIALIZER;
- if (virNetworkDefFormatBuf(&buf, def, flags) < 0)
+ if (virNetworkDefFormatBuf(&buf, def, xmlopt, flags) < 0)
goto error;
if (virBufferCheckError(&buf) < 0)
int
virNetworkSaveConfig(const char *configDir,
- virNetworkDefPtr def)
+ virNetworkDefPtr def,
+ virNetworkXMLOptionPtr xmlopt)
{
int ret = -1;
char *xml;
- if (!(xml = virNetworkDefFormat(def, VIR_NETWORK_XML_INACTIVE)))
+ if (!(xml = virNetworkDefFormat(def, xmlopt, VIR_NETWORK_XML_INACTIVE)))
goto cleanup;
if (virNetworkSaveXML(configDir, def, xml))
virNetworkXMLOptionNew(void);
virNetworkDefPtr
-virNetworkDefCopy(virNetworkDefPtr def, unsigned int flags);
+virNetworkDefCopy(virNetworkDefPtr def,
+ virNetworkXMLOptionPtr xmlopt,
+ unsigned int flags);
virNetworkDefPtr
-virNetworkDefParseXML(xmlXPathContextPtr ctxt);
+virNetworkDefParseXML(xmlXPathContextPtr ctxt,
+ virNetworkXMLOptionPtr xmlopt);
virNetworkDefPtr
-virNetworkDefParseString(const char *xmlStr);
+virNetworkDefParseString(const char *xmlStr,
+ virNetworkXMLOptionPtr xmlopt);
virNetworkDefPtr
-virNetworkDefParseFile(const char *filename);
+virNetworkDefParseFile(const char *filename,
+ virNetworkXMLOptionPtr xmlopt);
virNetworkDefPtr
virNetworkDefParseNode(xmlDocPtr xml,
- xmlNodePtr root);
+ xmlNodePtr root,
+ virNetworkXMLOptionPtr xmlopt);
char *
virNetworkDefFormat(const virNetworkDef *def,
+ virNetworkXMLOptionPtr xmlopt,
unsigned int flags);
int
virNetworkDefFormatBuf(virBufferPtr buf,
const virNetworkDef *def,
+ virNetworkXMLOptionPtr xmlopt,
unsigned int flags);
const char *
int
virNetworkSaveConfig(const char *configDir,
- virNetworkDefPtr def);
+ virNetworkDefPtr def,
+ virNetworkXMLOptionPtr xmlopt);
char *
virNetworkConfigFile(const char *dir,
*/
int
virNetworkObjSetDefTransient(virNetworkObjPtr obj,
- bool live)
+ bool live,
+ virNetworkXMLOptionPtr xmlopt)
{
if (!virNetworkObjIsActive(obj) && !live)
return 0;
if (!obj->persistent || obj->newDef)
return 0;
- obj->newDef = virNetworkDefCopy(obj->def, VIR_NETWORK_XML_INACTIVE);
+ obj->newDef = virNetworkDefCopy(obj->def,
+ xmlopt,
+ VIR_NETWORK_XML_INACTIVE);
return obj->newDef ? 0 : -1;
}
*/
static int
virNetworkObjConfigChangeSetup(virNetworkObjPtr obj,
+ virNetworkXMLOptionPtr xmlopt,
unsigned int flags)
{
bool isActive;
/* this should already have been done by the driver, but do it
* anyway just in case.
*/
- if (isActive && (virNetworkObjSetDefTransient(obj, false) < 0))
+ if (isActive && (virNetworkObjSetDefTransient(obj, false, xmlopt) < 0))
goto cleanup;
}
static char *
virNetworkObjFormat(virNetworkObjPtr obj,
+ virNetworkXMLOptionPtr xmlopt,
unsigned int flags)
{
virBuffer buf = VIR_BUFFER_INITIALIZER;
virNetworkTaintTypeToString(i));
}
- if (virNetworkDefFormatBuf(&buf, obj->def, flags) < 0)
+ if (virNetworkDefFormatBuf(&buf, obj->def, xmlopt, flags) < 0)
goto error;
virBufferAdjustIndent(&buf, -2);
int
virNetworkObjSaveStatus(const char *statusDir,
- virNetworkObjPtr obj)
+ virNetworkObjPtr obj,
+ virNetworkXMLOptionPtr xmlopt)
{
int ret = -1;
int flags = 0;
char *xml;
- if (!(xml = virNetworkObjFormat(obj, flags)))
+ if (!(xml = virNetworkObjFormat(obj, xmlopt, flags)))
goto cleanup;
if (virNetworkSaveXML(statusDir, obj->def, xml))
static virNetworkObjPtr
virNetworkLoadState(virNetworkObjListPtr nets,
const char *stateDir,
- const char *name)
+ const char *name,
+ virNetworkXMLOptionPtr xmlopt)
{
char *configFile = NULL;
virNetworkDefPtr def = NULL;
/* parse the definition first */
ctxt->node = node;
- if (!(def = virNetworkDefParseXML(ctxt)))
+ if (!(def = virNetworkDefParseXML(ctxt, xmlopt)))
goto error;
if (STRNEQ(name, def->name)) {
virNetworkLoadConfig(virNetworkObjListPtr nets,
const char *configDir,
const char *autostartDir,
- const char *name)
+ const char *name,
+ virNetworkXMLOptionPtr xmlopt)
{
char *configFile = NULL, *autostartLink = NULL;
virNetworkDefPtr def = NULL;
if ((autostart = virFileLinkPointsTo(autostartLink, configFile)) < 0)
goto error;
- if (!(def = virNetworkDefParseFile(configFile)))
+ if (!(def = virNetworkDefParseFile(configFile, xmlopt)))
goto error;
if (STRNEQ(name, def->name)) {
case VIR_NETWORK_FORWARD_OPEN:
if (!def->mac_specified) {
virNetworkSetBridgeMacAddr(def);
- virNetworkSaveConfig(configDir, def);
+ virNetworkSaveConfig(configDir, def, xmlopt);
}
break;
int
virNetworkObjLoadAllState(virNetworkObjListPtr nets,
- const char *stateDir)
+ const char *stateDir,
+ virNetworkXMLOptionPtr xmlopt)
{
DIR *dir;
struct dirent *entry;
if (!virStringStripSuffix(entry->d_name, ".xml"))
continue;
- obj = virNetworkLoadState(nets, stateDir, entry->d_name);
+ obj = virNetworkLoadState(nets, stateDir, entry->d_name, xmlopt);
if (obj &&
virNetworkObjLoadAllPorts(obj, stateDir) < 0) {
int
virNetworkObjLoadAllConfigs(virNetworkObjListPtr nets,
const char *configDir,
- const char *autostartDir)
+ const char *autostartDir,
+ virNetworkXMLOptionPtr xmlopt)
{
DIR *dir;
struct dirent *entry;
obj = virNetworkLoadConfig(nets,
configDir,
autostartDir,
- entry->d_name);
+ entry->d_name,
+ xmlopt);
virNetworkObjEndAPI(&obj);
}
unsigned int section, /* virNetworkUpdateSection */
int parentIndex,
const char *xml,
+ virNetworkXMLOptionPtr xmlopt,
unsigned int flags) /* virNetworkUpdateFlags */
{
int ret = -1;
virNetworkDefPtr livedef = NULL, configdef = NULL;
/* normalize config data, and check for common invalid requests. */
- if (virNetworkObjConfigChangeSetup(obj, flags) < 0)
+ if (virNetworkObjConfigChangeSetup(obj, xmlopt, flags) < 0)
goto cleanup;
if (flags & VIR_NETWORK_UPDATE_AFFECT_LIVE) {
virNetworkDefPtr checkdef;
/* work on a copy of the def */
- if (!(livedef = virNetworkDefCopy(obj->def, 0)))
+ if (!(livedef = virNetworkDefCopy(obj->def, xmlopt, 0)))
goto cleanup;
if (virNetworkDefUpdateSection(livedef, command, section,
parentIndex, xml, flags) < 0) {
/* run a final format/parse cycle to make sure we didn't
* add anything illegal to the def
*/
- if (!(checkdef = virNetworkDefCopy(livedef, 0)))
+ if (!(checkdef = virNetworkDefCopy(livedef, xmlopt, 0)))
goto cleanup;
virNetworkDefFree(checkdef);
}
/* work on a copy of the def */
if (!(configdef = virNetworkDefCopy(virNetworkObjGetPersistentDef(obj),
+ xmlopt,
VIR_NETWORK_XML_INACTIVE))) {
goto cleanup;
}
goto cleanup;
}
if (!(checkdef = virNetworkDefCopy(configdef,
+ xmlopt,
VIR_NETWORK_XML_INACTIVE))) {
goto cleanup;
}
int
virNetworkObjSetDefTransient(virNetworkObjPtr network,
- bool live);
+ bool live,
+ virNetworkXMLOptionPtr xmlopt);
void
virNetworkObjUnsetDefTransient(virNetworkObjPtr network);
int
virNetworkObjSaveStatus(const char *statusDir,
- virNetworkObjPtr net) ATTRIBUTE_RETURN_CHECK;
+ virNetworkObjPtr net,
+ virNetworkXMLOptionPtr xmlopt) ATTRIBUTE_RETURN_CHECK;
int
virNetworkObjLoadAllConfigs(virNetworkObjListPtr nets,
const char *configDir,
- const char *autostartDir);
+ const char *autostartDir,
+ virNetworkXMLOptionPtr xmlopt);
int
virNetworkObjLoadAllState(virNetworkObjListPtr nets,
- const char *stateDir);
+ const char *stateDir,
+ virNetworkXMLOptionPtr xmlopt);
int
virNetworkObjDeleteConfig(const char *configDir,
unsigned int section, /* virNetworkUpdateSection */
int parentIndex,
const char *xml,
+ virNetworkXMLOptionPtr xmlopt,
unsigned int flags); /* virNetworkUpdateFlags */
int
return NULL;
/* Parse network XML */
- def = virNetworkDefParseString(xml);
+ def = virNetworkDefParseString(xml, NULL);
if (!def)
return NULL;
}
}
- xml = virNetworkDefFormat(def, flags);
+ xml = virNetworkDefFormat(def, NULL, flags);
cleanup:
esxVI_HostVirtualSwitch_Free(&hostVirtualSwitch);
virBufferAddLit(&buf, "<hookData>\n");
virBufferAdjustIndent(&buf, 2);
- if (virNetworkDefFormatBuf(&buf, def, 0) < 0)
+ if (virNetworkDefFormatBuf(&buf, def, network_driver->xmlopt, 0) < 0)
goto cleanup;
if (port && virNetworkPortDefFormatBuf(&buf, port) < 0)
goto cleanup;
goto error;
if (virNetworkObjLoadAllState(network_driver->networks,
- network_driver->stateDir) < 0)
+ network_driver->stateDir,
+ network_driver->xmlopt) < 0)
goto error;
if (virNetworkObjLoadAllConfigs(network_driver->networks,
network_driver->networkConfigDir,
- network_driver->networkAutostartDir) < 0)
+ network_driver->networkAutostartDir,
+ network_driver->xmlopt) < 0)
goto error;
/* Update the internal status of all allegedly active
return 0;
virNetworkObjLoadAllState(network_driver->networks,
- network_driver->stateDir);
+ network_driver->stateDir,
+ network_driver->xmlopt);
virNetworkObjLoadAllConfigs(network_driver->networks,
network_driver->networkConfigDir,
- network_driver->networkAutostartDir);
+ network_driver->networkAutostartDir,
+ network_driver->xmlopt);
networkReloadFirewallRules(network_driver, false);
networkRefreshDaemons(network_driver);
virNetworkObjListForEach(network_driver->networks,
virNetworkObjDeleteAllPorts(obj, driver->stateDir);
VIR_DEBUG("Setting current network def as transient");
- if (virNetworkObjSetDefTransient(obj, true) < 0)
+ if (virNetworkObjSetDefTransient(obj, true, network_driver->xmlopt) < 0)
goto cleanup;
/* Run an early hook to set-up missing devices.
* is setup.
*/
VIR_DEBUG("Writing network status to disk");
- if (virNetworkObjSaveStatus(driver->stateDir, obj) < 0)
+ if (virNetworkObjSaveStatus(driver->stateDir,
+ obj, network_driver->xmlopt) < 0)
goto cleanup;
virNetworkObjSetActive(obj, true);
virNetworkPtr net = NULL;
virObjectEventPtr event = NULL;
- if (!(newDef = virNetworkDefParseString(xml)))
+ if (!(newDef = virNetworkDefParseString(xml, network_driver->xmlopt)))
goto cleanup;
if (virNetworkCreateXMLEnsureACL(conn, newDef) < 0)
virNetworkPtr net = NULL;
virObjectEventPtr event = NULL;
- if (!(def = virNetworkDefParseString(xml)))
+ if (!(def = virNetworkDefParseString(xml, network_driver->xmlopt)))
goto cleanup;
if (virNetworkDefineXMLEnsureACL(conn, def) < 0)
/* def was assigned to network object */
freeDef = false;
- if (virNetworkSaveConfig(driver->networkConfigDir, def) < 0) {
+ if (virNetworkSaveConfig(driver->networkConfigDir,
+ def, network_driver->xmlopt) < 0) {
if (!virNetworkObjIsActive(obj)) {
virNetworkObjRemoveInactive(driver->networks, obj);
goto cleanup;
}
/* update the network config in memory/on disk */
- if (virNetworkObjUpdate(obj, command, section, parentIndex, xml, flags) < 0) {
+ if (virNetworkObjUpdate(obj, command, section,
+ parentIndex, xml,
+ network_driver->xmlopt, flags) < 0) {
if (needFirewallRefresh)
ignore_value(networkAddFirewallRules(def));
goto cleanup;
if (flags & VIR_NETWORK_UPDATE_AFFECT_CONFIG) {
/* save updated persistent config to disk */
if (virNetworkSaveConfig(driver->networkConfigDir,
- virNetworkObjGetPersistentDef(obj)) < 0) {
+ virNetworkObjGetPersistentDef(obj),
+ network_driver->xmlopt) < 0) {
goto cleanup;
}
}
}
/* save current network state to disk */
- if ((ret = virNetworkObjSaveStatus(driver->stateDir, obj)) < 0)
+ if ((ret = virNetworkObjSaveStatus(driver->stateDir,
+ obj, network_driver->xmlopt)) < 0)
goto cleanup;
}
else
curDef = def;
- ret = virNetworkDefFormat(curDef, flags);
+ ret = virNetworkDefFormat(curDef, network_driver->xmlopt, flags);
cleanup:
virNetworkObjEndAPI(&obj);
tmp_floor_sum += ifaceBand->in->floor;
virNetworkObjSetFloorSum(obj, tmp_floor_sum);
/* update status file */
- if (virNetworkObjSaveStatus(driver->stateDir, obj) < 0) {
+ if (virNetworkObjSaveStatus(driver->stateDir, obj, network_driver->xmlopt) < 0) {
ignore_value(virBitmapClearBit(classIdMap, next_id));
tmp_floor_sum -= ifaceBand->in->floor;
virNetworkObjSetFloorSum(obj, tmp_floor_sum);
/* return class ID */
ignore_value(virBitmapClearBit(classIdMap, *class_id));
/* update status file */
- if (virNetworkObjSaveStatus(driver->stateDir, obj) < 0) {
+ if (virNetworkObjSaveStatus(driver->stateDir,
+ obj, network_driver->xmlopt) < 0) {
tmp_floor_sum += ifaceBand->in->floor;
virNetworkObjSetFloorSum(obj, tmp_floor_sum);
ignore_value(virBitmapSetBit(classIdMap, *class_id));
if (virNetDevBandwidthUpdateRate(def->bridge, 2,
def->bandwidth, new_rate) < 0 ||
- virNetworkObjSaveStatus(driver->stateDir, obj) < 0) {
+ virNetworkObjSaveStatus(driver->stateDir,
+ obj, network_driver->xmlopt) < 0) {
/* Ouch, rollback */
tmp_floor_sum -= newBandwidth->in->floor;
tmp_floor_sum += oldBandwidth->in->floor;
if (!xml)
goto cleanup;
- netdef = virNetworkDefParseString(xml);
+ netdef = virNetworkDefParseString(xml, NULL);
if (!netdef)
goto cleanup;
if (!node)
return -1;
- def = virNetworkDefParseNode(ctxt->doc, node);
+ def = virNetworkDefParseNode(ctxt->doc, node, NULL);
if (!def)
return -1;
virNetworkPtr net = NULL;
virObjectEventPtr event = NULL;
- if ((newDef = virNetworkDefParseString(xml)) == NULL)
+ if ((newDef = virNetworkDefParseString(xml, NULL)) == NULL)
goto cleanup;
if (!(obj = virNetworkObjAssignDef(privconn->networks, newDef,
virNetworkPtr net = NULL;
virObjectEventPtr event = NULL;
- if ((newDef = virNetworkDefParseString(xml)) == NULL)
+ if ((newDef = virNetworkDefParseString(xml, NULL)) == NULL)
goto cleanup;
if (!(obj = virNetworkObjAssignDef(privconn->networks, newDef, 0)))
}
/* update the network config in memory/on disk */
- if (virNetworkObjUpdate(obj, command, section, parentIndex, xml, flags) < 0)
+ if (virNetworkObjUpdate(obj, command, section,
+ parentIndex, xml, NULL, flags) < 0)
goto cleanup;
ret = 0;
if (!(obj = testNetworkObjFindByName(privconn, net->name)))
goto cleanup;
- ret = virNetworkDefFormat(virNetworkObjGetDef(obj), flags);
+ ret = virNetworkDefFormat(virNetworkObjGetDef(obj), NULL, flags);
cleanup:
virNetworkObjEndAPI(&obj);
PRUnichar *networkNameUtf16 = NULL;
char *networkNameUtf8 = NULL;
IHostNetworkInterface *networkInterface = NULL;
- virNetworkDefPtr def = virNetworkDefParseString(xml);
+ virNetworkDefPtr def = virNetworkDefParseString(xml, NULL);
virNetworkIPDefPtr ipdef = NULL;
unsigned char uuid[VIR_UUID_BUFLEN];
vboxIID vboxnetiid;
}
DEBUGIID("Network UUID", &vboxnet0IID);
- ret = virNetworkDefFormat(def, 0);
+ ret = virNetworkDefFormat(def, NULL, 0);
cleanup:
vboxIIDUnalloc(&vboxnet0IID);
char *pidfile = NULL;
dnsmasqContext *dctx = NULL;
- if (!(def = virNetworkDefParseFile(inxml)))
+ if (!(def = virNetworkDefParseFile(inxml, NULL)))
goto fail;
if (!(obj = virNetworkObjNew()))
virCommandSetDryRun(&buf, testCommandDryRun, NULL);
- if (!(def = virNetworkDefParseFile(xml)))
+ if (!(def = virNetworkDefParseFile(xml, NULL)))
goto cleanup;
if (networkAddFirewallRules(def) < 0)
testCompareNetXML2XMLResult result = TEST_COMPARE_NET_XML2XML_RESULT_SUCCESS;
virNetworkDefPtr dev = NULL;
- if (!(dev = virNetworkDefParseFile(inxml))) {
+ if (!(dev = virNetworkDefParseFile(inxml, NULL))) {
result = TEST_COMPARE_NET_XML2XML_RESULT_FAIL_PARSE;
goto cleanup;
}
if (expectResult == TEST_COMPARE_NET_XML2XML_RESULT_FAIL_PARSE)
goto cleanup;
- if (!(actual = virNetworkDefFormat(dev, flags))) {
+ if (!(actual = virNetworkDefFormat(dev, NULL, flags))) {
result = TEST_COMPARE_NET_XML2XML_RESULT_FAIL_FORMAT;
goto cleanup;
}
if (virTestLoadFile(updatexml, &updateXmlData) < 0)
goto error;
- if (!(def = virNetworkDefParseFile(netxml)))
+ if (!(def = virNetworkDefParseFile(netxml, NULL)))
goto fail;
if (virNetworkDefUpdateSection(def, command, section, parentIndex,
updateXmlData, 0) < 0)
goto fail;
- if (!(actual = virNetworkDefFormat(def, flags)))
+ if (!(actual = virNetworkDefFormat(def, NULL, flags)))
goto fail;
if (!expectFailure) {