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 +

Network namespaces

+ +

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

+

Example configuration

=20

NAT based network

--=20 2.21.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list