[libvirt] [PATCH v2 10/20] network: Add virNetworkObj Get/Set API's for @def and @newDef
John Ferlan
jferlan at redhat.com
Wed Aug 16 18:12:18 UTC 2017
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 at redhat.com>
> ---
> 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;
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-merge-test-results.patch
Type: text/x-patch
Size: 1658 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20170816/ab07102a/attachment-0001.bin>
More information about the libvir-list
mailing list