From nobody Mon Apr 29 03:40:31 2024
Delivered-To: importer@patchew.org
Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28
as permitted sender) client-ip=209.132.183.28;
envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com;
Authentication-Results: mx.zohomail.com;
spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as
permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com;
dmarc=pass(p=none dis=none) header.from=redhat.com
ARC-Seal: i=1; a=rsa-sha256; t=1563149082; cv=none;
d=zoho.com; s=zohoarc;
b=Ho/x0hRSOKa/f/X+h5fKn7VNQFOdOhSZYj74NrwfEt99PLHJiTIZemGLg/5ChPzjmXIT4nfFK7CnrYATKh3J99qns6SAM6l8QlXf24yRHsBkdaja5hUTVWQxxC6qfF3tX+JDtZUvTsGi4ShFDJHEgqLxtK3vkIscTbB5o3aeAj0=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com;
s=zohoarc;
t=1563149082;
h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results;
bh=LexyZl8G5jscvi6TcJ7mWNIYeZtolXxzwCDm1fJaQy0=;
b=KDvGMTeqTMDRKRrjINJ82vRA8Io6C51EuvdTvh2XfnA0uAvzJDey5tY7ZI7lyWnsL9fsJl3O8lZHvIBOdozOamIcsxCpBbibywWBFyYEavQayV2ZnJ8zw9vESod4EWcI+P+d7SMd+NSSNwBBJKcKQBUalr/0+DXlWG0C8B1Aizo=
ARC-Authentication-Results: i=1; mx.zoho.com;
spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as
permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com;
dmarc=pass header.from= (p=none dis=none)
header.from=
Return-Path:
Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by
mx.zohomail.com
with SMTPS id 1563149082608890.934136520759;
Sun, 14 Jul 2019 17:04:42 -0700 (PDT)
Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com
[10.5.11.12])
(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))
(No client certificate requested)
by mx1.redhat.com (Postfix) with ESMTPS id 118F9C04959E;
Mon, 15 Jul 2019 00:04:41 +0000 (UTC)
Received: from colo-mx.corp.redhat.com
(colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21])
by smtp.corp.redhat.com (Postfix) with ESMTPS id DC62E60C70;
Mon, 15 Jul 2019 00:04:40 +0000 (UTC)
Received: from lists01.pubmisc.prod.ext.phx2.redhat.com
(lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33])
by colo-mx.corp.redhat.com (Postfix) with ESMTP id 9DC2C3FAEC;
Mon, 15 Jul 2019 00:04:40 +0000 (UTC)
Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com
[10.5.11.12])
by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP
id x6F04HCY030294 for ;
Sun, 14 Jul 2019 20:04:17 -0400
Received: by smtp.corp.redhat.com (Postfix)
id 208E860C44; Mon, 15 Jul 2019 00:04:17 +0000 (UTC)
Received: from worklaptop.redhat.com (ovpn-121-2.rdu2.redhat.com
[10.10.121.2])
by smtp.corp.redhat.com (Postfix) with ESMTP id 8F87A60BFB;
Mon, 15 Jul 2019 00:04:16 +0000 (UTC)
From: Cole Robinson
To: libvirt-list@redhat.com
Date: Sun, 14 Jul 2019 20:03:57 -0400
Message-Id:
<4117347a5d84d7b410b95ce8630d3cf3088bfc35.1563148979.git.crobinso@redhat.com>
In-Reply-To:
References:
MIME-Version: 1.0
X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12
X-loop: libvir-list@redhat.com
Subject: [libvirt] [PATCH 1/5] conf: Add virNetworkXMLOption
X-BeenThere: libvir-list@redhat.com
X-Mailman-Version: 2.1.12
Precedence: junk
List-Id: Development discussions about the libvirt library & tools
List-Unsubscribe: ,
List-Archive:
List-Post:
List-Help:
List-Subscribe: ,
Content-Transfer-Encoding: quoted-printable
Sender: libvir-list-bounces@redhat.com
Errors-To: libvir-list-bounces@redhat.com
X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12
X-Greylist: Sender IP whitelisted,
not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]);
Mon, 15 Jul 2019 00:04:41 +0000 (UTC)
Content-Type: text/plain; charset="utf-8"
Just a stub for now that is unused. Add init+cleanup plumbing and
demostrate it in bridge_driver.c
Signed-off-by: Cole Robinson
Reviewed-by: Laine Stump
---
src/conf/network_conf.c | 33 ++++++++++++++++++++++++++++
src/conf/network_conf.h | 11 ++++++++++
src/libvirt_private.syms | 1 +
src/network/bridge_driver.c | 10 +++++++++
src/network/bridge_driver_platform.h | 2 ++
5 files changed, 57 insertions(+)
diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c
index 09e379ae9a..ca4b9986ad 100644
--- a/src/conf/network_conf.c
+++ b/src/conf/network_conf.c
@@ -73,6 +73,39 @@ VIR_ENUM_IMPL(virNetworkTaint,
"hook-script",
);
=20
+static virClassPtr virNetworkXMLOptionClass;
+
+static void
+virNetworkXMLOptionDispose(void *obj ATTRIBUTE_UNUSED)
+{
+ return;
+}
+
+static int
+virNetworkXMLOnceInit(void)
+{
+ if (!VIR_CLASS_NEW(virNetworkXMLOption, virClassForObject()))
+ return -1;
+
+ return 0;
+}
+
+VIR_ONCE_GLOBAL_INIT(virNetworkXML);
+
+virNetworkXMLOptionPtr
+virNetworkXMLOptionNew(void)
+{
+ virNetworkXMLOptionPtr xmlopt;
+
+ if (virNetworkXMLInitialize() < 0)
+ return NULL;
+
+ if (!(xmlopt =3D virObjectNew(virNetworkXMLOptionClass)))
+ return NULL;
+
+ return xmlopt;
+}
+
static void
virPortGroupDefClear(virPortGroupDefPtr def)
{
diff --git a/src/conf/network_conf.h b/src/conf/network_conf.h
index 424c4b0913..edd9f51f44 100644
--- a/src/conf/network_conf.h
+++ b/src/conf/network_conf.h
@@ -41,6 +41,14 @@
#include "virmacmap.h"
#include "virenum.h"
=20
+
+struct _virNetworkXMLOption {
+ virObject parent;
+};
+typedef struct _virNetworkXMLOption virNetworkXMLOption;
+typedef virNetworkXMLOption *virNetworkXMLOptionPtr;
+
+
typedef enum {
VIR_NETWORK_FORWARD_NONE =3D 0,
VIR_NETWORK_FORWARD_NAT,
@@ -289,6 +297,9 @@ enum {
VIR_NETWORK_OBJ_LIST_ADD_CHECK_LIVE =3D (1 << 1),
};
=20
+virNetworkXMLOptionPtr
+virNetworkXMLOptionNew(void);
+
virNetworkDefPtr
virNetworkDefCopy(virNetworkDefPtr def, unsigned int flags);
=20
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 7dfa5af3b3..5aec33cf52 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -730,6 +730,7 @@ virNetworkSaveConfig;
virNetworkSetBridgeMacAddr;
virNetworkTaintTypeFromString;
virNetworkTaintTypeToString;
+virNetworkXMLOptionNew;
virPortGroupFindByName;
=20
=20
diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
index 6292e3b90a..5be6f1ba45 100644
--- a/src/network/bridge_driver.c
+++ b/src/network/bridge_driver.c
@@ -136,6 +136,12 @@ networkDnsmasqCapsRefresh(virNetworkDriverStatePtr dri=
ver)
return 0;
}
=20
+static virNetworkXMLOptionPtr
+networkDnsmasqCreateXMLConf(void)
+{
+ return virNetworkXMLOptionNew();
+}
+
=20
static int
networkStateCleanup(void);
@@ -605,6 +611,9 @@ networkStateInitialize(bool privileged,
=20
network_driver->privileged =3D privileged;
=20
+ if (!(network_driver->xmlopt =3D networkDnsmasqCreateXMLConf()))
+ goto error;
+
/* configuration/state paths are one of
* ~/.config/libvirt/... (session/unprivileged)
* /etc/libvirt/... && /var/(run|lib)/libvirt/... (system/privileged).
@@ -766,6 +775,7 @@ networkStateCleanup(void)
return -1;
=20
virObjectUnref(network_driver->networkEventState);
+ virObjectUnref(network_driver->xmlopt);
=20
/* free inactive networks */
virObjectUnref(network_driver->networks);
diff --git a/src/network/bridge_driver_platform.h b/src/network/bridge_driv=
er_platform.h
index 95993c5e31..169417a6c0 100644
--- a/src/network/bridge_driver_platform.h
+++ b/src/network/bridge_driver_platform.h
@@ -55,6 +55,8 @@ struct _virNetworkDriverState {
=20
/* Immutable pointer, self-locking APIs */
virObjectEventStatePtr networkEventState;
+
+ virNetworkXMLOptionPtr xmlopt;
};
=20
typedef struct _virNetworkDriverState virNetworkDriverState;
--=20
2.21.0
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
From nobody Mon Apr 29 03:40:31 2024
Delivered-To: importer@patchew.org
Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28
as permitted sender) client-ip=209.132.183.28;
envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com;
Authentication-Results: mx.zohomail.com;
spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as
permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com;
dmarc=pass(p=none dis=none) header.from=redhat.com
ARC-Seal: i=1; a=rsa-sha256; t=1563149114; cv=none;
d=zoho.com; s=zohoarc;
b=KrmuJ5c28jPxrDai1fr7/TYLc3LxMwGN8e+A3q1aGXglDI4/GkR/2gum59XoG1ReL7hBS9E9uLmZ2vg0K2LFUJpdsyUxZL0nuI01OPWeRTOAxtTyZLD2onQap+tkbR0+B4gfiPm5K+E2os6Lylx83Hv/vVOxlUVEb4UxlteTLW8=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com;
s=zohoarc;
t=1563149114;
h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results;
bh=A9IZBuWze29LPjtjzD9HhzyL0Q3EGF10OjZrFWvYUNA=;
b=KPFVtOUbZmKBvexyoooj+1nirggs0h6dfbvVtc3hdNX/j2vBsX6ePRdl+QoWrOTJnPdI+imit+OEFHalu8cM3k+TSPFUUQFDV3r3kr+5RXnI8EhX07UhJa4JJPhW/G72pGvnS8KL54NZ7fCp5dH4SkKrVMdbmTGxE7Wjq5Iza/Q=
ARC-Authentication-Results: i=1; mx.zoho.com;
spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as
permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com;
dmarc=pass header.from= (p=none dis=none)
header.from=
Return-Path:
Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by
mx.zohomail.com
with SMTPS id 1563149114156515.1317326082998;
Sun, 14 Jul 2019 17:05:14 -0700 (PDT)
Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com
[10.5.11.14])
(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))
(No client certificate requested)
by mx1.redhat.com (Postfix) with ESMTPS id 3B51F308A9E0;
Mon, 15 Jul 2019 00:05:12 +0000 (UTC)
Received: from colo-mx.corp.redhat.com
(colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20])
by smtp.corp.redhat.com (Postfix) with ESMTPS id 12F3F5D9DE;
Mon, 15 Jul 2019 00:05:12 +0000 (UTC)
Received: from lists01.pubmisc.prod.ext.phx2.redhat.com
(lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33])
by colo-mx.corp.redhat.com (Postfix) with ESMTP id C2F8F18184A5;
Mon, 15 Jul 2019 00:05:11 +0000 (UTC)
Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com
[10.5.11.12])
by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP
id x6F04HV0030300 for ;
Sun, 14 Jul 2019 20:04:17 -0400
Received: by smtp.corp.redhat.com (Postfix)
id CDF4B60C44; Mon, 15 Jul 2019 00:04:17 +0000 (UTC)
Received: from worklaptop.redhat.com (ovpn-121-2.rdu2.redhat.com
[10.10.121.2])
by smtp.corp.redhat.com (Postfix) with ESMTP id 4FA5E60BFB;
Mon, 15 Jul 2019 00:04:17 +0000 (UTC)
From: Cole Robinson
To: libvirt-list@redhat.com
Date: Sun, 14 Jul 2019 20:03:58 -0400
Message-Id:
<02c594154833b5ad79fd0883f5ab84f6b648c4aa.1563148979.git.crobinso@redhat.com>
In-Reply-To:
References:
MIME-Version: 1.0
X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12
X-loop: libvir-list@redhat.com
Subject: [libvirt] [PATCH 2/5] conf: Add network xmlopt argument
X-BeenThere: libvir-list@redhat.com
X-Mailman-Version: 2.1.12
Precedence: junk
List-Id: Development discussions about the libvirt library & tools
List-Unsubscribe: ,
List-Archive:
List-Post:
List-Help:
List-Subscribe: ,
Content-Transfer-Encoding: quoted-printable
Sender: libvir-list-bounces@redhat.com
Errors-To: libvir-list-bounces@redhat.com
X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14
X-Greylist: Sender IP whitelisted,
not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.41]);
Mon, 15 Jul 2019 00:05:12 +0000 (UTC)
Content-Type: text/plain; charset="utf-8"
Pass an xmlopt argument through all the needed network conf
functions, like is done for domain XML handling. No functional
change for now
Signed-off-by: Cole Robinson
Reviewed-by: Laine Stump
---
src/conf/domain_conf.c | 2 +-
src/conf/network_conf.c | 40 +++++++++++++++----------
src/conf/network_conf.h | 21 ++++++++++----
src/conf/virnetworkobj.c | 50 ++++++++++++++++++++------------
src/conf/virnetworkobj.h | 13 ++++++---
src/esx/esx_network_driver.c | 4 +--
src/network/bridge_driver.c | 46 ++++++++++++++++++-----------
src/qemu/qemu_process.c | 2 +-
src/test/test_driver.c | 11 +++----
src/vbox/vbox_network.c | 4 +--
tests/networkxml2conftest.c | 2 +-
tests/networkxml2firewalltest.c | 2 +-
tests/networkxml2xmltest.c | 4 +--
tests/networkxml2xmlupdatetest.c | 4 +--
14 files changed, 128 insertions(+), 77 deletions(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 3323c9a5b1..740da645c4 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -30932,7 +30932,7 @@ virDomainNetResolveActualType(virDomainNetDefPtr if=
ace)
if (!(xml =3D virNetworkGetXMLDesc(net, 0)))
goto cleanup;
=20
- if (!(def =3D virNetworkDefParseString(xml)))
+ if (!(def =3D virNetworkDefParseString(xml, NULL)))
goto cleanup;
=20
switch ((virNetworkForwardType) def->forward.type) {
diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c
index ca4b9986ad..067adf7936 100644
--- a/src/conf/network_conf.c
+++ b/src/conf/network_conf.c
@@ -282,7 +282,9 @@ virNetworkDefFree(virNetworkDefPtr def)
* 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 =3D NULL;
virNetworkDefPtr newDef =3D NULL;
@@ -294,9 +296,9 @@ virNetworkDefCopy(virNetworkDefPtr def, unsigned int fl=
ags)
}
=20
/* deep copy with a format/parse cycle */
- if (!(xml =3D virNetworkDefFormat(def, flags)))
+ if (!(xml =3D virNetworkDefFormat(def, xmlopt, flags)))
goto cleanup;
- newDef =3D virNetworkDefParseString(xml);
+ newDef =3D virNetworkDefParseString(xml, xmlopt);
cleanup:
VIR_FREE(xml);
return newDef;
@@ -1619,7 +1621,8 @@ virNetworkForwardDefParseXML(const char *networkName,
=20
=20
virNetworkDefPtr
-virNetworkDefParseXML(xmlXPathContextPtr ctxt)
+virNetworkDefParseXML(xmlXPathContextPtr ctxt,
+ virNetworkXMLOptionPtr xmlopt ATTRIBUTE_UNUSED)
{
virNetworkDefPtr def;
char *tmp =3D NULL;
@@ -2059,14 +2062,15 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt)
=20
static virNetworkDefPtr
virNetworkDefParse(const char *xmlStr,
- const char *filename)
+ const char *filename,
+ virNetworkXMLOptionPtr xmlopt)
{
xmlDocPtr xml;
virNetworkDefPtr def =3D NULL;
int keepBlanksDefault =3D xmlKeepBlanksDefault(0);
=20
if ((xml =3D virXMLParse(filename, xmlStr, _("(network_definition)")))=
) {
- def =3D virNetworkDefParseNode(xml, xmlDocGetRootElement(xml));
+ def =3D virNetworkDefParseNode(xml, xmlDocGetRootElement(xml), xml=
opt);
xmlFreeDoc(xml);
}
=20
@@ -2076,22 +2080,25 @@ virNetworkDefParse(const char *xmlStr,
=20
=20
virNetworkDefPtr
-virNetworkDefParseString(const char *xmlStr)
+virNetworkDefParseString(const char *xmlStr,
+ virNetworkXMLOptionPtr xmlopt)
{
- return virNetworkDefParse(xmlStr, NULL);
+ return virNetworkDefParse(xmlStr, NULL, xmlopt);
}
=20
=20
virNetworkDefPtr
-virNetworkDefParseFile(const char *filename)
+virNetworkDefParseFile(const char *filename,
+ virNetworkXMLOptionPtr xmlopt)
{
- return virNetworkDefParse(NULL, filename);
+ return virNetworkDefParse(NULL, filename, xmlopt);
}
=20
=20
virNetworkDefPtr
virNetworkDefParseNode(xmlDocPtr xml,
- xmlNodePtr root)
+ xmlNodePtr root,
+ virNetworkXMLOptionPtr xmlopt)
{
xmlXPathContextPtr ctxt =3D NULL;
virNetworkDefPtr def =3D NULL;
@@ -2111,7 +2118,7 @@ virNetworkDefParseNode(xmlDocPtr xml,
}
=20
ctxt->node =3D root;
- def =3D virNetworkDefParseXML(ctxt);
+ def =3D virNetworkDefParseXML(ctxt, xmlopt);
=20
cleanup:
xmlXPathFreeContext(ctxt);
@@ -2405,6 +2412,7 @@ virNetworkForwardNatDefFormat(virBufferPtr buf,
int
virNetworkDefFormatBuf(virBufferPtr buf,
const virNetworkDef *def,
+ virNetworkXMLOptionPtr xmlopt ATTRIBUTE_UNUSED,
unsigned int flags)
{
const unsigned char *uuid;
@@ -2631,11 +2639,12 @@ virNetworkDefFormatBuf(virBufferPtr buf,
=20
char *
virNetworkDefFormat(const virNetworkDef *def,
+ virNetworkXMLOptionPtr xmlopt,
unsigned int flags)
{
virBuffer buf =3D VIR_BUFFER_INITIALIZER;
=20
- if (virNetworkDefFormatBuf(&buf, def, flags) < 0)
+ if (virNetworkDefFormatBuf(&buf, def, xmlopt, flags) < 0)
goto error;
=20
if (virBufferCheckError(&buf) < 0)
@@ -2709,12 +2718,13 @@ virNetworkSaveXML(const char *configDir,
=20
int
virNetworkSaveConfig(const char *configDir,
- virNetworkDefPtr def)
+ virNetworkDefPtr def,
+ virNetworkXMLOptionPtr xmlopt)
{
int ret =3D -1;
char *xml;
=20
- if (!(xml =3D virNetworkDefFormat(def, VIR_NETWORK_XML_INACTIVE)))
+ if (!(xml =3D virNetworkDefFormat(def, xmlopt, VIR_NETWORK_XML_INACTIV=
E)))
goto cleanup;
=20
if (virNetworkSaveXML(configDir, def, xml))
diff --git a/src/conf/network_conf.h b/src/conf/network_conf.h
index edd9f51f44..b7ce569d4a 100644
--- a/src/conf/network_conf.h
+++ b/src/conf/network_conf.h
@@ -301,28 +301,36 @@ virNetworkXMLOptionPtr
virNetworkXMLOptionNew(void);
=20
virNetworkDefPtr
-virNetworkDefCopy(virNetworkDefPtr def, unsigned int flags);
+virNetworkDefCopy(virNetworkDefPtr def,
+ virNetworkXMLOptionPtr xmlopt,
+ unsigned int flags);
=20
virNetworkDefPtr
-virNetworkDefParseXML(xmlXPathContextPtr ctxt);
+virNetworkDefParseXML(xmlXPathContextPtr ctxt,
+ virNetworkXMLOptionPtr xmlopt);
=20
virNetworkDefPtr
-virNetworkDefParseString(const char *xmlStr);
+virNetworkDefParseString(const char *xmlStr,
+ virNetworkXMLOptionPtr xmlopt);
=20
virNetworkDefPtr
-virNetworkDefParseFile(const char *filename);
+virNetworkDefParseFile(const char *filename,
+ virNetworkXMLOptionPtr xmlopt);
=20
virNetworkDefPtr
virNetworkDefParseNode(xmlDocPtr xml,
- xmlNodePtr root);
+ xmlNodePtr root,
+ virNetworkXMLOptionPtr xmlopt);
=20
char *
virNetworkDefFormat(const virNetworkDef *def,
+ virNetworkXMLOptionPtr xmlopt,
unsigned int flags);
=20
int
virNetworkDefFormatBuf(virBufferPtr buf,
const virNetworkDef *def,
+ virNetworkXMLOptionPtr xmlopt,
unsigned int flags);
=20
const char *
@@ -357,7 +365,8 @@ virNetworkSaveXML(const char *configDir,
=20
int
virNetworkSaveConfig(const char *configDir,
- virNetworkDefPtr def);
+ virNetworkDefPtr def,
+ virNetworkXMLOptionPtr xmlopt);
=20
char *
virNetworkConfigFile(const char *dir,
diff --git a/src/conf/virnetworkobj.c b/src/conf/virnetworkobj.c
index 476f66affc..d63ead7fac 100644
--- a/src/conf/virnetworkobj.c
+++ b/src/conf/virnetworkobj.c
@@ -673,7 +673,8 @@ virNetworkObjAssignDef(virNetworkObjListPtr nets,
*/
int
virNetworkObjSetDefTransient(virNetworkObjPtr obj,
- bool live)
+ bool live,
+ virNetworkXMLOptionPtr xmlopt)
{
if (!virNetworkObjIsActive(obj) && !live)
return 0;
@@ -681,7 +682,9 @@ virNetworkObjSetDefTransient(virNetworkObjPtr obj,
if (!obj->persistent || obj->newDef)
return 0;
=20
- obj->newDef =3D virNetworkDefCopy(obj->def, VIR_NETWORK_XML_INACTIVE);
+ obj->newDef =3D virNetworkDefCopy(obj->def,
+ xmlopt,
+ VIR_NETWORK_XML_INACTIVE);
return obj->newDef ? 0 : -1;
}
=20
@@ -759,6 +762,7 @@ virNetworkObjReplacePersistentDef(virNetworkObjPtr obj,
*/
static int
virNetworkObjConfigChangeSetup(virNetworkObjPtr obj,
+ virNetworkXMLOptionPtr xmlopt,
unsigned int flags)
{
bool isActive;
@@ -782,7 +786,7 @@ virNetworkObjConfigChangeSetup(virNetworkObjPtr obj,
/* 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;
}
=20
@@ -811,6 +815,7 @@ virNetworkObjRemoveInactive(virNetworkObjListPtr nets,
=20
static char *
virNetworkObjFormat(virNetworkObjPtr obj,
+ virNetworkXMLOptionPtr xmlopt,
unsigned int flags)
{
virBuffer buf =3D VIR_BUFFER_INITIALIZER;
@@ -832,7 +837,7 @@ virNetworkObjFormat(virNetworkObjPtr obj,
virNetworkTaintTypeToString(i));
}
=20
- if (virNetworkDefFormatBuf(&buf, obj->def, flags) < 0)
+ if (virNetworkDefFormatBuf(&buf, obj->def, xmlopt, flags) < 0)
goto error;
=20
virBufferAdjustIndent(&buf, -2);
@@ -851,13 +856,14 @@ virNetworkObjFormat(virNetworkObjPtr obj,
=20
int
virNetworkObjSaveStatus(const char *statusDir,
- virNetworkObjPtr obj)
+ virNetworkObjPtr obj,
+ virNetworkXMLOptionPtr xmlopt)
{
int ret =3D -1;
int flags =3D 0;
char *xml;
=20
- if (!(xml =3D virNetworkObjFormat(obj, flags)))
+ if (!(xml =3D virNetworkObjFormat(obj, xmlopt, flags)))
goto cleanup;
=20
if (virNetworkSaveXML(statusDir, obj->def, xml))
@@ -873,7 +879,8 @@ virNetworkObjSaveStatus(const char *statusDir,
static virNetworkObjPtr
virNetworkLoadState(virNetworkObjListPtr nets,
const char *stateDir,
- const char *name)
+ const char *name,
+ virNetworkXMLOptionPtr xmlopt)
{
char *configFile =3D NULL;
virNetworkDefPtr def =3D NULL;
@@ -902,7 +909,7 @@ virNetworkLoadState(virNetworkObjListPtr nets,
=20
/* parse the definition first */
ctxt->node =3D node;
- if (!(def =3D virNetworkDefParseXML(ctxt)))
+ if (!(def =3D virNetworkDefParseXML(ctxt, xmlopt)))
goto error;
=20
if (STRNEQ(name, def->name)) {
@@ -1000,7 +1007,8 @@ static virNetworkObjPtr
virNetworkLoadConfig(virNetworkObjListPtr nets,
const char *configDir,
const char *autostartDir,
- const char *name)
+ const char *name,
+ virNetworkXMLOptionPtr xmlopt)
{
char *configFile =3D NULL, *autostartLink =3D NULL;
virNetworkDefPtr def =3D NULL;
@@ -1015,7 +1023,7 @@ virNetworkLoadConfig(virNetworkObjListPtr nets,
if ((autostart =3D virFileLinkPointsTo(autostartLink, configFile)) < 0)
goto error;
=20
- if (!(def =3D virNetworkDefParseFile(configFile)))
+ if (!(def =3D virNetworkDefParseFile(configFile, xmlopt)))
goto error;
=20
if (STRNEQ(name, def->name)) {
@@ -1033,7 +1041,7 @@ virNetworkLoadConfig(virNetworkObjListPtr nets,
case VIR_NETWORK_FORWARD_OPEN:
if (!def->mac_specified) {
virNetworkSetBridgeMacAddr(def);
- virNetworkSaveConfig(configDir, def);
+ virNetworkSaveConfig(configDir, def, xmlopt);
}
break;
=20
@@ -1073,7 +1081,8 @@ virNetworkLoadConfig(virNetworkObjListPtr nets,
=20
int
virNetworkObjLoadAllState(virNetworkObjListPtr nets,
- const char *stateDir)
+ const char *stateDir,
+ virNetworkXMLOptionPtr xmlopt)
{
DIR *dir;
struct dirent *entry;
@@ -1089,7 +1098,7 @@ virNetworkObjLoadAllState(virNetworkObjListPtr nets,
if (!virStringStripSuffix(entry->d_name, ".xml"))
continue;
=20
- obj =3D virNetworkLoadState(nets, stateDir, entry->d_name);
+ obj =3D virNetworkLoadState(nets, stateDir, entry->d_name, xmlopt);
=20
if (obj &&
virNetworkObjLoadAllPorts(obj, stateDir) < 0) {
@@ -1108,7 +1117,8 @@ virNetworkObjLoadAllState(virNetworkObjListPtr nets,
int
virNetworkObjLoadAllConfigs(virNetworkObjListPtr nets,
const char *configDir,
- const char *autostartDir)
+ const char *autostartDir,
+ virNetworkXMLOptionPtr xmlopt)
{
DIR *dir;
struct dirent *entry;
@@ -1129,7 +1139,8 @@ virNetworkObjLoadAllConfigs(virNetworkObjListPtr nets,
obj =3D virNetworkLoadConfig(nets,
configDir,
autostartDir,
- entry->d_name);
+ entry->d_name,
+ xmlopt);
virNetworkObjEndAPI(&obj);
}
=20
@@ -1239,20 +1250,21 @@ virNetworkObjUpdate(virNetworkObjPtr obj,
unsigned int section, /* virNetworkUpdateSection */
int parentIndex,
const char *xml,
+ virNetworkXMLOptionPtr xmlopt,
unsigned int flags) /* virNetworkUpdateFlags */
{
int ret =3D -1;
virNetworkDefPtr livedef =3D NULL, configdef =3D NULL;
=20
/* normalize config data, and check for common invalid requests. */
- if (virNetworkObjConfigChangeSetup(obj, flags) < 0)
+ if (virNetworkObjConfigChangeSetup(obj, xmlopt, flags) < 0)
goto cleanup;
=20
if (flags & VIR_NETWORK_UPDATE_AFFECT_LIVE) {
virNetworkDefPtr checkdef;
=20
/* work on a copy of the def */
- if (!(livedef =3D virNetworkDefCopy(obj->def, 0)))
+ if (!(livedef =3D virNetworkDefCopy(obj->def, xmlopt, 0)))
goto cleanup;
if (virNetworkDefUpdateSection(livedef, command, section,
parentIndex, xml, flags) < 0) {
@@ -1261,7 +1273,7 @@ virNetworkObjUpdate(virNetworkObjPtr obj,
/* run a final format/parse cycle to make sure we didn't
* add anything illegal to the def
*/
- if (!(checkdef =3D virNetworkDefCopy(livedef, 0)))
+ if (!(checkdef =3D virNetworkDefCopy(livedef, xmlopt, 0)))
goto cleanup;
virNetworkDefFree(checkdef);
}
@@ -1271,6 +1283,7 @@ virNetworkObjUpdate(virNetworkObjPtr obj,
=20
/* work on a copy of the def */
if (!(configdef =3D virNetworkDefCopy(virNetworkObjGetPersistentDe=
f(obj),
+ xmlopt,
VIR_NETWORK_XML_INACTIVE))) {
goto cleanup;
}
@@ -1279,6 +1292,7 @@ virNetworkObjUpdate(virNetworkObjPtr obj,
goto cleanup;
}
if (!(checkdef =3D virNetworkDefCopy(configdef,
+ xmlopt,
VIR_NETWORK_XML_INACTIVE))) {
goto cleanup;
}
diff --git a/src/conf/virnetworkobj.h b/src/conf/virnetworkobj.h
index e649b6b350..1c28f0888c 100644
--- a/src/conf/virnetworkobj.h
+++ b/src/conf/virnetworkobj.h
@@ -140,7 +140,8 @@ virNetworkObjUpdateAssignDef(virNetworkObjPtr network,
=20
int
virNetworkObjSetDefTransient(virNetworkObjPtr network,
- bool live);
+ bool live,
+ virNetworkXMLOptionPtr xmlopt);
=20
void
virNetworkObjUnsetDefTransient(virNetworkObjPtr network);
@@ -191,16 +192,19 @@ virNetworkObjPortListExport(virNetworkPtr net,
=20
int
virNetworkObjSaveStatus(const char *statusDir,
- virNetworkObjPtr net) ATTRIBUTE_RETURN_CHECK;
+ virNetworkObjPtr net,
+ virNetworkXMLOptionPtr xmlopt) ATTRIBUTE_RETURN_CH=
ECK;
=20
int
virNetworkObjLoadAllConfigs(virNetworkObjListPtr nets,
const char *configDir,
- const char *autostartDir);
+ const char *autostartDir,
+ virNetworkXMLOptionPtr xmlopt);
=20
int
virNetworkObjLoadAllState(virNetworkObjListPtr nets,
- const char *stateDir);
+ const char *stateDir,
+ virNetworkXMLOptionPtr xmlopt);
=20
int
virNetworkObjDeleteConfig(const char *configDir,
@@ -218,6 +222,7 @@ virNetworkObjUpdate(virNetworkObjPtr obj,
unsigned int section, /* virNetworkUpdateSection */
int parentIndex,
const char *xml,
+ virNetworkXMLOptionPtr xmlopt,
unsigned int flags); /* virNetworkUpdateFlags */
=20
int
diff --git a/src/esx/esx_network_driver.c b/src/esx/esx_network_driver.c
index 31bceb7bff..40bd5c2168 100644
--- a/src/esx/esx_network_driver.c
+++ b/src/esx/esx_network_driver.c
@@ -298,7 +298,7 @@ esxNetworkDefineXML(virConnectPtr conn, const char *xml)
return NULL;
=20
/* Parse network XML */
- def =3D virNetworkDefParseString(xml);
+ def =3D virNetworkDefParseString(xml, NULL);
=20
if (!def)
return NULL;
@@ -806,7 +806,7 @@ esxNetworkGetXMLDesc(virNetworkPtr network_, unsigned i=
nt flags)
}
}
=20
- xml =3D virNetworkDefFormat(def, flags);
+ xml =3D virNetworkDefFormat(def, NULL, flags);
=20
cleanup:
esxVI_HostVirtualSwitch_Free(&hostVirtualSwitch);
diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
index 5be6f1ba45..3353754eb5 100644
--- a/src/network/bridge_driver.c
+++ b/src/network/bridge_driver.c
@@ -231,7 +231,7 @@ networkRunHook(virNetworkObjPtr obj,
=20
virBufferAddLit(&buf, "\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;
@@ -673,12 +673,14 @@ networkStateInitialize(bool privileged,
goto error;
=20
if (virNetworkObjLoadAllState(network_driver->networks,
- network_driver->stateDir) < 0)
+ network_driver->stateDir,
+ network_driver->xmlopt) < 0)
goto error;
=20
if (virNetworkObjLoadAllConfigs(network_driver->networks,
network_driver->networkConfigDir,
- network_driver->networkAutostartDir) <=
0)
+ network_driver->networkAutostartDir,
+ network_driver->xmlopt) < 0)
goto error;
=20
/* Update the internal status of all allegedly active
@@ -750,10 +752,12 @@ networkStateReload(void)
return 0;
=20
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,
@@ -2789,7 +2793,7 @@ networkStartNetwork(virNetworkDriverStatePtr driver,
virNetworkObjDeleteAllPorts(obj, driver->stateDir);
=20
VIR_DEBUG("Setting current network def as transient");
- if (virNetworkObjSetDefTransient(obj, true) < 0)
+ if (virNetworkObjSetDefTransient(obj, true, network_driver->xmlopt) < =
0)
goto cleanup;
=20
/* Run an early hook to set-up missing devices.
@@ -2847,7 +2851,8 @@ networkStartNetwork(virNetworkDriverStatePtr driver,
* 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;
=20
virNetworkObjSetActive(obj, true);
@@ -3563,7 +3568,7 @@ networkCreateXML(virConnectPtr conn,
virNetworkPtr net =3D NULL;
virObjectEventPtr event =3D NULL;
=20
- if (!(newDef =3D virNetworkDefParseString(xml)))
+ if (!(newDef =3D virNetworkDefParseString(xml, network_driver->xmlopt)=
))
goto cleanup;
=20
if (virNetworkCreateXMLEnsureACL(conn, newDef) < 0)
@@ -3615,7 +3620,7 @@ networkDefineXML(virConnectPtr conn,
virNetworkPtr net =3D NULL;
virObjectEventPtr event =3D NULL;
=20
- if (!(def =3D virNetworkDefParseString(xml)))
+ if (!(def =3D virNetworkDefParseString(xml, network_driver->xmlopt)))
goto cleanup;
=20
if (virNetworkDefineXMLEnsureACL(conn, def) < 0)
@@ -3630,7 +3635,8 @@ networkDefineXML(virConnectPtr conn,
/* def was assigned to network object */
freeDef =3D false;
=20
- if (virNetworkSaveConfig(driver->networkConfigDir, def) < 0) {
+ if (virNetworkSaveConfig(driver->networkConfigDir,
+ def, network_driver->xmlopt) < 0) {
if (!virNetworkObjIsActive(obj)) {
virNetworkObjRemoveInactive(driver->networks, obj);
goto cleanup;
@@ -3811,7 +3817,9 @@ networkUpdate(virNetworkPtr net,
}
=20
/* 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;
@@ -3826,7 +3834,8 @@ networkUpdate(virNetworkPtr net,
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;
}
}
@@ -3893,7 +3902,8 @@ networkUpdate(virNetworkPtr net,
}
=20
/* save current network state to disk */
- if ((ret =3D virNetworkObjSaveStatus(driver->stateDir, obj)) < 0)
+ if ((ret =3D virNetworkObjSaveStatus(driver->stateDir,
+ obj, network_driver->xmlopt)) <=
0)
goto cleanup;
}
=20
@@ -4014,7 +4024,7 @@ networkGetXMLDesc(virNetworkPtr net,
else
curDef =3D def;
=20
- ret =3D virNetworkDefFormat(curDef, flags);
+ ret =3D virNetworkDefFormat(curDef, network_driver->xmlopt, flags);
=20
cleanup:
virNetworkObjEndAPI(&obj);
@@ -5153,7 +5163,7 @@ networkPlugBandwidthImpl(virNetworkObjPtr obj,
tmp_floor_sum +=3D ifaceBand->in->floor;
virNetworkObjSetFloorSum(obj, tmp_floor_sum);
/* update status file */
- if (virNetworkObjSaveStatus(driver->stateDir, obj) < 0) {
+ if (virNetworkObjSaveStatus(driver->stateDir, obj, network_driver->xml=
opt) < 0) {
ignore_value(virBitmapClearBit(classIdMap, next_id));
tmp_floor_sum -=3D ifaceBand->in->floor;
virNetworkObjSetFloorSum(obj, tmp_floor_sum);
@@ -5243,7 +5253,8 @@ networkUnplugBandwidth(virNetworkObjPtr obj,
/* 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 +=3D ifaceBand->in->floor;
virNetworkObjSetFloorSum(obj, tmp_floor_sum);
ignore_value(virBitmapSetBit(classIdMap, *class_id));
@@ -5337,7 +5348,8 @@ networkUpdatePortBandwidth(virNetworkObjPtr obj,
=20
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 -=3D newBandwidth->in->floor;
tmp_floor_sum +=3D oldBandwidth->in->floor;
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index aa09ef175a..746d701640 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -4713,7 +4713,7 @@ qemuProcessGetNetworkAddress(const char *netname,
if (!xml)
goto cleanup;
=20
- netdef =3D virNetworkDefParseString(xml);
+ netdef =3D virNetworkDefParseString(xml, NULL);
if (!netdef)
goto cleanup;
=20
diff --git a/src/test/test_driver.c b/src/test/test_driver.c
index c10344f6cd..dff384392e 100644
--- a/src/test/test_driver.c
+++ b/src/test/test_driver.c
@@ -971,7 +971,7 @@ testParseNetworks(testDriverPtr privconn,
if (!node)
return -1;
=20
- def =3D virNetworkDefParseNode(ctxt->doc, node);
+ def =3D virNetworkDefParseNode(ctxt->doc, node, NULL);
if (!def)
return -1;
=20
@@ -4148,7 +4148,7 @@ testNetworkCreateXML(virConnectPtr conn, const char *=
xml)
virNetworkPtr net =3D NULL;
virObjectEventPtr event =3D NULL;
=20
- if ((newDef =3D virNetworkDefParseString(xml)) =3D=3D NULL)
+ if ((newDef =3D virNetworkDefParseString(xml, NULL)) =3D=3D NULL)
goto cleanup;
=20
if (!(obj =3D virNetworkObjAssignDef(privconn->networks, newDef,
@@ -4184,7 +4184,7 @@ testNetworkDefineXML(virConnectPtr conn,
virNetworkPtr net =3D NULL;
virObjectEventPtr event =3D NULL;
=20
- if ((newDef =3D virNetworkDefParseString(xml)) =3D=3D NULL)
+ if ((newDef =3D virNetworkDefParseString(xml, NULL)) =3D=3D NULL)
goto cleanup;
=20
if (!(obj =3D virNetworkObjAssignDef(privconn->networks, newDef, 0)))
@@ -4270,7 +4270,8 @@ testNetworkUpdate(virNetworkPtr net,
}
=20
/* 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;
=20
ret =3D 0;
@@ -4354,7 +4355,7 @@ testNetworkGetXMLDesc(virNetworkPtr net,
if (!(obj =3D testNetworkObjFindByName(privconn, net->name)))
goto cleanup;
=20
- ret =3D virNetworkDefFormat(virNetworkObjGetDef(obj), flags);
+ ret =3D virNetworkDefFormat(virNetworkObjGetDef(obj), NULL, flags);
=20
cleanup:
virNetworkObjEndAPI(&obj);
diff --git a/src/vbox/vbox_network.c b/src/vbox/vbox_network.c
index 7326ae7d07..814f27155f 100644
--- a/src/vbox/vbox_network.c
+++ b/src/vbox/vbox_network.c
@@ -375,7 +375,7 @@ vboxNetworkDefineCreateXML(virConnectPtr conn, const ch=
ar *xml, bool start)
PRUnichar *networkNameUtf16 =3D NULL;
char *networkNameUtf8 =3D NULL;
IHostNetworkInterface *networkInterface =3D NULL;
- virNetworkDefPtr def =3D virNetworkDefParseString(xml);
+ virNetworkDefPtr def =3D virNetworkDefParseString(xml, NULL);
virNetworkIPDefPtr ipdef =3D NULL;
unsigned char uuid[VIR_UUID_BUFLEN];
vboxIID vboxnetiid;
@@ -911,7 +911,7 @@ static char *vboxNetworkGetXMLDesc(virNetworkPtr networ=
k, unsigned int flags)
}
=20
DEBUGIID("Network UUID", &vboxnet0IID);
- ret =3D virNetworkDefFormat(def, 0);
+ ret =3D virNetworkDefFormat(def, NULL, 0);
=20
cleanup:
vboxIIDUnalloc(&vboxnet0IID);
diff --git a/tests/networkxml2conftest.c b/tests/networkxml2conftest.c
index bf9675838d..c445551099 100644
--- a/tests/networkxml2conftest.c
+++ b/tests/networkxml2conftest.c
@@ -26,7 +26,7 @@ testCompareXMLToConfFiles(const char *inxml, const char *=
outconf, dnsmasqCapsPtr
char *pidfile =3D NULL;
dnsmasqContext *dctx =3D NULL;
=20
- if (!(def =3D virNetworkDefParseFile(inxml)))
+ if (!(def =3D virNetworkDefParseFile(inxml, NULL)))
goto fail;
=20
if (!(obj =3D virNetworkObjNew()))
diff --git a/tests/networkxml2firewalltest.c b/tests/networkxml2firewalltes=
t.c
index c25282ebb1..78844085a0 100644
--- a/tests/networkxml2firewalltest.c
+++ b/tests/networkxml2firewalltest.c
@@ -70,7 +70,7 @@ static int testCompareXMLToArgvFiles(const char *xml,
=20
virCommandSetDryRun(&buf, testCommandDryRun, NULL);
=20
- if (!(def =3D virNetworkDefParseFile(xml)))
+ if (!(def =3D virNetworkDefParseFile(xml, NULL)))
goto cleanup;
=20
if (networkAddFirewallRules(def) < 0)
diff --git a/tests/networkxml2xmltest.c b/tests/networkxml2xmltest.c
index b19a365ff4..cd76ce5375 100644
--- a/tests/networkxml2xmltest.c
+++ b/tests/networkxml2xmltest.c
@@ -30,14 +30,14 @@ testCompareXMLToXMLFiles(const char *inxml, const char =
*outxml,
testCompareNetXML2XMLResult result =3D TEST_COMPARE_NET_XML2XML_RESULT=
_SUCCESS;
virNetworkDefPtr dev =3D NULL;
=20
- if (!(dev =3D virNetworkDefParseFile(inxml))) {
+ if (!(dev =3D virNetworkDefParseFile(inxml, NULL))) {
result =3D TEST_COMPARE_NET_XML2XML_RESULT_FAIL_PARSE;
goto cleanup;
}
if (expectResult =3D=3D TEST_COMPARE_NET_XML2XML_RESULT_FAIL_PARSE)
goto cleanup;
=20
- if (!(actual =3D virNetworkDefFormat(dev, flags))) {
+ if (!(actual =3D virNetworkDefFormat(dev, NULL, flags))) {
result =3D TEST_COMPARE_NET_XML2XML_RESULT_FAIL_FORMAT;
goto cleanup;
}
diff --git a/tests/networkxml2xmlupdatetest.c b/tests/networkxml2xmlupdatet=
est.c
index 46cb4c2f0b..69c19e800d 100644
--- a/tests/networkxml2xmlupdatetest.c
+++ b/tests/networkxml2xmlupdatetest.c
@@ -27,14 +27,14 @@ testCompareXMLToXMLFiles(const char *netxml, const char=
*updatexml,
if (virTestLoadFile(updatexml, &updateXmlData) < 0)
goto error;
=20
- if (!(def =3D virNetworkDefParseFile(netxml)))
+ if (!(def =3D virNetworkDefParseFile(netxml, NULL)))
goto fail;
=20
if (virNetworkDefUpdateSection(def, command, section, parentIndex,
updateXmlData, 0) < 0)
goto fail;
=20
- if (!(actual =3D virNetworkDefFormat(def, flags)))
+ if (!(actual =3D virNetworkDefFormat(def, NULL, flags)))
goto fail;
=20
if (!expectFailure) {
--=20
2.21.0
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
From nobody Mon Apr 29 03:40:31 2024
Delivered-To: importer@patchew.org
Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28
as permitted sender) client-ip=209.132.183.28;
envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com;
Authentication-Results: mx.zohomail.com;
spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as
permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com;
dmarc=pass(p=none dis=none) header.from=redhat.com
ARC-Seal: i=1; a=rsa-sha256; t=1563149067; cv=none;
d=zoho.com; s=zohoarc;
b=cHRJAyU3LumxHdFyvTGktH+0Rn6Kaonokch8+LE0v7LUR5+iwMPiLNhTysRgN6cIsJBgasJVMbcT2f33QhwJa6sNhSvnDLig2ohidKvH6uG8cdN849EK8Uom1X6fq+DrWVmCy+Ho6LYCVyFtoVS2K/2aoS8uGVmgK0AD3OH+Sok=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com;
s=zohoarc;
t=1563149067;
h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results;
bh=o+rZ16IwZ9gXyJ7mT/07q+RTrTanIn8vtnyDhqeglhI=;
b=hdOlorqzYOB0KIA8OFiC8TGvUNadiXwDA+J+v1NCorzeRln2B5RTfu6fW72XkV6s9/oo65a1el/5U/7SM2bv204DvTxVs2Sy1BGxCPbi6bW6XPv7fx22UEDAfiDGG01qkI3s6wwM40oY7uMlKJJdtt4jtfKPc1dxqk+3WFSBsUY=
ARC-Authentication-Results: i=1; mx.zoho.com;
spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as
permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com;
dmarc=pass header.from= (p=none dis=none)
header.from=
Return-Path:
Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by
mx.zohomail.com
with SMTPS id 1563149067242538.9191145271326;
Sun, 14 Jul 2019 17:04:27 -0700 (PDT)
Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com
[10.5.11.14])
(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))
(No client certificate requested)
by mx1.redhat.com (Postfix) with ESMTPS id 8625FC049598;
Mon, 15 Jul 2019 00:04:24 +0000 (UTC)
Received: from colo-mx.corp.redhat.com
(colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21])
by smtp.corp.redhat.com (Postfix) with ESMTPS id ADD5D5D968;
Mon, 15 Jul 2019 00:04:23 +0000 (UTC)
Received: from lists01.pubmisc.prod.ext.phx2.redhat.com
(lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33])
by colo-mx.corp.redhat.com (Postfix) with ESMTP id 5227741F63;
Mon, 15 Jul 2019 00:04:20 +0000 (UTC)
Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com
[10.5.11.12])
by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP
id x6F04ICQ030307 for ;
Sun, 14 Jul 2019 20:04:18 -0400
Received: by smtp.corp.redhat.com (Postfix)
id 7059460C44; Mon, 15 Jul 2019 00:04:18 +0000 (UTC)
Received: from worklaptop.redhat.com (ovpn-121-2.rdu2.redhat.com
[10.10.121.2])
by smtp.corp.redhat.com (Postfix) with ESMTP id 08B0E60BFB;
Mon, 15 Jul 2019 00:04:17 +0000 (UTC)
From: Cole Robinson
To: libvirt-list@redhat.com
Date: Sun, 14 Jul 2019 20:03:59 -0400
Message-Id:
In-Reply-To:
References:
MIME-Version: 1.0
X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12
X-loop: libvir-list@redhat.com
Subject: [libvirt] [PATCH 3/5] conf: Add virNetworkXMLNamespace
X-BeenThere: libvir-list@redhat.com
X-Mailman-Version: 2.1.12
Precedence: junk
List-Id: Development discussions about the libvirt library & tools
List-Unsubscribe: ,
List-Archive:
List-Post:
List-Help:
List-Subscribe: ,
Content-Transfer-Encoding: quoted-printable
Sender: libvir-list-bounces@redhat.com
Errors-To: libvir-list-bounces@redhat.com
X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14
X-Greylist: Sender IP whitelisted,
not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]);
Mon, 15 Jul 2019 00:04:25 +0000 (UTC)
Content-Type: text/plain; charset="utf-8"
Just the plumbing, no real implementation yet
Signed-off-by: Cole Robinson
Reviewed-by: Laine Stump
---
src/conf/network_conf.c | 22 ++++++++++++++++++++--
src/conf/network_conf.h | 21 ++++++++++++++++++++-
src/network/bridge_driver.c | 2 +-
3 files changed, 41 insertions(+), 4 deletions(-)
diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c
index 067adf7936..c5a243684a 100644
--- a/src/conf/network_conf.c
+++ b/src/conf/network_conf.c
@@ -93,7 +93,7 @@ virNetworkXMLOnceInit(void)
VIR_ONCE_GLOBAL_INIT(virNetworkXML);
=20
virNetworkXMLOptionPtr
-virNetworkXMLOptionNew(void)
+virNetworkXMLOptionNew(virNetworkXMLNamespacePtr xmlns)
{
virNetworkXMLOptionPtr xmlopt;
=20
@@ -103,6 +103,9 @@ virNetworkXMLOptionNew(void)
if (!(xmlopt =3D virObjectNew(virNetworkXMLOptionClass)))
return NULL;
=20
+ if (xmlns)
+ xmlopt->ns =3D *xmlns;
+
return xmlopt;
}
=20
@@ -268,6 +271,8 @@ virNetworkDefFree(virNetworkDefPtr def)
=20
xmlFreeNode(def->metadata);
=20
+ if (def->namespaceData && def->ns.free)
+ (def->ns.free)(def->namespaceData);
VIR_FREE(def);
}
=20
@@ -1622,7 +1627,7 @@ virNetworkForwardDefParseXML(const char *networkName,
=20
virNetworkDefPtr
virNetworkDefParseXML(xmlXPathContextPtr ctxt,
- virNetworkXMLOptionPtr xmlopt ATTRIBUTE_UNUSED)
+ virNetworkXMLOptionPtr xmlopt)
{
virNetworkDefPtr def;
char *tmp =3D NULL;
@@ -2043,6 +2048,12 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt,
virXMLNodeSanitizeNamespaces(def->metadata);
}
=20
+ if (xmlopt)
+ def->ns =3D xmlopt->ns;
+ if (def->ns.parse &&
+ (def->ns.parse)(ctxt, &def->namespaceData) < 0)
+ goto error;
+
ctxt->node =3D save;
return def;
=20
@@ -2422,6 +2433,8 @@ virNetworkDefFormatBuf(virBufferPtr buf,
bool hasbridge =3D false;
=20
virBufferAddLit(buf, "namespaceData && def->ns.href)
+ virBufferAsprintf(buf, " %s", (def->ns.href)());
if (!(flags & VIR_NETWORK_XML_INACTIVE) && (def->connections > 0))
virBufferAsprintf(buf, " connections=3D'%d'", def->connections);
if (def->ipv6nogw)
@@ -2627,6 +2640,11 @@ virNetworkDefFormatBuf(virBufferPtr buf,
if (virPortGroupDefFormat(buf, &def->portGroups[i]) < 0)
goto error;
=20
+ if (def->namespaceData && def->ns.format) {
+ if ((def->ns.format)(buf, def->namespaceData) < 0)
+ return -1;
+ }
+
virBufferAdjustIndent(buf, -2);
virBufferAddLit(buf, "\n");
=20
diff --git a/src/conf/network_conf.h b/src/conf/network_conf.h
index b7ce569d4a..b167b57e85 100644
--- a/src/conf/network_conf.h
+++ b/src/conf/network_conf.h
@@ -41,9 +41,24 @@
#include "virmacmap.h"
#include "virenum.h"
=20
+typedef int (*virNetworkDefNamespaceParse)(xmlXPathContextPtr, void **);
+typedef void (*virNetworkDefNamespaceFree)(void *);
+typedef int (*virNetworkDefNamespaceXMLFormat)(virBufferPtr, void *);
+typedef const char *(*virNetworkDefNamespaceHref)(void);
+
+typedef struct _virNetworkXMLNamespace virNetworkXMLNamespace;
+typedef virNetworkXMLNamespace *virNetworkXMLNamespacePtr;
+struct _virNetworkXMLNamespace {
+ virNetworkDefNamespaceParse parse;
+ virNetworkDefNamespaceFree free;
+ virNetworkDefNamespaceXMLFormat format;
+ virNetworkDefNamespaceHref href;
+};
=20
struct _virNetworkXMLOption {
virObject parent;
+
+ virNetworkXMLNamespace ns;
};
typedef struct _virNetworkXMLOption virNetworkXMLOption;
typedef virNetworkXMLOption *virNetworkXMLOptionPtr;
@@ -277,6 +292,10 @@ struct _virNetworkDef {
=20
/* Application-specific custom metadata */
xmlNodePtr metadata;
+
+ /* Network specific XML namespace data */
+ void *namespaceData;
+ virNetworkXMLNamespace ns;
};
=20
typedef enum {
@@ -298,7 +317,7 @@ enum {
};
=20
virNetworkXMLOptionPtr
-virNetworkXMLOptionNew(void);
+virNetworkXMLOptionNew(virNetworkXMLNamespacePtr xmlns);
=20
virNetworkDefPtr
virNetworkDefCopy(virNetworkDefPtr def,
diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
index 3353754eb5..1a4d6e7f7b 100644
--- a/src/network/bridge_driver.c
+++ b/src/network/bridge_driver.c
@@ -139,7 +139,7 @@ networkDnsmasqCapsRefresh(virNetworkDriverStatePtr driv=
er)
static virNetworkXMLOptionPtr
networkDnsmasqCreateXMLConf(void)
{
- return virNetworkXMLOptionNew();
+ return virNetworkXMLOptionNew(NULL);
}
=20
=20
--=20
2.21.0
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
From nobody Mon Apr 29 03:40:31 2024
Delivered-To: importer@patchew.org
Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28
as permitted sender) client-ip=209.132.183.28;
envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com;
Authentication-Results: mx.zohomail.com;
spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as
permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com;
dmarc=pass(p=none dis=none) header.from=redhat.com
ARC-Seal: i=1; a=rsa-sha256; t=1563149117; cv=none;
d=zoho.com; s=zohoarc;
b=HpxTaslYGE9dupw89fSTL8Xg+pErhhqeTFFpzi7yUzjYylCVnJuePigtcHMeoA6i/B3BHB05BqwIOKtIhbVFyz951huwl8K7LnRc1jeLPPZ0josR4XbnKXBFyNROnYwv/aSn37SRN6eXo7tF0dv73ryiADpNVmetyXAeP7kmZN0=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com;
s=zohoarc;
t=1563149117;
h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results;
bh=nzeTWafsGElKfHdQTbWAzCyAnZJtslieIU6kDox9oO0=;
b=R/QMOnpeQdzaJeZBbFC3hnj3uUW687n8PQ2F+P+aLr08h1uhlWiyvXVDiYd1yEXZ6ah2xRbSWfhHndolrzTWnqWNVwXKa/FfuEzTOoFhkTatGk+iR3sBz/iTZ0X88KzeTOlsCHDFuFH+asd/niHwmrLtokiy9/Eoi93p6jraBW0=
ARC-Authentication-Results: i=1; mx.zoho.com;
spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as
permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com;
dmarc=pass header.from= (p=none dis=none)
header.from=
Return-Path:
Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by
mx.zohomail.com
with SMTPS id 1563149117802320.16199015965776;
Sun, 14 Jul 2019 17:05:17 -0700 (PDT)
Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com
[10.5.11.11])
(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))
(No client certificate requested)
by mx1.redhat.com (Postfix) with ESMTPS id 9523F20264;
Mon, 15 Jul 2019 00:05:15 +0000 (UTC)
Received: from colo-mx.corp.redhat.com
(colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21])
by smtp.corp.redhat.com (Postfix) with ESMTPS id 6CD866012E;
Mon, 15 Jul 2019 00:05:15 +0000 (UTC)
Received: from lists01.pubmisc.prod.ext.phx2.redhat.com
(lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33])
by colo-mx.corp.redhat.com (Postfix) with ESMTP id 322B08E1F;
Mon, 15 Jul 2019 00:05:15 +0000 (UTC)
Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com
[10.5.11.12])
by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP
id x6F04JhP030319 for ;
Sun, 14 Jul 2019 20:04:19 -0400
Received: by smtp.corp.redhat.com (Postfix)
id 2723660C44; Mon, 15 Jul 2019 00:04:19 +0000 (UTC)
Received: from worklaptop.redhat.com (ovpn-121-2.rdu2.redhat.com
[10.10.121.2])
by smtp.corp.redhat.com (Postfix) with ESMTP id 9FC1B60BFB;
Mon, 15 Jul 2019 00:04:18 +0000 (UTC)
From: Cole Robinson
To: libvirt-list@redhat.com
Date: Sun, 14 Jul 2019 20:04:00 -0400
Message-Id:
In-Reply-To:
References:
MIME-Version: 1.0
X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12
X-loop: libvir-list@redhat.com
Subject: [libvirt] [PATCH 4/5] network: wire up dnsmasq option xmlns
X-BeenThere: libvir-list@redhat.com
X-Mailman-Version: 2.1.12
Precedence: junk
List-Id: Development discussions about the libvirt library & tools
List-Unsubscribe: ,
List-Archive:
List-Post:
List-Help:
List-Subscribe: ,
Content-Transfer-Encoding: quoted-printable
Sender: libvir-list-bounces@redhat.com
Errors-To: libvir-list-bounces@redhat.com
X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11
X-Greylist: Sender IP whitelisted,
not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]);
Mon, 15 Jul 2019 00:05:16 +0000 (UTC)
Content-Type: text/plain; charset="utf-8"
This maps to XML like:
...
To dnsmasq config options
...
foo=3Dbar
cname=3D*.foo.example.com,master.example.com
Signed-off-by: Cole Robinson
Reviewed-by: Laine Stump
---
docs/schemas/network.rng | 11 ++
src/network/bridge_driver.c | 130 +++++++++++++++++-
src/network/bridge_driver.h | 12 ++
tests/Makefile.am | 14 +-
.../networkxml2confdata/dnsmasq-options.conf | 18 +++
tests/networkxml2confdata/dnsmasq-options.xml | 15 ++
tests/networkxml2conftest.c | 8 +-
tests/networkxml2xmlin/dnsmasq-options.xml | 15 ++
tests/networkxml2xmlout/dnsmasq-options.xml | 17 +++
tests/networkxml2xmltest.c | 11 +-
10 files changed, 239 insertions(+), 12 deletions(-)
create mode 100644 tests/networkxml2confdata/dnsmasq-options.conf
create mode 100644 tests/networkxml2confdata/dnsmasq-options.xml
create mode 100644 tests/networkxml2xmlin/dnsmasq-options.xml
create mode 100644 tests/networkxml2xmlout/dnsmasq-options.xml
diff --git a/docs/schemas/network.rng b/docs/schemas/network.rng
index 2a6e3358fd..56937d6a4e 100644
--- a/docs/schemas/network.rng
+++ b/docs/schemas/network.rng
@@ -405,6 +405,17 @@
[
]
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
index 1a4d6e7f7b..41fa89a4af 100644
--- a/src/network/bridge_driver.c
+++ b/src/network/bridge_driver.c
@@ -69,6 +69,8 @@
#include "virjson.h"
#include "virnetworkportdef.h"
=20
+#include
+
#define VIR_FROM_THIS VIR_FROM_NETWORK
#define MAX_BRIDGE_ID 256
=20
@@ -83,6 +85,8 @@
=20
VIR_LOG_INIT("network.bridge_driver");
=20
+#define DNSMASQ_NAMESPACE_HREF "http://libvirt.org/schemas/network/dnsmasq=
/1.0"
+
static virNetworkDriverStatePtr network_driver;
=20
=20
@@ -136,10 +140,126 @@ networkDnsmasqCapsRefresh(virNetworkDriverStatePtr d=
river)
return 0;
}
=20
-static virNetworkXMLOptionPtr
+
+static void
+networkDnsmasqDefNamespaceFree(void *nsdata)
+{
+ networkDnsmasqXmlNsDefPtr def =3D nsdata;
+ if (!def)
+ return;
+
+ virStringListFreeCount(def->options, def->noptions);
+
+ VIR_FREE(def);
+}
+
+
+static int
+networkDnsmasqDefNamespaceParseOptions(networkDnsmasqXmlNsDefPtr nsdef,
+ xmlXPathContextPtr ctxt)
+{
+ VIR_AUTOFREE(xmlNodePtr *) nodes =3D NULL;
+ ssize_t nnodes;
+ size_t i;
+
+ if ((nnodes =3D virXPathNodeSet("./dnsmasq:options/dnsmasq:option",
+ ctxt, &nodes)) < 0)
+ return -1;
+
+ if (nnodes =3D=3D 0)
+ return 0;
+
+ if (VIR_ALLOC_N(nsdef->options, nnodes) < 0)
+ return -1;
+
+ for (i =3D 0; i < nnodes; i++) {
+ if (!(nsdef->options[nsdef->noptions++] =3D virXMLPropString(nodes=
[i], "value"))) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("No dnsmasq options value specified"));
+ return -1;
+ }
+ }
+
+ return 0;
+}
+
+
+static int
+networkDnsmasqDefNamespaceParse(xmlXPathContextPtr ctxt,
+ void **data)
+{
+ networkDnsmasqXmlNsDefPtr nsdata =3D NULL;
+ int ret =3D -1;
+
+ if (xmlXPathRegisterNs(ctxt, BAD_CAST "dnsmasq",
+ BAD_CAST DNSMASQ_NAMESPACE_HREF) < 0) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("Failed to register xml namespace '%s'"),
+ DNSMASQ_NAMESPACE_HREF);
+ return -1;
+ }
+
+ if (VIR_ALLOC(nsdata) < 0)
+ return -1;
+
+ if (networkDnsmasqDefNamespaceParseOptions(nsdata, ctxt))
+ goto cleanup;
+
+ if (nsdata->noptions > 0)
+ VIR_STEAL_PTR(*data, nsdata);
+
+ ret =3D 0;
+
+ cleanup:
+ networkDnsmasqDefNamespaceFree(nsdata);
+ return ret;
+}
+
+
+static int
+networkDnsmasqDefNamespaceFormatXML(virBufferPtr buf,
+ void *nsdata)
+{
+ networkDnsmasqXmlNsDefPtr def =3D nsdata;
+ size_t i;
+
+ if (!def->noptions)
+ return 0;
+
+ virBufferAddLit(buf, "\n");
+ virBufferAdjustIndent(buf, 2);
+
+ for (i =3D 0; i < def->noptions; i++) {
+ virBufferEscapeString(buf, "\n",
+ def->options[i]);
+ }
+
+ virBufferAdjustIndent(buf, -2);
+ virBufferAddLit(buf, "\n");
+
+ return 0;
+}
+
+
+static const char *
+networkDnsmasqDefNamespaceHref(void)
+{
+ return "xmlns:dnsmasq=3D'" DNSMASQ_NAMESPACE_HREF "'";
+}
+
+
+virNetworkXMLNamespace networkDnsmasqXMLNamespace =3D {
+ .parse =3D networkDnsmasqDefNamespaceParse,
+ .free =3D networkDnsmasqDefNamespaceFree,
+ .format =3D networkDnsmasqDefNamespaceFormatXML,
+ .href =3D networkDnsmasqDefNamespaceHref,
+};
+
+
+virNetworkXMLOptionPtr
networkDnsmasqCreateXMLConf(void)
{
- return virNetworkXMLOptionNew(NULL);
+ return virNetworkXMLOptionNew(&networkDnsmasqXMLNamespace);
}
=20
=20
@@ -1480,6 +1600,12 @@ networkDnsmasqConfContents(virNetworkObjPtr obj,
}
}
=20
+ if (def->namespaceData) {
+ networkDnsmasqXmlNsDefPtr dnsmasqxmlns =3D def->namespaceData;
+ for (i =3D 0; i < dnsmasqxmlns->noptions; i++)
+ virBufferAsprintf(&configbuf, "%s\n", dnsmasqxmlns->options[i]=
);
+ }
+
if (!(*configstr =3D virBufferContentAndReset(&configbuf)))
goto cleanup;
=20
diff --git a/src/network/bridge_driver.h b/src/network/bridge_driver.h
index 7357c1754c..b095388a0b 100644
--- a/src/network/bridge_driver.h
+++ b/src/network/bridge_driver.h
@@ -27,6 +27,18 @@
#include "virdnsmasq.h"
#include "virnetworkobj.h"
=20
+extern virNetworkXMLNamespace networkDnsmasqXMLNamespace;
+
+typedef struct _networkDnsmasqXmlNsDef networkDnsmasqXmlNsDef;
+typedef networkDnsmasqXmlNsDef *networkDnsmasqXmlNsDefPtr;
+struct _networkDnsmasqXmlNsDef {
+ size_t noptions;
+ char **options;
+};
+
+virNetworkXMLOptionPtr
+networkDnsmasqCreateXMLConf(void);
+
int
networkRegister(void);
=20
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 107f2de859..65192bac8e 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -331,13 +331,13 @@ test_programs +=3D virjsontest
endif WITH_YAJL
=20
test_programs +=3D \
- networkxml2xmltest \
networkxml2xmlupdatetest \
virnetworkportxml2xmltest \
$(NULL)
=20
if WITH_NETWORK
test_programs +=3D \
+ networkxml2xmltest \
networkxml2conftest \
networkxml2firewalltest \
$(NULL)
@@ -806,11 +806,6 @@ EXTRA_DIST +=3D \
bhyveargv2xmlmock.c
endif ! WITH_BHYVE
=20
-networkxml2xmltest_SOURCES =3D \
- networkxml2xmltest.c \
- testutils.c testutils.h
-networkxml2xmltest_LDADD =3D $(LDADDS)
-
networkxml2xmlupdatetest_SOURCES =3D \
networkxml2xmlupdatetest.c \
testutils.c testutils.h
@@ -822,6 +817,11 @@ virnetworkportxml2xmltest_SOURCES =3D \
virnetworkportxml2xmltest_LDADD =3D $(LDADDS)
=20
if WITH_NETWORK
+networkxml2xmltest_SOURCES =3D \
+ networkxml2xmltest.c \
+ testutils.c testutils.h
+networkxml2xmltest_LDADD =3D ../src/libvirt_driver_network_impl.la $(LDADD=
S)
+
networkxml2conftest_SOURCES =3D \
networkxml2conftest.c \
testutils.c testutils.h
@@ -833,7 +833,7 @@ networkxml2firewalltest_SOURCES =3D \
networkxml2firewalltest_LDADD =3D ../src/libvirt_driver_network_impl.la $(=
LDADDS)
=20
else ! WITH_NETWORK
-EXTRA_DIST +=3D networkxml2conftest.c
+EXTRA_DIST +=3D networkxml2xmltest.c networkxml2conftest.c
endif ! WITH_NETWORK
=20
if WITH_STORAGE_SHEEPDOG
diff --git a/tests/networkxml2confdata/dnsmasq-options.conf b/tests/network=
xml2confdata/dnsmasq-options.conf
new file mode 100644
index 0000000000..867f355c79
--- /dev/null
+++ b/tests/networkxml2confdata/dnsmasq-options.conf
@@ -0,0 +1,18 @@
+##WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
+##OVERWRITTEN AND LOST. Changes to this configuration should be made usin=
g:
+## virsh net-edit default
+## or other application using the libvirt API.
+##
+## dnsmasq conf file created by libvirt
+strict-order
+except-interface=3Dlo
+bind-dynamic
+interface=3Dvirbr0
+dhcp-range=3D192.168.122.2,192.168.122.254,255.255.255.0
+dhcp-no-override
+dhcp-authoritative
+dhcp-lease-max=3D253
+dhcp-hostsfile=3D/var/lib/libvirt/dnsmasq/default.hostsfile
+addn-hosts=3D/var/lib/libvirt/dnsmasq/default.addnhosts
+foo=3Dbar
+cname=3D*.cloudapps.example.com,master.example.com
diff --git a/tests/networkxml2confdata/dnsmasq-options.xml b/tests/networkx=
ml2confdata/dnsmasq-options.xml
new file mode 100644
index 0000000000..35a87b8e3e
--- /dev/null
+++ b/tests/networkxml2confdata/dnsmasq-options.xml
@@ -0,0 +1,15 @@
+
+ default
+ 81ff0d90-c91e-6742-64da-4a736edb9a9b
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/networkxml2conftest.c b/tests/networkxml2conftest.c
index c445551099..dcb99aad6e 100644
--- a/tests/networkxml2conftest.c
+++ b/tests/networkxml2conftest.c
@@ -25,8 +25,12 @@ testCompareXMLToConfFiles(const char *inxml, const char =
*outconf, dnsmasqCapsPtr
virCommandPtr cmd =3D NULL;
char *pidfile =3D NULL;
dnsmasqContext *dctx =3D NULL;
+ virNetworkXMLOptionPtr xmlopt =3D NULL;
=20
- if (!(def =3D virNetworkDefParseFile(inxml, NULL)))
+ if (!(xmlopt =3D networkDnsmasqCreateXMLConf()))
+ goto fail;
+
+ if (!(def =3D virNetworkDefParseFile(inxml, xmlopt)))
goto fail;
=20
if (!(obj =3D virNetworkObjNew()))
@@ -63,6 +67,7 @@ testCompareXMLToConfFiles(const char *inxml, const char *=
outconf, dnsmasqCapsPtr
VIR_FREE(actual);
VIR_FREE(pidfile);
virCommandFree(cmd);
+ virObjectUnref(xmlopt);
virNetworkObjEndAPI(&obj);
dnsmasqContextFree(dctx);
return ret;
@@ -141,6 +146,7 @@ mymain(void)
DO_TEST("dhcp6-nat-network", dhcpv6);
DO_TEST("dhcp6host-routed-network", dhcpv6);
DO_TEST("ptr-domains-auto", dhcpv6);
+ DO_TEST("dnsmasq-options", dhcpv6);
=20
virObjectUnref(dhcpv6);
virObjectUnref(full);
diff --git a/tests/networkxml2xmlin/dnsmasq-options.xml b/tests/networkxml2=
xmlin/dnsmasq-options.xml
new file mode 100644
index 0000000000..35a87b8e3e
--- /dev/null
+++ b/tests/networkxml2xmlin/dnsmasq-options.xml
@@ -0,0 +1,15 @@
+
+ default
+ 81ff0d90-c91e-6742-64da-4a736edb9a9b
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/networkxml2xmlout/dnsmasq-options.xml b/tests/networkxml=
2xmlout/dnsmasq-options.xml
new file mode 100644
index 0000000000..856a018f25
--- /dev/null
+++ b/tests/networkxml2xmlout/dnsmasq-options.xml
@@ -0,0 +1,17 @@
+
+ default
+ 81ff0d90-c91e-6742-64da-4a736edb9a9b
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/networkxml2xmltest.c b/tests/networkxml2xmltest.c
index cd76ce5375..3d90023445 100644
--- a/tests/networkxml2xmltest.c
+++ b/tests/networkxml2xmltest.c
@@ -10,6 +10,7 @@
#include "network_conf.h"
#include "testutilsqemu.h"
#include "virstring.h"
+#include "network/bridge_driver.h"
=20
#define VIR_FROM_THIS VIR_FROM_NONE
=20
@@ -29,15 +30,19 @@ testCompareXMLToXMLFiles(const char *inxml, const char =
*outxml,
int ret;
testCompareNetXML2XMLResult result =3D TEST_COMPARE_NET_XML2XML_RESULT=
_SUCCESS;
virNetworkDefPtr dev =3D NULL;
+ virNetworkXMLOptionPtr xmlopt =3D NULL;
=20
- if (!(dev =3D virNetworkDefParseFile(inxml, NULL))) {
+ if (!(xmlopt =3D networkDnsmasqCreateXMLConf()))
+ goto cleanup;
+
+ if (!(dev =3D virNetworkDefParseFile(inxml, xmlopt))) {
result =3D TEST_COMPARE_NET_XML2XML_RESULT_FAIL_PARSE;
goto cleanup;
}
if (expectResult =3D=3D TEST_COMPARE_NET_XML2XML_RESULT_FAIL_PARSE)
goto cleanup;
=20
- if (!(actual =3D virNetworkDefFormat(dev, NULL, flags))) {
+ if (!(actual =3D virNetworkDefFormat(dev, xmlopt, flags))) {
result =3D TEST_COMPARE_NET_XML2XML_RESULT_FAIL_FORMAT;
goto cleanup;
}
@@ -67,6 +72,7 @@ testCompareXMLToXMLFiles(const char *inxml, const char *o=
utxml,
=20
VIR_FREE(actual);
virNetworkDefFree(dev);
+ virObjectUnref(xmlopt);
return ret;
}
=20
@@ -158,6 +164,7 @@ mymain(void)
DO_TEST_PARSE_ERROR("passthrough-duplicate");
DO_TEST("metadata");
DO_TEST("set-mtu");
+ DO_TEST("dnsmasq-options");
=20
return ret =3D=3D 0 ? EXIT_SUCCESS : EXIT_FAILURE;
}
--=20
2.21.0
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
From nobody Mon Apr 29 03:40:31 2024
Delivered-To: importer@patchew.org
Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28
as permitted sender) client-ip=209.132.183.28;
envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com;
Authentication-Results: mx.zohomail.com;
spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as
permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com;
dmarc=pass(p=none dis=none) header.from=redhat.com
ARC-Seal: i=1; a=rsa-sha256; t=1563149070; cv=none;
d=zoho.com; s=zohoarc;
b=XCQbmnCUIsCTY4vtd5I01ElX2YB65vGMOJHz1JSB3UFQuAi3X1+Q1BXvnaxODgH/IfrBkoGMcSN7l6071djKQ++SZwF5ZLEyZdOcrUKQmZnGBVe9NLhYCEUJu1qV7gBT/5VrpfSeAZ8nD6n4iILqAGMzxwEAE2Pe/IXrmBmDmRM=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com;
s=zohoarc;
t=1563149070;
h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results;
bh=QfWnTQXG3Se5gPdoWlfBS6JB37DsNL0iwwcCG5l8yrs=;
b=iJpqGMS7pTGBxewlST4r0VfBB2vOPl1FgDCvQbrkU0fLAXSllqboa0EBNbBcW6AWTIQimaQaoNf7WpC6oLXYH2XxM8WdPwMScdpgeLBPHFKhjRF/yA+ED046qWiUXhc8nDLFKdFGz1RVfJl201ctfTusvRFDFyTuDNNWkL6yuzE=
ARC-Authentication-Results: i=1; mx.zoho.com;
spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as
permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com;
dmarc=pass header.from= (p=none dis=none)
header.from=
Return-Path:
Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by
mx.zohomail.com
with SMTPS id 1563149070239331.40146582922614;
Sun, 14 Jul 2019 17:04:30 -0700 (PDT)
Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com
[10.5.11.14])
(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))
(No client certificate requested)
by mx1.redhat.com (Postfix) with ESMTPS id 4DEF236893;
Mon, 15 Jul 2019 00:04:28 +0000 (UTC)
Received: from colo-mx.corp.redhat.com
(colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20])
by smtp.corp.redhat.com (Postfix) with ESMTPS id 1FA4C5D9DE;
Mon, 15 Jul 2019 00:04:28 +0000 (UTC)
Received: from lists01.pubmisc.prod.ext.phx2.redhat.com
(lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33])
by colo-mx.corp.redhat.com (Postfix) with ESMTP id D228818184B6;
Mon, 15 Jul 2019 00:04:27 +0000 (UTC)
Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com
[10.5.11.12])
by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP
id x6F04JFd030327 for ;
Sun, 14 Jul 2019 20:04:19 -0400
Received: by smtp.corp.redhat.com (Postfix)
id B965960C44; Mon, 15 Jul 2019 00:04:19 +0000 (UTC)
Received: from worklaptop.redhat.com (ovpn-121-2.rdu2.redhat.com
[10.10.121.2])
by smtp.corp.redhat.com (Postfix) with ESMTP id 5445560BFB;
Mon, 15 Jul 2019 00:04:19 +0000 (UTC)
From: Cole Robinson
To: libvirt-list@redhat.com
Date: Sun, 14 Jul 2019 20:04:01 -0400
Message-Id:
In-Reply-To:
References:
MIME-Version: 1.0
X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12
X-loop: libvir-list@redhat.com
Subject: [libvirt] [PATCH 5/5] docs: formatnetwork: Document xmlns:dnsmasq
X-BeenThere: libvir-list@redhat.com
X-Mailman-Version: 2.1.12
Precedence: junk
List-Id: Development discussions about the libvirt library & tools
List-Unsubscribe: ,
List-Archive:
List-Post:
List-Help:
List-Subscribe: ,
Content-Transfer-Encoding: quoted-printable
Sender: libvir-list-bounces@redhat.com
Errors-To: libvir-list-bounces@redhat.com
X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14
X-Greylist: Sender IP whitelisted,
not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]);
Mon, 15 Jul 2019 00:04:28 +0000 (UTC)
Content-Type: text/plain; charset="utf-8"
Signed-off-by: Cole Robinson
Reviewed-by: Laine Stump
---
docs/formatnetwork.html.in | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/docs/formatnetwork.html.in b/docs/formatnetwork.html.in
index 509cca9e8b..2448fb09e7 100644
--- a/docs/formatnetwork.html.in
+++ b/docs/formatnetwork.html.in
@@ -1096,6 +1096,28 @@
=20
+
+
+
+ A special XML namespace is available for passing options directly to=
the
+ underlying dnsmasq configuration file. Usage of XML namespaces comes=
with no
+ support guarantees, so use at your own risk.
+
+
+
+ This example XML will pass the option strings foo=3Dbar
=
and
+ cname=3D*.foo.example.com,master.example.com
directly t=
o the
+ underlying dnsmasq instance.
+
+<network xmlns:dnsmasq=3D'http://libvirt.org/schemas/network/dnsmasq/1.=
0'>
+ ...
+ <dnsmasq:options>
+ <dnsmasq:option value=3D"foo=3Dbar"/>
+ <dnsmasq:option value=3D"cname=3D*.foo.example.com,master.example.c=
om"/>
+ </dnsmasq:options>
+</network>
+
+
=20
--=20
2.21.0
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list