From nobody Mon Feb 9 07:20:37 2026 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 Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1501081605855594.6178562616495; Wed, 26 Jul 2017 08:06:45 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 984C9C008282; Wed, 26 Jul 2017 15:06:40 +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 37024707BA; Wed, 26 Jul 2017 15:06:31 +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 8356F180BA8B; Wed, 26 Jul 2017 15:06:03 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v6QF5rhL028333 for ; Wed, 26 Jul 2017 11:05:54 -0400 Received: by smtp.corp.redhat.com (Postfix) id D887E65EB6; Wed, 26 Jul 2017 15:05:53 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-117-46.phx2.redhat.com [10.3.117.46]) by smtp.corp.redhat.com (Postfix) with ESMTP id C29C568D84 for ; Wed, 26 Jul 2017 15:05:52 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 984C9C008282 Authentication-Results: ext-mx08.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx08.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=libvir-list-bounces@redhat.com From: John Ferlan To: libvir-list@redhat.com Date: Wed, 26 Jul 2017 11:05:27 -0400 Message-Id: <20170726150537.4619-11-jferlan@redhat.com> In-Reply-To: <20170726150537.4619-1-jferlan@redhat.com> References: <20170726150537.4619-1-jferlan@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 10/20] network: Add virNetworkObj Get/Set API's for @def and @newDef 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: , MIME-Version: 1.0 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.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Wed, 26 Jul 2017 15:06:41 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" In preparation for making the object private, create a couple of API's to get the obj->def & obj->newDef and set the obj->def. While altering networkxml2conftest.c to use the virNetworkObjSetDef API, fix the name of the variable from @dev to @def Signed-off-by: John Ferlan --- src/conf/virnetworkobj.c | 22 ++ src/conf/virnetworkobj.h | 10 + src/libvirt_private.syms | 3 + src/network/bridge_driver.c | 505 ++++++++++++++++++++++++----------------= ---- src/test/test_driver.c | 58 +++-- tests/networkxml2conftest.c | 9 +- 6 files changed, 349 insertions(+), 258 deletions(-) diff --git a/src/conf/virnetworkobj.c b/src/conf/virnetworkobj.c index ce571bc..631f8cd 100644 --- a/src/conf/virnetworkobj.c +++ b/src/conf/virnetworkobj.c @@ -107,6 +107,28 @@ virNetworkObjEndAPI(virNetworkObjPtr *net) } =20 =20 +virNetworkDefPtr +virNetworkObjGetDef(virNetworkObjPtr obj) +{ + return obj->def; +} + + +void +virNetworkObjSetDef(virNetworkObjPtr obj, + virNetworkDefPtr def) +{ + obj->def =3D def; +} + + +virNetworkDefPtr +virNetworkObjGetNewDef(virNetworkObjPtr obj) +{ + return obj->newDef; +} + + pid_t virNetworkObjGetDnsmasqPid(virNetworkObjPtr obj) { diff --git a/src/conf/virnetworkobj.h b/src/conf/virnetworkobj.h index 12d0a86..90ce0ca 100644 --- a/src/conf/virnetworkobj.h +++ b/src/conf/virnetworkobj.h @@ -50,6 +50,16 @@ struct _virNetworkObj { virNetworkObjPtr virNetworkObjNew(void); =20 +virNetworkDefPtr +virNetworkObjGetDef(virNetworkObjPtr obj); + +void +virNetworkObjSetDef(virNetworkObjPtr obj, + virNetworkDefPtr def); + +virNetworkDefPtr +virNetworkObjGetNewDef(virNetworkObjPtr obj); + virMacMapPtr virNetworkObjGetMacMap(virNetworkObjPtr obj); =20 diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 35dfe5e..84e3eb7 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -945,9 +945,11 @@ virNetworkObjFindByNameLocked; virNetworkObjFindByUUID; virNetworkObjFindByUUIDLocked; virNetworkObjGetClassIdMap; +virNetworkObjGetDef; virNetworkObjGetDnsmasqPid; virNetworkObjGetFloorSum; virNetworkObjGetMacMap; +virNetworkObjGetNewDef; virNetworkObjGetPersistentDef; virNetworkObjGetRadvdPid; virNetworkObjListExport; @@ -964,6 +966,7 @@ virNetworkObjNew; virNetworkObjRemoveInactive; virNetworkObjReplacePersistentDef; virNetworkObjSaveStatus; +virNetworkObjSetDef; virNetworkObjSetDefTransient; virNetworkObjSetDnsmasqPid; virNetworkObjSetFloorSum; diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c index 602492e..b4fbfc5 100644 --- a/src/network/bridge_driver.c +++ b/src/network/bridge_driver.c @@ -213,6 +213,7 @@ networkRunHook(virNetworkObjPtr obj, int op, int sub_op) { + virNetworkDefPtr def =3D virNetworkObjGetDef(obj); virBuffer buf =3D VIR_BUFFER_INITIALIZER; char *xml =3D NULL, *net_xml =3D NULL, *dom_xml =3D NULL; int hookret; @@ -229,7 +230,7 @@ networkRunHook(virNetworkObjPtr obj, virBufferAdjustIndent(&buf, 2); if (iface && virDomainNetDefFormat(&buf, iface, NULL, 0) < 0) goto cleanup; - if (virNetworkDefFormatBuf(&buf, obj->def, 0) < 0) + if (virNetworkDefFormatBuf(&buf, def, 0) < 0) goto cleanup; if (dom && virDomainDefFormatInternal(dom, NULL, 0, &buf) < 0) goto cleanup; @@ -241,7 +242,7 @@ networkRunHook(virNetworkObjPtr obj, goto cleanup; =20 xml =3D virBufferContentAndReset(&buf); - hookret =3D virHookCall(VIR_HOOK_DRIVER_NETWORK, obj->def->name, + hookret =3D virHookCall(VIR_HOOK_DRIVER_NETWORK, def->name, op, sub_op, NULL, xml, NULL); =20 /* @@ -429,6 +430,7 @@ static int networkUpdateState(virNetworkObjPtr obj, void *opaque) { + virNetworkDefPtr def; virNetworkDriverStatePtr driver =3D opaque; dnsmasqCapsPtr dnsmasq_caps =3D networkGetDnsmasqCaps(driver); virMacMapPtr macmap; @@ -440,18 +442,19 @@ networkUpdateState(virNetworkObjPtr obj, ret =3D 0; goto cleanup; } + def =3D virNetworkObjGetDef(obj); =20 - switch (obj->def->forward.type) { + switch (def->forward.type) { case VIR_NETWORK_FORWARD_NONE: case VIR_NETWORK_FORWARD_NAT: case VIR_NETWORK_FORWARD_ROUTE: case VIR_NETWORK_FORWARD_OPEN: /* If bridge doesn't exist, then mark it inactive */ - if (!(obj->def->bridge && virNetDevExists(obj->def->bridge) =3D=3D= 1)) + if (!(def->bridge && virNetDevExists(def->bridge) =3D=3D 1)) obj->active =3D 0; =20 if (!(macMapFile =3D virMacMapFileName(driver->dnsmasqStateDir, - obj->def->bridge))) + def->bridge))) goto cleanup; =20 if (!(macmap =3D virMacMapNew(macMapFile))) @@ -462,8 +465,8 @@ networkUpdateState(virNetworkObjPtr obj, break; =20 case VIR_NETWORK_FORWARD_BRIDGE: - if (obj->def->bridge) { - if (virNetDevExists(obj->def->bridge) !=3D 1) + if (def->bridge) { + if (virNetDevExists(def->bridge) !=3D 1) obj->active =3D 0; break; } @@ -483,18 +486,18 @@ networkUpdateState(virNetworkObjPtr obj, } =20 /* Try and read dnsmasq/radvd pids of active networks */ - if (obj->active && obj->def->ips && (obj->def->nips > 0)) { + if (obj->active && def->ips && (def->nips > 0)) { pid_t radvdPid; pid_t dnsmasqPid; char *radvdpidbase; =20 ignore_value(virPidFileReadIfAlive(driver->pidDir, - obj->def->name, + def->name, &dnsmasqPid, dnsmasqCapsGetBinaryPath(dnsmas= q_caps))); virNetworkObjSetDnsmasqPid(obj, dnsmasqPid); =20 - radvdpidbase =3D networkRadvdPidfileBasename(obj->def->name); + radvdpidbase =3D networkRadvdPidfileBasename(def->name); if (!radvdpidbase) goto cleanup; =20 @@ -1016,11 +1019,12 @@ networkDnsmasqConfContents(virNetworkObjPtr obj, dnsmasqContext *dctx, dnsmasqCapsPtr caps ATTRIBUTE_UNUSED) { + virNetworkDefPtr def =3D virNetworkObjGetDef(obj); virBuffer configbuf =3D VIR_BUFFER_INITIALIZER; int r, ret =3D -1; int nbleases =3D 0; size_t i; - virNetworkDNSDefPtr dns =3D &obj->def->dns; + virNetworkDNSDefPtr dns =3D &def->dns; bool wantDNS =3D dns->enable !=3D VIR_TRISTATE_BOOL_NO; virNetworkIPDefPtr tmpipdef, ipdef, ipv4def, ipv6def; bool ipv6SLAAC; @@ -1054,7 +1058,7 @@ networkDnsmasqConfContents(virNetworkObjPtr obj, "## or other application using the libvirt API.\n" "##\n## dnsmasq conf file created by libvirt\n" "strict-order\n", - obj->def->name); + def->name); =20 /* if dns is disabled, set its listening port to 0, which * tells dnsmasq to not listen @@ -1062,7 +1066,7 @@ networkDnsmasqConfContents(virNetworkObjPtr obj, if (!wantDNS) virBufferAddLit(&configbuf, "port=3D0\n"); =20 - if (wantDNS && obj->def->dns.forwarders) { + if (wantDNS && def->dns.forwarders) { /* addNoResolv should be set to true if there are any entries * that specify an IP address for requests, but no domain * qualifier (implying that all requests otherwise "unclaimed" @@ -1072,8 +1076,8 @@ networkDnsmasqConfContents(virNetworkObjPtr obj, */ bool addNoResolv =3D false; =20 - for (i =3D 0; i < obj->def->dns.nfwds; i++) { - virNetworkDNSForwarderPtr fwd =3D &obj->def->dns.forwarders[i]; + for (i =3D 0; i < def->dns.nfwds; i++) { + virNetworkDNSForwarderPtr fwd =3D &def->dns.forwarders[i]; =20 virBufferAddLit(&configbuf, "server=3D"); if (fwd->domain) @@ -1096,23 +1100,23 @@ networkDnsmasqConfContents(virNetworkObjPtr obj, virBufferAddLit(&configbuf, "no-resolv\n"); } =20 - if (obj->def->domain) { - if (obj->def->domainLocalOnly =3D=3D VIR_TRISTATE_BOOL_YES) { + if (def->domain) { + if (def->domainLocalOnly =3D=3D VIR_TRISTATE_BOOL_YES) { virBufferAsprintf(&configbuf, "local=3D/%s/\n", - obj->def->domain); + def->domain); } virBufferAsprintf(&configbuf, "domain=3D%s\n" "expand-hosts\n", - obj->def->domain); + def->domain); } =20 if (wantDNS && - networkDnsmasqConfLocalPTRs(&configbuf, obj->def) < 0) + networkDnsmasqConfLocalPTRs(&configbuf, def) < 0) goto cleanup; =20 - if (wantDNS && obj->def->dns.forwardPlainNames =3D=3D VIR_TRISTATE_BOO= L_NO) { + if (wantDNS && def->dns.forwardPlainNames =3D=3D VIR_TRISTATE_BOOL_NO)= { virBufferAddLit(&configbuf, "domain-needed\n"); /* need to specify local=3D// whether or not a domain is * specified, unless the config says we should forward "plain" @@ -1143,19 +1147,19 @@ networkDnsmasqConfContents(virNetworkObjPtr obj, virBufferAsprintf(&configbuf, "bind-dynamic\n" "interface=3D%s\n", - obj->def->bridge); + def->bridge); } else { virBufferAddLit(&configbuf, "bind-interfaces\n"); /* * --interface does not actually work with dnsmasq < 2.47, * due to DAD for ipv6 addresses on the interface. * - * virCommandAddArgList(cmd, "--interface", obj->def->bridge, NULL= ); + * virCommandAddArgList(cmd, "--interface", def->bridge, NULL); * * So listen on all defined IPv[46] addresses */ for (i =3D 0; - (tmpipdef =3D virNetworkDefGetIPByIndex(obj->def, AF_UNSPEC, = i)); + (tmpipdef =3D virNetworkDefGetIPByIndex(def, AF_UNSPEC, i)); i++) { char *ipaddr =3D virSocketAddrFormat(&tmpipdef->address); =20 @@ -1201,7 +1205,7 @@ networkDnsmasqConfContents(virNetworkObjPtr obj, * via the sender's link-local address. The only thing we can do * is set the lifetime of this route to 0, i.e. disable it. */ - if (obj->def->forward.type =3D=3D VIR_NETWORK_FORWARD_NONE) { + if (def->forward.type =3D=3D VIR_NETWORK_FORWARD_NONE) { virBufferAddLit(&configbuf, "dhcp-option=3D3\n" "no-resolv\n"); if (dnsmasqCapsGet(caps, DNSMASQ_CAPS_RA_PARAM)) { @@ -1225,14 +1229,14 @@ networkDnsmasqConfContents(virNetworkObjPtr obj, virReportError(VIR_ERR_INTERNAL_ERROR, _("Missing required 'service' " "attribute in SRV record of network '%s'"= ), - obj->def->name); + def->name); goto cleanup; } if (!dns->srvs[i].protocol) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Missing required 'service' " "attribute in SRV record of network '%s'"= ), - obj->def->name); + def->name); goto cleanup; } /* RFC2782 requires that service and protocol be preceded by @@ -1274,7 +1278,7 @@ networkDnsmasqConfContents(virNetworkObjPtr obj, =20 /* Find the first dhcp for both IPv4 and IPv6 */ for (i =3D 0, ipv4def =3D NULL, ipv6def =3D NULL, ipv6SLAAC =3D false; - (ipdef =3D virNetworkDefGetIPByIndex(obj->def, AF_UNSPEC, i)); + (ipdef =3D virNetworkDefGetIPByIndex(def, AF_UNSPEC, i)); i++) { if (VIR_SOCKET_ADDR_IS_FAMILY(&ipdef->address, AF_INET)) { if (ipdef->nranges || ipdef->nhosts) { @@ -1336,7 +1340,7 @@ networkDnsmasqConfContents(virNetworkObjPtr obj, if (prefix < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("bridge '%s' has an invalid prefix"), - obj->def->bridge); + def->bridge); goto cleanup; } for (r =3D 0; r < ipdef->nranges; r++) { @@ -1442,7 +1446,7 @@ networkDnsmasqConfContents(virNetworkObjPtr obj, virBufferAddLit(&configbuf, "enable-ra\n"); } else { for (i =3D 0; - (ipdef =3D virNetworkDefGetIPByIndex(obj->def, AF_INET6, = i)); + (ipdef =3D virNetworkDefGetIPByIndex(def, AF_INET6, i)); i++) { if (!(ipdef->nranges || ipdef->nhosts)) { char *bridgeaddr =3D virSocketAddrFormat(&ipdef->addre= ss); @@ -1477,6 +1481,7 @@ networkBuildDhcpDaemonCommandLine(virNetworkDriverSta= tePtr driver, char *pidfile, dnsmasqContext *dctx) { + virNetworkDefPtr def =3D virNetworkObjGetDef(obj); dnsmasqCapsPtr dnsmasq_caps =3D networkGetDnsmasqCaps(driver); virCommandPtr cmd =3D NULL; int ret =3D -1; @@ -1493,7 +1498,7 @@ networkBuildDhcpDaemonCommandLine(virNetworkDriverSta= tePtr driver, goto cleanup; =20 /* construct the filename */ - if (!(configfile =3D networkDnsmasqConfigFileName(driver, obj->def->na= me))) + if (!(configfile =3D networkDnsmasqConfigFileName(driver, def->name))) goto cleanup; =20 /* Write the file */ @@ -1515,7 +1520,7 @@ networkBuildDhcpDaemonCommandLine(virNetworkDriverSta= tePtr driver, /* Libvirt gains full control of leases database */ virCommandAddArgFormat(cmd, "--leasefile-ro"); virCommandAddArgFormat(cmd, "--dhcp-script=3D%s", leaseshelper_path); - virCommandAddEnvPair(cmd, "VIR_BRIDGE_NAME", obj->def->bridge); + virCommandAddEnvPair(cmd, "VIR_BRIDGE_NAME", def->bridge); =20 *cmdout =3D cmd; ret =3D 0; @@ -1532,6 +1537,7 @@ static int networkStartDhcpDaemon(virNetworkDriverStatePtr driver, virNetworkObjPtr obj) { + virNetworkDefPtr def =3D virNetworkObjGetDef(obj); virNetworkIPDefPtr ipdef; size_t i; bool needDnsmasq =3D false; @@ -1543,7 +1549,7 @@ networkStartDhcpDaemon(virNetworkDriverStatePtr drive= r, =20 /* see if there are any IP addresses that need a dhcp server */ i =3D 0; - while ((ipdef =3D virNetworkDefGetIPByIndex(obj->def, AF_UNSPEC, i))) { + while ((ipdef =3D virNetworkDefGetIPByIndex(def, AF_UNSPEC, i))) { i++; if (ipdef->nranges || ipdef->nhosts) needDnsmasq =3D true; @@ -1555,7 +1561,7 @@ networkStartDhcpDaemon(virNetworkDriverStatePtr drive= r, goto cleanup; } =20 - if (!needDnsmasq && obj->def->dns.enable =3D=3D VIR_TRISTATE_BOOL_NO) { + if (!needDnsmasq && def->dns.enable =3D=3D VIR_TRISTATE_BOOL_NO) { /* no DHCP services needed, and user disabled DNS service */ ret =3D 0; goto cleanup; @@ -1568,8 +1574,7 @@ networkStartDhcpDaemon(virNetworkDriverStatePtr drive= r, goto cleanup; } =20 - if (!(pidfile =3D virPidFileBuildPath(driver->pidDir, - obj->def->name))) + if (!(pidfile =3D virPidFileBuildPath(driver->pidDir, def->name))) goto cleanup; =20 if (virFileMakePath(driver->dnsmasqStateDir) < 0) { @@ -1579,7 +1584,7 @@ networkStartDhcpDaemon(virNetworkDriverStatePtr drive= r, goto cleanup; } =20 - dctx =3D dnsmasqContextNew(obj->def->name, driver->dnsmasqStateDir); + dctx =3D dnsmasqContextNew(def->name, driver->dnsmasqStateDir); if (dctx =3D=3D NULL) goto cleanup; =20 @@ -1606,7 +1611,7 @@ networkStartDhcpDaemon(virNetworkDriverStatePtr drive= r, * pid */ =20 - ret =3D virPidFileRead(driver->pidDir, obj->def->name, &dnsmasqPid); + ret =3D virPidFileRead(driver->pidDir, def->name, &dnsmasqPid); if (ret < 0) goto cleanup; virNetworkObjSetDnsmasqPid(obj, dnsmasqPid); @@ -1631,6 +1636,7 @@ static int networkRefreshDhcpDaemon(virNetworkDriverStatePtr driver, virNetworkObjPtr obj) { + virNetworkDefPtr def =3D virNetworkObjGetDef(obj); int ret =3D -1; size_t i; pid_t dnsmasqPid; @@ -1638,7 +1644,7 @@ networkRefreshDhcpDaemon(virNetworkDriverStatePtr dri= ver, dnsmasqContext *dctx =3D NULL; =20 /* if no IP addresses specified, nothing to do */ - if (!virNetworkDefGetIPByIndex(obj->def, AF_UNSPEC, 0)) + if (!virNetworkDefGetIPByIndex(def, AF_UNSPEC, 0)) return 0; =20 /* if there's no running dnsmasq, just start it */ @@ -1646,8 +1652,8 @@ networkRefreshDhcpDaemon(virNetworkDriverStatePtr dri= ver, if (dnsmasqPid <=3D 0 || (kill(dnsmasqPid, 0) < 0)) return networkStartDhcpDaemon(driver, obj); =20 - VIR_INFO("Refreshing dnsmasq for network %s", obj->def->bridge); - if (!(dctx =3D dnsmasqContextNew(obj->def->name, + VIR_INFO("Refreshing dnsmasq for network %s", def->bridge); + if (!(dctx =3D dnsmasqContextNew(def->name, driver->dnsmasqStateDir))) { goto cleanup; } @@ -1658,7 +1664,7 @@ networkRefreshDhcpDaemon(virNetworkDriverStatePtr dri= ver, */ ipv4def =3D NULL; for (i =3D 0; - (ipdef =3D virNetworkDefGetIPByIndex(obj->def, AF_INET, i)); + (ipdef =3D virNetworkDefGetIPByIndex(def, AF_INET, i)); i++) { if (!ipv4def && (ipdef->nranges || ipdef->nhosts)) ipv4def =3D ipdef; @@ -1666,7 +1672,7 @@ networkRefreshDhcpDaemon(virNetworkDriverStatePtr dri= ver, =20 ipv6def =3D NULL; for (i =3D 0; - (ipdef =3D virNetworkDefGetIPByIndex(obj->def, AF_INET6, i)); + (ipdef =3D virNetworkDefGetIPByIndex(def, AF_INET6, i)); i++) { if (!ipv6def && (ipdef->nranges || ipdef->nhosts)) ipv6def =3D ipdef; @@ -1678,7 +1684,7 @@ networkRefreshDhcpDaemon(virNetworkDriverStatePtr dri= ver, if (ipv6def && (networkBuildDnsmasqDhcpHostsList(dctx, ipv6def) < 0)) goto cleanup; =20 - if (networkBuildDnsmasqHostsList(dctx, &obj->def->dns) < 0) + if (networkBuildDnsmasqHostsList(dctx, &def->dns) < 0) goto cleanup; =20 if ((ret =3D dnsmasqSave(dctx)) < 0) @@ -1703,11 +1709,12 @@ static int networkRestartDhcpDaemon(virNetworkDriverStatePtr driver, virNetworkObjPtr obj) { + virNetworkDefPtr def =3D virNetworkObjGetDef(obj); pid_t dnsmasqPid =3D virNetworkObjGetDnsmasqPid(obj); =20 /* if there is a running dnsmasq, kill it */ if (dnsmasqPid > 0) { - networkKillDaemon(dnsmasqPid, "dnsmasq", obj->def->name); + networkKillDaemon(dnsmasqPid, "dnsmasq", def->name); virNetworkObjSetDnsmasqPid(obj, -1); } /* now start dnsmasq if it should be started */ @@ -1725,6 +1732,7 @@ static int networkRadvdConfContents(virNetworkObjPtr obj, char **configstr) { + virNetworkDefPtr def =3D virNetworkObjGetDef(obj); virBuffer configbuf =3D VIR_BUFFER_INITIALIZER; int ret =3D -1; size_t i; @@ -1734,9 +1742,7 @@ networkRadvdConfContents(virNetworkObjPtr obj, *configstr =3D NULL; =20 /* Check if DHCPv6 is needed */ - for (i =3D 0; - (ipdef =3D virNetworkDefGetIPByIndex(obj->def, AF_INET6, i)); - i++) { + for (i =3D 0; (ipdef =3D virNetworkDefGetIPByIndex(def, AF_INET6, i));= i++) { v6present =3D true; if (ipdef->nranges || ipdef->nhosts) { dhcp6 =3D true; @@ -1759,14 +1765,12 @@ networkRadvdConfContents(virNetworkObjPtr obj, " IgnoreIfMissing on;\n" " AdvManagedFlag %s;\n" "%s", - obj->def->bridge, + def->bridge, dhcp6 ? "on" : "off", dhcp6 ? "\n" : radvd1); =20 /* add a section for each IPv6 address in the config */ - for (i =3D 0; - (ipdef =3D virNetworkDefGetIPByIndex(obj->def, AF_INET6, i)); - i++) { + for (i =3D 0; (ipdef =3D virNetworkDefGetIPByIndex(def, AF_INET6, i));= i++) { int prefix; char *netaddr; =20 @@ -1774,7 +1778,7 @@ networkRadvdConfContents(virNetworkObjPtr obj, if (prefix < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("bridge '%s' has an invalid prefix"), - obj->def->bridge); + def->bridge); goto cleanup; } if (!(netaddr =3D virSocketAddrFormat(&ipdef->address))) @@ -1807,6 +1811,7 @@ networkRadvdConfWrite(virNetworkDriverStatePtr driver, virNetworkObjPtr obj, char **configFile) { + virNetworkDefPtr def =3D virNetworkObjGetDef(obj); int ret =3D -1; char *configStr =3D NULL; char *myConfigFile =3D NULL; @@ -1825,7 +1830,7 @@ networkRadvdConfWrite(virNetworkDriverStatePtr driver, } =20 /* construct the filename */ - if (!(*configFile =3D networkRadvdConfigFileName(driver, obj->def->nam= e))) + if (!(*configFile =3D networkRadvdConfigFileName(driver, def->name))) goto cleanup; /* write the file */ if (virFileWriteStr(*configFile, configStr, 0600) < 0) { @@ -1847,6 +1852,7 @@ static int networkStartRadvd(virNetworkDriverStatePtr driver, virNetworkObjPtr obj) { + virNetworkDefPtr def =3D virNetworkObjGetDef(obj); dnsmasqCapsPtr dnsmasq_caps =3D networkGetDnsmasqCaps(driver); pid_t radvdPid; char *pidfile =3D NULL; @@ -1863,7 +1869,7 @@ networkStartRadvd(virNetworkDriverStatePtr driver, goto cleanup; } =20 - if (!virNetworkDefGetIPByIndex(obj->def, AF_INET6, 0)) { + if (!virNetworkDefGetIPByIndex(def, AF_INET6, 0)) { /* no IPv6 addresses, so we don't need to run radvd */ ret =3D 0; goto cleanup; @@ -1891,7 +1897,7 @@ networkStartRadvd(virNetworkDriverStatePtr driver, } =20 /* construct pidfile name */ - if (!(radvdpidbase =3D networkRadvdPidfileBasename(obj->def->name))) + if (!(radvdpidbase =3D networkRadvdPidfileBasename(def->name))) goto cleanup; if (!(pidfile =3D virPidFileBuildPath(driver->pidDir, radvdpidbase))) goto cleanup; @@ -1938,6 +1944,7 @@ static int networkRefreshRadvd(virNetworkDriverStatePtr driver, virNetworkObjPtr obj) { + virNetworkDefPtr def =3D virNetworkObjGetDef(obj); dnsmasqCapsPtr dnsmasq_caps =3D networkGetDnsmasqCaps(driver); char *radvdpidbase; pid_t radvdPid; @@ -1949,8 +1956,8 @@ networkRefreshRadvd(virNetworkDriverStatePtr driver, if (radvdPid <=3D 0) return 0; /* radvd should not be running but in case it is */ - if ((networkKillDaemon(radvdPid, "radvd", obj->def->name) >=3D 0) = && - ((radvdpidbase =3D networkRadvdPidfileBasename(obj->def->name)) + if ((networkKillDaemon(radvdPid, "radvd", def->name) >=3D 0) && + ((radvdpidbase =3D networkRadvdPidfileBasename(def->name)) !=3D NULL)) { virPidFileDelete(driver->pidDir, radvdpidbase); VIR_FREE(radvdpidbase); @@ -1965,7 +1972,7 @@ networkRefreshRadvd(virNetworkDriverStatePtr driver, if (radvdPid <=3D 0 || (kill(radvdPid, 0) < 0)) return networkStartRadvd(driver, obj); =20 - if (!virNetworkDefGetIPByIndex(obj->def, AF_INET6, 0)) { + if (!virNetworkDefGetIPByIndex(def, AF_INET6, 0)) { /* no IPv6 addresses, so we don't need to run radvd */ return 0; } @@ -1982,6 +1989,7 @@ networkRefreshRadvd(virNetworkDriverStatePtr driver, static int networkRestartRadvd(virNetworkObjPtr obj) { + virNetworkDefPtr def =3D virNetworkObjGetDef(obj); char *radvdpidbase; pid_t radvdPid =3D virNeworkObjGetRadvdPid(obj); =20 @@ -1991,9 +1999,8 @@ networkRestartRadvd(virNetworkObjPtr obj) * since there's really no better recovery to be done than to * just push ahead (and that may be exactly what's needed). */ - if ((networkKillDaemon(radvdPid, "radvd", - obj->def->name) >=3D 0) && - ((radvdpidbase =3D networkRadvdPidfileBasename(obj->def->name)) + if ((networkKillDaemon(radvdPid, "radvd", def->name) >=3D 0) && + ((radvdpidbase =3D networkRadvdPidfileBasename(def->name)) !=3D NULL)) { virPidFileDelete(driver->pidDir, radvdpidbase); VIR_FREE(radvdpidbase); @@ -2010,14 +2017,16 @@ static int networkRefreshDaemonsHelper(virNetworkObjPtr obj, void *opaque) { + virNetworkDefPtr def; virNetworkDriverStatePtr driver =3D opaque; =20 virObjectLock(obj); + def =3D virNetworkObjGetDef(obj); if (virNetworkObjIsActive(obj) && - ((obj->def->forward.type =3D=3D VIR_NETWORK_FORWARD_NONE) || - (obj->def->forward.type =3D=3D VIR_NETWORK_FORWARD_NAT) || - (obj->def->forward.type =3D=3D VIR_NETWORK_FORWARD_ROUTE) || - (obj->def->forward.type =3D=3D VIR_NETWORK_FORWARD_OPEN))) { + ((def->forward.type =3D=3D VIR_NETWORK_FORWARD_NONE) || + (def->forward.type =3D=3D VIR_NETWORK_FORWARD_NAT) || + (def->forward.type =3D=3D VIR_NETWORK_FORWARD_ROUTE) || + (def->forward.type =3D=3D VIR_NETWORK_FORWARD_OPEN))) { /* Only the three L3 network types that are configured by * libvirt will have a dnsmasq or radvd daemon associated * with them. Here we send a SIGHUP to an existing @@ -2049,19 +2058,21 @@ static int networkReloadFirewallRulesHelper(virNetworkObjPtr obj, void *opaque ATTRIBUTE_UNUSED) { + virNetworkDefPtr def; =20 virObjectLock(obj); + def =3D virNetworkObjGetDef(obj); if (virNetworkObjIsActive(obj) && - ((obj->def->forward.type =3D=3D VIR_NETWORK_FORWARD_NONE) || - (obj->def->forward.type =3D=3D VIR_NETWORK_FORWARD_NAT) || - (obj->def->forward.type =3D=3D VIR_NETWORK_FORWARD_ROUTE))) { + ((def->forward.type =3D=3D VIR_NETWORK_FORWARD_NONE) || + (def->forward.type =3D=3D VIR_NETWORK_FORWARD_NAT) || + (def->forward.type =3D=3D VIR_NETWORK_FORWARD_ROUTE))) { /* Only three of the L3 network types that are configured by * libvirt need to have iptables rules reloaded. The 4th L3 * network type, forward=3D'open', doesn't need this because it * has no iptables rules. */ - networkRemoveFirewallRules(obj->def); - if (networkAddFirewallRules(obj->def) < 0) { + networkRemoveFirewallRules(def); + if (networkAddFirewallRules(def) < 0) { /* failed to add but already logged */ } } @@ -2108,22 +2119,23 @@ networkEnableIPForwarding(bool enableIPv4, static int networkSetIPv6Sysctls(virNetworkObjPtr obj) { + virNetworkDefPtr def =3D virNetworkObjGetDef(obj); char *field =3D NULL; int ret =3D -1; - bool enableIPv6 =3D !!virNetworkDefGetIPByIndex(obj->def, AF_INET6, 0= ); + bool enableIPv6 =3D !!virNetworkDefGetIPByIndex(def, AF_INET6, 0); =20 /* set disable_ipv6 if there are no ipv6 addresses defined for the * network. But also unset it if there *are* ipv6 addresses, as we * can't be sure of its default value. */ if (virAsprintf(&field, SYSCTL_PATH "/net/ipv6/conf/%s/disable_ipv6", - obj->def->bridge) < 0) + def->bridge) < 0) goto cleanup; =20 if (access(field, W_OK) < 0 && errno =3D=3D ENOENT) { if (!enableIPv6) VIR_DEBUG("ipv6 appears to already be disabled on %s", - obj->def->bridge); + def->bridge); ret =3D 0; goto cleanup; } @@ -2131,7 +2143,7 @@ networkSetIPv6Sysctls(virNetworkObjPtr obj) if (virFileWriteStr(field, enableIPv6 ? "0" : "1", 0) < 0) { virReportSystemError(errno, _("cannot write to %s to enable/disable IPv6 " - "on bridge %s"), field, obj->def->bridge); + "on bridge %s"), field, def->bridge); goto cleanup; } VIR_FREE(field); @@ -2144,7 +2156,7 @@ networkSetIPv6Sysctls(virNetworkObjPtr obj) * their own router advertisements. */ if (virAsprintf(&field, SYSCTL_PATH "/net/ipv6/conf/%s/accept_ra", - obj->def->bridge) < 0) + def->bridge) < 0) goto cleanup; =20 if (virFileWriteStr(field, "0", 0) < 0) { @@ -2158,7 +2170,7 @@ networkSetIPv6Sysctls(virNetworkObjPtr obj) * definition), must always have autoconf=3D0. */ if (virAsprintf(&field, SYSCTL_PATH "/net/ipv6/conf/%s/autoconf", - obj->def->bridge) < 0) + def->bridge) < 0) goto cleanup; =20 if (virFileWriteStr(field, "0", 0) < 0) { @@ -2179,17 +2191,17 @@ static int networkAddAddrToBridge(virNetworkObjPtr obj, virNetworkIPDefPtr ipdef) { + virNetworkDefPtr def =3D virNetworkObjGetDef(obj); int prefix =3D virNetworkIPDefPrefix(ipdef); =20 if (prefix < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("bridge '%s' has an invalid netmask or IP address= "), - obj->def->bridge); + def->bridge); return -1; } =20 - if (virNetDevIPAddrAdd(obj->def->bridge, - &ipdef->address, NULL, prefix) < 0) + if (virNetDevIPAddrAdd(def->bridge, &ipdef->address, NULL, prefix) < 0) return -1; =20 return 0; @@ -2200,11 +2212,11 @@ static int networkStartHandleMACTableManagerMode(virNetworkObjPtr obj, const char *macTapIfName) { - const char *brname =3D obj->def->bridge; + virNetworkDefPtr def =3D virNetworkObjGetDef(obj); + const char *brname =3D def->bridge; =20 if (brname && - obj->def->macTableManager - =3D=3D VIR_NETWORK_BRIDGE_MAC_TABLE_MANAGER_LIBVIRT) { + def->macTableManager =3D=3D VIR_NETWORK_BRIDGE_MAC_TABLE_MANAGER_L= IBVIRT) { if (virNetDevBridgeSetVlanFiltering(brname, true) < 0) return -1; if (macTapIfName) { @@ -2223,6 +2235,7 @@ static int networkAddRouteToBridge(virNetworkObjPtr obj, virNetDevIPRoutePtr routedef) { + virNetworkDefPtr def =3D virNetworkObjGetDef(obj); int prefix =3D virNetDevIPRouteGetPrefix(routedef); unsigned int metric =3D virNetDevIPRouteGetMetric(routedef); virSocketAddrPtr addr =3D virNetDevIPRouteGetAddress(routedef); @@ -2232,28 +2245,28 @@ networkAddRouteToBridge(virNetworkObjPtr obj, virReportError(VIR_ERR_INTERNAL_ERROR, _("network '%s' has an invalid netmask " "or IP address in route definition"), - obj->def->name); + def->name); return -1; } =20 - if (virNetDevIPRouteAdd(obj->def->bridge, addr, - prefix, gateway, metric) < 0) { + if (virNetDevIPRouteAdd(def->bridge, addr, prefix, gateway, metric) < = 0) return -1; - } + return 0; } =20 static int networkWaitDadFinish(virNetworkObjPtr obj) { + virNetworkDefPtr def =3D virNetworkObjGetDef(obj); virNetworkIPDefPtr ipdef; virSocketAddrPtr *addrs =3D NULL, addr =3D NULL; size_t naddrs =3D 0; int ret =3D -1; =20 - VIR_DEBUG("Begin waiting for IPv6 DAD on network %s", obj->def->name); + VIR_DEBUG("Begin waiting for IPv6 DAD on network %s", def->name); =20 - while ((ipdef =3D virNetworkDefGetIPByIndex(obj->def, AF_INET6, naddrs= ))) { + while ((ipdef =3D virNetworkDefGetIPByIndex(def, AF_INET6, naddrs))) { addr =3D &ipdef->address; if (VIR_APPEND_ELEMENT_COPY(addrs, naddrs, addr) < 0) goto cleanup; @@ -2264,7 +2277,7 @@ networkWaitDadFinish(virNetworkObjPtr obj) cleanup: VIR_FREE(addrs); VIR_DEBUG("Finished waiting for IPv6 DAD on network %s with status %d", - obj->def->name, ret); + def->name, ret); return ret; } =20 @@ -2273,6 +2286,7 @@ static int networkStartNetworkVirtual(virNetworkDriverStatePtr driver, virNetworkObjPtr obj) { + virNetworkDefPtr def =3D virNetworkObjGetDef(obj); size_t i; bool v4present =3D false, v6present =3D false; virErrorPtr save_err =3D NULL; @@ -2285,11 +2299,11 @@ networkStartNetworkVirtual(virNetworkDriverStatePtr= driver, pid_t dnsmasqPid; =20 /* Check to see if any network IP collides with an existing route */ - if (networkCheckRouteCollision(obj->def) < 0) + if (networkCheckRouteCollision(def) < 0) return -1; =20 /* Create and configure the bridge device */ - if (!obj->def->bridge) { + if (!def->bridge) { /* bridge name can only be empty if the config files were * edited directly. Otherwise networkValidate() (called after * parsing the XML from networkCreateXML() and @@ -2300,27 +2314,27 @@ networkStartNetworkVirtual(virNetworkDriverStatePtr= driver, */ virReportError(VIR_ERR_INTERNAL_ERROR, _("network '%s' has no bridge name defined"), - obj->def->name); + def->name); return -1; } - if (virNetDevBridgeCreate(obj->def->bridge) < 0) + if (virNetDevBridgeCreate(def->bridge) < 0) return -1; =20 - if (obj->def->mac_specified) { + if (def->mac_specified) { /* To set a mac for the bridge, we need to define a dummy tap * device, set its mac, then attach it to the bridge. As long * as its mac address is lower than any other interface that * gets attached, the bridge will always maintain this mac * address. */ - macTapIfName =3D networkBridgeDummyNicName(obj->def->bridge); + macTapIfName =3D networkBridgeDummyNicName(def->bridge); if (!macTapIfName) goto err0; /* Keep tun fd open and interface up to allow for IPv6 DAD to happ= en */ - if (virNetDevTapCreateInBridgePort(obj->def->bridge, - &macTapIfName, &obj->def->mac, + if (virNetDevTapCreateInBridgePort(def->bridge, + &macTapIfName, &def->mac, NULL, NULL, &tapfd, 1, NULL, NU= LL, - NULL, obj->def->mtu, NULL, + NULL, def->mtu, NULL, VIR_NETDEV_TAP_CREATE_USE_MAC_F= OR_BRIDGE | VIR_NETDEV_TAP_CREATE_IFUP | VIR_NETDEV_TAP_CREATE_PERSIST) = < 0) { @@ -2330,7 +2344,7 @@ networkStartNetworkVirtual(virNetworkDriverStatePtr d= river, } =20 if (!(macMapFile =3D virMacMapFileName(driver->dnsmasqStateDir, - obj->def->bridge)) || + def->bridge)) || !(macmap =3D virMacMapNew(macMapFile))) goto err1; =20 @@ -2341,12 +2355,10 @@ networkStartNetworkVirtual(virNetworkDriverStatePtr= driver, /* delay is configured in seconds, but virNetDevBridgeSetSTPDelay * expects milliseconds */ - if (virNetDevBridgeSetSTPDelay(obj->def->bridge, - obj->def->delay * 1000) < 0) + if (virNetDevBridgeSetSTPDelay(def->bridge, def->delay * 1000) < 0) goto err1; =20 - if (virNetDevBridgeSetSTP(obj->def->bridge, - obj->def->stp ? true : false) < 0) + if (virNetDevBridgeSetSTP(def->bridge, def->stp ? true : false) < 0) goto err1; =20 /* Disable IPv6 on the bridge if there are no IPv6 addresses @@ -2356,13 +2368,11 @@ networkStartNetworkVirtual(virNetworkDriverStatePtr= driver, goto err1; =20 /* Add "once per network" rules */ - if (obj->def->forward.type !=3D VIR_NETWORK_FORWARD_OPEN && - networkAddFirewallRules(obj->def) < 0) + if (def->forward.type !=3D VIR_NETWORK_FORWARD_OPEN && + networkAddFirewallRules(def) < 0) goto err1; =20 - for (i =3D 0; - (ipdef =3D virNetworkDefGetIPByIndex(obj->def, AF_UNSPEC, i)); - i++) { + for (i =3D 0; (ipdef =3D virNetworkDefGetIPByIndex(def, AF_UNSPEC, i))= ; i++) { if (VIR_SOCKET_ADDR_IS_FAMILY(&ipdef->address, AF_INET)) v4present =3D true; if (VIR_SOCKET_ADDR_IS_FAMILY(&ipdef->address, AF_INET6)) @@ -2377,13 +2387,13 @@ networkStartNetworkVirtual(virNetworkDriverStatePtr= driver, goto err2; =20 /* Bring up the bridge interface */ - if (virNetDevSetOnline(obj->def->bridge, 1) < 0) + if (virNetDevSetOnline(def->bridge, 1) < 0) goto err2; =20 - for (i =3D 0; i < obj->def->nroutes; i++) { + for (i =3D 0; i < def->nroutes; i++) { virSocketAddrPtr gateway =3D NULL; =20 - routedef =3D obj->def->routes[i]; + routedef =3D def->routes[i]; gateway =3D virNetDevIPRouteGetGateway(routedef); =20 /* Add the IP route to the bridge */ @@ -2398,7 +2408,7 @@ networkStartNetworkVirtual(virNetworkDriverStatePtr d= river, } =20 /* If forward.type !=3D NONE, turn on global IP forwarding */ - if (obj->def->forward.type !=3D VIR_NETWORK_FORWARD_NONE) { + if (def->forward.type !=3D VIR_NETWORK_FORWARD_NONE) { if (v6present && !virNetDevIPCheckIPv6Forwarding()) goto err3; /* Precise error message already provided */ =20 @@ -2434,7 +2444,7 @@ networkStartNetworkVirtual(virNetworkDriverStatePtr d= river, VIR_FORCE_CLOSE(tapfd); } =20 - if (virNetDevBandwidthSet(obj->def->bridge, obj->def->bandwidth, true)= < 0) + if (virNetDevBandwidthSet(def->bridge, def->bandwidth, true) < 0) goto err5; =20 VIR_FREE(macTapIfName); @@ -2443,8 +2453,8 @@ networkStartNetworkVirtual(virNetworkDriverStatePtr d= river, return 0; =20 err5: - if (obj->def->bandwidth) - virNetDevBandwidthClear(obj->def->bridge); + if (def->bandwidth) + virNetDevBandwidthClear(def->bridge); =20 err4: if (!save_err) @@ -2459,13 +2469,13 @@ networkStartNetworkVirtual(virNetworkDriverStatePtr= driver, err3: if (!save_err) save_err =3D virSaveLastError(); - ignore_value(virNetDevSetOnline(obj->def->bridge, 0)); + ignore_value(virNetDevSetOnline(def->bridge, 0)); =20 err2: if (!save_err) save_err =3D virSaveLastError(); - if (obj->def->forward.type !=3D VIR_NETWORK_FORWARD_OPEN) - networkRemoveFirewallRules(obj->def); + if (def->forward.type !=3D VIR_NETWORK_FORWARD_OPEN) + networkRemoveFirewallRules(def); =20 err1: if (!save_err) @@ -2481,7 +2491,7 @@ networkStartNetworkVirtual(virNetworkDriverStatePtr d= river, err0: if (!save_err) save_err =3D virSaveLastError(); - ignore_value(virNetDevBridgeDelete(obj->def->bridge)); + ignore_value(virNetDevBridgeDelete(def->bridge)); =20 if (save_err) { virSetError(save_err); @@ -2496,11 +2506,12 @@ static int networkShutdownNetworkVirtual(virNetworkDriverStatePtr driver, virNetworkObjPtr obj) { + virNetworkDefPtr def =3D virNetworkObjGetDef(obj); pid_t radvdPid; pid_t dnsmasqPid; =20 - if (obj->def->bandwidth) - virNetDevBandwidthClear(obj->def->bridge); + if (def->bandwidth) + virNetDevBandwidthClear(def->bridge); =20 virNetworkObjUnrefMacMap(obj); =20 @@ -2510,7 +2521,7 @@ networkShutdownNetworkVirtual(virNetworkDriverStatePt= r driver, =20 kill(radvdPid, SIGTERM); /* attempt to delete the pidfile we created */ - if ((radvdpidbase =3D networkRadvdPidfileBasename(obj->def->name))= ) { + if ((radvdpidbase =3D networkRadvdPidfileBasename(def->name))) { virPidFileDelete(driver->pidDir, radvdpidbase); VIR_FREE(radvdpidbase); } @@ -2520,20 +2531,20 @@ networkShutdownNetworkVirtual(virNetworkDriverState= Ptr driver, if (dnsmasqPid > 0) kill(dnsmasqPid, SIGTERM); =20 - if (obj->def->mac_specified) { - char *macTapIfName =3D networkBridgeDummyNicName(obj->def->bridge); + if (def->mac_specified) { + char *macTapIfName =3D networkBridgeDummyNicName(def->bridge); if (macTapIfName) { ignore_value(virNetDevTapDelete(macTapIfName, NULL)); VIR_FREE(macTapIfName); } } =20 - ignore_value(virNetDevSetOnline(obj->def->bridge, 0)); + ignore_value(virNetDevSetOnline(def->bridge, 0)); =20 - if (obj->def->forward.type !=3D VIR_NETWORK_FORWARD_OPEN) - networkRemoveFirewallRules(obj->def); + if (def->forward.type !=3D VIR_NETWORK_FORWARD_OPEN) + networkRemoveFirewallRules(def); =20 - ignore_value(virNetDevBridgeDelete(obj->def->bridge)); + ignore_value(virNetDevBridgeDelete(def->bridge)); =20 /* See if its still alive and really really kill it */ dnsmasqPid =3D virNetworkObjGetDnsmasqPid(obj); @@ -2690,7 +2701,7 @@ networkStartNetworkExternal(virNetworkObjPtr obj) * failure, undo anything you've done, and return -1. On success * return 0. */ - return networkCreateInterfacePool(obj->def); + return networkCreateInterfacePool(virNetworkObjGetDef(obj)); } =20 =20 @@ -2710,6 +2721,7 @@ static int networkStartNetwork(virNetworkDriverStatePtr driver, virNetworkObjPtr obj) { + virNetworkDefPtr def =3D virNetworkObjGetDef(obj); int ret =3D -1; =20 VIR_DEBUG("driver=3D%p, network=3D%p", driver, obj); @@ -2733,7 +2745,7 @@ networkStartNetwork(virNetworkDriverStatePtr driver, VIR_HOOK_SUBOP_BEGIN) < 0) goto cleanup; =20 - switch (obj->def->forward.type) { + switch (def->forward.type) { =20 case VIR_NETWORK_FORWARD_NONE: case VIR_NETWORK_FORWARD_NAT: @@ -2744,7 +2756,7 @@ networkStartNetwork(virNetworkDriverStatePtr driver, break; =20 case VIR_NETWORK_FORWARD_BRIDGE: - if (obj->def->bridge) { + if (def->bridge) { if (networkStartNetworkBridge(obj) < 0) goto cleanup; break; @@ -2778,7 +2790,7 @@ networkStartNetwork(virNetworkDriverStatePtr driver, goto cleanup; =20 obj->active =3D 1; - VIR_INFO("Network '%s' started up", obj->def->name); + VIR_INFO("Network '%s' started up", def->name); ret =3D 0; =20 cleanup: @@ -2799,23 +2811,23 @@ static int networkShutdownNetwork(virNetworkDriverStatePtr driver, virNetworkObjPtr obj) { + virNetworkDefPtr def =3D virNetworkObjGetDef(obj); int ret =3D 0; char *stateFile; =20 - VIR_INFO("Shutting down network '%s'", obj->def->name); + VIR_INFO("Shutting down network '%s'", def->name); =20 if (!virNetworkObjIsActive(obj)) return 0; =20 - stateFile =3D virNetworkConfigFile(driver->stateDir, - obj->def->name); + stateFile =3D virNetworkConfigFile(driver->stateDir, def->name); if (!stateFile) return -1; =20 unlink(stateFile); VIR_FREE(stateFile); =20 - switch (obj->def->forward.type) { + switch (def->forward.type) { =20 case VIR_NETWORK_FORWARD_NONE: case VIR_NETWORK_FORWARD_NAT: @@ -2825,7 +2837,7 @@ networkShutdownNetwork(virNetworkDriverStatePtr drive= r, break; =20 case VIR_NETWORK_FORWARD_BRIDGE: - if (obj->def->bridge) { + if (def->bridge) { ret =3D networkShutdownNetworkBridge(obj); break; } @@ -2859,6 +2871,7 @@ networkLookupByUUID(virConnectPtr conn, { virNetworkDriverStatePtr driver =3D networkGetDriver(); virNetworkObjPtr obj; + virNetworkDefPtr def; virNetworkPtr net =3D NULL; =20 obj =3D virNetworkObjFindByUUID(driver->networks, uuid); @@ -2870,11 +2883,12 @@ networkLookupByUUID(virConnectPtr conn, uuidstr); goto cleanup; } + def =3D virNetworkObjGetDef(obj); =20 - if (virNetworkLookupByUUIDEnsureACL(conn, obj->def) < 0) + if (virNetworkLookupByUUIDEnsureACL(conn, def) < 0) goto cleanup; =20 - net =3D virGetNetwork(conn, obj->def->name, obj->def->uuid); + net =3D virGetNetwork(conn, def->name, def->uuid); =20 cleanup: virNetworkObjEndAPI(&obj); @@ -2888,6 +2902,7 @@ networkLookupByName(virConnectPtr conn, { virNetworkDriverStatePtr driver =3D networkGetDriver(); virNetworkObjPtr obj; + virNetworkDefPtr def; virNetworkPtr net =3D NULL; =20 obj =3D virNetworkObjFindByName(driver->networks, name); @@ -2896,11 +2911,12 @@ networkLookupByName(virConnectPtr conn, _("no network with matching name '%s'"), name); goto cleanup; } + def =3D virNetworkObjGetDef(obj); =20 - if (virNetworkLookupByNameEnsureACL(conn, obj->def) < 0) + if (virNetworkLookupByNameEnsureACL(conn, def) < 0) goto cleanup; =20 - net =3D virGetNetwork(conn, obj->def->name, obj->def->uuid); + net =3D virGetNetwork(conn, def->name, def->uuid); =20 cleanup: virNetworkObjEndAPI(&obj); @@ -3060,7 +3076,7 @@ networkIsActive(virNetworkPtr net) if (!(obj =3D networkObjFromNetwork(net))) return ret; =20 - if (virNetworkIsActiveEnsureACL(net->conn, obj->def) < 0) + if (virNetworkIsActiveEnsureACL(net->conn, virNetworkObjGetDef(obj)) <= 0) goto cleanup; =20 ret =3D virNetworkObjIsActive(obj); @@ -3080,7 +3096,7 @@ networkIsPersistent(virNetworkPtr net) if (!(obj =3D networkObjFromNetwork(net))) return ret; =20 - if (virNetworkIsPersistentEnsureACL(net->conn, obj->def) < 0) + if (virNetworkIsPersistentEnsureACL(net->conn, virNetworkObjGetDef(obj= )) < 0) goto cleanup; =20 ret =3D obj->persistent; @@ -3457,45 +3473,47 @@ networkCreateXML(virConnectPtr conn, const char *xml) { virNetworkDriverStatePtr driver =3D networkGetDriver(); - virNetworkDefPtr def; + virNetworkDefPtr newDef; virNetworkObjPtr obj =3D NULL; + virNetworkDefPtr def; virNetworkPtr net =3D NULL; virObjectEventPtr event =3D NULL; =20 - if (!(def =3D virNetworkDefParseString(xml))) + if (!(newDef =3D virNetworkDefParseString(xml))) goto cleanup; =20 - if (virNetworkCreateXMLEnsureACL(conn, def) < 0) + if (virNetworkCreateXMLEnsureACL(conn, newDef) < 0) goto cleanup; =20 - if (networkValidate(driver, def) < 0) + if (networkValidate(driver, newDef) < 0) goto cleanup; =20 /* NB: even though this transient network hasn't yet been started, * we assign the def with live =3D true in anticipation that it will * be started momentarily. */ - if (!(obj =3D virNetworkObjAssignDef(driver->networks, def, + if (!(obj =3D virNetworkObjAssignDef(driver->networks, newDef, VIR_NETWORK_OBJ_LIST_ADD_LIVE | VIR_NETWORK_OBJ_LIST_ADD_CHECK_LIVE= ))) goto cleanup; - def =3D NULL; + newDef =3D NULL; + def =3D virNetworkObjGetDef(obj); =20 if (networkStartNetwork(driver, obj) < 0) { virNetworkObjRemoveInactive(driver->networks, obj); goto cleanup; } =20 - event =3D virNetworkEventLifecycleNew(obj->def->name, - obj->def->uuid, + event =3D virNetworkEventLifecycleNew(def->name, + def->uuid, VIR_NETWORK_EVENT_STARTED, 0); =20 - VIR_INFO("Creating network '%s'", obj->def->name); - net =3D virGetNetwork(conn, obj->def->name, obj->def->uuid); + VIR_INFO("Creating network '%s'", def->name); + net =3D virGetNetwork(conn, def->name, def->uuid); =20 cleanup: - virNetworkDefFree(def); + virNetworkDefFree(newDef); if (event) virObjectEventStateQueue(driver->networkEventState, event); virNetworkObjEndAPI(&obj); @@ -3564,14 +3582,16 @@ networkUndefine(virNetworkPtr net) { virNetworkDriverStatePtr driver =3D networkGetDriver(); virNetworkObjPtr obj; + virNetworkDefPtr def; int ret =3D -1; bool active =3D false; virObjectEventPtr event =3D NULL; =20 if (!(obj =3D networkObjFromNetwork(net))) goto cleanup; + def =3D virNetworkObjGetDef(obj); =20 - if (virNetworkUndefineEnsureACL(net->conn, obj->def) < 0) + if (virNetworkUndefineEnsureACL(net->conn, def) < 0) goto cleanup; =20 if (virNetworkObjIsActive(obj)) @@ -3589,12 +3609,12 @@ networkUndefine(virNetworkPtr net) obj) < 0) goto cleanup; =20 - event =3D virNetworkEventLifecycleNew(obj->def->name, - obj->def->uuid, + event =3D virNetworkEventLifecycleNew(def->name, + def->uuid, VIR_NETWORK_EVENT_UNDEFINED, 0); =20 - VIR_INFO("Undefining network '%s'", obj->def->name); + VIR_INFO("Undefining network '%s'", def->name); if (!active) { if (networkRemoveInactive(driver, obj) < 0) goto cleanup; @@ -3626,6 +3646,7 @@ networkUpdate(virNetworkPtr net, { virNetworkDriverStatePtr driver =3D networkGetDriver(); virNetworkObjPtr obj =3D NULL; + virNetworkDefPtr def; int isActive, ret =3D -1; size_t i; virNetworkIPDefPtr ipdef; @@ -3639,13 +3660,14 @@ networkUpdate(virNetworkPtr net, =20 if (!(obj =3D networkObjFromNetwork(net))) goto cleanup; + def =3D virNetworkObjGetDef(obj); =20 - if (virNetworkUpdateEnsureACL(net->conn, obj->def, flags) < 0) + if (virNetworkUpdateEnsureACL(net->conn, def, flags) < 0) goto cleanup; =20 /* see if we are listening for dhcp pre-modification */ for (i =3D 0; - (ipdef =3D virNetworkDefGetIPByIndex(obj->def, AF_INET, i)); + (ipdef =3D virNetworkDefGetIPByIndex(def, AF_INET, i)); i++) { if (ipdef->nranges || ipdef->nhosts) { oldDhcpActive =3D true; @@ -3670,9 +3692,9 @@ networkUpdate(virNetworkPtr net, /* Take care of anything that must be done before updating the * live NetworkDef. */ - if (obj->def->forward.type =3D=3D VIR_NETWORK_FORWARD_NONE || - obj->def->forward.type =3D=3D VIR_NETWORK_FORWARD_NAT || - obj->def->forward.type =3D=3D VIR_NETWORK_FORWARD_ROUTE) { + if (def->forward.type =3D=3D VIR_NETWORK_FORWARD_NONE || + def->forward.type =3D=3D VIR_NETWORK_FORWARD_NAT || + def->forward.type =3D=3D VIR_NETWORK_FORWARD_ROUTE) { switch (section) { case VIR_NETWORK_SECTION_FORWARD: case VIR_NETWORK_SECTION_FORWARD_INTERFACE: @@ -3683,8 +3705,8 @@ networkUpdate(virNetworkPtr net, * old rules (and remember to load new ones after the * update). */ - if (obj->def->forward.type !=3D VIR_NETWORK_FORWARD_OPEN) { - networkRemoveFirewallRules(obj->def); + if (def->forward.type !=3D VIR_NETWORK_FORWARD_OPEN) { + networkRemoveFirewallRules(def); needFirewallRefresh =3D true; } break; @@ -3697,11 +3719,11 @@ networkUpdate(virNetworkPtr net, /* update the network config in memory/on disk */ if (virNetworkObjUpdate(obj, command, section, parentIndex, xml, flags= ) < 0) { if (needFirewallRefresh) - ignore_value(networkAddFirewallRules(obj->def)); + ignore_value(networkAddFirewallRules(def)); goto cleanup; } =20 - if (needFirewallRefresh && networkAddFirewallRules(obj->def) < 0) + if (needFirewallRefresh && networkAddFirewallRules(def) < 0) goto cleanup; =20 if (flags & VIR_NETWORK_UPDATE_AFFECT_CONFIG) { @@ -3741,8 +3763,7 @@ networkUpdate(virNetworkPtr net, */ bool newDhcpActive =3D false; =20 - for (i =3D 0; - (ipdef =3D virNetworkDefGetIPByIndex(obj->def, AF_INET, i= )); + for (i =3D 0; (ipdef =3D virNetworkDefGetIPByIndex(def, AF_INE= T, i)); i++) { if (ipdef->nranges || ipdef->nhosts) { newDhcpActive =3D true; @@ -3796,20 +3817,22 @@ networkCreate(virNetworkPtr net) { virNetworkDriverStatePtr driver =3D networkGetDriver(); virNetworkObjPtr obj; + virNetworkDefPtr def; int ret =3D -1; virObjectEventPtr event =3D NULL; =20 if (!(obj =3D networkObjFromNetwork(net))) goto cleanup; + def =3D virNetworkObjGetDef(obj); =20 - if (virNetworkCreateEnsureACL(net->conn, obj->def) < 0) + if (virNetworkCreateEnsureACL(net->conn, def) < 0) goto cleanup; =20 if ((ret =3D networkStartNetwork(driver, obj)) < 0) goto cleanup; =20 - event =3D virNetworkEventLifecycleNew(obj->def->name, - obj->def->uuid, + event =3D virNetworkEventLifecycleNew(def->name, + def->uuid, VIR_NETWORK_EVENT_STARTED, 0); =20 @@ -3826,27 +3849,29 @@ networkDestroy(virNetworkPtr net) { virNetworkDriverStatePtr driver =3D networkGetDriver(); virNetworkObjPtr obj; + virNetworkDefPtr def; int ret =3D -1; virObjectEventPtr event =3D NULL; =20 if (!(obj =3D networkObjFromNetwork(net))) goto cleanup; + def =3D virNetworkObjGetDef(obj); =20 - if (virNetworkDestroyEnsureACL(net->conn, obj->def) < 0) + if (virNetworkDestroyEnsureACL(net->conn, def) < 0) goto cleanup; =20 if (!virNetworkObjIsActive(obj)) { virReportError(VIR_ERR_OPERATION_INVALID, _("network '%s' is not active"), - obj->def->name); + def->name); goto cleanup; } =20 if ((ret =3D networkShutdownNetwork(driver, obj)) < 0) goto cleanup; =20 - event =3D virNetworkEventLifecycleNew(obj->def->name, - obj->def->uuid, + event =3D virNetworkEventLifecycleNew(def->name, + def->uuid, VIR_NETWORK_EVENT_STOPPED, 0); =20 @@ -3868,23 +3893,27 @@ networkGetXMLDesc(virNetworkPtr net, unsigned int flags) { virNetworkObjPtr obj; + virNetworkDefPtr curDef; virNetworkDefPtr def; + virNetworkDefPtr newDef; char *ret =3D NULL; =20 virCheckFlags(VIR_NETWORK_XML_INACTIVE, NULL); =20 if (!(obj =3D networkObjFromNetwork(net))) return ret; + def =3D virNetworkObjGetDef(obj); + newDef =3D virNetworkObjGetNewDef(obj); =20 - if (virNetworkGetXMLDescEnsureACL(net->conn, obj->def) < 0) + if (virNetworkGetXMLDescEnsureACL(net->conn, def) < 0) goto cleanup; =20 - if ((flags & VIR_NETWORK_XML_INACTIVE) && obj->newDef) - def =3D obj->newDef; + if ((flags & VIR_NETWORK_XML_INACTIVE) && newDef) + curDef =3D newDef; else - def =3D obj->def; + curDef =3D def; =20 - ret =3D virNetworkDefFormat(def, flags); + ret =3D virNetworkDefFormat(curDef, flags); =20 cleanup: virNetworkObjEndAPI(&obj); @@ -3896,22 +3925,24 @@ static char * networkGetBridgeName(virNetworkPtr net) { virNetworkObjPtr obj; + virNetworkDefPtr def; char *bridge =3D NULL; =20 if (!(obj =3D networkObjFromNetwork(net))) return bridge; + def =3D virNetworkObjGetDef(obj); =20 - if (virNetworkGetBridgeNameEnsureACL(net->conn, obj->def) < 0) + if (virNetworkGetBridgeNameEnsureACL(net->conn, def) < 0) goto cleanup; =20 - if (!(obj->def->bridge)) { + if (!(def->bridge)) { virReportError(VIR_ERR_INTERNAL_ERROR, _("network '%s' does not have a bridge name."), - obj->def->name); + def->name); goto cleanup; } =20 - ignore_value(VIR_STRDUP(bridge, obj->def->bridge)); + ignore_value(VIR_STRDUP(bridge, def->bridge)); =20 cleanup: virNetworkObjEndAPI(&obj); @@ -3929,7 +3960,7 @@ networkGetAutostart(virNetworkPtr net, if (!(obj =3D networkObjFromNetwork(net))) return ret; =20 - if (virNetworkGetAutostartEnsureACL(net->conn, obj->def) < 0) + if (virNetworkGetAutostartEnsureACL(net->conn, virNetworkObjGetDef(obj= )) < 0) goto cleanup; =20 *autostart =3D obj->autostart; @@ -3947,14 +3978,15 @@ networkSetAutostart(virNetworkPtr net, { virNetworkDriverStatePtr driver =3D networkGetDriver(); virNetworkObjPtr obj; + virNetworkDefPtr def; char *configFile =3D NULL, *autostartLink =3D NULL; int ret =3D -1; =20 - if (!(obj =3D networkObjFromNetwork(net))) goto cleanup; + def =3D virNetworkObjGetDef(obj); =20 - if (virNetworkSetAutostartEnsureACL(net->conn, obj->def) < 0) + if (virNetworkSetAutostartEnsureACL(net->conn, def) < 0) goto cleanup; =20 if (!obj->persistent) { @@ -3966,9 +3998,11 @@ networkSetAutostart(virNetworkPtr net, autostart =3D (autostart !=3D 0); =20 if (obj->autostart !=3D autostart) { - if ((configFile =3D virNetworkConfigFile(driver->networkConfigDir,= obj->def->name)) =3D=3D NULL) + if ((configFile =3D virNetworkConfigFile(driver->networkConfigDir, + def->name)) =3D=3D NULL) goto cleanup; - if ((autostartLink =3D virNetworkConfigFile(driver->networkAutosta= rtDir, obj->def->name)) =3D=3D NULL) + if ((autostartLink =3D virNetworkConfigFile(driver->networkAutosta= rtDir, + def->name)) =3D=3D NULL) goto cleanup; =20 if (autostart) { @@ -4032,6 +4066,7 @@ networkGetDHCPLeases(virNetworkPtr net, virNetworkDHCPLeasePtr lease =3D NULL; virNetworkDHCPLeasePtr *leases_ret =3D NULL; virNetworkObjPtr obj; + virNetworkDefPtr def; virMacAddr mac_addr; =20 virCheckFlags(0, -1); @@ -4044,12 +4079,13 @@ networkGetDHCPLeases(virNetworkPtr net, =20 if (!(obj =3D networkObjFromNetwork(net))) return -1; + def =3D virNetworkObjGetDef(obj); =20 - if (virNetworkGetDHCPLeasesEnsureACL(net->conn, obj->def) < 0) + if (virNetworkGetDHCPLeasesEnsureACL(net->conn, def) < 0) goto cleanup; =20 /* Retrieve custom leases file location */ - custom_lease_file =3D networkDnsmasqLeaseFileNameCustom(driver, obj->d= ef->bridge); + custom_lease_file =3D networkDnsmasqLeaseFileNameCustom(driver, def->b= ridge); =20 /* Read entire contents */ if ((custom_lease_file_len =3D virFileReadAll(custom_lease_file, @@ -4125,8 +4161,8 @@ networkGetDHCPLeases(virNetworkPtr net, lease->type =3D ipv6 ? VIR_IP_ADDR_TYPE_IPV6 : VIR_IP_ADDR_TYP= E_IPV4; =20 /* Obtain prefix */ - for (j =3D 0; j < obj->def->nips; j++) { - ipdef_tmp =3D &obj->def->ips[j]; + for (j =3D 0; j < def->nips; j++) { + ipdef_tmp =3D &def->ips[j]; =20 if (ipv6 && VIR_SOCKET_ADDR_IS_FAMILY(&ipdef_tmp->address, AF_INET6)) { @@ -4144,7 +4180,7 @@ networkGetDHCPLeases(virNetworkPtr net, =20 if ((VIR_STRDUP(lease->mac, mac_tmp) < 0) || (VIR_STRDUP(lease->ipaddr, ip_tmp) < 0) || - (VIR_STRDUP(lease->iface, obj->def->bridge) < 0)) + (VIR_STRDUP(lease->iface, def->bridge) < 0)) goto error; =20 /* Fields that can be NULL */ @@ -4327,7 +4363,7 @@ networkAllocateActualDevice(virDomainDefPtr dom, iface->data.network.name); goto error; } - netdef =3D obj->def; + netdef =3D virNetworkObjGetDef(obj); =20 if (!virNetworkObjIsActive(obj)) { virReportError(VIR_ERR_OPERATION_INVALID, @@ -4742,7 +4778,7 @@ networkNotifyActualDevice(virDomainDefPtr dom, iface->data.network.name); goto error; } - netdef =3D obj->def; + netdef =3D virNetworkObjGetDef(obj); =20 if (!virNetworkObjIsActive(obj)) { virReportError(VIR_ERR_OPERATION_INVALID, @@ -4959,7 +4995,7 @@ networkReleaseActualDevice(virDomainDefPtr dom, iface->data.network.name); goto error; } - netdef =3D obj->def; + netdef =3D virNetworkObjGetDef(obj); =20 if (iface->data.network.actual && (netdef->forward.type =3D=3D VIR_NETWORK_FORWARD_NONE || @@ -5110,7 +5146,7 @@ networkGetNetworkAddress(const char *netname, netname); goto cleanup; } - netdef =3D obj->def; + netdef =3D virNetworkObjGetDef(obj); =20 switch (netdef->forward.type) { case VIR_NETWORK_FORWARD_NONE: @@ -5199,7 +5235,7 @@ networkGetActualType(virDomainNetDefPtr iface) iface->data.network.name); return -1; } - netdef =3D obj->def; + netdef =3D virNetworkObjGetDef(obj); =20 if ((netdef->forward.type =3D=3D VIR_NETWORK_FORWARD_NONE) || (netdef->forward.type =3D=3D VIR_NETWORK_FORWARD_NAT) || @@ -5270,7 +5306,8 @@ networkCheckBandwidth(virNetworkObjPtr obj, unsigned long long *new_rate) { int ret =3D -1; - virNetDevBandwidthPtr netBand =3D obj->def->bandwidth; + virNetworkDefPtr def =3D virNetworkObjGetDef(obj); + virNetDevBandwidthPtr netBand =3D def->bandwidth; unsigned long long tmp_floor_sum =3D virNetworkObjGetFloorSum(obj); unsigned long long tmp_new_rate =3D 0; char ifmac[VIR_MAC_STRING_BUFLEN]; @@ -5282,7 +5319,7 @@ networkCheckBandwidth(virNetworkObjPtr obj, virReportError(VIR_ERR_OPERATION_UNSUPPORTED, _("Invalid use of 'floor' on interface with MAC " "address %s - network '%s' has no inbound QoS set= "), - ifmac, obj->def->name); + ifmac, def->name); return -1; } =20 @@ -5307,8 +5344,8 @@ networkCheckBandwidth(virNetworkObjPtr obj, _("Cannot plug '%s' interface into '%s' because= it " "would overcommit 'peak' on network '%s'"), ifmac, - obj->def->bridge, - obj->def->name); + def->bridge, + def->name); goto cleanup; } } else if (tmp_floor_sum > netBand->in->average) { @@ -5318,8 +5355,8 @@ networkCheckBandwidth(virNetworkObjPtr obj, _("Cannot plug '%s' interface into '%s' because it " "would overcommit 'average' on network '%s'"), ifmac, - obj->def->bridge, - obj->def->name); + def->bridge, + def->name); goto cleanup; } =20 @@ -5364,6 +5401,7 @@ networkPlugBandwidthImpl(virNetworkObjPtr obj, unsigned long long new_rate) { virNetworkDriverStatePtr driver =3D networkGetDriver(); + virNetworkDefPtr def =3D virNetworkObjGetDef(obj); virBitmapPtr classIdMap =3D virNetworkObjGetClassIdMap(obj); unsigned long long tmp_floor_sum =3D virNetworkObjGetFloorSum(obj); ssize_t class_id =3D 0; @@ -5377,10 +5415,10 @@ networkPlugBandwidthImpl(virNetworkObjPtr obj, goto cleanup; } =20 - plug_ret =3D virNetDevBandwidthPlug(obj->def->bridge, obj->def->bandwi= dth, + plug_ret =3D virNetDevBandwidthPlug(def->bridge, def->bandwidth, &iface->mac, ifaceBand, class_id); if (plug_ret < 0) { - ignore_value(virNetDevBandwidthUnplug(obj->def->bridge, class_id)); + ignore_value(virNetDevBandwidthUnplug(def->bridge, class_id)); goto cleanup; } =20 @@ -5395,15 +5433,15 @@ networkPlugBandwidthImpl(virNetworkObjPtr obj, tmp_floor_sum -=3D ifaceBand->in->floor; virNetworkObjSetFloorSum(obj, tmp_floor_sum); iface->data.network.actual->class_id =3D 0; - ignore_value(virNetDevBandwidthUnplug(obj->def->bridge, class_id)); + ignore_value(virNetDevBandwidthUnplug(def->bridge, class_id)); goto cleanup; } /* update rate for non guaranteed NICs */ new_rate -=3D tmp_floor_sum; - if (virNetDevBandwidthUpdateRate(obj->def->bridge, 2, - obj->def->bandwidth, new_rate) < 0) + if (virNetDevBandwidthUpdateRate(def->bridge, 2, + def->bandwidth, new_rate) < 0) VIR_WARN("Unable to update rate for 1:2 class on %s bridge", - obj->def->bridge); + def->bridge); =20 ret =3D 0; cleanup: @@ -5456,6 +5494,7 @@ static int networkUnplugBandwidth(virNetworkObjPtr obj, virDomainNetDefPtr iface) { + virNetworkDefPtr def =3D virNetworkObjGetDef(obj); virBitmapPtr classIdMap =3D virNetworkObjGetClassIdMap(obj); unsigned long long tmp_floor_sum =3D virNetworkObjGetFloorSum(obj); virNetworkDriverStatePtr driver =3D networkGetDriver(); @@ -5465,18 +5504,18 @@ networkUnplugBandwidth(virNetworkObjPtr obj, =20 if (iface->data.network.actual && iface->data.network.actual->class_id) { - if (!obj->def->bandwidth || !obj->def->bandwidth->in) { + if (!def->bandwidth || !def->bandwidth->in) { VIR_WARN("Network %s has no bandwidth but unplug requested", - obj->def->name); + def->name); goto cleanup; } /* we must remove class from bridge */ - new_rate =3D obj->def->bandwidth->in->average; + new_rate =3D def->bandwidth->in->average; =20 - if (obj->def->bandwidth->in->peak > 0) - new_rate =3D obj->def->bandwidth->in->peak; + if (def->bandwidth->in->peak > 0) + new_rate =3D def->bandwidth->in->peak; =20 - ret =3D virNetDevBandwidthUnplug(obj->def->bridge, + ret =3D virNetDevBandwidthUnplug(def->bridge, iface->data.network.actual->class_i= d); if (ret < 0) goto cleanup; @@ -5497,10 +5536,10 @@ networkUnplugBandwidth(virNetworkObjPtr obj, } /* update rate for non guaranteed NICs */ new_rate -=3D tmp_floor_sum; - if (virNetDevBandwidthUpdateRate(obj->def->bridge, 2, - obj->def->bandwidth, new_rate) < = 0) + if (virNetDevBandwidthUpdateRate(def->bridge, 2, + def->bandwidth, new_rate) < 0) VIR_WARN("Unable to update rate for 1:2 class on %s bridge", - obj->def->bridge); + def->bridge); /* no class is associated any longer */ iface->data.network.actual->class_id =3D 0; } @@ -5514,14 +5553,14 @@ static void networkNetworkObjTaint(virNetworkObjPtr obj, virNetworkTaintFlags taint) { + virNetworkDefPtr def =3D virNetworkObjGetDef(obj); + if (virNetworkObjTaint(obj, taint)) { char uuidstr[VIR_UUID_STRING_BUFLEN]; - virUUIDFormat(obj->def->uuid, uuidstr); + virUUIDFormat(def->uuid, uuidstr); =20 VIR_WARN("Network name=3D'%s' uuid=3D%s is tainted: %s", - obj->def->name, - uuidstr, - virNetworkTaintTypeToString(taint)); + def->name, uuidstr, virNetworkTaintTypeToString(taint)); } } =20 @@ -5588,6 +5627,7 @@ networkBandwidthUpdate(virDomainNetDefPtr iface, { virNetworkDriverStatePtr driver =3D networkGetDriver(); virNetworkObjPtr obj =3D NULL; + virNetworkDefPtr def; unsigned long long tmp_floor_sum; virNetDevBandwidthPtr ifaceBand =3D virDomainNetGetActualBandwidth(ifa= ce); unsigned long long new_rate =3D 0; @@ -5604,6 +5644,7 @@ networkBandwidthUpdate(virDomainNetDefPtr iface, iface->data.network.name); return ret; } + def =3D virNetworkObjGetDef(obj); =20 if ((plug_ret =3D networkCheckBandwidth(obj, newBandwidth, ifaceBand, iface->mac, &new_rate)) < 0) { @@ -5623,9 +5664,9 @@ networkBandwidthUpdate(virDomainNetDefPtr iface, newBandwidth->in && newBandwidth->in->floor) { /* Either we just need to update @floor .. */ =20 - if (virNetDevBandwidthUpdateRate(obj->def->bridge, + if (virNetDevBandwidthUpdateRate(def->bridge, iface->data.network.actual->class= _id, - obj->def->bandwidth, + def->bandwidth, newBandwidth->in->floor) < 0) goto cleanup; =20 @@ -5635,17 +5676,17 @@ networkBandwidthUpdate(virDomainNetDefPtr iface, virNetworkObjSetFloorSum(obj, tmp_floor_sum); new_rate -=3D tmp_floor_sum; =20 - if (virNetDevBandwidthUpdateRate(obj->def->bridge, 2, - obj->def->bandwidth, new_rate) < = 0 || + if (virNetDevBandwidthUpdateRate(def->bridge, 2, + def->bandwidth, new_rate) < 0 || virNetworkObjSaveStatus(driver->stateDir, obj) < 0) { /* Ouch, rollback */ tmp_floor_sum -=3D newBandwidth->in->floor; tmp_floor_sum +=3D ifaceBand->in->floor; virNetworkObjSetFloorSum(obj, tmp_floor_sum); =20 - ignore_value(virNetDevBandwidthUpdateRate(obj->def->bridge, + ignore_value(virNetDevBandwidthUpdateRate(def->bridge, iface->data.network.= actual->class_id, - obj->def->bandwidth, + def->bandwidth, ifaceBand->in->floor= )); goto cleanup; } diff --git a/src/test/test_driver.c b/src/test/test_driver.c index bf1344b..868aa27 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -3233,12 +3233,14 @@ testNetworkLookupByUUID(virConnectPtr conn, { testDriverPtr privconn =3D conn->privateData; virNetworkObjPtr obj; + virNetworkDefPtr def; virNetworkPtr net =3D NULL; =20 if (!(obj =3D testNetworkObjFindByUUID(privconn, uuid))) goto cleanup; + def =3D virNetworkObjGetDef(obj); =20 - net =3D virGetNetwork(conn, obj->def->name, obj->def->uuid); + net =3D virGetNetwork(conn, def->name, def->uuid); =20 cleanup: virNetworkObjEndAPI(&obj); @@ -3267,12 +3269,14 @@ testNetworkLookupByName(virConnectPtr conn, { testDriverPtr privconn =3D conn->privateData; virNetworkObjPtr obj; + virNetworkDefPtr def; virNetworkPtr net =3D NULL; =20 if (!(obj =3D testNetworkObjFindByName(privconn, name))) goto cleanup; + def =3D virNetworkObjGetDef(obj); =20 - net =3D virGetNetwork(conn, obj->def->name, obj->def->uuid); + net =3D virGetNetwork(conn, def->name, def->uuid); =20 cleanup: virNetworkObjEndAPI(&obj); @@ -3385,29 +3389,31 @@ static virNetworkPtr testNetworkCreateXML(virConnectPtr conn, const char *xml) { testDriverPtr privconn =3D conn->privateData; - virNetworkDefPtr def; + virNetworkDefPtr newDef; virNetworkObjPtr obj =3D NULL; + virNetworkDefPtr def; virNetworkPtr net =3D NULL; virObjectEventPtr event =3D NULL; =20 - if ((def =3D virNetworkDefParseString(xml)) =3D=3D NULL) + if ((newDef =3D virNetworkDefParseString(xml)) =3D=3D NULL) goto cleanup; =20 - if (!(obj =3D virNetworkObjAssignDef(privconn->networks, def, + if (!(obj =3D virNetworkObjAssignDef(privconn->networks, newDef, VIR_NETWORK_OBJ_LIST_ADD_LIVE | VIR_NETWORK_OBJ_LIST_ADD_CHECK_LIVE= ))) goto cleanup; - def =3D NULL; + newDef =3D NULL; + def =3D virNetworkObjGetDef(obj); obj->active =3D 1; =20 - event =3D virNetworkEventLifecycleNew(obj->def->name, obj->def->uuid, + event =3D virNetworkEventLifecycleNew(def->name, def->uuid, VIR_NETWORK_EVENT_STARTED, 0); =20 - net =3D virGetNetwork(conn, obj->def->name, obj->def->uuid); + net =3D virGetNetwork(conn, def->name, def->uuid); =20 cleanup: - virNetworkDefFree(def); + virNetworkDefFree(newDef); testObjectEventQueue(privconn, event); virNetworkObjEndAPI(&obj); return net; @@ -3419,26 +3425,28 @@ testNetworkDefineXML(virConnectPtr conn, const char *xml) { testDriverPtr privconn =3D conn->privateData; - virNetworkDefPtr def; + virNetworkDefPtr newDef; virNetworkObjPtr obj =3D NULL; + virNetworkDefPtr def; virNetworkPtr net =3D NULL; virObjectEventPtr event =3D NULL; =20 - if ((def =3D virNetworkDefParseString(xml)) =3D=3D NULL) + if ((newDef =3D virNetworkDefParseString(xml)) =3D=3D NULL) goto cleanup; =20 - if (!(obj =3D virNetworkObjAssignDef(privconn->networks, def, 0))) + if (!(obj =3D virNetworkObjAssignDef(privconn->networks, newDef, 0))) goto cleanup; - def =3D NULL; + newDef =3D NULL; + def =3D virNetworkObjGetDef(obj); =20 - event =3D virNetworkEventLifecycleNew(obj->def->name, obj->def->uuid, + event =3D virNetworkEventLifecycleNew(def->name, def->uuid, VIR_NETWORK_EVENT_DEFINED, 0); =20 - net =3D virGetNetwork(conn, obj->def->name, obj->def->uuid); + net =3D virGetNetwork(conn, def->name, def->uuid); =20 cleanup: - virNetworkDefFree(def); + virNetworkDefFree(newDef); testObjectEventQueue(privconn, event); virNetworkObjEndAPI(&obj); return net; @@ -3524,11 +3532,13 @@ testNetworkCreate(virNetworkPtr net) { testDriverPtr privconn =3D net->conn->privateData; virNetworkObjPtr obj; + virNetworkDefPtr def; int ret =3D -1; virObjectEventPtr event =3D NULL; =20 if (!(obj =3D testNetworkObjFindByName(privconn, net->name))) goto cleanup; + def =3D virNetworkObjGetDef(obj); =20 if (virNetworkObjIsActive(obj)) { virReportError(VIR_ERR_OPERATION_INVALID, @@ -3537,7 +3547,7 @@ testNetworkCreate(virNetworkPtr net) } =20 obj->active =3D 1; - event =3D virNetworkEventLifecycleNew(obj->def->name, obj->def->uuid, + event =3D virNetworkEventLifecycleNew(def->name, def->uuid, VIR_NETWORK_EVENT_STARTED, 0); ret =3D 0; @@ -3554,14 +3564,16 @@ testNetworkDestroy(virNetworkPtr net) { testDriverPtr privconn =3D net->conn->privateData; virNetworkObjPtr obj; + virNetworkDefPtr def; int ret =3D -1; virObjectEventPtr event =3D NULL; =20 if (!(obj =3D testNetworkObjFindByName(privconn, net->name))) goto cleanup; + def =3D virNetworkObjGetDef(obj); =20 obj->active =3D 0; - event =3D virNetworkEventLifecycleNew(obj->def->name, obj->def->uuid, + event =3D virNetworkEventLifecycleNew(def->name, def->uuid, VIR_NETWORK_EVENT_STOPPED, 0); if (!obj->persistent) @@ -3589,7 +3601,7 @@ testNetworkGetXMLDesc(virNetworkPtr net, if (!(obj =3D testNetworkObjFindByName(privconn, net->name))) goto cleanup; =20 - ret =3D virNetworkDefFormat(obj->def, flags); + ret =3D virNetworkDefFormat(virNetworkObjGetDef(obj), flags); =20 cleanup: virNetworkObjEndAPI(&obj); @@ -3603,18 +3615,20 @@ testNetworkGetBridgeName(virNetworkPtr net) testDriverPtr privconn =3D net->conn->privateData; char *bridge =3D NULL; virNetworkObjPtr obj; + virNetworkDefPtr def; =20 if (!(obj =3D testNetworkObjFindByName(privconn, net->name))) goto cleanup; + def =3D virNetworkObjGetDef(obj); =20 - if (!(obj->def->bridge)) { + if (!(def->bridge)) { virReportError(VIR_ERR_INTERNAL_ERROR, _("network '%s' does not have a bridge name."), - obj->def->name); + def->name); goto cleanup; } =20 - ignore_value(VIR_STRDUP(bridge, obj->def->bridge)); + ignore_value(VIR_STRDUP(bridge, def->bridge)); =20 cleanup: virNetworkObjEndAPI(&obj); diff --git a/tests/networkxml2conftest.c b/tests/networkxml2conftest.c index ab3c13a..6841810 100644 --- a/tests/networkxml2conftest.c +++ b/tests/networkxml2conftest.c @@ -23,20 +23,21 @@ testCompareXMLToConfFiles(const char *inxml, const char= *outconf, dnsmasqCapsPtr { char *actual =3D NULL; int ret =3D -1; - virNetworkDefPtr dev =3D NULL; + virNetworkDefPtr def =3D NULL; virNetworkObjPtr obj =3D NULL; virCommandPtr cmd =3D NULL; char *pidfile =3D NULL; dnsmasqContext *dctx =3D NULL; =20 - if (!(dev =3D virNetworkDefParseFile(inxml))) + if (!(def =3D virNetworkDefParseFile(inxml))) goto fail; =20 if (!(obj =3D virNetworkObjNew())) goto fail; =20 - obj->def =3D dev; - dctx =3D dnsmasqContextNew(dev->name, "/var/lib/libvirt/dnsmasq"); + virNetworkObjSetDef(obj, def); + + dctx =3D dnsmasqContextNew(def->name, "/var/lib/libvirt/dnsmasq"); =20 if (dctx =3D=3D NULL) goto fail; --=20 2.9.4 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list