On 07/26/2017 11:05 AM, John Ferlan wrote: > 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 <jferlan@xxxxxxxxxx> > --- > 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(-) > Some extended avocado-vt testing found a couple of interesting things w/r/t this patch... The long and short of it is that virNetworkObjUnsetTransientDef, virNetworkObjReplacePersistentDef, and virNetworkObjUpdate will change/swap obj->def - so callers that have already fetched @def would need to fetch it again (instead of the previous obj->def->X). Also networkRunHook could be passed a NULL @obj, so instead of fetching @def at the top, wait until the "if (!obj)" is successful before fetching. I've attached something that I'll squash in before pushing... John > 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) > } > > > +virNetworkDefPtr > +virNetworkObjGetDef(virNetworkObjPtr obj) > +{ > + return obj->def; > +} > + > + > +void > +virNetworkObjSetDef(virNetworkObjPtr obj, > + virNetworkDefPtr def) > +{ > + obj->def = 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); > > +virNetworkDefPtr > +virNetworkObjGetDef(virNetworkObjPtr obj); > + > +void > +virNetworkObjSetDef(virNetworkObjPtr obj, > + virNetworkDefPtr def); > + > +virNetworkDefPtr > +virNetworkObjGetNewDef(virNetworkObjPtr obj); > + > virMacMapPtr > virNetworkObjGetMacMap(virNetworkObjPtr obj); > > 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 = virNetworkObjGetDef(obj); > virBuffer buf = VIR_BUFFER_INITIALIZER; > char *xml = NULL, *net_xml = NULL, *dom_xml = 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; > > xml = virBufferContentAndReset(&buf); > - hookret = virHookCall(VIR_HOOK_DRIVER_NETWORK, obj->def->name, > + hookret = virHookCall(VIR_HOOK_DRIVER_NETWORK, def->name, > op, sub_op, NULL, xml, NULL); > > /* > @@ -429,6 +430,7 @@ static int > networkUpdateState(virNetworkObjPtr obj, > void *opaque) > { > + virNetworkDefPtr def; > virNetworkDriverStatePtr driver = opaque; > dnsmasqCapsPtr dnsmasq_caps = networkGetDnsmasqCaps(driver); > virMacMapPtr macmap; > @@ -440,18 +442,19 @@ networkUpdateState(virNetworkObjPtr obj, > ret = 0; > goto cleanup; > } > + def = virNetworkObjGetDef(obj); > > - 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) == 1)) > + if (!(def->bridge && virNetDevExists(def->bridge) == 1)) > obj->active = 0; > > if (!(macMapFile = virMacMapFileName(driver->dnsmasqStateDir, > - obj->def->bridge))) > + def->bridge))) > goto cleanup; > > if (!(macmap = virMacMapNew(macMapFile))) > @@ -462,8 +465,8 @@ networkUpdateState(virNetworkObjPtr obj, > break; > > case VIR_NETWORK_FORWARD_BRIDGE: > - if (obj->def->bridge) { > - if (virNetDevExists(obj->def->bridge) != 1) > + if (def->bridge) { > + if (virNetDevExists(def->bridge) != 1) > obj->active = 0; > break; > } > @@ -483,18 +486,18 @@ networkUpdateState(virNetworkObjPtr obj, > } > > /* 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; > > ignore_value(virPidFileReadIfAlive(driver->pidDir, > - obj->def->name, > + def->name, > &dnsmasqPid, > dnsmasqCapsGetBinaryPath(dnsmasq_caps))); > virNetworkObjSetDnsmasqPid(obj, dnsmasqPid); > > - radvdpidbase = networkRadvdPidfileBasename(obj->def->name); > + radvdpidbase = networkRadvdPidfileBasename(def->name); > if (!radvdpidbase) > goto cleanup; > > @@ -1016,11 +1019,12 @@ networkDnsmasqConfContents(virNetworkObjPtr obj, > dnsmasqContext *dctx, > dnsmasqCapsPtr caps ATTRIBUTE_UNUSED) > { > + virNetworkDefPtr def = virNetworkObjGetDef(obj); > virBuffer configbuf = VIR_BUFFER_INITIALIZER; > int r, ret = -1; > int nbleases = 0; > size_t i; > - virNetworkDNSDefPtr dns = &obj->def->dns; > + virNetworkDNSDefPtr dns = &def->dns; > bool wantDNS = dns->enable != 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); > > /* 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=0\n"); > > - 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 = false; > > - for (i = 0; i < obj->def->dns.nfwds; i++) { > - virNetworkDNSForwarderPtr fwd = &obj->def->dns.forwarders[i]; > + for (i = 0; i < def->dns.nfwds; i++) { > + virNetworkDNSForwarderPtr fwd = &def->dns.forwarders[i]; > > virBufferAddLit(&configbuf, "server="); > if (fwd->domain) > @@ -1096,23 +1100,23 @@ networkDnsmasqConfContents(virNetworkObjPtr obj, > virBufferAddLit(&configbuf, "no-resolv\n"); > } > > - if (obj->def->domain) { > - if (obj->def->domainLocalOnly == VIR_TRISTATE_BOOL_YES) { > + if (def->domain) { > + if (def->domainLocalOnly == VIR_TRISTATE_BOOL_YES) { > virBufferAsprintf(&configbuf, > "local=/%s/\n", > - obj->def->domain); > + def->domain); > } > virBufferAsprintf(&configbuf, > "domain=%s\n" > "expand-hosts\n", > - obj->def->domain); > + def->domain); > } > > if (wantDNS && > - networkDnsmasqConfLocalPTRs(&configbuf, obj->def) < 0) > + networkDnsmasqConfLocalPTRs(&configbuf, def) < 0) > goto cleanup; > > - if (wantDNS && obj->def->dns.forwardPlainNames == VIR_TRISTATE_BOOL_NO) { > + if (wantDNS && def->dns.forwardPlainNames == VIR_TRISTATE_BOOL_NO) { > virBufferAddLit(&configbuf, "domain-needed\n"); > /* need to specify local=// 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=%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 = 0; > - (tmpipdef = virNetworkDefGetIPByIndex(obj->def, AF_UNSPEC, i)); > + (tmpipdef = virNetworkDefGetIPByIndex(def, AF_UNSPEC, i)); > i++) { > char *ipaddr = virSocketAddrFormat(&tmpipdef->address); > > @@ -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 == VIR_NETWORK_FORWARD_NONE) { > + if (def->forward.type == VIR_NETWORK_FORWARD_NONE) { > virBufferAddLit(&configbuf, "dhcp-option=3\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, > > /* Find the first dhcp for both IPv4 and IPv6 */ > for (i = 0, ipv4def = NULL, ipv6def = NULL, ipv6SLAAC = false; > - (ipdef = virNetworkDefGetIPByIndex(obj->def, AF_UNSPEC, i)); > + (ipdef = 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 = 0; r < ipdef->nranges; r++) { > @@ -1442,7 +1446,7 @@ networkDnsmasqConfContents(virNetworkObjPtr obj, > virBufferAddLit(&configbuf, "enable-ra\n"); > } else { > for (i = 0; > - (ipdef = virNetworkDefGetIPByIndex(obj->def, AF_INET6, i)); > + (ipdef = virNetworkDefGetIPByIndex(def, AF_INET6, i)); > i++) { > if (!(ipdef->nranges || ipdef->nhosts)) { > char *bridgeaddr = virSocketAddrFormat(&ipdef->address); > @@ -1477,6 +1481,7 @@ networkBuildDhcpDaemonCommandLine(virNetworkDriverStatePtr driver, > char *pidfile, > dnsmasqContext *dctx) > { > + virNetworkDefPtr def = virNetworkObjGetDef(obj); > dnsmasqCapsPtr dnsmasq_caps = networkGetDnsmasqCaps(driver); > virCommandPtr cmd = NULL; > int ret = -1; > @@ -1493,7 +1498,7 @@ networkBuildDhcpDaemonCommandLine(virNetworkDriverStatePtr driver, > goto cleanup; > > /* construct the filename */ > - if (!(configfile = networkDnsmasqConfigFileName(driver, obj->def->name))) > + if (!(configfile = networkDnsmasqConfigFileName(driver, def->name))) > goto cleanup; > > /* Write the file */ > @@ -1515,7 +1520,7 @@ networkBuildDhcpDaemonCommandLine(virNetworkDriverStatePtr driver, > /* Libvirt gains full control of leases database */ > virCommandAddArgFormat(cmd, "--leasefile-ro"); > virCommandAddArgFormat(cmd, "--dhcp-script=%s", leaseshelper_path); > - virCommandAddEnvPair(cmd, "VIR_BRIDGE_NAME", obj->def->bridge); > + virCommandAddEnvPair(cmd, "VIR_BRIDGE_NAME", def->bridge); > > *cmdout = cmd; > ret = 0; > @@ -1532,6 +1537,7 @@ static int > networkStartDhcpDaemon(virNetworkDriverStatePtr driver, > virNetworkObjPtr obj) > { > + virNetworkDefPtr def = virNetworkObjGetDef(obj); > virNetworkIPDefPtr ipdef; > size_t i; > bool needDnsmasq = false; > @@ -1543,7 +1549,7 @@ networkStartDhcpDaemon(virNetworkDriverStatePtr driver, > > /* see if there are any IP addresses that need a dhcp server */ > i = 0; > - while ((ipdef = virNetworkDefGetIPByIndex(obj->def, AF_UNSPEC, i))) { > + while ((ipdef = virNetworkDefGetIPByIndex(def, AF_UNSPEC, i))) { > i++; > if (ipdef->nranges || ipdef->nhosts) > needDnsmasq = true; > @@ -1555,7 +1561,7 @@ networkStartDhcpDaemon(virNetworkDriverStatePtr driver, > goto cleanup; > } > > - if (!needDnsmasq && obj->def->dns.enable == VIR_TRISTATE_BOOL_NO) { > + if (!needDnsmasq && def->dns.enable == VIR_TRISTATE_BOOL_NO) { > /* no DHCP services needed, and user disabled DNS service */ > ret = 0; > goto cleanup; > @@ -1568,8 +1574,7 @@ networkStartDhcpDaemon(virNetworkDriverStatePtr driver, > goto cleanup; > } > > - if (!(pidfile = virPidFileBuildPath(driver->pidDir, > - obj->def->name))) > + if (!(pidfile = virPidFileBuildPath(driver->pidDir, def->name))) > goto cleanup; > > if (virFileMakePath(driver->dnsmasqStateDir) < 0) { > @@ -1579,7 +1584,7 @@ networkStartDhcpDaemon(virNetworkDriverStatePtr driver, > goto cleanup; > } > > - dctx = dnsmasqContextNew(obj->def->name, driver->dnsmasqStateDir); > + dctx = dnsmasqContextNew(def->name, driver->dnsmasqStateDir); > if (dctx == NULL) > goto cleanup; > > @@ -1606,7 +1611,7 @@ networkStartDhcpDaemon(virNetworkDriverStatePtr driver, > * pid > */ > > - ret = virPidFileRead(driver->pidDir, obj->def->name, &dnsmasqPid); > + ret = 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 = virNetworkObjGetDef(obj); > int ret = -1; > size_t i; > pid_t dnsmasqPid; > @@ -1638,7 +1644,7 @@ networkRefreshDhcpDaemon(virNetworkDriverStatePtr driver, > dnsmasqContext *dctx = NULL; > > /* if no IP addresses specified, nothing to do */ > - if (!virNetworkDefGetIPByIndex(obj->def, AF_UNSPEC, 0)) > + if (!virNetworkDefGetIPByIndex(def, AF_UNSPEC, 0)) > return 0; > > /* if there's no running dnsmasq, just start it */ > @@ -1646,8 +1652,8 @@ networkRefreshDhcpDaemon(virNetworkDriverStatePtr driver, > if (dnsmasqPid <= 0 || (kill(dnsmasqPid, 0) < 0)) > return networkStartDhcpDaemon(driver, obj); > > - VIR_INFO("Refreshing dnsmasq for network %s", obj->def->bridge); > - if (!(dctx = dnsmasqContextNew(obj->def->name, > + VIR_INFO("Refreshing dnsmasq for network %s", def->bridge); > + if (!(dctx = dnsmasqContextNew(def->name, > driver->dnsmasqStateDir))) { > goto cleanup; > } > @@ -1658,7 +1664,7 @@ networkRefreshDhcpDaemon(virNetworkDriverStatePtr driver, > */ > ipv4def = NULL; > for (i = 0; > - (ipdef = virNetworkDefGetIPByIndex(obj->def, AF_INET, i)); > + (ipdef = virNetworkDefGetIPByIndex(def, AF_INET, i)); > i++) { > if (!ipv4def && (ipdef->nranges || ipdef->nhosts)) > ipv4def = ipdef; > @@ -1666,7 +1672,7 @@ networkRefreshDhcpDaemon(virNetworkDriverStatePtr driver, > > ipv6def = NULL; > for (i = 0; > - (ipdef = virNetworkDefGetIPByIndex(obj->def, AF_INET6, i)); > + (ipdef = virNetworkDefGetIPByIndex(def, AF_INET6, i)); > i++) { > if (!ipv6def && (ipdef->nranges || ipdef->nhosts)) > ipv6def = ipdef; > @@ -1678,7 +1684,7 @@ networkRefreshDhcpDaemon(virNetworkDriverStatePtr driver, > if (ipv6def && (networkBuildDnsmasqDhcpHostsList(dctx, ipv6def) < 0)) > goto cleanup; > > - if (networkBuildDnsmasqHostsList(dctx, &obj->def->dns) < 0) > + if (networkBuildDnsmasqHostsList(dctx, &def->dns) < 0) > goto cleanup; > > if ((ret = dnsmasqSave(dctx)) < 0) > @@ -1703,11 +1709,12 @@ static int > networkRestartDhcpDaemon(virNetworkDriverStatePtr driver, > virNetworkObjPtr obj) > { > + virNetworkDefPtr def = virNetworkObjGetDef(obj); > pid_t dnsmasqPid = virNetworkObjGetDnsmasqPid(obj); > > /* 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 = virNetworkObjGetDef(obj); > virBuffer configbuf = VIR_BUFFER_INITIALIZER; > int ret = -1; > size_t i; > @@ -1734,9 +1742,7 @@ networkRadvdConfContents(virNetworkObjPtr obj, > *configstr = NULL; > > /* Check if DHCPv6 is needed */ > - for (i = 0; > - (ipdef = virNetworkDefGetIPByIndex(obj->def, AF_INET6, i)); > - i++) { > + for (i = 0; (ipdef = virNetworkDefGetIPByIndex(def, AF_INET6, i)); i++) { > v6present = true; > if (ipdef->nranges || ipdef->nhosts) { > dhcp6 = 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); > > /* add a section for each IPv6 address in the config */ > - for (i = 0; > - (ipdef = virNetworkDefGetIPByIndex(obj->def, AF_INET6, i)); > - i++) { > + for (i = 0; (ipdef = virNetworkDefGetIPByIndex(def, AF_INET6, i)); i++) { > int prefix; > char *netaddr; > > @@ -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 = virSocketAddrFormat(&ipdef->address))) > @@ -1807,6 +1811,7 @@ networkRadvdConfWrite(virNetworkDriverStatePtr driver, > virNetworkObjPtr obj, > char **configFile) > { > + virNetworkDefPtr def = virNetworkObjGetDef(obj); > int ret = -1; > char *configStr = NULL; > char *myConfigFile = NULL; > @@ -1825,7 +1830,7 @@ networkRadvdConfWrite(virNetworkDriverStatePtr driver, > } > > /* construct the filename */ > - if (!(*configFile = networkRadvdConfigFileName(driver, obj->def->name))) > + if (!(*configFile = 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 = virNetworkObjGetDef(obj); > dnsmasqCapsPtr dnsmasq_caps = networkGetDnsmasqCaps(driver); > pid_t radvdPid; > char *pidfile = NULL; > @@ -1863,7 +1869,7 @@ networkStartRadvd(virNetworkDriverStatePtr driver, > goto cleanup; > } > > - 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 = 0; > goto cleanup; > @@ -1891,7 +1897,7 @@ networkStartRadvd(virNetworkDriverStatePtr driver, > } > > /* construct pidfile name */ > - if (!(radvdpidbase = networkRadvdPidfileBasename(obj->def->name))) > + if (!(radvdpidbase = networkRadvdPidfileBasename(def->name))) > goto cleanup; > if (!(pidfile = virPidFileBuildPath(driver->pidDir, radvdpidbase))) > goto cleanup; > @@ -1938,6 +1944,7 @@ static int > networkRefreshRadvd(virNetworkDriverStatePtr driver, > virNetworkObjPtr obj) > { > + virNetworkDefPtr def = virNetworkObjGetDef(obj); > dnsmasqCapsPtr dnsmasq_caps = networkGetDnsmasqCaps(driver); > char *radvdpidbase; > pid_t radvdPid; > @@ -1949,8 +1956,8 @@ networkRefreshRadvd(virNetworkDriverStatePtr driver, > if (radvdPid <= 0) > return 0; > /* radvd should not be running but in case it is */ > - if ((networkKillDaemon(radvdPid, "radvd", obj->def->name) >= 0) && > - ((radvdpidbase = networkRadvdPidfileBasename(obj->def->name)) > + if ((networkKillDaemon(radvdPid, "radvd", def->name) >= 0) && > + ((radvdpidbase = networkRadvdPidfileBasename(def->name)) > != NULL)) { > virPidFileDelete(driver->pidDir, radvdpidbase); > VIR_FREE(radvdpidbase); > @@ -1965,7 +1972,7 @@ networkRefreshRadvd(virNetworkDriverStatePtr driver, > if (radvdPid <= 0 || (kill(radvdPid, 0) < 0)) > return networkStartRadvd(driver, obj); > > - 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 = virNetworkObjGetDef(obj); > char *radvdpidbase; > pid_t radvdPid = virNeworkObjGetRadvdPid(obj); > > @@ -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) >= 0) && > - ((radvdpidbase = networkRadvdPidfileBasename(obj->def->name)) > + if ((networkKillDaemon(radvdPid, "radvd", def->name) >= 0) && > + ((radvdpidbase = networkRadvdPidfileBasename(def->name)) > != NULL)) { > virPidFileDelete(driver->pidDir, radvdpidbase); > VIR_FREE(radvdpidbase); > @@ -2010,14 +2017,16 @@ static int > networkRefreshDaemonsHelper(virNetworkObjPtr obj, > void *opaque) > { > + virNetworkDefPtr def; > virNetworkDriverStatePtr driver = opaque; > > virObjectLock(obj); > + def = virNetworkObjGetDef(obj); > if (virNetworkObjIsActive(obj) && > - ((obj->def->forward.type == VIR_NETWORK_FORWARD_NONE) || > - (obj->def->forward.type == VIR_NETWORK_FORWARD_NAT) || > - (obj->def->forward.type == VIR_NETWORK_FORWARD_ROUTE) || > - (obj->def->forward.type == VIR_NETWORK_FORWARD_OPEN))) { > + ((def->forward.type == VIR_NETWORK_FORWARD_NONE) || > + (def->forward.type == VIR_NETWORK_FORWARD_NAT) || > + (def->forward.type == VIR_NETWORK_FORWARD_ROUTE) || > + (def->forward.type == 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; > > virObjectLock(obj); > + def = virNetworkObjGetDef(obj); > if (virNetworkObjIsActive(obj) && > - ((obj->def->forward.type == VIR_NETWORK_FORWARD_NONE) || > - (obj->def->forward.type == VIR_NETWORK_FORWARD_NAT) || > - (obj->def->forward.type == VIR_NETWORK_FORWARD_ROUTE))) { > + ((def->forward.type == VIR_NETWORK_FORWARD_NONE) || > + (def->forward.type == VIR_NETWORK_FORWARD_NAT) || > + (def->forward.type == 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='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 = virNetworkObjGetDef(obj); > char *field = NULL; > int ret = -1; > - bool enableIPv6 = !!virNetworkDefGetIPByIndex(obj->def, AF_INET6, 0); > + bool enableIPv6 = !!virNetworkDefGetIPByIndex(def, AF_INET6, 0); > > /* 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; > > if (access(field, W_OK) < 0 && errno == ENOENT) { > if (!enableIPv6) > VIR_DEBUG("ipv6 appears to already be disabled on %s", > - obj->def->bridge); > + def->bridge); > ret = 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; > > if (virFileWriteStr(field, "0", 0) < 0) { > @@ -2158,7 +2170,7 @@ networkSetIPv6Sysctls(virNetworkObjPtr obj) > * definition), must always have autoconf=0. > */ > if (virAsprintf(&field, SYSCTL_PATH "/net/ipv6/conf/%s/autoconf", > - obj->def->bridge) < 0) > + def->bridge) < 0) > goto cleanup; > > if (virFileWriteStr(field, "0", 0) < 0) { > @@ -2179,17 +2191,17 @@ static int > networkAddAddrToBridge(virNetworkObjPtr obj, > virNetworkIPDefPtr ipdef) > { > + virNetworkDefPtr def = virNetworkObjGetDef(obj); > int prefix = virNetworkIPDefPrefix(ipdef); > > if (prefix < 0) { > virReportError(VIR_ERR_INTERNAL_ERROR, > _("bridge '%s' has an invalid netmask or IP address"), > - obj->def->bridge); > + def->bridge); > return -1; > } > > - if (virNetDevIPAddrAdd(obj->def->bridge, > - &ipdef->address, NULL, prefix) < 0) > + if (virNetDevIPAddrAdd(def->bridge, &ipdef->address, NULL, prefix) < 0) > return -1; > > return 0; > @@ -2200,11 +2212,11 @@ static int > networkStartHandleMACTableManagerMode(virNetworkObjPtr obj, > const char *macTapIfName) > { > - const char *brname = obj->def->bridge; > + virNetworkDefPtr def = virNetworkObjGetDef(obj); > + const char *brname = def->bridge; > > if (brname && > - obj->def->macTableManager > - == VIR_NETWORK_BRIDGE_MAC_TABLE_MANAGER_LIBVIRT) { > + def->macTableManager == VIR_NETWORK_BRIDGE_MAC_TABLE_MANAGER_LIBVIRT) { > if (virNetDevBridgeSetVlanFiltering(brname, true) < 0) > return -1; > if (macTapIfName) { > @@ -2223,6 +2235,7 @@ static int > networkAddRouteToBridge(virNetworkObjPtr obj, > virNetDevIPRoutePtr routedef) > { > + virNetworkDefPtr def = virNetworkObjGetDef(obj); > int prefix = virNetDevIPRouteGetPrefix(routedef); > unsigned int metric = virNetDevIPRouteGetMetric(routedef); > virSocketAddrPtr addr = 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; > } > > - if (virNetDevIPRouteAdd(obj->def->bridge, addr, > - prefix, gateway, metric) < 0) { > + if (virNetDevIPRouteAdd(def->bridge, addr, prefix, gateway, metric) < 0) > return -1; > - } > + > return 0; > } > > static int > networkWaitDadFinish(virNetworkObjPtr obj) > { > + virNetworkDefPtr def = virNetworkObjGetDef(obj); > virNetworkIPDefPtr ipdef; > virSocketAddrPtr *addrs = NULL, addr = NULL; > size_t naddrs = 0; > int ret = -1; > > - 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); > > - while ((ipdef = virNetworkDefGetIPByIndex(obj->def, AF_INET6, naddrs))) { > + while ((ipdef = virNetworkDefGetIPByIndex(def, AF_INET6, naddrs))) { > addr = &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; > } > > @@ -2273,6 +2286,7 @@ static int > networkStartNetworkVirtual(virNetworkDriverStatePtr driver, > virNetworkObjPtr obj) > { > + virNetworkDefPtr def = virNetworkObjGetDef(obj); > size_t i; > bool v4present = false, v6present = false; > virErrorPtr save_err = NULL; > @@ -2285,11 +2299,11 @@ networkStartNetworkVirtual(virNetworkDriverStatePtr driver, > pid_t dnsmasqPid; > > /* Check to see if any network IP collides with an existing route */ > - if (networkCheckRouteCollision(obj->def) < 0) > + if (networkCheckRouteCollision(def) < 0) > return -1; > > /* 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; > > - 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 = networkBridgeDummyNicName(obj->def->bridge); > + macTapIfName = networkBridgeDummyNicName(def->bridge); > if (!macTapIfName) > goto err0; > /* Keep tun fd open and interface up to allow for IPv6 DAD to happen */ > - if (virNetDevTapCreateInBridgePort(obj->def->bridge, > - &macTapIfName, &obj->def->mac, > + if (virNetDevTapCreateInBridgePort(def->bridge, > + &macTapIfName, &def->mac, > NULL, NULL, &tapfd, 1, NULL, NULL, > - NULL, obj->def->mtu, NULL, > + NULL, def->mtu, NULL, > VIR_NETDEV_TAP_CREATE_USE_MAC_FOR_BRIDGE | > VIR_NETDEV_TAP_CREATE_IFUP | > VIR_NETDEV_TAP_CREATE_PERSIST) < 0) { > @@ -2330,7 +2344,7 @@ networkStartNetworkVirtual(virNetworkDriverStatePtr driver, > } > > if (!(macMapFile = virMacMapFileName(driver->dnsmasqStateDir, > - obj->def->bridge)) || > + def->bridge)) || > !(macmap = virMacMapNew(macMapFile))) > goto err1; > > @@ -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; > > - if (virNetDevBridgeSetSTP(obj->def->bridge, > - obj->def->stp ? true : false) < 0) > + if (virNetDevBridgeSetSTP(def->bridge, def->stp ? true : false) < 0) > goto err1; > > /* Disable IPv6 on the bridge if there are no IPv6 addresses > @@ -2356,13 +2368,11 @@ networkStartNetworkVirtual(virNetworkDriverStatePtr driver, > goto err1; > > /* Add "once per network" rules */ > - if (obj->def->forward.type != VIR_NETWORK_FORWARD_OPEN && > - networkAddFirewallRules(obj->def) < 0) > + if (def->forward.type != VIR_NETWORK_FORWARD_OPEN && > + networkAddFirewallRules(def) < 0) > goto err1; > > - for (i = 0; > - (ipdef = virNetworkDefGetIPByIndex(obj->def, AF_UNSPEC, i)); > - i++) { > + for (i = 0; (ipdef = virNetworkDefGetIPByIndex(def, AF_UNSPEC, i)); i++) { > if (VIR_SOCKET_ADDR_IS_FAMILY(&ipdef->address, AF_INET)) > v4present = true; > if (VIR_SOCKET_ADDR_IS_FAMILY(&ipdef->address, AF_INET6)) > @@ -2377,13 +2387,13 @@ networkStartNetworkVirtual(virNetworkDriverStatePtr driver, > goto err2; > > /* Bring up the bridge interface */ > - if (virNetDevSetOnline(obj->def->bridge, 1) < 0) > + if (virNetDevSetOnline(def->bridge, 1) < 0) > goto err2; > > - for (i = 0; i < obj->def->nroutes; i++) { > + for (i = 0; i < def->nroutes; i++) { > virSocketAddrPtr gateway = NULL; > > - routedef = obj->def->routes[i]; > + routedef = def->routes[i]; > gateway = virNetDevIPRouteGetGateway(routedef); > > /* Add the IP route to the bridge */ > @@ -2398,7 +2408,7 @@ networkStartNetworkVirtual(virNetworkDriverStatePtr driver, > } > > /* If forward.type != NONE, turn on global IP forwarding */ > - if (obj->def->forward.type != VIR_NETWORK_FORWARD_NONE) { > + if (def->forward.type != VIR_NETWORK_FORWARD_NONE) { > if (v6present && !virNetDevIPCheckIPv6Forwarding()) > goto err3; /* Precise error message already provided */ > > @@ -2434,7 +2444,7 @@ networkStartNetworkVirtual(virNetworkDriverStatePtr driver, > VIR_FORCE_CLOSE(tapfd); > } > > - if (virNetDevBandwidthSet(obj->def->bridge, obj->def->bandwidth, true) < 0) > + if (virNetDevBandwidthSet(def->bridge, def->bandwidth, true) < 0) > goto err5; > > VIR_FREE(macTapIfName); > @@ -2443,8 +2453,8 @@ networkStartNetworkVirtual(virNetworkDriverStatePtr driver, > return 0; > > err5: > - if (obj->def->bandwidth) > - virNetDevBandwidthClear(obj->def->bridge); > + if (def->bandwidth) > + virNetDevBandwidthClear(def->bridge); > > err4: > if (!save_err) > @@ -2459,13 +2469,13 @@ networkStartNetworkVirtual(virNetworkDriverStatePtr driver, > err3: > if (!save_err) > save_err = virSaveLastError(); > - ignore_value(virNetDevSetOnline(obj->def->bridge, 0)); > + ignore_value(virNetDevSetOnline(def->bridge, 0)); > > err2: > if (!save_err) > save_err = virSaveLastError(); > - if (obj->def->forward.type != VIR_NETWORK_FORWARD_OPEN) > - networkRemoveFirewallRules(obj->def); > + if (def->forward.type != VIR_NETWORK_FORWARD_OPEN) > + networkRemoveFirewallRules(def); > > err1: > if (!save_err) > @@ -2481,7 +2491,7 @@ networkStartNetworkVirtual(virNetworkDriverStatePtr driver, > err0: > if (!save_err) > save_err = virSaveLastError(); > - ignore_value(virNetDevBridgeDelete(obj->def->bridge)); > + ignore_value(virNetDevBridgeDelete(def->bridge)); > > if (save_err) { > virSetError(save_err); > @@ -2496,11 +2506,12 @@ static int > networkShutdownNetworkVirtual(virNetworkDriverStatePtr driver, > virNetworkObjPtr obj) > { > + virNetworkDefPtr def = virNetworkObjGetDef(obj); > pid_t radvdPid; > pid_t dnsmasqPid; > > - if (obj->def->bandwidth) > - virNetDevBandwidthClear(obj->def->bridge); > + if (def->bandwidth) > + virNetDevBandwidthClear(def->bridge); > > virNetworkObjUnrefMacMap(obj); > > @@ -2510,7 +2521,7 @@ networkShutdownNetworkVirtual(virNetworkDriverStatePtr driver, > > kill(radvdPid, SIGTERM); > /* attempt to delete the pidfile we created */ > - if ((radvdpidbase = networkRadvdPidfileBasename(obj->def->name))) { > + if ((radvdpidbase = networkRadvdPidfileBasename(def->name))) { > virPidFileDelete(driver->pidDir, radvdpidbase); > VIR_FREE(radvdpidbase); > } > @@ -2520,20 +2531,20 @@ networkShutdownNetworkVirtual(virNetworkDriverStatePtr driver, > if (dnsmasqPid > 0) > kill(dnsmasqPid, SIGTERM); > > - if (obj->def->mac_specified) { > - char *macTapIfName = networkBridgeDummyNicName(obj->def->bridge); > + if (def->mac_specified) { > + char *macTapIfName = networkBridgeDummyNicName(def->bridge); > if (macTapIfName) { > ignore_value(virNetDevTapDelete(macTapIfName, NULL)); > VIR_FREE(macTapIfName); > } > } > > - ignore_value(virNetDevSetOnline(obj->def->bridge, 0)); > + ignore_value(virNetDevSetOnline(def->bridge, 0)); > > - if (obj->def->forward.type != VIR_NETWORK_FORWARD_OPEN) > - networkRemoveFirewallRules(obj->def); > + if (def->forward.type != VIR_NETWORK_FORWARD_OPEN) > + networkRemoveFirewallRules(def); > > - ignore_value(virNetDevBridgeDelete(obj->def->bridge)); > + ignore_value(virNetDevBridgeDelete(def->bridge)); > > /* See if its still alive and really really kill it */ > dnsmasqPid = 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)); > } > > > @@ -2710,6 +2721,7 @@ static int > networkStartNetwork(virNetworkDriverStatePtr driver, > virNetworkObjPtr obj) > { > + virNetworkDefPtr def = virNetworkObjGetDef(obj); > int ret = -1; > > VIR_DEBUG("driver=%p, network=%p", driver, obj); > @@ -2733,7 +2745,7 @@ networkStartNetwork(virNetworkDriverStatePtr driver, > VIR_HOOK_SUBOP_BEGIN) < 0) > goto cleanup; > > - switch (obj->def->forward.type) { > + switch (def->forward.type) { > > case VIR_NETWORK_FORWARD_NONE: > case VIR_NETWORK_FORWARD_NAT: > @@ -2744,7 +2756,7 @@ networkStartNetwork(virNetworkDriverStatePtr driver, > break; > > 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; > > obj->active = 1; > - VIR_INFO("Network '%s' started up", obj->def->name); > + VIR_INFO("Network '%s' started up", def->name); > ret = 0; > > cleanup: > @@ -2799,23 +2811,23 @@ static int > networkShutdownNetwork(virNetworkDriverStatePtr driver, > virNetworkObjPtr obj) > { > + virNetworkDefPtr def = virNetworkObjGetDef(obj); > int ret = 0; > char *stateFile; > > - VIR_INFO("Shutting down network '%s'", obj->def->name); > + VIR_INFO("Shutting down network '%s'", def->name); > > if (!virNetworkObjIsActive(obj)) > return 0; > > - stateFile = virNetworkConfigFile(driver->stateDir, > - obj->def->name); > + stateFile = virNetworkConfigFile(driver->stateDir, def->name); > if (!stateFile) > return -1; > > unlink(stateFile); > VIR_FREE(stateFile); > > - switch (obj->def->forward.type) { > + switch (def->forward.type) { > > case VIR_NETWORK_FORWARD_NONE: > case VIR_NETWORK_FORWARD_NAT: > @@ -2825,7 +2837,7 @@ networkShutdownNetwork(virNetworkDriverStatePtr driver, > break; > > case VIR_NETWORK_FORWARD_BRIDGE: > - if (obj->def->bridge) { > + if (def->bridge) { > ret = networkShutdownNetworkBridge(obj); > break; > } > @@ -2859,6 +2871,7 @@ networkLookupByUUID(virConnectPtr conn, > { > virNetworkDriverStatePtr driver = networkGetDriver(); > virNetworkObjPtr obj; > + virNetworkDefPtr def; > virNetworkPtr net = NULL; > > obj = virNetworkObjFindByUUID(driver->networks, uuid); > @@ -2870,11 +2883,12 @@ networkLookupByUUID(virConnectPtr conn, > uuidstr); > goto cleanup; > } > + def = virNetworkObjGetDef(obj); > > - if (virNetworkLookupByUUIDEnsureACL(conn, obj->def) < 0) > + if (virNetworkLookupByUUIDEnsureACL(conn, def) < 0) > goto cleanup; > > - net = virGetNetwork(conn, obj->def->name, obj->def->uuid); > + net = virGetNetwork(conn, def->name, def->uuid); > > cleanup: > virNetworkObjEndAPI(&obj); > @@ -2888,6 +2902,7 @@ networkLookupByName(virConnectPtr conn, > { > virNetworkDriverStatePtr driver = networkGetDriver(); > virNetworkObjPtr obj; > + virNetworkDefPtr def; > virNetworkPtr net = NULL; > > obj = virNetworkObjFindByName(driver->networks, name); > @@ -2896,11 +2911,12 @@ networkLookupByName(virConnectPtr conn, > _("no network with matching name '%s'"), name); > goto cleanup; > } > + def = virNetworkObjGetDef(obj); > > - if (virNetworkLookupByNameEnsureACL(conn, obj->def) < 0) > + if (virNetworkLookupByNameEnsureACL(conn, def) < 0) > goto cleanup; > > - net = virGetNetwork(conn, obj->def->name, obj->def->uuid); > + net = virGetNetwork(conn, def->name, def->uuid); > > cleanup: > virNetworkObjEndAPI(&obj); > @@ -3060,7 +3076,7 @@ networkIsActive(virNetworkPtr net) > if (!(obj = networkObjFromNetwork(net))) > return ret; > > - if (virNetworkIsActiveEnsureACL(net->conn, obj->def) < 0) > + if (virNetworkIsActiveEnsureACL(net->conn, virNetworkObjGetDef(obj)) < 0) > goto cleanup; > > ret = virNetworkObjIsActive(obj); > @@ -3080,7 +3096,7 @@ networkIsPersistent(virNetworkPtr net) > if (!(obj = networkObjFromNetwork(net))) > return ret; > > - if (virNetworkIsPersistentEnsureACL(net->conn, obj->def) < 0) > + if (virNetworkIsPersistentEnsureACL(net->conn, virNetworkObjGetDef(obj)) < 0) > goto cleanup; > > ret = obj->persistent; > @@ -3457,45 +3473,47 @@ networkCreateXML(virConnectPtr conn, > const char *xml) > { > virNetworkDriverStatePtr driver = networkGetDriver(); > - virNetworkDefPtr def; > + virNetworkDefPtr newDef; > virNetworkObjPtr obj = NULL; > + virNetworkDefPtr def; > virNetworkPtr net = NULL; > virObjectEventPtr event = NULL; > > - if (!(def = virNetworkDefParseString(xml))) > + if (!(newDef = virNetworkDefParseString(xml))) > goto cleanup; > > - if (virNetworkCreateXMLEnsureACL(conn, def) < 0) > + if (virNetworkCreateXMLEnsureACL(conn, newDef) < 0) > goto cleanup; > > - if (networkValidate(driver, def) < 0) > + if (networkValidate(driver, newDef) < 0) > goto cleanup; > > /* NB: even though this transient network hasn't yet been started, > * we assign the def with live = true in anticipation that it will > * be started momentarily. > */ > - if (!(obj = virNetworkObjAssignDef(driver->networks, def, > + if (!(obj = virNetworkObjAssignDef(driver->networks, newDef, > VIR_NETWORK_OBJ_LIST_ADD_LIVE | > VIR_NETWORK_OBJ_LIST_ADD_CHECK_LIVE))) > goto cleanup; > - def = NULL; > + newDef = NULL; > + def = virNetworkObjGetDef(obj); > > if (networkStartNetwork(driver, obj) < 0) { > virNetworkObjRemoveInactive(driver->networks, obj); > goto cleanup; > } > > - event = virNetworkEventLifecycleNew(obj->def->name, > - obj->def->uuid, > + event = virNetworkEventLifecycleNew(def->name, > + def->uuid, > VIR_NETWORK_EVENT_STARTED, > 0); > > - VIR_INFO("Creating network '%s'", obj->def->name); > - net = virGetNetwork(conn, obj->def->name, obj->def->uuid); > + VIR_INFO("Creating network '%s'", def->name); > + net = virGetNetwork(conn, def->name, def->uuid); > > cleanup: > - virNetworkDefFree(def); > + virNetworkDefFree(newDef); > if (event) > virObjectEventStateQueue(driver->networkEventState, event); > virNetworkObjEndAPI(&obj); > @@ -3564,14 +3582,16 @@ networkUndefine(virNetworkPtr net) > { > virNetworkDriverStatePtr driver = networkGetDriver(); > virNetworkObjPtr obj; > + virNetworkDefPtr def; > int ret = -1; > bool active = false; > virObjectEventPtr event = NULL; > > if (!(obj = networkObjFromNetwork(net))) > goto cleanup; > + def = virNetworkObjGetDef(obj); > > - if (virNetworkUndefineEnsureACL(net->conn, obj->def) < 0) > + if (virNetworkUndefineEnsureACL(net->conn, def) < 0) > goto cleanup; > > if (virNetworkObjIsActive(obj)) > @@ -3589,12 +3609,12 @@ networkUndefine(virNetworkPtr net) > obj) < 0) > goto cleanup; > > - event = virNetworkEventLifecycleNew(obj->def->name, > - obj->def->uuid, > + event = virNetworkEventLifecycleNew(def->name, > + def->uuid, > VIR_NETWORK_EVENT_UNDEFINED, > 0); > > - 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 = networkGetDriver(); > virNetworkObjPtr obj = NULL; > + virNetworkDefPtr def; > int isActive, ret = -1; > size_t i; > virNetworkIPDefPtr ipdef; > @@ -3639,13 +3660,14 @@ networkUpdate(virNetworkPtr net, > > if (!(obj = networkObjFromNetwork(net))) > goto cleanup; > + def = virNetworkObjGetDef(obj); > > - if (virNetworkUpdateEnsureACL(net->conn, obj->def, flags) < 0) > + if (virNetworkUpdateEnsureACL(net->conn, def, flags) < 0) > goto cleanup; > > /* see if we are listening for dhcp pre-modification */ > for (i = 0; > - (ipdef = virNetworkDefGetIPByIndex(obj->def, AF_INET, i)); > + (ipdef = virNetworkDefGetIPByIndex(def, AF_INET, i)); > i++) { > if (ipdef->nranges || ipdef->nhosts) { > oldDhcpActive = 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 == VIR_NETWORK_FORWARD_NONE || > - obj->def->forward.type == VIR_NETWORK_FORWARD_NAT || > - obj->def->forward.type == VIR_NETWORK_FORWARD_ROUTE) { > + if (def->forward.type == VIR_NETWORK_FORWARD_NONE || > + def->forward.type == VIR_NETWORK_FORWARD_NAT || > + def->forward.type == 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 != VIR_NETWORK_FORWARD_OPEN) { > - networkRemoveFirewallRules(obj->def); > + if (def->forward.type != VIR_NETWORK_FORWARD_OPEN) { > + networkRemoveFirewallRules(def); > needFirewallRefresh = 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; > } > > - if (needFirewallRefresh && networkAddFirewallRules(obj->def) < 0) > + if (needFirewallRefresh && networkAddFirewallRules(def) < 0) > goto cleanup; > > if (flags & VIR_NETWORK_UPDATE_AFFECT_CONFIG) { > @@ -3741,8 +3763,7 @@ networkUpdate(virNetworkPtr net, > */ > bool newDhcpActive = false; > > - for (i = 0; > - (ipdef = virNetworkDefGetIPByIndex(obj->def, AF_INET, i)); > + for (i = 0; (ipdef = virNetworkDefGetIPByIndex(def, AF_INET, i)); > i++) { > if (ipdef->nranges || ipdef->nhosts) { > newDhcpActive = true; > @@ -3796,20 +3817,22 @@ networkCreate(virNetworkPtr net) > { > virNetworkDriverStatePtr driver = networkGetDriver(); > virNetworkObjPtr obj; > + virNetworkDefPtr def; > int ret = -1; > virObjectEventPtr event = NULL; > > if (!(obj = networkObjFromNetwork(net))) > goto cleanup; > + def = virNetworkObjGetDef(obj); > > - if (virNetworkCreateEnsureACL(net->conn, obj->def) < 0) > + if (virNetworkCreateEnsureACL(net->conn, def) < 0) > goto cleanup; > > if ((ret = networkStartNetwork(driver, obj)) < 0) > goto cleanup; > > - event = virNetworkEventLifecycleNew(obj->def->name, > - obj->def->uuid, > + event = virNetworkEventLifecycleNew(def->name, > + def->uuid, > VIR_NETWORK_EVENT_STARTED, > 0); > > @@ -3826,27 +3849,29 @@ networkDestroy(virNetworkPtr net) > { > virNetworkDriverStatePtr driver = networkGetDriver(); > virNetworkObjPtr obj; > + virNetworkDefPtr def; > int ret = -1; > virObjectEventPtr event = NULL; > > if (!(obj = networkObjFromNetwork(net))) > goto cleanup; > + def = virNetworkObjGetDef(obj); > > - if (virNetworkDestroyEnsureACL(net->conn, obj->def) < 0) > + if (virNetworkDestroyEnsureACL(net->conn, def) < 0) > goto cleanup; > > if (!virNetworkObjIsActive(obj)) { > virReportError(VIR_ERR_OPERATION_INVALID, > _("network '%s' is not active"), > - obj->def->name); > + def->name); > goto cleanup; > } > > if ((ret = networkShutdownNetwork(driver, obj)) < 0) > goto cleanup; > > - event = virNetworkEventLifecycleNew(obj->def->name, > - obj->def->uuid, > + event = virNetworkEventLifecycleNew(def->name, > + def->uuid, > VIR_NETWORK_EVENT_STOPPED, > 0); > > @@ -3868,23 +3893,27 @@ networkGetXMLDesc(virNetworkPtr net, > unsigned int flags) > { > virNetworkObjPtr obj; > + virNetworkDefPtr curDef; > virNetworkDefPtr def; > + virNetworkDefPtr newDef; > char *ret = NULL; > > virCheckFlags(VIR_NETWORK_XML_INACTIVE, NULL); > > if (!(obj = networkObjFromNetwork(net))) > return ret; > + def = virNetworkObjGetDef(obj); > + newDef = virNetworkObjGetNewDef(obj); > > - if (virNetworkGetXMLDescEnsureACL(net->conn, obj->def) < 0) > + if (virNetworkGetXMLDescEnsureACL(net->conn, def) < 0) > goto cleanup; > > - if ((flags & VIR_NETWORK_XML_INACTIVE) && obj->newDef) > - def = obj->newDef; > + if ((flags & VIR_NETWORK_XML_INACTIVE) && newDef) > + curDef = newDef; > else > - def = obj->def; > + curDef = def; > > - ret = virNetworkDefFormat(def, flags); > + ret = virNetworkDefFormat(curDef, flags); > > cleanup: > virNetworkObjEndAPI(&obj); > @@ -3896,22 +3925,24 @@ static char * > networkGetBridgeName(virNetworkPtr net) > { > virNetworkObjPtr obj; > + virNetworkDefPtr def; > char *bridge = NULL; > > if (!(obj = networkObjFromNetwork(net))) > return bridge; > + def = virNetworkObjGetDef(obj); > > - if (virNetworkGetBridgeNameEnsureACL(net->conn, obj->def) < 0) > + if (virNetworkGetBridgeNameEnsureACL(net->conn, def) < 0) > goto cleanup; > > - 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; > } > > - ignore_value(VIR_STRDUP(bridge, obj->def->bridge)); > + ignore_value(VIR_STRDUP(bridge, def->bridge)); > > cleanup: > virNetworkObjEndAPI(&obj); > @@ -3929,7 +3960,7 @@ networkGetAutostart(virNetworkPtr net, > if (!(obj = networkObjFromNetwork(net))) > return ret; > > - if (virNetworkGetAutostartEnsureACL(net->conn, obj->def) < 0) > + if (virNetworkGetAutostartEnsureACL(net->conn, virNetworkObjGetDef(obj)) < 0) > goto cleanup; > > *autostart = obj->autostart; > @@ -3947,14 +3978,15 @@ networkSetAutostart(virNetworkPtr net, > { > virNetworkDriverStatePtr driver = networkGetDriver(); > virNetworkObjPtr obj; > + virNetworkDefPtr def; > char *configFile = NULL, *autostartLink = NULL; > int ret = -1; > > - > if (!(obj = networkObjFromNetwork(net))) > goto cleanup; > + def = virNetworkObjGetDef(obj); > > - if (virNetworkSetAutostartEnsureACL(net->conn, obj->def) < 0) > + if (virNetworkSetAutostartEnsureACL(net->conn, def) < 0) > goto cleanup; > > if (!obj->persistent) { > @@ -3966,9 +3998,11 @@ networkSetAutostart(virNetworkPtr net, > autostart = (autostart != 0); > > if (obj->autostart != autostart) { > - if ((configFile = virNetworkConfigFile(driver->networkConfigDir, obj->def->name)) == NULL) > + if ((configFile = virNetworkConfigFile(driver->networkConfigDir, > + def->name)) == NULL) > goto cleanup; > - if ((autostartLink = virNetworkConfigFile(driver->networkAutostartDir, obj->def->name)) == NULL) > + if ((autostartLink = virNetworkConfigFile(driver->networkAutostartDir, > + def->name)) == NULL) > goto cleanup; > > if (autostart) { > @@ -4032,6 +4066,7 @@ networkGetDHCPLeases(virNetworkPtr net, > virNetworkDHCPLeasePtr lease = NULL; > virNetworkDHCPLeasePtr *leases_ret = NULL; > virNetworkObjPtr obj; > + virNetworkDefPtr def; > virMacAddr mac_addr; > > virCheckFlags(0, -1); > @@ -4044,12 +4079,13 @@ networkGetDHCPLeases(virNetworkPtr net, > > if (!(obj = networkObjFromNetwork(net))) > return -1; > + def = virNetworkObjGetDef(obj); > > - if (virNetworkGetDHCPLeasesEnsureACL(net->conn, obj->def) < 0) > + if (virNetworkGetDHCPLeasesEnsureACL(net->conn, def) < 0) > goto cleanup; > > /* Retrieve custom leases file location */ > - custom_lease_file = networkDnsmasqLeaseFileNameCustom(driver, obj->def->bridge); > + custom_lease_file = networkDnsmasqLeaseFileNameCustom(driver, def->bridge); > > /* Read entire contents */ > if ((custom_lease_file_len = virFileReadAll(custom_lease_file, > @@ -4125,8 +4161,8 @@ networkGetDHCPLeases(virNetworkPtr net, > lease->type = ipv6 ? VIR_IP_ADDR_TYPE_IPV6 : VIR_IP_ADDR_TYPE_IPV4; > > /* Obtain prefix */ > - for (j = 0; j < obj->def->nips; j++) { > - ipdef_tmp = &obj->def->ips[j]; > + for (j = 0; j < def->nips; j++) { > + ipdef_tmp = &def->ips[j]; > > if (ipv6 && VIR_SOCKET_ADDR_IS_FAMILY(&ipdef_tmp->address, > AF_INET6)) { > @@ -4144,7 +4180,7 @@ networkGetDHCPLeases(virNetworkPtr net, > > 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; > > /* Fields that can be NULL */ > @@ -4327,7 +4363,7 @@ networkAllocateActualDevice(virDomainDefPtr dom, > iface->data.network.name); > goto error; > } > - netdef = obj->def; > + netdef = virNetworkObjGetDef(obj); > > if (!virNetworkObjIsActive(obj)) { > virReportError(VIR_ERR_OPERATION_INVALID, > @@ -4742,7 +4778,7 @@ networkNotifyActualDevice(virDomainDefPtr dom, > iface->data.network.name); > goto error; > } > - netdef = obj->def; > + netdef = virNetworkObjGetDef(obj); > > if (!virNetworkObjIsActive(obj)) { > virReportError(VIR_ERR_OPERATION_INVALID, > @@ -4959,7 +4995,7 @@ networkReleaseActualDevice(virDomainDefPtr dom, > iface->data.network.name); > goto error; > } > - netdef = obj->def; > + netdef = virNetworkObjGetDef(obj); > > if (iface->data.network.actual && > (netdef->forward.type == VIR_NETWORK_FORWARD_NONE || > @@ -5110,7 +5146,7 @@ networkGetNetworkAddress(const char *netname, > netname); > goto cleanup; > } > - netdef = obj->def; > + netdef = virNetworkObjGetDef(obj); > > switch (netdef->forward.type) { > case VIR_NETWORK_FORWARD_NONE: > @@ -5199,7 +5235,7 @@ networkGetActualType(virDomainNetDefPtr iface) > iface->data.network.name); > return -1; > } > - netdef = obj->def; > + netdef = virNetworkObjGetDef(obj); > > if ((netdef->forward.type == VIR_NETWORK_FORWARD_NONE) || > (netdef->forward.type == VIR_NETWORK_FORWARD_NAT) || > @@ -5270,7 +5306,8 @@ networkCheckBandwidth(virNetworkObjPtr obj, > unsigned long long *new_rate) > { > int ret = -1; > - virNetDevBandwidthPtr netBand = obj->def->bandwidth; > + virNetworkDefPtr def = virNetworkObjGetDef(obj); > + virNetDevBandwidthPtr netBand = def->bandwidth; > unsigned long long tmp_floor_sum = virNetworkObjGetFloorSum(obj); > unsigned long long tmp_new_rate = 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; > } > > @@ -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; > } > > @@ -5364,6 +5401,7 @@ networkPlugBandwidthImpl(virNetworkObjPtr obj, > unsigned long long new_rate) > { > virNetworkDriverStatePtr driver = networkGetDriver(); > + virNetworkDefPtr def = virNetworkObjGetDef(obj); > virBitmapPtr classIdMap = virNetworkObjGetClassIdMap(obj); > unsigned long long tmp_floor_sum = virNetworkObjGetFloorSum(obj); > ssize_t class_id = 0; > @@ -5377,10 +5415,10 @@ networkPlugBandwidthImpl(virNetworkObjPtr obj, > goto cleanup; > } > > - plug_ret = virNetDevBandwidthPlug(obj->def->bridge, obj->def->bandwidth, > + plug_ret = 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; > } > > @@ -5395,15 +5433,15 @@ networkPlugBandwidthImpl(virNetworkObjPtr obj, > tmp_floor_sum -= ifaceBand->in->floor; > virNetworkObjSetFloorSum(obj, tmp_floor_sum); > iface->data.network.actual->class_id = 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 -= 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); > > ret = 0; > cleanup: > @@ -5456,6 +5494,7 @@ static int > networkUnplugBandwidth(virNetworkObjPtr obj, > virDomainNetDefPtr iface) > { > + virNetworkDefPtr def = virNetworkObjGetDef(obj); > virBitmapPtr classIdMap = virNetworkObjGetClassIdMap(obj); > unsigned long long tmp_floor_sum = virNetworkObjGetFloorSum(obj); > virNetworkDriverStatePtr driver = networkGetDriver(); > @@ -5465,18 +5504,18 @@ networkUnplugBandwidth(virNetworkObjPtr obj, > > 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 = obj->def->bandwidth->in->average; > + new_rate = def->bandwidth->in->average; > > - if (obj->def->bandwidth->in->peak > 0) > - new_rate = obj->def->bandwidth->in->peak; > + if (def->bandwidth->in->peak > 0) > + new_rate = def->bandwidth->in->peak; > > - ret = virNetDevBandwidthUnplug(obj->def->bridge, > + ret = virNetDevBandwidthUnplug(def->bridge, > iface->data.network.actual->class_id); > if (ret < 0) > goto cleanup; > @@ -5497,10 +5536,10 @@ networkUnplugBandwidth(virNetworkObjPtr obj, > } > /* update rate for non guaranteed NICs */ > new_rate -= 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 = 0; > } > @@ -5514,14 +5553,14 @@ static void > networkNetworkObjTaint(virNetworkObjPtr obj, > virNetworkTaintFlags taint) > { > + virNetworkDefPtr def = virNetworkObjGetDef(obj); > + > if (virNetworkObjTaint(obj, taint)) { > char uuidstr[VIR_UUID_STRING_BUFLEN]; > - virUUIDFormat(obj->def->uuid, uuidstr); > + virUUIDFormat(def->uuid, uuidstr); > > VIR_WARN("Network name='%s' uuid=%s is tainted: %s", > - obj->def->name, > - uuidstr, > - virNetworkTaintTypeToString(taint)); > + def->name, uuidstr, virNetworkTaintTypeToString(taint)); > } > } > > @@ -5588,6 +5627,7 @@ networkBandwidthUpdate(virDomainNetDefPtr iface, > { > virNetworkDriverStatePtr driver = networkGetDriver(); > virNetworkObjPtr obj = NULL; > + virNetworkDefPtr def; > unsigned long long tmp_floor_sum; > virNetDevBandwidthPtr ifaceBand = virDomainNetGetActualBandwidth(iface); > unsigned long long new_rate = 0; > @@ -5604,6 +5644,7 @@ networkBandwidthUpdate(virDomainNetDefPtr iface, > iface->data.network.name); > return ret; > } > + def = virNetworkObjGetDef(obj); > > if ((plug_ret = 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 .. */ > > - 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; > > @@ -5635,17 +5676,17 @@ networkBandwidthUpdate(virDomainNetDefPtr iface, > virNetworkObjSetFloorSum(obj, tmp_floor_sum); > new_rate -= 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 || > virNetworkObjSaveStatus(driver->stateDir, obj) < 0) { > /* Ouch, rollback */ > tmp_floor_sum -= newBandwidth->in->floor; > tmp_floor_sum += ifaceBand->in->floor; > virNetworkObjSetFloorSum(obj, tmp_floor_sum); > > - 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 = conn->privateData; > virNetworkObjPtr obj; > + virNetworkDefPtr def; > virNetworkPtr net = NULL; > > if (!(obj = testNetworkObjFindByUUID(privconn, uuid))) > goto cleanup; > + def = virNetworkObjGetDef(obj); > > - net = virGetNetwork(conn, obj->def->name, obj->def->uuid); > + net = virGetNetwork(conn, def->name, def->uuid); > > cleanup: > virNetworkObjEndAPI(&obj); > @@ -3267,12 +3269,14 @@ testNetworkLookupByName(virConnectPtr conn, > { > testDriverPtr privconn = conn->privateData; > virNetworkObjPtr obj; > + virNetworkDefPtr def; > virNetworkPtr net = NULL; > > if (!(obj = testNetworkObjFindByName(privconn, name))) > goto cleanup; > + def = virNetworkObjGetDef(obj); > > - net = virGetNetwork(conn, obj->def->name, obj->def->uuid); > + net = virGetNetwork(conn, def->name, def->uuid); > > cleanup: > virNetworkObjEndAPI(&obj); > @@ -3385,29 +3389,31 @@ static virNetworkPtr > testNetworkCreateXML(virConnectPtr conn, const char *xml) > { > testDriverPtr privconn = conn->privateData; > - virNetworkDefPtr def; > + virNetworkDefPtr newDef; > virNetworkObjPtr obj = NULL; > + virNetworkDefPtr def; > virNetworkPtr net = NULL; > virObjectEventPtr event = NULL; > > - if ((def = virNetworkDefParseString(xml)) == NULL) > + if ((newDef = virNetworkDefParseString(xml)) == NULL) > goto cleanup; > > - if (!(obj = virNetworkObjAssignDef(privconn->networks, def, > + if (!(obj = virNetworkObjAssignDef(privconn->networks, newDef, > VIR_NETWORK_OBJ_LIST_ADD_LIVE | > VIR_NETWORK_OBJ_LIST_ADD_CHECK_LIVE))) > goto cleanup; > - def = NULL; > + newDef = NULL; > + def = virNetworkObjGetDef(obj); > obj->active = 1; > > - event = virNetworkEventLifecycleNew(obj->def->name, obj->def->uuid, > + event = virNetworkEventLifecycleNew(def->name, def->uuid, > VIR_NETWORK_EVENT_STARTED, > 0); > > - net = virGetNetwork(conn, obj->def->name, obj->def->uuid); > + net = virGetNetwork(conn, def->name, def->uuid); > > cleanup: > - virNetworkDefFree(def); > + virNetworkDefFree(newDef); > testObjectEventQueue(privconn, event); > virNetworkObjEndAPI(&obj); > return net; > @@ -3419,26 +3425,28 @@ testNetworkDefineXML(virConnectPtr conn, > const char *xml) > { > testDriverPtr privconn = conn->privateData; > - virNetworkDefPtr def; > + virNetworkDefPtr newDef; > virNetworkObjPtr obj = NULL; > + virNetworkDefPtr def; > virNetworkPtr net = NULL; > virObjectEventPtr event = NULL; > > - if ((def = virNetworkDefParseString(xml)) == NULL) > + if ((newDef = virNetworkDefParseString(xml)) == NULL) > goto cleanup; > > - if (!(obj = virNetworkObjAssignDef(privconn->networks, def, 0))) > + if (!(obj = virNetworkObjAssignDef(privconn->networks, newDef, 0))) > goto cleanup; > - def = NULL; > + newDef = NULL; > + def = virNetworkObjGetDef(obj); > > - event = virNetworkEventLifecycleNew(obj->def->name, obj->def->uuid, > + event = virNetworkEventLifecycleNew(def->name, def->uuid, > VIR_NETWORK_EVENT_DEFINED, > 0); > > - net = virGetNetwork(conn, obj->def->name, obj->def->uuid); > + net = virGetNetwork(conn, def->name, def->uuid); > > cleanup: > - virNetworkDefFree(def); > + virNetworkDefFree(newDef); > testObjectEventQueue(privconn, event); > virNetworkObjEndAPI(&obj); > return net; > @@ -3524,11 +3532,13 @@ testNetworkCreate(virNetworkPtr net) > { > testDriverPtr privconn = net->conn->privateData; > virNetworkObjPtr obj; > + virNetworkDefPtr def; > int ret = -1; > virObjectEventPtr event = NULL; > > if (!(obj = testNetworkObjFindByName(privconn, net->name))) > goto cleanup; > + def = virNetworkObjGetDef(obj); > > if (virNetworkObjIsActive(obj)) { > virReportError(VIR_ERR_OPERATION_INVALID, > @@ -3537,7 +3547,7 @@ testNetworkCreate(virNetworkPtr net) > } > > obj->active = 1; > - event = virNetworkEventLifecycleNew(obj->def->name, obj->def->uuid, > + event = virNetworkEventLifecycleNew(def->name, def->uuid, > VIR_NETWORK_EVENT_STARTED, > 0); > ret = 0; > @@ -3554,14 +3564,16 @@ testNetworkDestroy(virNetworkPtr net) > { > testDriverPtr privconn = net->conn->privateData; > virNetworkObjPtr obj; > + virNetworkDefPtr def; > int ret = -1; > virObjectEventPtr event = NULL; > > if (!(obj = testNetworkObjFindByName(privconn, net->name))) > goto cleanup; > + def = virNetworkObjGetDef(obj); > > obj->active = 0; > - event = virNetworkEventLifecycleNew(obj->def->name, obj->def->uuid, > + event = virNetworkEventLifecycleNew(def->name, def->uuid, > VIR_NETWORK_EVENT_STOPPED, > 0); > if (!obj->persistent) > @@ -3589,7 +3601,7 @@ testNetworkGetXMLDesc(virNetworkPtr net, > if (!(obj = testNetworkObjFindByName(privconn, net->name))) > goto cleanup; > > - ret = virNetworkDefFormat(obj->def, flags); > + ret = virNetworkDefFormat(virNetworkObjGetDef(obj), flags); > > cleanup: > virNetworkObjEndAPI(&obj); > @@ -3603,18 +3615,20 @@ testNetworkGetBridgeName(virNetworkPtr net) > testDriverPtr privconn = net->conn->privateData; > char *bridge = NULL; > virNetworkObjPtr obj; > + virNetworkDefPtr def; > > if (!(obj = testNetworkObjFindByName(privconn, net->name))) > goto cleanup; > + def = virNetworkObjGetDef(obj); > > - 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; > } > > - ignore_value(VIR_STRDUP(bridge, obj->def->bridge)); > + ignore_value(VIR_STRDUP(bridge, def->bridge)); > > 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 = NULL; > int ret = -1; > - virNetworkDefPtr dev = NULL; > + virNetworkDefPtr def = NULL; > virNetworkObjPtr obj = NULL; > virCommandPtr cmd = NULL; > char *pidfile = NULL; > dnsmasqContext *dctx = NULL; > > - if (!(dev = virNetworkDefParseFile(inxml))) > + if (!(def = virNetworkDefParseFile(inxml))) > goto fail; > > if (!(obj = virNetworkObjNew())) > goto fail; > > - obj->def = dev; > - dctx = dnsmasqContextNew(dev->name, "/var/lib/libvirt/dnsmasq"); > + virNetworkObjSetDef(obj, def); > + > + dctx = dnsmasqContextNew(def->name, "/var/lib/libvirt/dnsmasq"); > > if (dctx == NULL) > goto fail; >
>From 48555ec43ac6697a959907e654e6612d4a21f7f0 Mon Sep 17 00:00:00 2001 From: John Ferlan <jferlan@xxxxxxxxxx> Date: Wed, 16 Aug 2017 12:11:16 -0400 Subject: [PATCH] merge - test results Signed-off-by: John Ferlan <jferlan@xxxxxxxxxx> --- src/network/bridge_driver.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c index b4fbfc5..b0f2b10 100644 --- a/src/network/bridge_driver.c +++ b/src/network/bridge_driver.c @@ -213,7 +213,7 @@ networkRunHook(virNetworkObjPtr obj, int op, int sub_op) { - virNetworkDefPtr def = virNetworkObjGetDef(obj); + virNetworkDefPtr def; virBuffer buf = VIR_BUFFER_INITIALIZER; char *xml = NULL, *net_xml = NULL, *dom_xml = NULL; int hookret; @@ -225,6 +225,7 @@ networkRunHook(virNetworkObjPtr obj, ret = 0; goto cleanup; } + def = virNetworkObjGetDef(obj); virBufferAddLit(&buf, "<hookData>\n"); virBufferAdjustIndent(&buf, 2); @@ -3723,6 +3724,9 @@ networkUpdate(virNetworkPtr net, goto cleanup; } + /* @def is replaced */ + def = virNetworkObjGetDef(obj); + if (needFirewallRefresh && networkAddFirewallRules(def) < 0) goto cleanup; @@ -3869,6 +3873,8 @@ networkDestroy(virNetworkPtr net) if ((ret = networkShutdownNetwork(driver, obj)) < 0) goto cleanup; + /* @def replaced in virNetworkObjUnsetDefTransient*/ + def = virNetworkObjGetDef(obj); event = virNetworkEventLifecycleNew(def->name, def->uuid, -- 2.9.4
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list