From nobody Thu May 2 23:15:55 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 149204186755752.19984894365382; Wed, 12 Apr 2017 17:04:27 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 2A0A94E4EE; Thu, 13 Apr 2017 00:04:26 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id F36BC179D4; Thu, 13 Apr 2017 00:04:25 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id AB4F218523CC; Thu, 13 Apr 2017 00:04:25 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v3D04NAS012159 for ; Wed, 12 Apr 2017 20:04:23 -0400 Received: by smtp.corp.redhat.com (Postfix) id 16CCE17187; Thu, 13 Apr 2017 00:04:23 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-116-15.phx2.redhat.com [10.3.116.15]) by smtp.corp.redhat.com (Postfix) with ESMTP id 755DE7DED0 for ; Thu, 13 Apr 2017 00:04:22 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 2A0A94E4EE Authentication-Results: ext-mx09.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx09.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=libvir-list-bounces@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 2A0A94E4EE From: John Ferlan To: libvir-list@redhat.com Date: Wed, 12 Apr 2017 20:04:14 -0400 Message-Id: <20170413000418.30018-2-jferlan@redhat.com> In-Reply-To: <20170413000418.30018-1-jferlan@redhat.com> References: <20170413000418.30018-1-jferlan@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-loop: libvir-list@redhat.com Subject: [libvirt] [REPOST PATCH 1/5] conf: Introduce virnetworkobj X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Thu, 13 Apr 2017 00:04:26 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Move all the virNetworkObj related API/data structures into their own modules virnetworkobj.{c,h} from the network_conf.{c,h} Purely code motion at this point plus adjustments to cleanly build Signed-off-by: John Ferlan --- po/POTFILES.in | 1 + src/Makefile.am | 3 +- src/conf/network_conf.c | 1301 +-----------------------------= --- src/conf/network_conf.h | 132 +--- src/conf/virnetworkobj.c | 1326 ++++++++++++++++++++++++++++++= ++++ src/conf/virnetworkobj.h | 160 ++++ src/libvirt_private.syms | 58 +- src/network/bridge_driver.c | 1 - src/network/bridge_driver.h | 2 +- src/network/bridge_driver_platform.h | 2 +- src/test/test_driver.c | 2 +- 11 files changed, 1530 insertions(+), 1458 deletions(-) create mode 100644 src/conf/virnetworkobj.c create mode 100644 src/conf/virnetworkobj.h diff --git a/po/POTFILES.in b/po/POTFILES.in index 064abd5..dede2e9 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -45,6 +45,7 @@ src/conf/storage_conf.c src/conf/virchrdev.c src/conf/virdomainobjlist.c src/conf/virinterfaceobj.c +src/conf/virnetworkobj.c src/conf/virnodedeviceobj.c src/conf/virnwfilterobj.c src/conf/virsecretobj.c diff --git a/src/Makefile.am b/src/Makefile.am index e2dc77e..5def294 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -363,7 +363,8 @@ SECRET_EVENT_SOURCES =3D \ =20 # Network driver generic impl APIs NETWORK_CONF_SOURCES =3D \ - conf/network_conf.c conf/network_conf.h \ + conf/network_conf.c conf/network_conf.h \ + conf/virnetworkobj.c conf/virnetworkobj.h \ conf/networkcommon_conf.c conf/networkcommon_conf.h =20 # Network filter driver generic impl APIs diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c index dc15fc9..f3e0622 100644 --- a/src/conf/network_conf.c +++ b/src/conf/network_conf.c @@ -29,7 +29,6 @@ #include #include #include -#include =20 #include "virerror.h" #include "datatypes.h" @@ -46,14 +45,6 @@ #include "virstring.h" =20 #define VIR_FROM_THIS VIR_FROM_NETWORK -/* currently, /sbin/tc implementation allows up to 16 bits for minor class= size */ -#define CLASS_ID_BITMAP_SIZE (1<<16) - -struct _virNetworkObjList { - virObjectLockable parent; - - virHashTablePtr objs; -}; =20 VIR_ENUM_IMPL(virNetworkForward, VIR_NETWORK_FORWARD_LAST, @@ -79,207 +70,6 @@ VIR_ENUM_IMPL(virNetworkForwardDriverName, VIR_ENUM_IMPL(virNetworkTaint, VIR_NETWORK_TAINT_LAST, "hook-script"); =20 -static virClassPtr virNetworkObjClass; -static virClassPtr virNetworkObjListClass; -static void virNetworkObjDispose(void *obj); -static void virNetworkObjListDispose(void *obj); - -static int virNetworkObjOnceInit(void) -{ - if (!(virNetworkObjClass =3D virClassNew(virClassForObjectLockable(), - "virNetworkObj", - sizeof(virNetworkObj), - virNetworkObjDispose))) - return -1; - - if (!(virNetworkObjListClass =3D virClassNew(virClassForObjectLockable= (), - "virNetworkObjList", - sizeof(virNetworkObjList), - virNetworkObjListDispose))) - return -1; - return 0; -} - - -VIR_ONCE_GLOBAL_INIT(virNetworkObj) - -virNetworkObjPtr -virNetworkObjNew(void) -{ - virNetworkObjPtr net; - - if (virNetworkObjInitialize() < 0) - return NULL; - - if (!(net =3D virObjectLockableNew(virNetworkObjClass))) - return NULL; - - if (!(net->class_id =3D virBitmapNew(CLASS_ID_BITMAP_SIZE))) - goto error; - - /* The first three class IDs are already taken */ - ignore_value(virBitmapSetBit(net->class_id, 0)); - ignore_value(virBitmapSetBit(net->class_id, 1)); - ignore_value(virBitmapSetBit(net->class_id, 2)); - - return net; - - error: - virObjectUnref(net); - return NULL; -} - -void -virNetworkObjEndAPI(virNetworkObjPtr *net) -{ - if (!*net) - return; - - virObjectUnlock(*net); - virObjectUnref(*net); - *net =3D NULL; -} - -virNetworkObjListPtr virNetworkObjListNew(void) -{ - virNetworkObjListPtr nets; - - if (virNetworkObjInitialize() < 0) - return NULL; - - if (!(nets =3D virObjectLockableNew(virNetworkObjListClass))) - return NULL; - - if (!(nets->objs =3D virHashCreate(50, virObjectFreeHashData))) { - virObjectUnref(nets); - return NULL; - } - - return nets; -} - -/** - * virNetworkObjFindByUUIDLocked: - * @nets: list of network objects - * @uuid: network uuid to find - * - * This functions requires @nets to be locked already! - * - * Returns: not locked, but ref'd network object. - */ -virNetworkObjPtr -virNetworkObjFindByUUIDLocked(virNetworkObjListPtr nets, - const unsigned char *uuid) -{ - virNetworkObjPtr ret =3D NULL; - char uuidstr[VIR_UUID_STRING_BUFLEN]; - - virUUIDFormat(uuid, uuidstr); - - ret =3D virHashLookup(nets->objs, uuidstr); - if (ret) - virObjectRef(ret); - return ret; -} - -/** - * virNetworkObjFindByUUID: - * @nets: list of network objects - * @uuid: network uuid to find - * - * This functions locks @nets and find network object which - * corresponds to @uuid. - * - * Returns: locked and ref'd network object. - */ -virNetworkObjPtr -virNetworkObjFindByUUID(virNetworkObjListPtr nets, - const unsigned char *uuid) -{ - virNetworkObjPtr ret; - - virObjectLock(nets); - ret =3D virNetworkObjFindByUUIDLocked(nets, uuid); - virObjectUnlock(nets); - if (ret) - virObjectLock(ret); - return ret; -} - -static int -virNetworkObjSearchName(const void *payload, - const void *name ATTRIBUTE_UNUSED, - const void *data) -{ - virNetworkObjPtr net =3D (virNetworkObjPtr) payload; - int want =3D 0; - - virObjectLock(net); - if (STREQ(net->def->name, (const char *)data)) - want =3D 1; - virObjectUnlock(net); - return want; -} - -/* - * virNetworkObjFindByNameLocked: - * @nets: list of network objects - * @name: network name to find - * - * This functions requires @nets to be locked already! - * - * Returns: not locked, but ref'd network object. - */ -virNetworkObjPtr -virNetworkObjFindByNameLocked(virNetworkObjListPtr nets, - const char *name) -{ - virNetworkObjPtr ret =3D NULL; - - ret =3D virHashSearch(nets->objs, virNetworkObjSearchName, name); - if (ret) - virObjectRef(ret); - return ret; -} - -/** - * virNetworkObjFindByName: - * @nets: list of network objects - * @name: network name to find - * - * This functions locks @nets and find network object which - * corresponds to @name. - * - * Returns: locked and ref'd network object. - */ -virNetworkObjPtr -virNetworkObjFindByName(virNetworkObjListPtr nets, - const char *name) -{ - virNetworkObjPtr ret; - - virObjectLock(nets); - ret =3D virNetworkObjFindByNameLocked(nets, name); - virObjectUnlock(nets); - if (ret) - virObjectLock(ret); - return ret; -} - -bool -virNetworkObjTaint(virNetworkObjPtr obj, - virNetworkTaintFlags taint) -{ - unsigned int flag =3D (1 << taint); - - if (obj->taint & flag) - return false; - - obj->taint |=3D flag; - return true; -} - - static void virPortGroupDefClear(virPortGroupDefPtr def) { @@ -435,275 +225,6 @@ virNetworkDefFree(virNetworkDefPtr def) VIR_FREE(def); } =20 -static void -virNetworkObjDispose(void *obj) -{ - virNetworkObjPtr net =3D obj; - - virNetworkDefFree(net->def); - virNetworkDefFree(net->newDef); - virBitmapFree(net->class_id); - virObjectUnref(net->macmap); -} - -static void -virNetworkObjListDispose(void *obj) -{ - virNetworkObjListPtr nets =3D obj; - - virHashFree(nets->objs); -} - -/* - * virNetworkObjAssignDef: - * @network: the network object to update - * @def: the new NetworkDef (will be consumed by this function) - * @live: is this new def the "live" version, or the "persistent" version - * - * Replace the appropriate copy of the given network's def or newDef - * with def. Use "live" and current state of the network to determine - * which to replace and what to do with the old defs. When a non-live - * def is set, indicate that the network is now persistent. - * - * NB: a persistent network can be made transient by calling with: - * virNetworkObjAssignDef(network, NULL, false) (i.e. set the - * persistent def to NULL) - * - */ -void -virNetworkObjAssignDef(virNetworkObjPtr network, - virNetworkDefPtr def, - bool live) -{ - if (live) { - /* before setting new live def, save (into newDef) any - * existing persistent (!live) def to be restored when the - * network is destroyed, unless there is one already saved. - */ - if (network->persistent && !network->newDef) - network->newDef =3D network->def; - else - virNetworkDefFree(network->def); - network->def =3D def; - } else { /* !live */ - virNetworkDefFree(network->newDef); - if (virNetworkObjIsActive(network)) { - /* save new configuration to be restored on network - * shutdown, leaving current live def alone - */ - network->newDef =3D def; - } else { /* !live and !active */ - if (network->def && !network->persistent) { - /* network isn't (yet) marked active or persistent, - * but already has a "live" def set. This means we are - * currently setting the persistent def as a part of - * the process of starting the network, so we need to - * preserve the "not yet live" def in network->def. - */ - network->newDef =3D def; - } else { - /* either there is no live def set, or this network - * was already set as persistent, so the proper thing - * is to overwrite network->def. - */ - network->newDef =3D NULL; - virNetworkDefFree(network->def); - network->def =3D def; - } - } - network->persistent =3D !!def; - } -} - -/* - * If flags & VIR_NETWORK_OBJ_LIST_ADD_CHECK_LIVE then this will - * refuse updating an existing def if the current def is live - * - * If flags & VIR_NETWORK_OBJ_LIST_ADD_LIVE then the @def being - * added is assumed to represent a live config, not a future - * inactive config - * - * If flags is zero, network is considered as inactive and persistent. - */ -static virNetworkObjPtr -virNetworkAssignDefLocked(virNetworkObjListPtr nets, - virNetworkDefPtr def, - unsigned int flags) -{ - virNetworkObjPtr network; - virNetworkObjPtr ret =3D NULL; - char uuidstr[VIR_UUID_STRING_BUFLEN]; - - /* See if a network with matching UUID already exists */ - if ((network =3D virNetworkObjFindByUUIDLocked(nets, def->uuid))) { - virObjectLock(network); - /* UUID matches, but if names don't match, refuse it */ - if (STRNEQ(network->def->name, def->name)) { - virUUIDFormat(network->def->uuid, uuidstr); - virReportError(VIR_ERR_OPERATION_FAILED, - _("network '%s' is already defined with uuid %s= "), - network->def->name, uuidstr); - goto cleanup; - } - - if (flags & VIR_NETWORK_OBJ_LIST_ADD_CHECK_LIVE) { - /* UUID & name match, but if network is already active, refuse= it */ - if (virNetworkObjIsActive(network)) { - virReportError(VIR_ERR_OPERATION_INVALID, - _("network is already active as '%s'"), - network->def->name); - goto cleanup; - } - } - - virNetworkObjAssignDef(network, - def, - !!(flags & VIR_NETWORK_OBJ_LIST_ADD_LIVE)); - } else { - /* UUID does not match, but if a name matches, refuse it */ - if ((network =3D virNetworkObjFindByNameLocked(nets, def->name))) { - virObjectLock(network); - virUUIDFormat(network->def->uuid, uuidstr); - virReportError(VIR_ERR_OPERATION_FAILED, - _("network '%s' already exists with uuid %s"), - def->name, uuidstr); - goto cleanup; - } - - if (!(network =3D virNetworkObjNew())) - goto cleanup; - - virObjectLock(network); - - virUUIDFormat(def->uuid, uuidstr); - if (virHashAddEntry(nets->objs, uuidstr, network) < 0) - goto cleanup; - - network->def =3D def; - network->persistent =3D !(flags & VIR_NETWORK_OBJ_LIST_ADD_LIVE); - virObjectRef(network); - } - - ret =3D network; - network =3D NULL; - - cleanup: - virNetworkObjEndAPI(&network); - return ret; -} - -/* - * virNetworkAssignDef: - * @nets: list of all networks - * @def: the new NetworkDef (will be consumed by this function iff success= ful) - * @flags: bitwise-OR of VIR_NETWORK_OBJ_LIST_ADD_* flags - * - * Either replace the appropriate copy of the NetworkDef with name - * matching def->name or, if not found, create a new NetworkObj with - * def. For an existing network, use "live" and current state of the - * network to determine which to replace. - * - * Look at virNetworkAssignDefLocked() for @flags description. - * - * Returns NULL on error, virNetworkObjPtr on success. - */ -virNetworkObjPtr -virNetworkAssignDef(virNetworkObjListPtr nets, - virNetworkDefPtr def, - unsigned int flags) -{ - virNetworkObjPtr network; - - virObjectLock(nets); - network =3D virNetworkAssignDefLocked(nets, def, flags); - virObjectUnlock(nets); - return network; -} - -/* - * virNetworkObjSetDefTransient: - * @network: network object pointer - * @live: if true, run this operation even for an inactive network. - * this allows freely updated network->def with runtime defaults - * before starting the network, which will be discarded on network - * shutdown. Any cleanup paths need to be sure to handle newDef if - * the network is never started. - * - * Mark the active network config as transient. Ensures live-only update - * operations do not persist past network destroy. - * - * Returns 0 on success, -1 on failure - */ -int -virNetworkObjSetDefTransient(virNetworkObjPtr network, bool live) -{ - if (!virNetworkObjIsActive(network) && !live) - return 0; - - if (!network->persistent || network->newDef) - return 0; - - network->newDef =3D virNetworkDefCopy(network->def, VIR_NETWORK_XML_IN= ACTIVE); - return network->newDef ? 0 : -1; -} - -/* virNetworkObjUnsetDefTransient: - * - * This *undoes* what virNetworkObjSetDefTransient did. - */ -void -virNetworkObjUnsetDefTransient(virNetworkObjPtr network) -{ - if (network->newDef) { - virNetworkDefFree(network->def); - network->def =3D network->newDef; - network->newDef =3D NULL; - } -} - -/* - * virNetworkObjGetPersistentDef: - * @network: network object pointer - * - * Return the persistent network configuration. If network is transient, - * return the running config. - * - * Returns NULL on error, virNetworkDefPtr on success. - */ -virNetworkDefPtr -virNetworkObjGetPersistentDef(virNetworkObjPtr network) -{ - if (network->newDef) - return network->newDef; - else - return network->def; -} - -/* - * virNetworkObjReplacePersistentDef: - * @network: network object pointer - * @def: new virNetworkDef to replace current persistent config - * - * Replace the "persistent" network configuration with the given new - * virNetworkDef. This pays attention to whether or not the network - * is active. - * - * Returns -1 on error, 0 on success - */ -int -virNetworkObjReplacePersistentDef(virNetworkObjPtr network, - virNetworkDefPtr def) -{ - if (virNetworkObjIsActive(network)) { - virNetworkDefFree(network->newDef); - network->newDef =3D def; - } else { - virNetworkDefFree(network->def); - network->def =3D def; - } - return 0; -} - /* * virNetworkDefCopy: * @def: NetworkDef to copy @@ -734,65 +255,6 @@ virNetworkDefCopy(virNetworkDefPtr def, unsigned int f= lags) return newDef; } =20 -/* - * virNetworkConfigChangeSetup: - * - * 1) checks whether network state is consistent with the requested - * type of modification. - * - * 3) make sure there are separate "def" and "newDef" copies of - * networkDef if appropriate. - * - * Returns 0 on success, -1 on error. - */ -int -virNetworkConfigChangeSetup(virNetworkObjPtr network, unsigned int flags) -{ - bool isActive; - int ret =3D -1; - - isActive =3D virNetworkObjIsActive(network); - - if (!isActive && (flags & VIR_NETWORK_UPDATE_AFFECT_LIVE)) { - virReportError(VIR_ERR_OPERATION_INVALID, "%s", - _("network is not running")); - goto cleanup; - } - - if (flags & VIR_NETWORK_UPDATE_AFFECT_CONFIG) { - if (!network->persistent) { - virReportError(VIR_ERR_OPERATION_INVALID, "%s", - _("cannot change persistent config of a " - "transient network")); - goto cleanup; - } - /* this should already have been done by the driver, but do it - * anyway just in case. - */ - if (isActive && (virNetworkObjSetDefTransient(network, false) < 0)) - goto cleanup; - } - - ret =3D 0; - cleanup: - return ret; -} - -void virNetworkRemoveInactive(virNetworkObjListPtr nets, - virNetworkObjPtr net) -{ - char uuidstr[VIR_UUID_STRING_BUFLEN]; - - virUUIDFormat(net->def->uuid, uuidstr); - virObjectRef(net); - virObjectUnlock(net); - virObjectLock(nets); - virObjectLock(net); - virHashRemoveEntry(nets->objs, uuidstr); - virObjectUnlock(nets); - virObjectUnref(net); -} - /* return ips[index], or NULL if there aren't enough ips */ virNetworkIPDefPtr virNetworkDefGetIPByIndex(const virNetworkDef *def, @@ -2093,7 +1555,7 @@ virNetworkForwardDefParseXML(const char *networkName, return ret; } =20 -static virNetworkDefPtr +virNetworkDefPtr virNetworkDefParseXML(xmlXPathContextPtr ctxt) { virNetworkDefPtr def; @@ -3073,45 +2535,6 @@ virNetworkDefFormat(const virNetworkDef *def, return NULL; } =20 -static char * -virNetworkObjFormat(virNetworkObjPtr net, - unsigned int flags) -{ - virBuffer buf =3D VIR_BUFFER_INITIALIZER; - char *class_id =3D virBitmapFormat(net->class_id); - size_t i; - - if (!class_id) - goto error; - - virBufferAddLit(&buf, "\n"); - virBufferAdjustIndent(&buf, 2); - virBufferAsprintf(&buf, "\n", class_id); - virBufferAsprintf(&buf, "\n", net->floor_sum); - VIR_FREE(class_id); - - for (i =3D 0; i < VIR_NETWORK_TAINT_LAST; i++) { - if (net->taint & (1 << i)) - virBufferAsprintf(&buf, "\n", - virNetworkTaintTypeToString(i)); - } - - if (virNetworkDefFormatBuf(&buf, net->def, flags) < 0) - goto error; - - virBufferAdjustIndent(&buf, -2); - virBufferAddLit(&buf, ""); - - if (virBufferCheckError(&buf) < 0) - goto error; - - return virBufferContentAndReset(&buf); - - error: - virBufferFreeAndReset(&buf); - return NULL; -} - const char * virNetworkDefForwardIf(const virNetworkDef *def, size_t n) { @@ -3182,356 +2605,15 @@ int virNetworkSaveConfig(const char *configDir, return ret; } =20 - -int virNetworkSaveStatus(const char *statusDir, - virNetworkObjPtr network) +char *virNetworkConfigFile(const char *dir, + const char *name) { - int ret =3D -1; - int flags =3D 0; - char *xml; - - if (!(xml =3D virNetworkObjFormat(network, flags))) - goto cleanup; - - if (virNetworkSaveXML(statusDir, network->def, xml)) - goto cleanup; - - ret =3D 0; - cleanup: - VIR_FREE(xml); - return ret; -} - -virNetworkObjPtr -virNetworkLoadState(virNetworkObjListPtr nets, - const char *stateDir, - const char *name) -{ - char *configFile =3D NULL; - virNetworkDefPtr def =3D NULL; - virNetworkObjPtr net =3D NULL; - xmlDocPtr xml =3D NULL; - xmlNodePtr node =3D NULL, *nodes =3D NULL; - xmlXPathContextPtr ctxt =3D NULL; - virBitmapPtr class_id_map =3D NULL; - unsigned long long floor_sum_val =3D 0; - unsigned int taint =3D 0; - int n; - size_t i; - - - if ((configFile =3D virNetworkConfigFile(stateDir, name)) =3D=3D NULL) - goto error; - - if (!(xml =3D virXMLParseCtxt(configFile, NULL, _("(network status)"),= &ctxt))) - goto error; - - if (!(node =3D virXPathNode("//network", ctxt))) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("Could not find any 'network' element in status f= ile")); - goto error; - } - - /* parse the definition first */ - ctxt->node =3D node; - if (!(def =3D virNetworkDefParseXML(ctxt))) - goto error; - - if (STRNEQ(name, def->name)) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Network config filename '%s'" - " does not match network name '%s'"), - configFile, def->name); - goto error; - } - - /* now parse possible status data */ - node =3D xmlDocGetRootElement(xml); - if (xmlStrEqual(node->name, BAD_CAST "networkstatus")) { - /* Newer network status file. Contains useful - * info which are not to be found in bare config XML */ - char *class_id =3D NULL; - char *floor_sum =3D NULL; - - ctxt->node =3D node; - if ((class_id =3D virXPathString("string(./class_id[1]/@bitmap)", = ctxt))) { - if (virBitmapParse(class_id, &class_id_map, - CLASS_ID_BITMAP_SIZE) < 0) { - VIR_FREE(class_id); - goto error; - } - } - VIR_FREE(class_id); - - floor_sum =3D virXPathString("string(./floor[1]/@sum)", ctxt); - if (floor_sum && - virStrToLong_ull(floor_sum, NULL, 10, &floor_sum_val) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Malformed 'floor_sum' attribute: %s"), - floor_sum); - VIR_FREE(floor_sum); - goto error; - } - VIR_FREE(floor_sum); - - if ((n =3D virXPathNodeSet("./taint", ctxt, &nodes)) < 0) - goto error; - - for (i =3D 0; i < n; i++) { - char *str =3D virXMLPropString(nodes[i], "flag"); - if (str) { - int flag =3D virNetworkTaintTypeFromString(str); - if (flag < 0) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("Unknown taint flag %s"), str); - VIR_FREE(str); - goto error; - } - VIR_FREE(str); - /* Compute taint mask here. The network object does not - * exist yet, so we can't use virNetworkObjtTaint. */ - taint |=3D (1 << flag); - } - } - VIR_FREE(nodes); - } - - /* create the object */ - if (!(net =3D virNetworkAssignDef(nets, def, VIR_NETWORK_OBJ_LIST_ADD_= LIVE))) - goto error; - /* do not put any "goto error" below this comment */ - - /* assign status data stored in the network object */ - if (class_id_map) { - virBitmapFree(net->class_id); - net->class_id =3D class_id_map; - } - - if (floor_sum_val > 0) - net->floor_sum =3D floor_sum_val; - - net->taint =3D taint; - net->active =3D 1; /* any network with a state file is by definition a= ctive */ - - cleanup: - VIR_FREE(configFile); - xmlFreeDoc(xml); - xmlXPathFreeContext(ctxt); - return net; - - error: - VIR_FREE(nodes); - virBitmapFree(class_id_map); - virNetworkDefFree(def); - goto cleanup; -} - -virNetworkObjPtr virNetworkLoadConfig(virNetworkObjListPtr nets, - const char *configDir, - const char *autostartDir, - const char *name) -{ - char *configFile =3D NULL, *autostartLink =3D NULL; - virNetworkDefPtr def =3D NULL; - virNetworkObjPtr net; - int autostart; - - if ((configFile =3D virNetworkConfigFile(configDir, name)) =3D=3D NULL) - goto error; - if ((autostartLink =3D virNetworkConfigFile(autostartDir, name)) =3D= =3D NULL) - goto error; - - if ((autostart =3D virFileLinkPointsTo(autostartLink, configFile)) < 0) - goto error; - - if (!(def =3D virNetworkDefParseFile(configFile))) - goto error; - - if (STRNEQ(name, def->name)) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Network config filename '%s'" - " does not match network name '%s'"), - configFile, def->name); - goto error; - } - - if (def->forward.type =3D=3D VIR_NETWORK_FORWARD_NONE || - def->forward.type =3D=3D VIR_NETWORK_FORWARD_NAT || - def->forward.type =3D=3D VIR_NETWORK_FORWARD_ROUTE || - def->forward.type =3D=3D VIR_NETWORK_FORWARD_OPEN) { - - if (!def->mac_specified) { - virNetworkSetBridgeMacAddr(def); - virNetworkSaveConfig(configDir, def); - } - } else { - /* Throw away MAC address for other forward types, - * which could have been generated by older libvirt RPMs */ - def->mac_specified =3D false; - } - - if (!(net =3D virNetworkAssignDef(nets, def, 0))) - goto error; - - net->autostart =3D autostart; - - VIR_FREE(configFile); - VIR_FREE(autostartLink); - - return net; - - error: - VIR_FREE(configFile); - VIR_FREE(autostartLink); - virNetworkDefFree(def); - return NULL; -} - - -int -virNetworkLoadAllState(virNetworkObjListPtr nets, - const char *stateDir) -{ - DIR *dir; - struct dirent *entry; - int ret =3D -1; - int rc; - - if ((rc =3D virDirOpenIfExists(&dir, stateDir)) <=3D 0) - return rc; - - while ((ret =3D virDirRead(dir, &entry, stateDir)) > 0) { - virNetworkObjPtr net; - - if (!virFileStripSuffix(entry->d_name, ".xml")) - continue; - - net =3D virNetworkLoadState(nets, stateDir, entry->d_name); - virNetworkObjEndAPI(&net); - } - - VIR_DIR_CLOSE(dir); - return ret; -} - - -int virNetworkLoadAllConfigs(virNetworkObjListPtr nets, - const char *configDir, - const char *autostartDir) -{ - DIR *dir; - struct dirent *entry; - int ret =3D -1; - int rc; - - if ((rc =3D virDirOpenIfExists(&dir, configDir)) <=3D 0) - return rc; - - while ((ret =3D virDirRead(dir, &entry, configDir)) > 0) { - virNetworkObjPtr net; - - if (!virFileStripSuffix(entry->d_name, ".xml")) - continue; - - /* NB: ignoring errors, so one malformed config doesn't - kill the whole process */ - net =3D virNetworkLoadConfig(nets, - configDir, - autostartDir, - entry->d_name); - virNetworkObjEndAPI(&net); - } - - VIR_DIR_CLOSE(dir); - return ret; -} - -int virNetworkDeleteConfig(const char *configDir, - const char *autostartDir, - virNetworkObjPtr net) -{ - char *configFile =3D NULL; - char *autostartLink =3D NULL; - int ret =3D -1; - - if ((configFile =3D virNetworkConfigFile(configDir, net->def->name)) = =3D=3D NULL) - goto error; - if ((autostartLink =3D virNetworkConfigFile(autostartDir, net->def->na= me)) =3D=3D NULL) - goto error; - - /* Not fatal if this doesn't work */ - unlink(autostartLink); - net->autostart =3D 0; - - if (unlink(configFile) < 0) { - virReportSystemError(errno, - _("cannot remove config file '%s'"), - configFile); - goto error; - } - - ret =3D 0; - - error: - VIR_FREE(configFile); - VIR_FREE(autostartLink); - return ret; -} - -char *virNetworkConfigFile(const char *dir, - const char *name) -{ - char *ret =3D NULL; + char *ret =3D NULL; =20 ignore_value(virAsprintf(&ret, "%s/%s.xml", dir, name)); return ret; } =20 -struct virNetworkBridgeInUseHelperData { - const char *bridge; - const char *skipname; -}; - -static int -virNetworkBridgeInUseHelper(const void *payload, - const void *name ATTRIBUTE_UNUSED, - const void *opaque) -{ - int ret; - virNetworkObjPtr net =3D (virNetworkObjPtr) payload; - const struct virNetworkBridgeInUseHelperData *data =3D opaque; - - virObjectLock(net); - if (data->skipname && - ((net->def && STREQ(net->def->name, data->skipname)) || - (net->newDef && STREQ(net->newDef->name, data->skipname)))) - ret =3D 0; - else if ((net->def && net->def->bridge && - STREQ(net->def->bridge, data->bridge)) || - (net->newDef && net->newDef->bridge && - STREQ(net->newDef->bridge, data->bridge))) - ret =3D 1; - else - ret =3D 0; - virObjectUnlock(net); - return ret; -} - -int virNetworkBridgeInUse(virNetworkObjListPtr nets, - const char *bridge, - const char *skipname) -{ - virNetworkObjPtr obj; - struct virNetworkBridgeInUseHelperData data =3D {bridge, skipname}; - - virObjectLock(nets); - obj =3D virHashSearch(nets->objs, virNetworkBridgeInUseHelper, &data); - virObjectUnlock(nets); - - return obj !=3D NULL; -} - - void virNetworkSetBridgeMacAddr(virNetworkDefPtr def) { if (!def->mac_specified) { @@ -3553,6 +2635,7 @@ virNetworkDefUpdateNoSupport(virNetworkDefPtr def, co= nst char *section) _("can't update '%s' section of network '%s'"), section, def->name); } + static void virNetworkDefUpdateUnknownCommand(unsigned int command) { @@ -4451,377 +3534,3 @@ virNetworkDefUpdateSection(virNetworkDefPtr def, xmlXPathFreeContext(ctxt); return ret; } - -/* - * virNetworkObjUpdate: - * - * Apply the supplied update to the given virNetworkObj. Except for - * @network pointing to an actual network object rather than the - * opaque virNetworkPtr, parameters are identical to the public API - * virNetworkUpdate. - * - * The original virNetworkDefs are copied, and all modifications made - * to these copies. The originals are replaced with the copies only - * after success has been guaranteed. - * - * Returns: -1 on error, 0 on success. - */ -int -virNetworkObjUpdate(virNetworkObjPtr network, - unsigned int command, /* virNetworkUpdateCommand */ - unsigned int section, /* virNetworkUpdateSection */ - int parentIndex, - const char *xml, - unsigned int flags) /* virNetworkUpdateFlags */ -{ - int ret =3D -1; - virNetworkDefPtr livedef =3D NULL, configdef =3D NULL; - - /* normalize config data, and check for common invalid requests. */ - if (virNetworkConfigChangeSetup(network, flags) < 0) - goto cleanup; - - if (flags & VIR_NETWORK_UPDATE_AFFECT_LIVE) { - virNetworkDefPtr checkdef; - - /* work on a copy of the def */ - if (!(livedef =3D virNetworkDefCopy(network->def, 0))) - goto cleanup; - if (virNetworkDefUpdateSection(livedef, command, section, - parentIndex, xml, flags) < 0) { - goto cleanup; - } - /* run a final format/parse cycle to make sure we didn't - * add anything illegal to the def - */ - if (!(checkdef =3D virNetworkDefCopy(livedef, 0))) - goto cleanup; - virNetworkDefFree(checkdef); - } - - if (flags & VIR_NETWORK_UPDATE_AFFECT_CONFIG) { - virNetworkDefPtr checkdef; - - /* work on a copy of the def */ - if (!(configdef =3D virNetworkDefCopy(virNetworkObjGetPersistentDe= f(network), - VIR_NETWORK_XML_INACTIVE))) { - goto cleanup; - } - if (virNetworkDefUpdateSection(configdef, command, section, - parentIndex, xml, flags) < 0) { - goto cleanup; - } - if (!(checkdef =3D virNetworkDefCopy(configdef, - VIR_NETWORK_XML_INACTIVE))) { - goto cleanup; - } - virNetworkDefFree(checkdef); - } - - if (configdef) { - /* successfully modified copy, now replace original */ - if (virNetworkObjReplacePersistentDef(network, configdef) < 0) - goto cleanup; - configdef =3D NULL; - } - if (livedef) { - /* successfully modified copy, now replace original */ - virNetworkDefFree(network->def); - network->def =3D livedef; - livedef =3D NULL; - } - - ret =3D 0; - cleanup: - virNetworkDefFree(livedef); - virNetworkDefFree(configdef); - return ret; -} - -#define MATCH(FLAG) (flags & (FLAG)) -static bool -virNetworkMatch(virNetworkObjPtr netobj, - unsigned int flags) -{ - /* filter by active state */ - if (MATCH(VIR_CONNECT_LIST_NETWORKS_FILTERS_ACTIVE) && - !((MATCH(VIR_CONNECT_LIST_NETWORKS_ACTIVE) && - virNetworkObjIsActive(netobj)) || - (MATCH(VIR_CONNECT_LIST_NETWORKS_INACTIVE) && - !virNetworkObjIsActive(netobj)))) - return false; - - /* filter by persistence */ - if (MATCH(VIR_CONNECT_LIST_NETWORKS_FILTERS_PERSISTENT) && - !((MATCH(VIR_CONNECT_LIST_NETWORKS_PERSISTENT) && - netobj->persistent) || - (MATCH(VIR_CONNECT_LIST_NETWORKS_TRANSIENT) && - !netobj->persistent))) - return false; - - /* filter by autostart option */ - if (MATCH(VIR_CONNECT_LIST_NETWORKS_FILTERS_AUTOSTART) && - !((MATCH(VIR_CONNECT_LIST_NETWORKS_AUTOSTART) && - netobj->autostart) || - (MATCH(VIR_CONNECT_LIST_NETWORKS_NO_AUTOSTART) && - !netobj->autostart))) - return false; - - return true; -} -#undef MATCH - -struct virNetworkObjListData { - virConnectPtr conn; - virNetworkPtr *nets; - virNetworkObjListFilter filter; - unsigned int flags; - int nnets; - bool error; -}; - -static int -virNetworkObjListPopulate(void *payload, - const void *name ATTRIBUTE_UNUSED, - void *opaque) -{ - struct virNetworkObjListData *data =3D opaque; - virNetworkObjPtr obj =3D payload; - virNetworkPtr net =3D NULL; - - if (data->error) - return 0; - - virObjectLock(obj); - - if (data->filter && - !data->filter(data->conn, obj->def)) - goto cleanup; - - if (!virNetworkMatch(obj, data->flags)) - goto cleanup; - - if (!data->nets) { - data->nnets++; - goto cleanup; - } - - if (!(net =3D virGetNetwork(data->conn, obj->def->name, obj->def->uuid= ))) { - data->error =3D true; - goto cleanup; - } - - data->nets[data->nnets++] =3D net; - - cleanup: - virObjectUnlock(obj); - return 0; -} - -int -virNetworkObjListExport(virConnectPtr conn, - virNetworkObjListPtr netobjs, - virNetworkPtr **nets, - virNetworkObjListFilter filter, - unsigned int flags) -{ - int ret =3D -1; - struct virNetworkObjListData data =3D { conn, NULL, filter, flags, 0, = false}; - - virObjectLock(netobjs); - if (nets && VIR_ALLOC_N(data.nets, virHashSize(netobjs->objs) + 1) < 0) - goto cleanup; - - virHashForEach(netobjs->objs, virNetworkObjListPopulate, &data); - - if (data.error) - goto cleanup; - - if (data.nets) { - /* trim the array to the final size */ - ignore_value(VIR_REALLOC_N(data.nets, data.nnets + 1)); - *nets =3D data.nets; - data.nets =3D NULL; - } - - ret =3D data.nnets; - cleanup: - virObjectUnlock(netobjs); - while (data.nets && data.nnets) - virObjectUnref(data.nets[--data.nnets]); - - VIR_FREE(data.nets); - return ret; -} - -struct virNetworkObjListForEachHelperData { - virNetworkObjListIterator callback; - void *opaque; - int ret; -}; - -static int -virNetworkObjListForEachHelper(void *payload, - const void *name ATTRIBUTE_UNUSED, - void *opaque) -{ - struct virNetworkObjListForEachHelperData *data =3D opaque; - - if (data->callback(payload, data->opaque) < 0) - data->ret =3D -1; - return 0; -} - -/** - * virNetworkObjListForEach: - * @nets: a list of network objects - * @callback: function to call over each of object in the list - * @opaque: pointer to pass to the @callback - * - * Function iterates over the list of network objects and calls - * passed callback over each one of them. You should avoid - * calling those virNetworkObjList APIs, which lock the list - * again in favor of their virNetworkObj*Locked variants. - * - * Returns: 0 on success, -1 otherwise. - */ -int -virNetworkObjListForEach(virNetworkObjListPtr nets, - virNetworkObjListIterator callback, - void *opaque) -{ - struct virNetworkObjListForEachHelperData data =3D {callback, opaque, = 0}; - virObjectLock(nets); - virHashForEach(nets->objs, virNetworkObjListForEachHelper, &data); - virObjectUnlock(nets); - return data.ret; -} - -struct virNetworkObjListGetHelperData { - virConnectPtr conn; - virNetworkObjListFilter filter; - char **names; - int nnames; - bool active; - int got; - bool error; -}; - -static int -virNetworkObjListGetHelper(void *payload, - const void *name ATTRIBUTE_UNUSED, - void *opaque) -{ - struct virNetworkObjListGetHelperData *data =3D opaque; - virNetworkObjPtr obj =3D payload; - - if (data->error) - return 0; - - if (data->nnames >=3D 0 && - data->got =3D=3D data->nnames) - return 0; - - virObjectLock(obj); - - if (data->filter && - !data->filter(data->conn, obj->def)) - goto cleanup; - - if ((data->active && virNetworkObjIsActive(obj)) || - (!data->active && !virNetworkObjIsActive(obj))) { - if (data->names && - VIR_STRDUP(data->names[data->got], obj->def->name) < 0) { - data->error =3D true; - goto cleanup; - } - data->got++; - } - - cleanup: - virObjectUnlock(obj); - return 0; -} - -int -virNetworkObjListGetNames(virNetworkObjListPtr nets, - bool active, - char **names, - int nnames, - virNetworkObjListFilter filter, - virConnectPtr conn) -{ - int ret =3D -1; - - struct virNetworkObjListGetHelperData data =3D { - conn, filter, names, nnames, active, 0, false}; - - virObjectLock(nets); - virHashForEach(nets->objs, virNetworkObjListGetHelper, &data); - virObjectUnlock(nets); - - if (data.error) - goto cleanup; - - ret =3D data.got; - cleanup: - if (ret < 0) { - while (data.got) - VIR_FREE(data.names[--data.got]); - } - return ret; -} - -int -virNetworkObjListNumOfNetworks(virNetworkObjListPtr nets, - bool active, - virNetworkObjListFilter filter, - virConnectPtr conn) -{ - struct virNetworkObjListGetHelperData data =3D { - conn, filter, NULL, -1, active, 0, false}; - - virObjectLock(nets); - virHashForEach(nets->objs, virNetworkObjListGetHelper, &data); - virObjectUnlock(nets); - - return data.got; -} - -struct virNetworkObjListPruneHelperData { - unsigned int flags; -}; - -static int -virNetworkObjListPruneHelper(const void *payload, - const void *name ATTRIBUTE_UNUSED, - const void *opaque) -{ - const struct virNetworkObjListPruneHelperData *data =3D opaque; - virNetworkObjPtr obj =3D (virNetworkObjPtr) payload; - int want =3D 0; - - virObjectLock(obj); - want =3D virNetworkMatch(obj, data->flags); - virObjectUnlock(obj); - return want; -} - -/** - * virNetworkObjListPrune: - * @nets: a list of network objects - * @flags: bitwise-OR of virConnectListAllNetworksFlags - * - * Iterate over list of network objects and remove the desired - * ones from it. - */ -void -virNetworkObjListPrune(virNetworkObjListPtr nets, - unsigned int flags) -{ - struct virNetworkObjListPruneHelperData data =3D {flags}; - - virObjectLock(nets); - virHashRemoveSet(nets->objs, virNetworkObjListPruneHelper, &data); - virObjectUnlock(nets); -} diff --git a/src/conf/network_conf.h b/src/conf/network_conf.h index dec809e..6922942 100644 --- a/src/conf/network_conf.h +++ b/src/conf/network_conf.h @@ -272,35 +272,6 @@ struct _virNetworkDef { xmlNodePtr metadata; }; =20 -typedef struct _virNetworkObj virNetworkObj; -typedef virNetworkObj *virNetworkObjPtr; -struct _virNetworkObj { - virObjectLockable parent; - - pid_t dnsmasqPid; - pid_t radvdPid; - unsigned int active : 1; - unsigned int autostart : 1; - unsigned int persistent : 1; - - virNetworkDefPtr def; /* The current definition */ - virNetworkDefPtr newDef; /* New definition to activate at shutdown */ - - virBitmapPtr class_id; /* bitmap of class IDs for QoS */ - unsigned long long floor_sum; /* sum of all 'floor'-s of attached NICs= */ - - unsigned int taint; - - /* Immutable pointer, self locking APIs */ - virMacMapPtr macmap; -}; - -virNetworkObjPtr virNetworkObjNew(void); -void virNetworkObjEndAPI(virNetworkObjPtr *net); - -typedef struct _virNetworkObjList virNetworkObjList; -typedef virNetworkObjList *virNetworkObjListPtr; - typedef enum { VIR_NETWORK_TAINT_HOOK, /* Hook script was executed ov= er network. We can't guarantee @@ -312,51 +283,15 @@ typedef enum { VIR_NETWORK_TAINT_LAST } virNetworkTaintFlags; =20 -static inline int -virNetworkObjIsActive(const virNetworkObj *net) -{ - return net->active; -} - -virNetworkObjListPtr virNetworkObjListNew(void); - -virNetworkObjPtr virNetworkObjFindByUUIDLocked(virNetworkObjListPtr nets, - const unsigned char *uuid); -virNetworkObjPtr virNetworkObjFindByUUID(virNetworkObjListPtr nets, - const unsigned char *uuid); -virNetworkObjPtr virNetworkObjFindByNameLocked(virNetworkObjListPtr nets, - const char *name); -virNetworkObjPtr virNetworkObjFindByName(virNetworkObjListPtr nets, - const char *name); -bool virNetworkObjTaint(virNetworkObjPtr obj, - virNetworkTaintFlags taint); - void virNetworkDefFree(virNetworkDefPtr def); =20 -typedef bool (*virNetworkObjListFilter)(virConnectPtr conn, - virNetworkDefPtr def); - enum { VIR_NETWORK_OBJ_LIST_ADD_LIVE =3D (1 << 0), VIR_NETWORK_OBJ_LIST_ADD_CHECK_LIVE =3D (1 << 1), }; -virNetworkObjPtr virNetworkAssignDef(virNetworkObjListPtr nets, - virNetworkDefPtr def, - unsigned int flags); -void virNetworkObjAssignDef(virNetworkObjPtr network, - virNetworkDefPtr def, - bool live); -int virNetworkObjSetDefTransient(virNetworkObjPtr network, bool live); -void virNetworkObjUnsetDefTransient(virNetworkObjPtr network); -virNetworkDefPtr virNetworkObjGetPersistentDef(virNetworkObjPtr network); -int virNetworkObjReplacePersistentDef(virNetworkObjPtr network, - virNetworkDefPtr def); -virNetworkDefPtr virNetworkDefCopy(virNetworkDefPtr def, unsigned int flag= s); -int virNetworkConfigChangeSetup(virNetworkObjPtr dom, unsigned int flags); - -void virNetworkRemoveInactive(virNetworkObjListPtr nets, - virNetworkObjPtr net); =20 +virNetworkDefPtr virNetworkDefCopy(virNetworkDefPtr def, unsigned int flag= s); +virNetworkDefPtr virNetworkDefParseXML(xmlXPathContextPtr ctxt); virNetworkDefPtr virNetworkDefParseString(const char *xmlStr); virNetworkDefPtr virNetworkDefParseFile(const char *filename); virNetworkDefPtr virNetworkDefParseNode(xmlDocPtr xml, @@ -388,46 +323,11 @@ int virNetworkSaveXML(const char *configDir, int virNetworkSaveConfig(const char *configDir, virNetworkDefPtr def); =20 -int virNetworkSaveStatus(const char *statusDir, - virNetworkObjPtr net) ATTRIBUTE_RETURN_CHECK; - -virNetworkObjPtr virNetworkLoadConfig(virNetworkObjListPtr nets, - const char *configDir, - const char *autostartDir, - const char *file); - -virNetworkObjPtr virNetworkLoadState(virNetworkObjListPtr nets, - const char *stateDir, - const char *name); - -int virNetworkLoadAllConfigs(virNetworkObjListPtr nets, - const char *configDir, - const char *autostartDir); - -int virNetworkLoadAllState(virNetworkObjListPtr nets, - const char *stateDir); - -int virNetworkDeleteConfig(const char *configDir, - const char *autostartDir, - virNetworkObjPtr net); - char *virNetworkConfigFile(const char *dir, const char *name); =20 -int virNetworkBridgeInUse(virNetworkObjListPtr nets, - const char *bridge, - const char *skipname); - void virNetworkSetBridgeMacAddr(virNetworkDefPtr def); =20 -int -virNetworkObjUpdate(virNetworkObjPtr obj, - unsigned int command, /* virNetworkUpdateCommand */ - unsigned int section, /* virNetworkUpdateSection */ - int parentIndex, - const char *xml, - unsigned int flags); /* virNetworkUpdateFlags */ - VIR_ENUM_DECL(virNetworkForward) =20 # define VIR_CONNECT_LIST_NETWORKS_FILTERS_ACTIVE \ @@ -447,34 +347,6 @@ VIR_ENUM_DECL(virNetworkForward) VIR_CONNECT_LIST_NETWORKS_FILTERS_PERSISTENT | \ VIR_CONNECT_LIST_NETWORKS_FILTERS_AUTOSTART) =20 -int virNetworkObjListExport(virConnectPtr conn, - virNetworkObjListPtr netobjs, - virNetworkPtr **nets, - virNetworkObjListFilter filter, - unsigned int flags); - -typedef int (*virNetworkObjListIterator)(virNetworkObjPtr net, - void *opaque); - -int virNetworkObjListForEach(virNetworkObjListPtr nets, - virNetworkObjListIterator callback, - void *opaque); - -int virNetworkObjListGetNames(virNetworkObjListPtr nets, - bool active, - char **names, - int nnames, - virNetworkObjListFilter filter, - virConnectPtr conn); - -int virNetworkObjListNumOfNetworks(virNetworkObjListPtr nets, - bool active, - virNetworkObjListFilter filter, - virConnectPtr conn); - -void virNetworkObjListPrune(virNetworkObjListPtr nets, - unsigned int flags); - /* for testing */ int virNetworkDefUpdateSection(virNetworkDefPtr def, diff --git a/src/conf/virnetworkobj.c b/src/conf/virnetworkobj.c new file mode 100644 index 0000000..2515858 --- /dev/null +++ b/src/conf/virnetworkobj.c @@ -0,0 +1,1326 @@ +/* + * virnetworkobj.c: handle network objects + * (derived from network_conf.c) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * . + */ + +#include +#include + +#include "datatypes.h" +#include "virnetworkobj.h" + +#include "viralloc.h" +#include "virerror.h" +#include "virfile.h" +#include "virhash.h" +#include "virlog.h" +#include "virstring.h" + +#define VIR_FROM_THIS VIR_FROM_NETWORK + +VIR_LOG_INIT("conf.virnetworkobj"); + +/* currently, /sbin/tc implementation allows up to 16 bits for minor class= size */ +#define CLASS_ID_BITMAP_SIZE (1<<16) + +struct _virNetworkObjList { + virObjectLockable parent; + + virHashTablePtr objs; +}; + +static virClassPtr virNetworkObjClass; +static virClassPtr virNetworkObjListClass; +static void virNetworkObjDispose(void *obj); +static void virNetworkObjListDispose(void *obj); + +static int virNetworkObjOnceInit(void) +{ + if (!(virNetworkObjClass =3D virClassNew(virClassForObjectLockable(), + "virNetworkObj", + sizeof(virNetworkObj), + virNetworkObjDispose))) + return -1; + + if (!(virNetworkObjListClass =3D virClassNew(virClassForObjectLockable= (), + "virNetworkObjList", + sizeof(virNetworkObjList), + virNetworkObjListDispose))) + return -1; + return 0; +} + + +VIR_ONCE_GLOBAL_INIT(virNetworkObj) + +virNetworkObjPtr +virNetworkObjNew(void) +{ + virNetworkObjPtr net; + + if (virNetworkObjInitialize() < 0) + return NULL; + + if (!(net =3D virObjectLockableNew(virNetworkObjClass))) + return NULL; + + if (!(net->class_id =3D virBitmapNew(CLASS_ID_BITMAP_SIZE))) + goto error; + + /* The first three class IDs are already taken */ + ignore_value(virBitmapSetBit(net->class_id, 0)); + ignore_value(virBitmapSetBit(net->class_id, 1)); + ignore_value(virBitmapSetBit(net->class_id, 2)); + + return net; + + error: + virObjectUnref(net); + return NULL; +} + +void +virNetworkObjEndAPI(virNetworkObjPtr *net) +{ + if (!*net) + return; + + virObjectUnlock(*net); + virObjectUnref(*net); + *net =3D NULL; +} + +virNetworkObjListPtr virNetworkObjListNew(void) +{ + virNetworkObjListPtr nets; + + if (virNetworkObjInitialize() < 0) + return NULL; + + if (!(nets =3D virObjectLockableNew(virNetworkObjListClass))) + return NULL; + + if (!(nets->objs =3D virHashCreate(50, virObjectFreeHashData))) { + virObjectUnref(nets); + return NULL; + } + + return nets; +} + +/** + * virNetworkObjFindByUUIDLocked: + * @nets: list of network objects + * @uuid: network uuid to find + * + * This functions requires @nets to be locked already! + * + * Returns: not locked, but ref'd network object. + */ +virNetworkObjPtr +virNetworkObjFindByUUIDLocked(virNetworkObjListPtr nets, + const unsigned char *uuid) +{ + virNetworkObjPtr ret =3D NULL; + char uuidstr[VIR_UUID_STRING_BUFLEN]; + + virUUIDFormat(uuid, uuidstr); + + ret =3D virHashLookup(nets->objs, uuidstr); + if (ret) + virObjectRef(ret); + return ret; +} + +/** + * virNetworkObjFindByUUID: + * @nets: list of network objects + * @uuid: network uuid to find + * + * This functions locks @nets and find network object which + * corresponds to @uuid. + * + * Returns: locked and ref'd network object. + */ +virNetworkObjPtr +virNetworkObjFindByUUID(virNetworkObjListPtr nets, + const unsigned char *uuid) +{ + virNetworkObjPtr ret; + + virObjectLock(nets); + ret =3D virNetworkObjFindByUUIDLocked(nets, uuid); + virObjectUnlock(nets); + if (ret) + virObjectLock(ret); + return ret; +} + +static int +virNetworkObjSearchName(const void *payload, + const void *name ATTRIBUTE_UNUSED, + const void *data) +{ + virNetworkObjPtr net =3D (virNetworkObjPtr) payload; + int want =3D 0; + + virObjectLock(net); + if (STREQ(net->def->name, (const char *)data)) + want =3D 1; + virObjectUnlock(net); + return want; +} + +/* + * virNetworkObjFindByNameLocked: + * @nets: list of network objects + * @name: network name to find + * + * This functions requires @nets to be locked already! + * + * Returns: not locked, but ref'd network object. + */ +virNetworkObjPtr +virNetworkObjFindByNameLocked(virNetworkObjListPtr nets, + const char *name) +{ + virNetworkObjPtr ret =3D NULL; + + ret =3D virHashSearch(nets->objs, virNetworkObjSearchName, name); + if (ret) + virObjectRef(ret); + return ret; +} + +/** + * virNetworkObjFindByName: + * @nets: list of network objects + * @name: network name to find + * + * This functions locks @nets and find network object which + * corresponds to @name. + * + * Returns: locked and ref'd network object. + */ +virNetworkObjPtr +virNetworkObjFindByName(virNetworkObjListPtr nets, + const char *name) +{ + virNetworkObjPtr ret; + + virObjectLock(nets); + ret =3D virNetworkObjFindByNameLocked(nets, name); + virObjectUnlock(nets); + if (ret) + virObjectLock(ret); + return ret; +} + +bool +virNetworkObjTaint(virNetworkObjPtr obj, + virNetworkTaintFlags taint) +{ + unsigned int flag =3D (1 << taint); + + if (obj->taint & flag) + return false; + + obj->taint |=3D flag; + return true; +} + + +static void +virNetworkObjDispose(void *obj) +{ + virNetworkObjPtr net =3D obj; + + virNetworkDefFree(net->def); + virNetworkDefFree(net->newDef); + virBitmapFree(net->class_id); + virObjectUnref(net->macmap); +} + +static void +virNetworkObjListDispose(void *obj) +{ + virNetworkObjListPtr nets =3D obj; + + virHashFree(nets->objs); +} + +/* + * virNetworkObjAssignDef: + * @network: the network object to update + * @def: the new NetworkDef (will be consumed by this function) + * @live: is this new def the "live" version, or the "persistent" version + * + * Replace the appropriate copy of the given network's def or newDef + * with def. Use "live" and current state of the network to determine + * which to replace and what to do with the old defs. When a non-live + * def is set, indicate that the network is now persistent. + * + * NB: a persistent network can be made transient by calling with: + * virNetworkObjAssignDef(network, NULL, false) (i.e. set the + * persistent def to NULL) + * + */ +void +virNetworkObjAssignDef(virNetworkObjPtr network, + virNetworkDefPtr def, + bool live) +{ + if (live) { + /* before setting new live def, save (into newDef) any + * existing persistent (!live) def to be restored when the + * network is destroyed, unless there is one already saved. + */ + if (network->persistent && !network->newDef) + network->newDef =3D network->def; + else + virNetworkDefFree(network->def); + network->def =3D def; + } else { /* !live */ + virNetworkDefFree(network->newDef); + if (virNetworkObjIsActive(network)) { + /* save new configuration to be restored on network + * shutdown, leaving current live def alone + */ + network->newDef =3D def; + } else { /* !live and !active */ + if (network->def && !network->persistent) { + /* network isn't (yet) marked active or persistent, + * but already has a "live" def set. This means we are + * currently setting the persistent def as a part of + * the process of starting the network, so we need to + * preserve the "not yet live" def in network->def. + */ + network->newDef =3D def; + } else { + /* either there is no live def set, or this network + * was already set as persistent, so the proper thing + * is to overwrite network->def. + */ + network->newDef =3D NULL; + virNetworkDefFree(network->def); + network->def =3D def; + } + } + network->persistent =3D !!def; + } +} + +/* + * If flags & VIR_NETWORK_OBJ_LIST_ADD_CHECK_LIVE then this will + * refuse updating an existing def if the current def is live + * + * If flags & VIR_NETWORK_OBJ_LIST_ADD_LIVE then the @def being + * added is assumed to represent a live config, not a future + * inactive config + * + * If flags is zero, network is considered as inactive and persistent. + */ +static virNetworkObjPtr +virNetworkAssignDefLocked(virNetworkObjListPtr nets, + virNetworkDefPtr def, + unsigned int flags) +{ + virNetworkObjPtr network; + virNetworkObjPtr ret =3D NULL; + char uuidstr[VIR_UUID_STRING_BUFLEN]; + + /* See if a network with matching UUID already exists */ + if ((network =3D virNetworkObjFindByUUIDLocked(nets, def->uuid))) { + virObjectLock(network); + /* UUID matches, but if names don't match, refuse it */ + if (STRNEQ(network->def->name, def->name)) { + virUUIDFormat(network->def->uuid, uuidstr); + virReportError(VIR_ERR_OPERATION_FAILED, + _("network '%s' is already defined with uuid %s= "), + network->def->name, uuidstr); + goto cleanup; + } + + if (flags & VIR_NETWORK_OBJ_LIST_ADD_CHECK_LIVE) { + /* UUID & name match, but if network is already active, refuse= it */ + if (virNetworkObjIsActive(network)) { + virReportError(VIR_ERR_OPERATION_INVALID, + _("network is already active as '%s'"), + network->def->name); + goto cleanup; + } + } + + virNetworkObjAssignDef(network, + def, + !!(flags & VIR_NETWORK_OBJ_LIST_ADD_LIVE)); + } else { + /* UUID does not match, but if a name matches, refuse it */ + if ((network =3D virNetworkObjFindByNameLocked(nets, def->name))) { + virObjectLock(network); + virUUIDFormat(network->def->uuid, uuidstr); + virReportError(VIR_ERR_OPERATION_FAILED, + _("network '%s' already exists with uuid %s"), + def->name, uuidstr); + goto cleanup; + } + + if (!(network =3D virNetworkObjNew())) + goto cleanup; + + virObjectLock(network); + + virUUIDFormat(def->uuid, uuidstr); + if (virHashAddEntry(nets->objs, uuidstr, network) < 0) + goto cleanup; + + network->def =3D def; + network->persistent =3D !(flags & VIR_NETWORK_OBJ_LIST_ADD_LIVE); + virObjectRef(network); + } + + ret =3D network; + network =3D NULL; + + cleanup: + virNetworkObjEndAPI(&network); + return ret; +} + +/* + * virNetworkAssignDef: + * @nets: list of all networks + * @def: the new NetworkDef (will be consumed by this function iff success= ful) + * @flags: bitwise-OR of VIR_NETWORK_OBJ_LIST_ADD_* flags + * + * Either replace the appropriate copy of the NetworkDef with name + * matching def->name or, if not found, create a new NetworkObj with + * def. For an existing network, use "live" and current state of the + * network to determine which to replace. + * + * Look at virNetworkAssignDefLocked() for @flags description. + * + * Returns NULL on error, virNetworkObjPtr on success. + */ +virNetworkObjPtr +virNetworkAssignDef(virNetworkObjListPtr nets, + virNetworkDefPtr def, + unsigned int flags) +{ + virNetworkObjPtr network; + + virObjectLock(nets); + network =3D virNetworkAssignDefLocked(nets, def, flags); + virObjectUnlock(nets); + return network; +} + +/* + * virNetworkObjSetDefTransient: + * @network: network object pointer + * @live: if true, run this operation even for an inactive network. + * this allows freely updated network->def with runtime defaults + * before starting the network, which will be discarded on network + * shutdown. Any cleanup paths need to be sure to handle newDef if + * the network is never started. + * + * Mark the active network config as transient. Ensures live-only update + * operations do not persist past network destroy. + * + * Returns 0 on success, -1 on failure + */ +int +virNetworkObjSetDefTransient(virNetworkObjPtr network, bool live) +{ + if (!virNetworkObjIsActive(network) && !live) + return 0; + + if (!network->persistent || network->newDef) + return 0; + + network->newDef =3D virNetworkDefCopy(network->def, VIR_NETWORK_XML_IN= ACTIVE); + return network->newDef ? 0 : -1; +} + +/* virNetworkObjUnsetDefTransient: + * + * This *undoes* what virNetworkObjSetDefTransient did. + */ +void +virNetworkObjUnsetDefTransient(virNetworkObjPtr network) +{ + if (network->newDef) { + virNetworkDefFree(network->def); + network->def =3D network->newDef; + network->newDef =3D NULL; + } +} + +/* + * virNetworkObjGetPersistentDef: + * @network: network object pointer + * + * Return the persistent network configuration. If network is transient, + * return the running config. + * + * Returns NULL on error, virNetworkDefPtr on success. + */ +virNetworkDefPtr +virNetworkObjGetPersistentDef(virNetworkObjPtr network) +{ + if (network->newDef) + return network->newDef; + else + return network->def; +} + +/* + * virNetworkObjReplacePersistentDef: + * @network: network object pointer + * @def: new virNetworkDef to replace current persistent config + * + * Replace the "persistent" network configuration with the given new + * virNetworkDef. This pays attention to whether or not the network + * is active. + * + * Returns -1 on error, 0 on success + */ +int +virNetworkObjReplacePersistentDef(virNetworkObjPtr network, + virNetworkDefPtr def) +{ + if (virNetworkObjIsActive(network)) { + virNetworkDefFree(network->newDef); + network->newDef =3D def; + } else { + virNetworkDefFree(network->def); + network->def =3D def; + } + return 0; +} + +/* + * virNetworkConfigChangeSetup: + * + * 1) checks whether network state is consistent with the requested + * type of modification. + * + * 3) make sure there are separate "def" and "newDef" copies of + * networkDef if appropriate. + * + * Returns 0 on success, -1 on error. + */ +int +virNetworkConfigChangeSetup(virNetworkObjPtr network, unsigned int flags) +{ + bool isActive; + int ret =3D -1; + + isActive =3D virNetworkObjIsActive(network); + + if (!isActive && (flags & VIR_NETWORK_UPDATE_AFFECT_LIVE)) { + virReportError(VIR_ERR_OPERATION_INVALID, "%s", + _("network is not running")); + goto cleanup; + } + + if (flags & VIR_NETWORK_UPDATE_AFFECT_CONFIG) { + if (!network->persistent) { + virReportError(VIR_ERR_OPERATION_INVALID, "%s", + _("cannot change persistent config of a " + "transient network")); + goto cleanup; + } + /* this should already have been done by the driver, but do it + * anyway just in case. + */ + if (isActive && (virNetworkObjSetDefTransient(network, false) < 0)) + goto cleanup; + } + + ret =3D 0; + cleanup: + return ret; +} + +void virNetworkRemoveInactive(virNetworkObjListPtr nets, + virNetworkObjPtr net) +{ + char uuidstr[VIR_UUID_STRING_BUFLEN]; + + virUUIDFormat(net->def->uuid, uuidstr); + virObjectRef(net); + virObjectUnlock(net); + virObjectLock(nets); + virObjectLock(net); + virHashRemoveEntry(nets->objs, uuidstr); + virObjectUnlock(nets); + virObjectUnref(net); +} + +static char * +virNetworkObjFormat(virNetworkObjPtr net, + unsigned int flags) +{ + virBuffer buf =3D VIR_BUFFER_INITIALIZER; + char *class_id =3D virBitmapFormat(net->class_id); + size_t i; + + if (!class_id) + goto error; + + virBufferAddLit(&buf, "\n"); + virBufferAdjustIndent(&buf, 2); + virBufferAsprintf(&buf, "\n", class_id); + virBufferAsprintf(&buf, "\n", net->floor_sum); + VIR_FREE(class_id); + + for (i =3D 0; i < VIR_NETWORK_TAINT_LAST; i++) { + if (net->taint & (1 << i)) + virBufferAsprintf(&buf, "\n", + virNetworkTaintTypeToString(i)); + } + + if (virNetworkDefFormatBuf(&buf, net->def, flags) < 0) + goto error; + + virBufferAdjustIndent(&buf, -2); + virBufferAddLit(&buf, ""); + + if (virBufferCheckError(&buf) < 0) + goto error; + + return virBufferContentAndReset(&buf); + + error: + virBufferFreeAndReset(&buf); + return NULL; +} + +int virNetworkSaveStatus(const char *statusDir, + virNetworkObjPtr network) +{ + int ret =3D -1; + int flags =3D 0; + char *xml; + + if (!(xml =3D virNetworkObjFormat(network, flags))) + goto cleanup; + + if (virNetworkSaveXML(statusDir, network->def, xml)) + goto cleanup; + + ret =3D 0; + cleanup: + VIR_FREE(xml); + return ret; +} + +virNetworkObjPtr +virNetworkLoadState(virNetworkObjListPtr nets, + const char *stateDir, + const char *name) +{ + char *configFile =3D NULL; + virNetworkDefPtr def =3D NULL; + virNetworkObjPtr net =3D NULL; + xmlDocPtr xml =3D NULL; + xmlNodePtr node =3D NULL, *nodes =3D NULL; + xmlXPathContextPtr ctxt =3D NULL; + virBitmapPtr class_id_map =3D NULL; + unsigned long long floor_sum_val =3D 0; + unsigned int taint =3D 0; + int n; + size_t i; + + + if ((configFile =3D virNetworkConfigFile(stateDir, name)) =3D=3D NULL) + goto error; + + if (!(xml =3D virXMLParseCtxt(configFile, NULL, _("(network status)"),= &ctxt))) + goto error; + + if (!(node =3D virXPathNode("//network", ctxt))) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Could not find any 'network' element in status f= ile")); + goto error; + } + + /* parse the definition first */ + ctxt->node =3D node; + if (!(def =3D virNetworkDefParseXML(ctxt))) + goto error; + + if (STRNEQ(name, def->name)) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Network config filename '%s'" + " does not match network name '%s'"), + configFile, def->name); + goto error; + } + + /* now parse possible status data */ + node =3D xmlDocGetRootElement(xml); + if (xmlStrEqual(node->name, BAD_CAST "networkstatus")) { + /* Newer network status file. Contains useful + * info which are not to be found in bare config XML */ + char *class_id =3D NULL; + char *floor_sum =3D NULL; + + ctxt->node =3D node; + if ((class_id =3D virXPathString("string(./class_id[1]/@bitmap)", = ctxt))) { + if (virBitmapParse(class_id, &class_id_map, + CLASS_ID_BITMAP_SIZE) < 0) { + VIR_FREE(class_id); + goto error; + } + } + VIR_FREE(class_id); + + floor_sum =3D virXPathString("string(./floor[1]/@sum)", ctxt); + if (floor_sum && + virStrToLong_ull(floor_sum, NULL, 10, &floor_sum_val) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Malformed 'floor_sum' attribute: %s"), + floor_sum); + VIR_FREE(floor_sum); + goto error; + } + VIR_FREE(floor_sum); + + if ((n =3D virXPathNodeSet("./taint", ctxt, &nodes)) < 0) + goto error; + + for (i =3D 0; i < n; i++) { + char *str =3D virXMLPropString(nodes[i], "flag"); + if (str) { + int flag =3D virNetworkTaintTypeFromString(str); + if (flag < 0) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("Unknown taint flag %s"), str); + VIR_FREE(str); + goto error; + } + VIR_FREE(str); + /* Compute taint mask here. The network object does not + * exist yet, so we can't use virNetworkObjtTaint. */ + taint |=3D (1 << flag); + } + } + VIR_FREE(nodes); + } + + /* create the object */ + if (!(net =3D virNetworkAssignDef(nets, def, VIR_NETWORK_OBJ_LIST_ADD_= LIVE))) + goto error; + /* do not put any "goto error" below this comment */ + + /* assign status data stored in the network object */ + if (class_id_map) { + virBitmapFree(net->class_id); + net->class_id =3D class_id_map; + } + + if (floor_sum_val > 0) + net->floor_sum =3D floor_sum_val; + + net->taint =3D taint; + net->active =3D 1; /* any network with a state file is by definition a= ctive */ + + cleanup: + VIR_FREE(configFile); + xmlFreeDoc(xml); + xmlXPathFreeContext(ctxt); + return net; + + error: + VIR_FREE(nodes); + virBitmapFree(class_id_map); + virNetworkDefFree(def); + goto cleanup; +} + +virNetworkObjPtr virNetworkLoadConfig(virNetworkObjListPtr nets, + const char *configDir, + const char *autostartDir, + const char *name) +{ + char *configFile =3D NULL, *autostartLink =3D NULL; + virNetworkDefPtr def =3D NULL; + virNetworkObjPtr net; + int autostart; + + if ((configFile =3D virNetworkConfigFile(configDir, name)) =3D=3D NULL) + goto error; + if ((autostartLink =3D virNetworkConfigFile(autostartDir, name)) =3D= =3D NULL) + goto error; + + if ((autostart =3D virFileLinkPointsTo(autostartLink, configFile)) < 0) + goto error; + + if (!(def =3D virNetworkDefParseFile(configFile))) + goto error; + + if (STRNEQ(name, def->name)) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Network config filename '%s'" + " does not match network name '%s'"), + configFile, def->name); + goto error; + } + + if (def->forward.type =3D=3D VIR_NETWORK_FORWARD_NONE || + def->forward.type =3D=3D VIR_NETWORK_FORWARD_NAT || + def->forward.type =3D=3D VIR_NETWORK_FORWARD_ROUTE || + def->forward.type =3D=3D VIR_NETWORK_FORWARD_OPEN) { + + if (!def->mac_specified) { + virNetworkSetBridgeMacAddr(def); + virNetworkSaveConfig(configDir, def); + } + } else { + /* Throw away MAC address for other forward types, + * which could have been generated by older libvirt RPMs */ + def->mac_specified =3D false; + } + + if (!(net =3D virNetworkAssignDef(nets, def, 0))) + goto error; + + net->autostart =3D autostart; + + VIR_FREE(configFile); + VIR_FREE(autostartLink); + + return net; + + error: + VIR_FREE(configFile); + VIR_FREE(autostartLink); + virNetworkDefFree(def); + return NULL; +} + + +int +virNetworkLoadAllState(virNetworkObjListPtr nets, + const char *stateDir) +{ + DIR *dir; + struct dirent *entry; + int ret =3D -1; + int rc; + + if ((rc =3D virDirOpenIfExists(&dir, stateDir)) <=3D 0) + return rc; + + while ((ret =3D virDirRead(dir, &entry, stateDir)) > 0) { + virNetworkObjPtr net; + + if (!virFileStripSuffix(entry->d_name, ".xml")) + continue; + + net =3D virNetworkLoadState(nets, stateDir, entry->d_name); + virNetworkObjEndAPI(&net); + } + + VIR_DIR_CLOSE(dir); + return ret; +} + + +int virNetworkLoadAllConfigs(virNetworkObjListPtr nets, + const char *configDir, + const char *autostartDir) +{ + DIR *dir; + struct dirent *entry; + int ret =3D -1; + int rc; + + if ((rc =3D virDirOpenIfExists(&dir, configDir)) <=3D 0) + return rc; + + while ((ret =3D virDirRead(dir, &entry, configDir)) > 0) { + virNetworkObjPtr net; + + if (!virFileStripSuffix(entry->d_name, ".xml")) + continue; + + /* NB: ignoring errors, so one malformed config doesn't + kill the whole process */ + net =3D virNetworkLoadConfig(nets, + configDir, + autostartDir, + entry->d_name); + virNetworkObjEndAPI(&net); + } + + VIR_DIR_CLOSE(dir); + return ret; +} + +int virNetworkDeleteConfig(const char *configDir, + const char *autostartDir, + virNetworkObjPtr net) +{ + char *configFile =3D NULL; + char *autostartLink =3D NULL; + int ret =3D -1; + + if ((configFile =3D virNetworkConfigFile(configDir, net->def->name)) = =3D=3D NULL) + goto error; + if ((autostartLink =3D virNetworkConfigFile(autostartDir, net->def->na= me)) =3D=3D NULL) + goto error; + + /* Not fatal if this doesn't work */ + unlink(autostartLink); + net->autostart =3D 0; + + if (unlink(configFile) < 0) { + virReportSystemError(errno, + _("cannot remove config file '%s'"), + configFile); + goto error; + } + + ret =3D 0; + + error: + VIR_FREE(configFile); + VIR_FREE(autostartLink); + return ret; +} + +struct virNetworkBridgeInUseHelperData { + const char *bridge; + const char *skipname; +}; + +static int +virNetworkBridgeInUseHelper(const void *payload, + const void *name ATTRIBUTE_UNUSED, + const void *opaque) +{ + int ret; + virNetworkObjPtr net =3D (virNetworkObjPtr) payload; + const struct virNetworkBridgeInUseHelperData *data =3D opaque; + + virObjectLock(net); + if (data->skipname && + ((net->def && STREQ(net->def->name, data->skipname)) || + (net->newDef && STREQ(net->newDef->name, data->skipname)))) + ret =3D 0; + else if ((net->def && net->def->bridge && + STREQ(net->def->bridge, data->bridge)) || + (net->newDef && net->newDef->bridge && + STREQ(net->newDef->bridge, data->bridge))) + ret =3D 1; + else + ret =3D 0; + virObjectUnlock(net); + return ret; +} + +int virNetworkBridgeInUse(virNetworkObjListPtr nets, + const char *bridge, + const char *skipname) +{ + virNetworkObjPtr obj; + struct virNetworkBridgeInUseHelperData data =3D {bridge, skipname}; + + virObjectLock(nets); + obj =3D virHashSearch(nets->objs, virNetworkBridgeInUseHelper, &data); + virObjectUnlock(nets); + + return obj !=3D NULL; +} + + +/* + * virNetworkObjUpdate: + * + * Apply the supplied update to the given virNetworkObj. Except for + * @network pointing to an actual network object rather than the + * opaque virNetworkPtr, parameters are identical to the public API + * virNetworkUpdate. + * + * The original virNetworkDefs are copied, and all modifications made + * to these copies. The originals are replaced with the copies only + * after success has been guaranteed. + * + * Returns: -1 on error, 0 on success. + */ +int +virNetworkObjUpdate(virNetworkObjPtr network, + unsigned int command, /* virNetworkUpdateCommand */ + unsigned int section, /* virNetworkUpdateSection */ + int parentIndex, + const char *xml, + unsigned int flags) /* virNetworkUpdateFlags */ +{ + int ret =3D -1; + virNetworkDefPtr livedef =3D NULL, configdef =3D NULL; + + /* normalize config data, and check for common invalid requests. */ + if (virNetworkConfigChangeSetup(network, flags) < 0) + goto cleanup; + + if (flags & VIR_NETWORK_UPDATE_AFFECT_LIVE) { + virNetworkDefPtr checkdef; + + /* work on a copy of the def */ + if (!(livedef =3D virNetworkDefCopy(network->def, 0))) + goto cleanup; + if (virNetworkDefUpdateSection(livedef, command, section, + parentIndex, xml, flags) < 0) { + goto cleanup; + } + /* run a final format/parse cycle to make sure we didn't + * add anything illegal to the def + */ + if (!(checkdef =3D virNetworkDefCopy(livedef, 0))) + goto cleanup; + virNetworkDefFree(checkdef); + } + + if (flags & VIR_NETWORK_UPDATE_AFFECT_CONFIG) { + virNetworkDefPtr checkdef; + + /* work on a copy of the def */ + if (!(configdef =3D virNetworkDefCopy(virNetworkObjGetPersistentDe= f(network), + VIR_NETWORK_XML_INACTIVE))) { + goto cleanup; + } + if (virNetworkDefUpdateSection(configdef, command, section, + parentIndex, xml, flags) < 0) { + goto cleanup; + } + if (!(checkdef =3D virNetworkDefCopy(configdef, + VIR_NETWORK_XML_INACTIVE))) { + goto cleanup; + } + virNetworkDefFree(checkdef); + } + + if (configdef) { + /* successfully modified copy, now replace original */ + if (virNetworkObjReplacePersistentDef(network, configdef) < 0) + goto cleanup; + configdef =3D NULL; + } + if (livedef) { + /* successfully modified copy, now replace original */ + virNetworkDefFree(network->def); + network->def =3D livedef; + livedef =3D NULL; + } + + ret =3D 0; + cleanup: + virNetworkDefFree(livedef); + virNetworkDefFree(configdef); + return ret; +} + +#define MATCH(FLAG) (flags & (FLAG)) +static bool +virNetworkMatch(virNetworkObjPtr netobj, + unsigned int flags) +{ + /* filter by active state */ + if (MATCH(VIR_CONNECT_LIST_NETWORKS_FILTERS_ACTIVE) && + !((MATCH(VIR_CONNECT_LIST_NETWORKS_ACTIVE) && + virNetworkObjIsActive(netobj)) || + (MATCH(VIR_CONNECT_LIST_NETWORKS_INACTIVE) && + !virNetworkObjIsActive(netobj)))) + return false; + + /* filter by persistence */ + if (MATCH(VIR_CONNECT_LIST_NETWORKS_FILTERS_PERSISTENT) && + !((MATCH(VIR_CONNECT_LIST_NETWORKS_PERSISTENT) && + netobj->persistent) || + (MATCH(VIR_CONNECT_LIST_NETWORKS_TRANSIENT) && + !netobj->persistent))) + return false; + + /* filter by autostart option */ + if (MATCH(VIR_CONNECT_LIST_NETWORKS_FILTERS_AUTOSTART) && + !((MATCH(VIR_CONNECT_LIST_NETWORKS_AUTOSTART) && + netobj->autostart) || + (MATCH(VIR_CONNECT_LIST_NETWORKS_NO_AUTOSTART) && + !netobj->autostart))) + return false; + + return true; +} +#undef MATCH + +struct virNetworkObjListData { + virConnectPtr conn; + virNetworkPtr *nets; + virNetworkObjListFilter filter; + unsigned int flags; + int nnets; + bool error; +}; + +static int +virNetworkObjListPopulate(void *payload, + const void *name ATTRIBUTE_UNUSED, + void *opaque) +{ + struct virNetworkObjListData *data =3D opaque; + virNetworkObjPtr obj =3D payload; + virNetworkPtr net =3D NULL; + + if (data->error) + return 0; + + virObjectLock(obj); + + if (data->filter && + !data->filter(data->conn, obj->def)) + goto cleanup; + + if (!virNetworkMatch(obj, data->flags)) + goto cleanup; + + if (!data->nets) { + data->nnets++; + goto cleanup; + } + + if (!(net =3D virGetNetwork(data->conn, obj->def->name, obj->def->uuid= ))) { + data->error =3D true; + goto cleanup; + } + + data->nets[data->nnets++] =3D net; + + cleanup: + virObjectUnlock(obj); + return 0; +} + +int +virNetworkObjListExport(virConnectPtr conn, + virNetworkObjListPtr netobjs, + virNetworkPtr **nets, + virNetworkObjListFilter filter, + unsigned int flags) +{ + int ret =3D -1; + struct virNetworkObjListData data =3D { conn, NULL, filter, flags, 0, = false}; + + virObjectLock(netobjs); + if (nets && VIR_ALLOC_N(data.nets, virHashSize(netobjs->objs) + 1) < 0) + goto cleanup; + + virHashForEach(netobjs->objs, virNetworkObjListPopulate, &data); + + if (data.error) + goto cleanup; + + if (data.nets) { + /* trim the array to the final size */ + ignore_value(VIR_REALLOC_N(data.nets, data.nnets + 1)); + *nets =3D data.nets; + data.nets =3D NULL; + } + + ret =3D data.nnets; + cleanup: + virObjectUnlock(netobjs); + while (data.nets && data.nnets) + virObjectUnref(data.nets[--data.nnets]); + + VIR_FREE(data.nets); + return ret; +} + +struct virNetworkObjListForEachHelperData { + virNetworkObjListIterator callback; + void *opaque; + int ret; +}; + +static int +virNetworkObjListForEachHelper(void *payload, + const void *name ATTRIBUTE_UNUSED, + void *opaque) +{ + struct virNetworkObjListForEachHelperData *data =3D opaque; + + if (data->callback(payload, data->opaque) < 0) + data->ret =3D -1; + return 0; +} + +/** + * virNetworkObjListForEach: + * @nets: a list of network objects + * @callback: function to call over each of object in the list + * @opaque: pointer to pass to the @callback + * + * Function iterates over the list of network objects and calls + * passed callback over each one of them. You should avoid + * calling those virNetworkObjList APIs, which lock the list + * again in favor of their virNetworkObj*Locked variants. + * + * Returns: 0 on success, -1 otherwise. + */ +int +virNetworkObjListForEach(virNetworkObjListPtr nets, + virNetworkObjListIterator callback, + void *opaque) +{ + struct virNetworkObjListForEachHelperData data =3D {callback, opaque, = 0}; + virObjectLock(nets); + virHashForEach(nets->objs, virNetworkObjListForEachHelper, &data); + virObjectUnlock(nets); + return data.ret; +} + +struct virNetworkObjListGetHelperData { + virConnectPtr conn; + virNetworkObjListFilter filter; + char **names; + int nnames; + bool active; + int got; + bool error; +}; + +static int +virNetworkObjListGetHelper(void *payload, + const void *name ATTRIBUTE_UNUSED, + void *opaque) +{ + struct virNetworkObjListGetHelperData *data =3D opaque; + virNetworkObjPtr obj =3D payload; + + if (data->error) + return 0; + + if (data->nnames >=3D 0 && + data->got =3D=3D data->nnames) + return 0; + + virObjectLock(obj); + + if (data->filter && + !data->filter(data->conn, obj->def)) + goto cleanup; + + if ((data->active && virNetworkObjIsActive(obj)) || + (!data->active && !virNetworkObjIsActive(obj))) { + if (data->names && + VIR_STRDUP(data->names[data->got], obj->def->name) < 0) { + data->error =3D true; + goto cleanup; + } + data->got++; + } + + cleanup: + virObjectUnlock(obj); + return 0; +} + +int +virNetworkObjListGetNames(virNetworkObjListPtr nets, + bool active, + char **names, + int nnames, + virNetworkObjListFilter filter, + virConnectPtr conn) +{ + int ret =3D -1; + + struct virNetworkObjListGetHelperData data =3D { + conn, filter, names, nnames, active, 0, false}; + + virObjectLock(nets); + virHashForEach(nets->objs, virNetworkObjListGetHelper, &data); + virObjectUnlock(nets); + + if (data.error) + goto cleanup; + + ret =3D data.got; + cleanup: + if (ret < 0) { + while (data.got) + VIR_FREE(data.names[--data.got]); + } + return ret; +} + +int +virNetworkObjListNumOfNetworks(virNetworkObjListPtr nets, + bool active, + virNetworkObjListFilter filter, + virConnectPtr conn) +{ + struct virNetworkObjListGetHelperData data =3D { + conn, filter, NULL, -1, active, 0, false}; + + virObjectLock(nets); + virHashForEach(nets->objs, virNetworkObjListGetHelper, &data); + virObjectUnlock(nets); + + return data.got; +} + +struct virNetworkObjListPruneHelperData { + unsigned int flags; +}; + +static int +virNetworkObjListPruneHelper(const void *payload, + const void *name ATTRIBUTE_UNUSED, + const void *opaque) +{ + const struct virNetworkObjListPruneHelperData *data =3D opaque; + virNetworkObjPtr obj =3D (virNetworkObjPtr) payload; + int want =3D 0; + + virObjectLock(obj); + want =3D virNetworkMatch(obj, data->flags); + virObjectUnlock(obj); + return want; +} + +/** + * virNetworkObjListPrune: + * @nets: a list of network objects + * @flags: bitwise-OR of virConnectListAllNetworksFlags + * + * Iterate over list of network objects and remove the desired + * ones from it. + */ +void +virNetworkObjListPrune(virNetworkObjListPtr nets, + unsigned int flags) +{ + struct virNetworkObjListPruneHelperData data =3D {flags}; + + virObjectLock(nets); + virHashRemoveSet(nets->objs, virNetworkObjListPruneHelper, &data); + virObjectUnlock(nets); +} diff --git a/src/conf/virnetworkobj.h b/src/conf/virnetworkobj.h new file mode 100644 index 0000000..1eb3151 --- /dev/null +++ b/src/conf/virnetworkobj.h @@ -0,0 +1,160 @@ +/* + * virnetworkobj.h: handle network objects + * (derived from network_conf.h) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * . + */ + +#ifndef __VIRNETWORKOBJ_H__ +# define __VIRNETWORKOBJ_H__ + +# include "internal.h" + +# include "network_conf.h" + +typedef struct _virNetworkObj virNetworkObj; +typedef virNetworkObj *virNetworkObjPtr; +struct _virNetworkObj { + virObjectLockable parent; + + pid_t dnsmasqPid; + pid_t radvdPid; + unsigned int active : 1; + unsigned int autostart : 1; + unsigned int persistent : 1; + + virNetworkDefPtr def; /* The current definition */ + virNetworkDefPtr newDef; /* New definition to activate at shutdown */ + + virBitmapPtr class_id; /* bitmap of class IDs for QoS */ + unsigned long long floor_sum; /* sum of all 'floor'-s of attached NICs= */ + + unsigned int taint; + + /* Immutable pointer, self locking APIs */ + virMacMapPtr macmap; +}; + +virNetworkObjPtr virNetworkObjNew(void); +void virNetworkObjEndAPI(virNetworkObjPtr *net); + +typedef struct _virNetworkObjList virNetworkObjList; +typedef virNetworkObjList *virNetworkObjListPtr; + +static inline int +virNetworkObjIsActive(const virNetworkObj *net) +{ + return net->active; +} + +virNetworkObjListPtr virNetworkObjListNew(void); + +virNetworkObjPtr virNetworkObjFindByUUIDLocked(virNetworkObjListPtr nets, + const unsigned char *uuid); +virNetworkObjPtr virNetworkObjFindByUUID(virNetworkObjListPtr nets, + const unsigned char *uuid); +virNetworkObjPtr virNetworkObjFindByNameLocked(virNetworkObjListPtr nets, + const char *name); +virNetworkObjPtr virNetworkObjFindByName(virNetworkObjListPtr nets, + const char *name); +bool virNetworkObjTaint(virNetworkObjPtr obj, + virNetworkTaintFlags taint); + +typedef bool (*virNetworkObjListFilter)(virConnectPtr conn, + virNetworkDefPtr def); + +virNetworkObjPtr virNetworkAssignDef(virNetworkObjListPtr nets, + virNetworkDefPtr def, + unsigned int flags); +void virNetworkObjAssignDef(virNetworkObjPtr network, + virNetworkDefPtr def, + bool live); +int virNetworkObjSetDefTransient(virNetworkObjPtr network, bool live); +void virNetworkObjUnsetDefTransient(virNetworkObjPtr network); +virNetworkDefPtr virNetworkObjGetPersistentDef(virNetworkObjPtr network); +int virNetworkObjReplacePersistentDef(virNetworkObjPtr network, + virNetworkDefPtr def); +int virNetworkConfigChangeSetup(virNetworkObjPtr dom, unsigned int flags); + +void virNetworkRemoveInactive(virNetworkObjListPtr nets, + virNetworkObjPtr net); + +int virNetworkSaveStatus(const char *statusDir, + virNetworkObjPtr net) ATTRIBUTE_RETURN_CHECK; + +virNetworkObjPtr virNetworkLoadConfig(virNetworkObjListPtr nets, + const char *configDir, + const char *autostartDir, + const char *file); + +virNetworkObjPtr virNetworkLoadState(virNetworkObjListPtr nets, + const char *stateDir, + const char *name); + +int virNetworkLoadAllConfigs(virNetworkObjListPtr nets, + const char *configDir, + const char *autostartDir); + +int virNetworkLoadAllState(virNetworkObjListPtr nets, + const char *stateDir); + +int virNetworkDeleteConfig(const char *configDir, + const char *autostartDir, + virNetworkObjPtr net); + +char *virNetworkConfigFile(const char *dir, + const char *name); + +int virNetworkBridgeInUse(virNetworkObjListPtr nets, + const char *bridge, + const char *skipname); + +int +virNetworkObjUpdate(virNetworkObjPtr obj, + unsigned int command, /* virNetworkUpdateCommand */ + unsigned int section, /* virNetworkUpdateSection */ + int parentIndex, + const char *xml, + unsigned int flags); /* virNetworkUpdateFlags */ + +int virNetworkObjListExport(virConnectPtr conn, + virNetworkObjListPtr netobjs, + virNetworkPtr **nets, + virNetworkObjListFilter filter, + unsigned int flags); + +typedef int (*virNetworkObjListIterator)(virNetworkObjPtr net, + void *opaque); + +int virNetworkObjListForEach(virNetworkObjListPtr nets, + virNetworkObjListIterator callback, + void *opaque); + +int virNetworkObjListGetNames(virNetworkObjListPtr nets, + bool active, + char **names, + int nnames, + virNetworkObjListFilter filter, + virConnectPtr conn); + +int virNetworkObjListNumOfNetworks(virNetworkObjListPtr nets, + bool active, + virNetworkObjListFilter filter, + virConnectPtr conn); + +void virNetworkObjListPrune(virNetworkObjListPtr nets, + unsigned int flags); + +#endif /* __VIRNETWORKOBJ_H__ */ diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 8509f63..3e2cb6b 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -628,11 +628,8 @@ virNetDevVPortTypeToString; =20 =20 # conf/network_conf.h -virNetworkAssignDef; -virNetworkBridgeInUse; virNetworkBridgeMACTableManagerTypeFromString; virNetworkBridgeMACTableManagerTypeToString; -virNetworkConfigChangeSetup; virNetworkConfigFile; virNetworkDefCopy; virNetworkDefFormat; @@ -644,35 +641,12 @@ virNetworkDefGetRouteByIndex; virNetworkDefParseFile; virNetworkDefParseNode; virNetworkDefParseString; +virNetworkDefParseXML; virNetworkDefUpdateSection; -virNetworkDeleteConfig; virNetworkForwardTypeToString; virNetworkIPDefNetmask; virNetworkIPDefPrefix; -virNetworkLoadAllConfigs; -virNetworkLoadAllState; -virNetworkObjAssignDef; -virNetworkObjEndAPI; -virNetworkObjFindByName; -virNetworkObjFindByNameLocked; -virNetworkObjFindByUUID; -virNetworkObjFindByUUIDLocked; -virNetworkObjGetPersistentDef; -virNetworkObjListExport; -virNetworkObjListForEach; -virNetworkObjListGetNames; -virNetworkObjListNew; -virNetworkObjListNumOfNetworks; -virNetworkObjListPrune; -virNetworkObjNew; -virNetworkObjReplacePersistentDef; -virNetworkObjSetDefTransient; -virNetworkObjTaint; -virNetworkObjUnsetDefTransient; -virNetworkObjUpdate; -virNetworkRemoveInactive; virNetworkSaveConfig; -virNetworkSaveStatus; virNetworkSetBridgeMacAddr; virNetworkTaintTypeFromString; virNetworkTaintTypeToString; @@ -944,6 +918,36 @@ virInterfaceObjRemove; virInterfaceObjUnlock; =20 =20 +# conf/virnetworkobj.h +virNetworkAssignDef; +virNetworkBridgeInUse; +virNetworkConfigChangeSetup; +virNetworkDeleteConfig; +virNetworkLoadAllConfigs; +virNetworkLoadAllState; +virNetworkObjAssignDef; +virNetworkObjEndAPI; +virNetworkObjFindByName; +virNetworkObjFindByNameLocked; +virNetworkObjFindByUUID; +virNetworkObjFindByUUIDLocked; +virNetworkObjGetPersistentDef; +virNetworkObjListExport; +virNetworkObjListForEach; +virNetworkObjListGetNames; +virNetworkObjListNew; +virNetworkObjListNumOfNetworks; +virNetworkObjListPrune; +virNetworkObjNew; +virNetworkObjReplacePersistentDef; +virNetworkObjSetDefTransient; +virNetworkObjTaint; +virNetworkObjUnsetDefTransient; +virNetworkObjUpdate; +virNetworkRemoveInactive; +virNetworkSaveStatus; + + # conf/virnodedeviceobj.h virNodeDeviceObjAssignDef; virNodeDeviceObjFindByName; diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c index 5ccd37a..f45c2a8 100644 --- a/src/network/bridge_driver.c +++ b/src/network/bridge_driver.c @@ -49,7 +49,6 @@ #include "datatypes.h" #include "bridge_driver.h" #include "bridge_driver_platform.h" -#include "network_conf.h" #include "device_conf.h" #include "driver.h" #include "virbuffer.h" diff --git a/src/network/bridge_driver.h b/src/network/bridge_driver.h index c696f03..fbc7634 100644 --- a/src/network/bridge_driver.h +++ b/src/network/bridge_driver.h @@ -26,10 +26,10 @@ # define __VIR_NETWORK__DRIVER_H =20 # include "internal.h" -# include "network_conf.h" # include "domain_conf.h" # include "vircommand.h" # include "virdnsmasq.h" +# include "virnetworkobj.h" =20 int networkRegister(void); =20 diff --git a/src/network/bridge_driver_platform.h b/src/network/bridge_driv= er_platform.h index 904e731..f04c0c4 100644 --- a/src/network/bridge_driver_platform.h +++ b/src/network/bridge_driver_platform.h @@ -27,7 +27,7 @@ # include "internal.h" # include "virthread.h" # include "virdnsmasq.h" -# include "network_conf.h" +# include "virnetworkobj.h" # include "object_event.h" =20 /* Main driver state */ diff --git a/src/test/test_driver.c b/src/test/test_driver.c index 46ebdcc..1fd7414 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -41,7 +41,7 @@ #include "capabilities.h" #include "configmake.h" #include "viralloc.h" -#include "network_conf.h" +#include "virnetworkobj.h" #include "interface_conf.h" #include "domain_conf.h" #include "domain_event.h" --=20 2.9.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu May 2 23:15:55 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 149204186740145.34583373780458; Wed, 12 Apr 2017 17:04:27 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 285A93D952; Thu, 13 Apr 2017 00:04:26 +0000 (UTC) Received: from colo-mx.corp.redhat.com (unknown [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id F38FC1711A; Thu, 13 Apr 2017 00:04:25 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 9EE841F8; Thu, 13 Apr 2017 00:04:25 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v3D04Nur012169 for ; Wed, 12 Apr 2017 20:04:23 -0400 Received: by smtp.corp.redhat.com (Postfix) id 854BC173F3; Thu, 13 Apr 2017 00:04:23 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-116-15.phx2.redhat.com [10.3.116.15]) by smtp.corp.redhat.com (Postfix) with ESMTP id 40DC017187 for ; Thu, 13 Apr 2017 00:04:23 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 285A93D952 Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=libvir-list-bounces@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 285A93D952 From: John Ferlan To: libvir-list@redhat.com Date: Wed, 12 Apr 2017 20:04:15 -0400 Message-Id: <20170413000418.30018-3-jferlan@redhat.com> In-Reply-To: <20170413000418.30018-1-jferlan@redhat.com> References: <20170413000418.30018-1-jferlan@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-loop: libvir-list@redhat.com Subject: [libvirt] [REPOST PATCH 2/5] conf: Adjust coding style for network conf sources X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Thu, 13 Apr 2017 00:04:26 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Alter the format of the code to follow more recent style guidelines of two empty lines between functions, function decls with "[static] type" on one line followed by function name with arguments to functions each on one line. Signed-off-by: John Ferlan --- src/conf/network_conf.c | 103 ++++++++++++++++++++++++++++++++++++++-----= ---- src/conf/virnetworkobj.c | 87 +++++++++++++++++++++++++++++---------- 2 files changed, 151 insertions(+), 39 deletions(-) diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c index f3e0622..3ebf67f 100644 --- a/src/conf/network_conf.c +++ b/src/conf/network_conf.c @@ -80,6 +80,7 @@ virPortGroupDefClear(virPortGroupDefPtr def) def->bandwidth =3D NULL; } =20 + static void virNetworkForwardIfDefClear(virNetworkForwardIfDefPtr def) { @@ -87,12 +88,14 @@ virNetworkForwardIfDefClear(virNetworkForwardIfDefPtr d= ef) VIR_FREE(def->device.dev); } =20 + static void virNetworkForwardPfDefClear(virNetworkForwardPfDefPtr def) { VIR_FREE(def->dev); } =20 + static void virNetworkDHCPHostDefClear(virNetworkDHCPHostDefPtr def) { @@ -101,6 +104,7 @@ virNetworkDHCPHostDefClear(virNetworkDHCPHostDefPtr def) VIR_FREE(def->name); } =20 + static void virNetworkIPDefClear(virNetworkIPDefPtr def) { @@ -115,6 +119,7 @@ virNetworkIPDefClear(virNetworkIPDefPtr def) VIR_FREE(def->bootfile); } =20 + static void virNetworkDNSTxtDefClear(virNetworkDNSTxtDefPtr def) { @@ -122,6 +127,7 @@ virNetworkDNSTxtDefClear(virNetworkDNSTxtDefPtr def) VIR_FREE(def->value); } =20 + static void virNetworkDNSHostDefClear(virNetworkDNSHostDefPtr def) { @@ -130,6 +136,7 @@ virNetworkDNSHostDefClear(virNetworkDNSHostDefPtr def) VIR_FREE(def->names); } =20 + static void virNetworkDNSSrvDefClear(virNetworkDNSSrvDefPtr def) { @@ -172,6 +179,7 @@ virNetworkDNSDefClear(virNetworkDNSDefPtr def) } } =20 + static void virNetworkForwardDefClear(virNetworkForwardDefPtr def) { @@ -187,6 +195,7 @@ virNetworkForwardDefClear(virNetworkForwardDefPtr def) def->nifs =3D def->npfs =3D 0; } =20 + void virNetworkDefFree(virNetworkDefPtr def) { @@ -225,6 +234,7 @@ virNetworkDefFree(virNetworkDefPtr def) VIR_FREE(def); } =20 + /* * virNetworkDefCopy: * @def: NetworkDef to copy @@ -255,10 +265,12 @@ virNetworkDefCopy(virNetworkDefPtr def, unsigned int = flags) return newDef; } =20 + /* return ips[index], or NULL if there aren't enough ips */ virNetworkIPDefPtr virNetworkDefGetIPByIndex(const virNetworkDef *def, - int family, size_t n) + int family, + size_t n) { size_t i; =20 @@ -279,10 +291,12 @@ virNetworkDefGetIPByIndex(const virNetworkDef *def, return NULL; } =20 + /* return routes[index], or NULL if there aren't enough routes */ virNetDevIPRoutePtr virNetworkDefGetRouteByIndex(const virNetworkDef *def, - int family, size_t n) + int family, + size_t n) { size_t i; =20 @@ -305,16 +319,19 @@ virNetworkDefGetRouteByIndex(const virNetworkDef *def, return NULL; } =20 + /* return number of 1 bits in netmask for the network's ipAddress, * or -1 on error */ -int virNetworkIPDefPrefix(const virNetworkIPDef *def) +int +virNetworkIPDefPrefix(const virNetworkIPDef *def) { return virSocketAddrGetIPPrefix(&def->address, &def->netmask, def->prefix); } =20 + /* Fill in a virSocketAddr with the proper netmask for this * definition, based on either the definition's netmask, or its * prefix. Return -1 on error (and set the netmask family to AF_UNSPEC) @@ -374,6 +391,7 @@ virSocketAddrRangeParseXML(const char *networkName, return ret; } =20 + static int virNetworkDHCPHostDefParseXML(const char *networkName, virNetworkIPDefPtr def, @@ -494,6 +512,7 @@ virNetworkDHCPHostDefParseXML(const char *networkName, return ret; } =20 + static int virNetworkDHCPDefParseXML(const char *networkName, xmlNodePtr node, @@ -561,6 +580,7 @@ virNetworkDHCPDefParseXML(const char *networkName, return ret; } =20 + static int virNetworkDNSHostDefParseXML(const char *networkName, xmlNodePtr node, @@ -628,6 +648,7 @@ virNetworkDNSHostDefParseXML(const char *networkName, return -1; } =20 + /* This includes all characters used in the names of current * /etc/services and /etc/protocols files (on Fedora 20), except ".", * which we can't allow because it would conflict with the use of "." @@ -755,6 +776,7 @@ virNetworkDNSSrvDefParseXML(const char *networkName, return -1; } =20 + static int virNetworkDNSTxtDefParseXML(const char *networkName, xmlNodePtr node, @@ -795,6 +817,7 @@ virNetworkDNSTxtDefParseXML(const char *networkName, return -1; } =20 + static int virNetworkDNSDefParseXML(const char *networkName, xmlNodePtr node, @@ -953,6 +976,7 @@ virNetworkDNSDefParseXML(const char *networkName, return ret; } =20 + static int virNetworkIPDefParseXML(const char *networkName, xmlNodePtr node, @@ -1108,6 +1132,7 @@ virNetworkIPDefParseXML(const char *networkName, return result; } =20 + static int virNetworkPortGroupParseXML(virPortGroupDefPtr def, xmlNodePtr node, @@ -1179,6 +1204,7 @@ virNetworkPortGroupParseXML(virPortGroupDefPtr def, return result; } =20 + static int virNetworkForwardNatDefParseXML(const char *networkName, xmlNodePtr node, @@ -1307,6 +1333,7 @@ virNetworkForwardNatDefParseXML(const char *networkNa= me, return ret; } =20 + static int virNetworkForwardDefParseXML(const char *networkName, xmlNodePtr node, @@ -1555,6 +1582,7 @@ virNetworkForwardDefParseXML(const char *networkName, return ret; } =20 + virNetworkDefPtr virNetworkDefParseXML(xmlXPathContextPtr ctxt) { @@ -1966,6 +1994,7 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt) return NULL; } =20 + static virNetworkDefPtr virNetworkDefParse(const char *xmlStr, const char *filename) @@ -1983,19 +2012,24 @@ virNetworkDefParse(const char *xmlStr, return def; } =20 -virNetworkDefPtr virNetworkDefParseString(const char *xmlStr) + +virNetworkDefPtr +virNetworkDefParseString(const char *xmlStr) { return virNetworkDefParse(xmlStr, NULL); } =20 -virNetworkDefPtr virNetworkDefParseFile(const char *filename) + +virNetworkDefPtr +virNetworkDefParseFile(const char *filename) { return virNetworkDefParse(NULL, filename); } =20 =20 -virNetworkDefPtr virNetworkDefParseNode(xmlDocPtr xml, - xmlNodePtr root) +virNetworkDefPtr +virNetworkDefParseNode(xmlDocPtr xml, + xmlNodePtr root) { xmlXPathContextPtr ctxt =3D NULL; virNetworkDefPtr def =3D NULL; @@ -2129,6 +2163,7 @@ virNetworkDNSDefFormat(virBufferPtr buf, return 0; } =20 + static int virNetworkIPDefFormat(virBufferPtr buf, const virNetworkIPDef *def) @@ -2230,6 +2265,7 @@ virNetworkIPDefFormat(virBufferPtr buf, return result; } =20 + static int virPortGroupDefFormat(virBufferPtr buf, const virPortGroupDef *def) @@ -2252,6 +2288,7 @@ virPortGroupDefFormat(virBufferPtr buf, return 0; } =20 + static int virNetworkForwardNatDefFormat(virBufferPtr buf, const virNetworkForwardDef *fwd) @@ -2302,6 +2339,7 @@ virNetworkForwardNatDefFormat(virBufferPtr buf, return ret; } =20 + int virNetworkDefFormatBuf(virBufferPtr buf, const virNetworkDef *def, @@ -2516,6 +2554,7 @@ virNetworkDefFormatBuf(virBufferPtr buf, return -1; } =20 + char * virNetworkDefFormat(const virNetworkDef *def, unsigned int flags) @@ -2535,16 +2574,20 @@ virNetworkDefFormat(const virNetworkDef *def, return NULL; } =20 + const char * -virNetworkDefForwardIf(const virNetworkDef *def, size_t n) +virNetworkDefForwardIf(const virNetworkDef *def, + size_t n) { return ((def->forward.ifs && (def->forward.nifs > n) && def->forward.ifs[n].type =3D=3D VIR_NETWORK_FORWARD_HOSTDEV_D= EVICE_NETDEV) ? def->forward.ifs[n].device.dev : NULL); } =20 -virPortGroupDefPtr virPortGroupFindByName(virNetworkDefPtr net, - const char *portgroup) + +virPortGroupDefPtr +virPortGroupFindByName(virNetworkDefPtr net, + const char *portgroup) { size_t i; for (i =3D 0; i < net->nPortGroups; i++) { @@ -2559,9 +2602,11 @@ virPortGroupDefPtr virPortGroupFindByName(virNetwork= DefPtr net, return NULL; } =20 -int virNetworkSaveXML(const char *configDir, - virNetworkDefPtr def, - const char *xml) + +int +virNetworkSaveXML(const char *configDir, + virNetworkDefPtr def, + const char *xml) { char uuidstr[VIR_UUID_STRING_BUFLEN]; char *configFile =3D NULL; @@ -2587,8 +2632,10 @@ int virNetworkSaveXML(const char *configDir, return ret; } =20 -int virNetworkSaveConfig(const char *configDir, - virNetworkDefPtr def) + +int +virNetworkSaveConfig(const char *configDir, + virNetworkDefPtr def) { int ret =3D -1; char *xml; @@ -2605,8 +2652,10 @@ int virNetworkSaveConfig(const char *configDir, return ret; } =20 -char *virNetworkConfigFile(const char *dir, - const char *name) + +char * +virNetworkConfigFile(const char *dir, + const char *name) { char *ret =3D NULL; =20 @@ -2614,7 +2663,9 @@ char *virNetworkConfigFile(const char *dir, return ret; } =20 -void virNetworkSetBridgeMacAddr(virNetworkDefPtr def) + +void +virNetworkSetBridgeMacAddr(virNetworkDefPtr def) { if (!def->mac_specified) { /* if the bridge doesn't have a mac address explicitly defined, @@ -2626,6 +2677,7 @@ void virNetworkSetBridgeMacAddr(virNetworkDefPtr def) } } =20 + /* NetworkObj backend of the virNetworkUpdate API */ =20 static void @@ -2636,6 +2688,7 @@ virNetworkDefUpdateNoSupport(virNetworkDefPtr def, co= nst char *section) section, def->name); } =20 + static void virNetworkDefUpdateUnknownCommand(unsigned int command) { @@ -2643,6 +2696,7 @@ virNetworkDefUpdateUnknownCommand(unsigned int comman= d) _("unrecognized network update command code %d"), comma= nd); } =20 + static int virNetworkDefUpdateCheckElementName(virNetworkDefPtr def, xmlNodePtr node, @@ -2658,6 +2712,7 @@ virNetworkDefUpdateCheckElementName(virNetworkDefPtr = def, return 0; } =20 + static int virNetworkDefUpdateBridge(virNetworkDefPtr def, unsigned int command ATTRIBUTE_UNUSED, @@ -2670,6 +2725,7 @@ virNetworkDefUpdateBridge(virNetworkDefPtr def, return -1; } =20 + static int virNetworkDefUpdateDomain(virNetworkDefPtr def, unsigned int command ATTRIBUTE_UNUSED, @@ -2682,6 +2738,7 @@ virNetworkDefUpdateDomain(virNetworkDefPtr def, return -1; } =20 + static int virNetworkDefUpdateIP(virNetworkDefPtr def, unsigned int command ATTRIBUTE_UNUSED, @@ -2694,6 +2751,7 @@ virNetworkDefUpdateIP(virNetworkDefPtr def, return -1; } =20 + static virNetworkIPDefPtr virNetworkIPDefByIndex(virNetworkDefPtr def, int parentIndex) { @@ -2897,6 +2955,7 @@ virNetworkDefUpdateIPDHCPHost(virNetworkDefPtr def, return ret; } =20 + static int virNetworkDefUpdateIPDHCPRange(virNetworkDefPtr def, unsigned int command, @@ -2998,6 +3057,7 @@ virNetworkDefUpdateIPDHCPRange(virNetworkDefPtr def, return ret; } =20 + static int virNetworkDefUpdateForward(virNetworkDefPtr def, unsigned int command ATTRIBUTE_UNUSED, @@ -3010,6 +3070,7 @@ virNetworkDefUpdateForward(virNetworkDefPtr def, return -1; } =20 + static int virNetworkDefUpdateForwardInterface(virNetworkDefPtr def, unsigned int command, @@ -3104,6 +3165,7 @@ virNetworkDefUpdateForwardInterface(virNetworkDefPtr = def, return ret; } =20 + static int virNetworkDefUpdateForwardPF(virNetworkDefPtr def, unsigned int command ATTRIBUTE_UNUSED, @@ -3116,6 +3178,7 @@ virNetworkDefUpdateForwardPF(virNetworkDefPtr def, return -1; } =20 + static int virNetworkDefUpdatePortGroup(virNetworkDefPtr def, unsigned int command, @@ -3210,6 +3273,7 @@ virNetworkDefUpdatePortGroup(virNetworkDefPtr def, return ret; } =20 + static int virNetworkDefUpdateDNSHost(virNetworkDefPtr def, unsigned int command ATTRIBUTE_UNUSED, @@ -3304,6 +3368,7 @@ virNetworkDefUpdateDNSHost(virNetworkDefPtr def, return ret; } =20 + static int virNetworkDefUpdateDNSSrv(virNetworkDefPtr def, unsigned int command ATTRIBUTE_UNUSED, @@ -3390,6 +3455,7 @@ virNetworkDefUpdateDNSSrv(virNetworkDefPtr def, return ret; } =20 + static int virNetworkDefUpdateDNSTxt(virNetworkDefPtr def, unsigned int command ATTRIBUTE_UNUSED, @@ -3463,6 +3529,7 @@ virNetworkDefUpdateDNSTxt(virNetworkDefPtr def, return ret; } =20 + int virNetworkDefUpdateSection(virNetworkDefPtr def, unsigned int command, /* virNetworkUpdateComman= d */ diff --git a/src/conf/virnetworkobj.c b/src/conf/virnetworkobj.c index 2515858..216c7ae 100644 --- a/src/conf/virnetworkobj.c +++ b/src/conf/virnetworkobj.c @@ -48,7 +48,8 @@ static virClassPtr virNetworkObjListClass; static void virNetworkObjDispose(void *obj); static void virNetworkObjListDispose(void *obj); =20 -static int virNetworkObjOnceInit(void) +static int +virNetworkObjOnceInit(void) { if (!(virNetworkObjClass =3D virClassNew(virClassForObjectLockable(), "virNetworkObj", @@ -93,6 +94,7 @@ virNetworkObjNew(void) return NULL; } =20 + void virNetworkObjEndAPI(virNetworkObjPtr *net) { @@ -104,7 +106,9 @@ virNetworkObjEndAPI(virNetworkObjPtr *net) *net =3D NULL; } =20 -virNetworkObjListPtr virNetworkObjListNew(void) + +virNetworkObjListPtr +virNetworkObjListNew(void) { virNetworkObjListPtr nets; =20 @@ -122,6 +126,7 @@ virNetworkObjListPtr virNetworkObjListNew(void) return nets; } =20 + /** * virNetworkObjFindByUUIDLocked: * @nets: list of network objects @@ -146,6 +151,7 @@ virNetworkObjFindByUUIDLocked(virNetworkObjListPtr nets, return ret; } =20 + /** * virNetworkObjFindByUUID: * @nets: list of network objects @@ -170,6 +176,7 @@ virNetworkObjFindByUUID(virNetworkObjListPtr nets, return ret; } =20 + static int virNetworkObjSearchName(const void *payload, const void *name ATTRIBUTE_UNUSED, @@ -185,6 +192,7 @@ virNetworkObjSearchName(const void *payload, return want; } =20 + /* * virNetworkObjFindByNameLocked: * @nets: list of network objects @@ -206,6 +214,7 @@ virNetworkObjFindByNameLocked(virNetworkObjListPtr nets, return ret; } =20 + /** * virNetworkObjFindByName: * @nets: list of network objects @@ -230,6 +239,7 @@ virNetworkObjFindByName(virNetworkObjListPtr nets, return ret; } =20 + bool virNetworkObjTaint(virNetworkObjPtr obj, virNetworkTaintFlags taint) @@ -255,6 +265,7 @@ virNetworkObjDispose(void *obj) virObjectUnref(net->macmap); } =20 + static void virNetworkObjListDispose(void *obj) { @@ -263,6 +274,7 @@ virNetworkObjListDispose(void *obj) virHashFree(nets->objs); } =20 + /* * virNetworkObjAssignDef: * @network: the network object to update @@ -324,6 +336,7 @@ virNetworkObjAssignDef(virNetworkObjPtr network, } } =20 + /* * If flags & VIR_NETWORK_OBJ_LIST_ADD_CHECK_LIVE then this will * refuse updating an existing def if the current def is live @@ -401,6 +414,7 @@ virNetworkAssignDefLocked(virNetworkObjListPtr nets, return ret; } =20 + /* * virNetworkAssignDef: * @nets: list of all networks @@ -429,6 +443,7 @@ virNetworkAssignDef(virNetworkObjListPtr nets, return network; } =20 + /* * virNetworkObjSetDefTransient: * @network: network object pointer @@ -444,7 +459,8 @@ virNetworkAssignDef(virNetworkObjListPtr nets, * Returns 0 on success, -1 on failure */ int -virNetworkObjSetDefTransient(virNetworkObjPtr network, bool live) +virNetworkObjSetDefTransient(virNetworkObjPtr network, + bool live) { if (!virNetworkObjIsActive(network) && !live) return 0; @@ -456,6 +472,7 @@ virNetworkObjSetDefTransient(virNetworkObjPtr network, = bool live) return network->newDef ? 0 : -1; } =20 + /* virNetworkObjUnsetDefTransient: * * This *undoes* what virNetworkObjSetDefTransient did. @@ -470,6 +487,7 @@ virNetworkObjUnsetDefTransient(virNetworkObjPtr network) } } =20 + /* * virNetworkObjGetPersistentDef: * @network: network object pointer @@ -488,6 +506,7 @@ virNetworkObjGetPersistentDef(virNetworkObjPtr network) return network->def; } =20 + /* * virNetworkObjReplacePersistentDef: * @network: network object pointer @@ -513,6 +532,7 @@ virNetworkObjReplacePersistentDef(virNetworkObjPtr netw= ork, return 0; } =20 + /* * virNetworkConfigChangeSetup: * @@ -525,7 +545,8 @@ virNetworkObjReplacePersistentDef(virNetworkObjPtr netw= ork, * Returns 0 on success, -1 on error. */ int -virNetworkConfigChangeSetup(virNetworkObjPtr network, unsigned int flags) +virNetworkConfigChangeSetup(virNetworkObjPtr network, + unsigned int flags) { bool isActive; int ret =3D -1; @@ -557,8 +578,10 @@ virNetworkConfigChangeSetup(virNetworkObjPtr network, = unsigned int flags) return ret; } =20 -void virNetworkRemoveInactive(virNetworkObjListPtr nets, - virNetworkObjPtr net) + +void +virNetworkRemoveInactive(virNetworkObjListPtr nets, + virNetworkObjPtr net) { char uuidstr[VIR_UUID_STRING_BUFLEN]; =20 @@ -572,6 +595,7 @@ void virNetworkRemoveInactive(virNetworkObjListPtr nets, virObjectUnref(net); } =20 + static char * virNetworkObjFormat(virNetworkObjPtr net, unsigned int flags) @@ -611,8 +635,10 @@ virNetworkObjFormat(virNetworkObjPtr net, return NULL; } =20 -int virNetworkSaveStatus(const char *statusDir, - virNetworkObjPtr network) + +int +virNetworkSaveStatus(const char *statusDir, + virNetworkObjPtr network) { int ret =3D -1; int flags =3D 0; @@ -630,6 +656,7 @@ int virNetworkSaveStatus(const char *statusDir, return ret; } =20 + virNetworkObjPtr virNetworkLoadState(virNetworkObjListPtr nets, const char *stateDir, @@ -754,10 +781,12 @@ virNetworkLoadState(virNetworkObjListPtr nets, goto cleanup; } =20 -virNetworkObjPtr virNetworkLoadConfig(virNetworkObjListPtr nets, - const char *configDir, - const char *autostartDir, - const char *name) + +virNetworkObjPtr +virNetworkLoadConfig(virNetworkObjListPtr nets, + const char *configDir, + const char *autostartDir, + const char *name) { char *configFile =3D NULL, *autostartLink =3D NULL; virNetworkDefPtr def =3D NULL; @@ -843,9 +872,10 @@ virNetworkLoadAllState(virNetworkObjListPtr nets, } =20 =20 -int virNetworkLoadAllConfigs(virNetworkObjListPtr nets, - const char *configDir, - const char *autostartDir) +int +virNetworkLoadAllConfigs(virNetworkObjListPtr nets, + const char *configDir, + const char *autostartDir) { DIR *dir; struct dirent *entry; @@ -874,9 +904,11 @@ int virNetworkLoadAllConfigs(virNetworkObjListPtr nets, return ret; } =20 -int virNetworkDeleteConfig(const char *configDir, - const char *autostartDir, - virNetworkObjPtr net) + +int +virNetworkDeleteConfig(const char *configDir, + const char *autostartDir, + virNetworkObjPtr net) { char *configFile =3D NULL; char *autostartLink =3D NULL; @@ -906,6 +938,7 @@ int virNetworkDeleteConfig(const char *configDir, return ret; } =20 + struct virNetworkBridgeInUseHelperData { const char *bridge; const char *skipname; @@ -936,9 +969,11 @@ virNetworkBridgeInUseHelper(const void *payload, return ret; } =20 -int virNetworkBridgeInUse(virNetworkObjListPtr nets, - const char *bridge, - const char *skipname) + +int +virNetworkBridgeInUse(virNetworkObjListPtr nets, + const char *bridge, + const char *skipname) { virNetworkObjPtr obj; struct virNetworkBridgeInUseHelperData data =3D {bridge, skipname}; @@ -1037,6 +1072,7 @@ virNetworkObjUpdate(virNetworkObjPtr network, return ret; } =20 + #define MATCH(FLAG) (flags & (FLAG)) static bool virNetworkMatch(virNetworkObjPtr netobj, @@ -1070,6 +1106,7 @@ virNetworkMatch(virNetworkObjPtr netobj, } #undef MATCH =20 + struct virNetworkObjListData { virConnectPtr conn; virNetworkPtr *nets; @@ -1117,6 +1154,7 @@ virNetworkObjListPopulate(void *payload, return 0; } =20 + int virNetworkObjListExport(virConnectPtr conn, virNetworkObjListPtr netobjs, @@ -1153,6 +1191,7 @@ virNetworkObjListExport(virConnectPtr conn, return ret; } =20 + struct virNetworkObjListForEachHelperData { virNetworkObjListIterator callback; void *opaque; @@ -1171,6 +1210,7 @@ virNetworkObjListForEachHelper(void *payload, return 0; } =20 + /** * virNetworkObjListForEach: * @nets: a list of network objects @@ -1196,6 +1236,7 @@ virNetworkObjListForEach(virNetworkObjListPtr nets, return data.ret; } =20 + struct virNetworkObjListGetHelperData { virConnectPtr conn; virNetworkObjListFilter filter; @@ -1242,6 +1283,7 @@ virNetworkObjListGetHelper(void *payload, return 0; } =20 + int virNetworkObjListGetNames(virNetworkObjListPtr nets, bool active, @@ -1271,6 +1313,7 @@ virNetworkObjListGetNames(virNetworkObjListPtr nets, return ret; } =20 + int virNetworkObjListNumOfNetworks(virNetworkObjListPtr nets, bool active, @@ -1287,6 +1330,7 @@ virNetworkObjListNumOfNetworks(virNetworkObjListPtr n= ets, return data.got; } =20 + struct virNetworkObjListPruneHelperData { unsigned int flags; }; @@ -1306,6 +1350,7 @@ virNetworkObjListPruneHelper(const void *payload, return want; } =20 + /** * virNetworkObjListPrune: * @nets: a list of network objects --=20 2.9.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu May 2 23:15:55 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1492041871732517.6860203558506; Wed, 12 Apr 2017 17:04:31 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 565C97E9DE; Thu, 13 Apr 2017 00:04:30 +0000 (UTC) Received: from colo-mx.corp.redhat.com (unknown [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 284D177FE8; Thu, 13 Apr 2017 00:04:30 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id D54144E9BD; Thu, 13 Apr 2017 00:04:29 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v3D04NLC012176 for ; Wed, 12 Apr 2017 20:04:23 -0400 Received: by smtp.corp.redhat.com (Postfix) id EDCE7173F3; Thu, 13 Apr 2017 00:04:23 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-116-15.phx2.redhat.com [10.3.116.15]) by smtp.corp.redhat.com (Postfix) with ESMTP id AC6D317187 for ; Thu, 13 Apr 2017 00:04:23 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 565C97E9DE Authentication-Results: ext-mx02.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx02.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=libvir-list-bounces@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 565C97E9DE From: John Ferlan To: libvir-list@redhat.com Date: Wed, 12 Apr 2017 20:04:16 -0400 Message-Id: <20170413000418.30018-4-jferlan@redhat.com> In-Reply-To: <20170413000418.30018-1-jferlan@redhat.com> References: <20170413000418.30018-1-jferlan@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-loop: libvir-list@redhat.com Subject: [libvirt] [REPOST PATCH 3/5] conf: Alter coding style of network conf function prototypes X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Thu, 13 Apr 2017 00:04:31 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" In an effort to be consistent with the source module, alter the function prototypes to follow the similar style of source with the "type" on one line followed by the function name and arguments on subsequent lines with with argument getting it's own line. Signed-off-by: John Ferlan --- src/conf/network_conf.h | 84 ++++++++++++------- src/conf/virnetworkobj.h | 212 ++++++++++++++++++++++++++++---------------= ---- 2 files changed, 182 insertions(+), 114 deletions(-) diff --git a/src/conf/network_conf.h b/src/conf/network_conf.h index 6922942..e9a5baf 100644 --- a/src/conf/network_conf.h +++ b/src/conf/network_conf.h @@ -290,43 +290,71 @@ enum { VIR_NETWORK_OBJ_LIST_ADD_CHECK_LIVE =3D (1 << 1), }; =20 -virNetworkDefPtr virNetworkDefCopy(virNetworkDefPtr def, unsigned int flag= s); -virNetworkDefPtr virNetworkDefParseXML(xmlXPathContextPtr ctxt); -virNetworkDefPtr virNetworkDefParseString(const char *xmlStr); -virNetworkDefPtr virNetworkDefParseFile(const char *filename); -virNetworkDefPtr virNetworkDefParseNode(xmlDocPtr xml, - xmlNodePtr root); -char *virNetworkDefFormat(const virNetworkDef *def, unsigned int flags); -int virNetworkDefFormatBuf(virBufferPtr buf, - const virNetworkDef *def, - unsigned int flags); - -const char * virNetworkDefForwardIf(const virNetworkDef *def, size_t n); - -virPortGroupDefPtr virPortGroupFindByName(virNetworkDefPtr net, - const char *portgroup); +virNetworkDefPtr +virNetworkDefCopy(virNetworkDefPtr def, unsigned int flags); + +virNetworkDefPtr +virNetworkDefParseXML(xmlXPathContextPtr ctxt); + +virNetworkDefPtr +virNetworkDefParseString(const char *xmlStr); + +virNetworkDefPtr +virNetworkDefParseFile(const char *filename); + +virNetworkDefPtr +virNetworkDefParseNode(xmlDocPtr xml, + xmlNodePtr root); + +char * +virNetworkDefFormat(const virNetworkDef *def, + unsigned int flags); + +int +virNetworkDefFormatBuf(virBufferPtr buf, + const virNetworkDef *def, + unsigned int flags); + +const char * +virNetworkDefForwardIf(const virNetworkDef *def, + size_t n); + +virPortGroupDefPtr +virPortGroupFindByName(virNetworkDefPtr net, + const char *portgroup); =20 virNetworkIPDefPtr virNetworkDefGetIPByIndex(const virNetworkDef *def, - int family, size_t n); + int family, + size_t n); + virNetDevIPRoutePtr virNetworkDefGetRouteByIndex(const virNetworkDef *def, - int family, size_t n); -int virNetworkIPDefPrefix(const virNetworkIPDef *def); -int virNetworkIPDefNetmask(const virNetworkIPDef *def, - virSocketAddrPtr netmask); + int family, + size_t n); + +int +virNetworkIPDefPrefix(const virNetworkIPDef *def); =20 -int virNetworkSaveXML(const char *configDir, - virNetworkDefPtr def, - const char *xml); +int +virNetworkIPDefNetmask(const virNetworkIPDef *def, + virSocketAddrPtr netmask); + +int +virNetworkSaveXML(const char *configDir, + virNetworkDefPtr def, + const char *xml); =20 -int virNetworkSaveConfig(const char *configDir, - virNetworkDefPtr def); +int +virNetworkSaveConfig(const char *configDir, + virNetworkDefPtr def); =20 -char *virNetworkConfigFile(const char *dir, - const char *name); +char * +virNetworkConfigFile(const char *dir, + const char *name); =20 -void virNetworkSetBridgeMacAddr(virNetworkDefPtr def); +void +virNetworkSetBridgeMacAddr(virNetworkDefPtr def); =20 VIR_ENUM_DECL(virNetworkForward) =20 diff --git a/src/conf/virnetworkobj.h b/src/conf/virnetworkobj.h index 1eb3151..431721b 100644 --- a/src/conf/virnetworkobj.h +++ b/src/conf/virnetworkobj.h @@ -47,8 +47,11 @@ struct _virNetworkObj { virMacMapPtr macmap; }; =20 -virNetworkObjPtr virNetworkObjNew(void); -void virNetworkObjEndAPI(virNetworkObjPtr *net); +virNetworkObjPtr +virNetworkObjNew(void); + +void +virNetworkObjEndAPI(virNetworkObjPtr *net); =20 typedef struct _virNetworkObjList virNetworkObjList; typedef virNetworkObjList *virNetworkObjListPtr; @@ -59,67 +62,98 @@ virNetworkObjIsActive(const virNetworkObj *net) return net->active; } =20 -virNetworkObjListPtr virNetworkObjListNew(void); - -virNetworkObjPtr virNetworkObjFindByUUIDLocked(virNetworkObjListPtr nets, - const unsigned char *uuid); -virNetworkObjPtr virNetworkObjFindByUUID(virNetworkObjListPtr nets, - const unsigned char *uuid); -virNetworkObjPtr virNetworkObjFindByNameLocked(virNetworkObjListPtr nets, - const char *name); -virNetworkObjPtr virNetworkObjFindByName(virNetworkObjListPtr nets, - const char *name); -bool virNetworkObjTaint(virNetworkObjPtr obj, - virNetworkTaintFlags taint); - -typedef bool (*virNetworkObjListFilter)(virConnectPtr conn, - virNetworkDefPtr def); - -virNetworkObjPtr virNetworkAssignDef(virNetworkObjListPtr nets, - virNetworkDefPtr def, - unsigned int flags); -void virNetworkObjAssignDef(virNetworkObjPtr network, - virNetworkDefPtr def, - bool live); -int virNetworkObjSetDefTransient(virNetworkObjPtr network, bool live); -void virNetworkObjUnsetDefTransient(virNetworkObjPtr network); -virNetworkDefPtr virNetworkObjGetPersistentDef(virNetworkObjPtr network); -int virNetworkObjReplacePersistentDef(virNetworkObjPtr network, - virNetworkDefPtr def); -int virNetworkConfigChangeSetup(virNetworkObjPtr dom, unsigned int flags); - -void virNetworkRemoveInactive(virNetworkObjListPtr nets, - virNetworkObjPtr net); - -int virNetworkSaveStatus(const char *statusDir, - virNetworkObjPtr net) ATTRIBUTE_RETURN_CHECK; - -virNetworkObjPtr virNetworkLoadConfig(virNetworkObjListPtr nets, - const char *configDir, - const char *autostartDir, - const char *file); - -virNetworkObjPtr virNetworkLoadState(virNetworkObjListPtr nets, - const char *stateDir, - const char *name); - -int virNetworkLoadAllConfigs(virNetworkObjListPtr nets, - const char *configDir, - const char *autostartDir); - -int virNetworkLoadAllState(virNetworkObjListPtr nets, - const char *stateDir); - -int virNetworkDeleteConfig(const char *configDir, - const char *autostartDir, - virNetworkObjPtr net); - -char *virNetworkConfigFile(const char *dir, - const char *name); - -int virNetworkBridgeInUse(virNetworkObjListPtr nets, - const char *bridge, - const char *skipname); +virNetworkObjListPtr +virNetworkObjListNew(void); + +virNetworkObjPtr +virNetworkObjFindByUUIDLocked(virNetworkObjListPtr nets, + const unsigned char *uuid); + +virNetworkObjPtr +virNetworkObjFindByUUID(virNetworkObjListPtr nets, + const unsigned char *uuid); + +virNetworkObjPtr +virNetworkObjFindByNameLocked(virNetworkObjListPtr nets, + const char *name); + +virNetworkObjPtr +virNetworkObjFindByName(virNetworkObjListPtr nets, + const char *name); + +bool +virNetworkObjTaint(virNetworkObjPtr obj, + virNetworkTaintFlags taint); + +typedef bool +(*virNetworkObjListFilter)(virConnectPtr conn, + virNetworkDefPtr def); + +virNetworkObjPtr +virNetworkAssignDef(virNetworkObjListPtr nets, + virNetworkDefPtr def, + unsigned int flags); + +void +virNetworkObjAssignDef(virNetworkObjPtr network, + virNetworkDefPtr def, + bool live); + +int +virNetworkObjSetDefTransient(virNetworkObjPtr network, + bool live); + +void +virNetworkObjUnsetDefTransient(virNetworkObjPtr network); + +virNetworkDefPtr +virNetworkObjGetPersistentDef(virNetworkObjPtr network); + +int +virNetworkObjReplacePersistentDef(virNetworkObjPtr network, + virNetworkDefPtr def); + +int +virNetworkConfigChangeSetup(virNetworkObjPtr dom, + unsigned int flags); + +void +virNetworkRemoveInactive(virNetworkObjListPtr nets, + virNetworkObjPtr net); + +int +virNetworkSaveStatus(const char *statusDir, + virNetworkObjPtr net) ATTRIBUTE_RETURN_CHECK; + +virNetworkObjPtr +virNetworkLoadConfig(virNetworkObjListPtr nets, + const char *configDir, + const char *autostartDir, + const char *file); + +virNetworkObjPtr +virNetworkLoadState(virNetworkObjListPtr nets, + const char *stateDir, + const char *name); + +int +virNetworkLoadAllConfigs(virNetworkObjListPtr nets, + const char *configDir, + const char *autostartDir); + +int +virNetworkLoadAllState(virNetworkObjListPtr nets, + const char *stateDir); + +int +virNetworkDeleteConfig(const char *configDir, + const char *autostartDir, + virNetworkObjPtr net); + +int +virNetworkBridgeInUse(virNetworkObjListPtr nets, + const char *bridge, + const char *skipname); =20 int virNetworkObjUpdate(virNetworkObjPtr obj, @@ -129,32 +163,38 @@ virNetworkObjUpdate(virNetworkObjPtr obj, const char *xml, unsigned int flags); /* virNetworkUpdateFlags */ =20 -int virNetworkObjListExport(virConnectPtr conn, - virNetworkObjListPtr netobjs, - virNetworkPtr **nets, - virNetworkObjListFilter filter, - unsigned int flags); - -typedef int (*virNetworkObjListIterator)(virNetworkObjPtr net, - void *opaque); - -int virNetworkObjListForEach(virNetworkObjListPtr nets, - virNetworkObjListIterator callback, +int +virNetworkObjListExport(virConnectPtr conn, + virNetworkObjListPtr netobjs, + virNetworkPtr **nets, + virNetworkObjListFilter filter, + unsigned int flags); + +typedef int +(*virNetworkObjListIterator)(virNetworkObjPtr net, void *opaque); =20 -int virNetworkObjListGetNames(virNetworkObjListPtr nets, - bool active, - char **names, - int nnames, - virNetworkObjListFilter filter, - virConnectPtr conn); +int +virNetworkObjListForEach(virNetworkObjListPtr nets, + virNetworkObjListIterator callback, + void *opaque); =20 -int virNetworkObjListNumOfNetworks(virNetworkObjListPtr nets, - bool active, - virNetworkObjListFilter filter, - virConnectPtr conn); +int +virNetworkObjListGetNames(virNetworkObjListPtr nets, + bool active, + char **names, + int nnames, + virNetworkObjListFilter filter, + virConnectPtr conn); =20 -void virNetworkObjListPrune(virNetworkObjListPtr nets, - unsigned int flags); +int +virNetworkObjListNumOfNetworks(virNetworkObjListPtr nets, + bool active, + virNetworkObjListFilter filter, + virConnectPtr conn); + +void +virNetworkObjListPrune(virNetworkObjListPtr nets, + unsigned int flags); =20 #endif /* __VIRNETWORKOBJ_H__ */ --=20 2.9.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu May 2 23:15:55 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1492041871916424.0669985660404; Wed, 12 Apr 2017 17:04:31 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 836DAEEF02; Thu, 13 Apr 2017 00:04:30 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 56E0A18989; Thu, 13 Apr 2017 00:04:30 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 0A21A18523D1; Thu, 13 Apr 2017 00:04:30 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v3D04Oh0012183 for ; Wed, 12 Apr 2017 20:04:24 -0400 Received: by smtp.corp.redhat.com (Postfix) id 778E1173F3; Thu, 13 Apr 2017 00:04:24 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-116-15.phx2.redhat.com [10.3.116.15]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3025B17187 for ; Thu, 13 Apr 2017 00:04:24 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 836DAEEF02 Authentication-Results: ext-mx09.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx09.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=libvir-list-bounces@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 836DAEEF02 From: John Ferlan To: libvir-list@redhat.com Date: Wed, 12 Apr 2017 20:04:17 -0400 Message-Id: <20170413000418.30018-5-jferlan@redhat.com> In-Reply-To: <20170413000418.30018-1-jferlan@redhat.com> References: <20170413000418.30018-1-jferlan@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-loop: libvir-list@redhat.com Subject: [libvirt] [REPOST PATCH 4/5] conf: Rename virNetworkObjAssignDef to virNetworkObjUpdateAssignDef X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Thu, 13 Apr 2017 00:04:31 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Rename the API to be a better description of what it does. Besides, a subsequent patch will rename virNetworkAssignDef to virNetworkObjAssignDef so rather than make that patch confusing we'll take the intermittent step in this patch. Signed-off-by: John Ferlan --- src/conf/virnetworkobj.c | 14 +++++++------- src/conf/virnetworkobj.h | 6 +++--- src/libvirt_private.syms | 2 +- src/network/bridge_driver.c | 4 ++-- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/conf/virnetworkobj.c b/src/conf/virnetworkobj.c index 216c7ae..55730e4 100644 --- a/src/conf/virnetworkobj.c +++ b/src/conf/virnetworkobj.c @@ -276,7 +276,7 @@ virNetworkObjListDispose(void *obj) =20 =20 /* - * virNetworkObjAssignDef: + * virNetworkObjUpdateAssignDef: * @network: the network object to update * @def: the new NetworkDef (will be consumed by this function) * @live: is this new def the "live" version, or the "persistent" version @@ -292,9 +292,9 @@ virNetworkObjListDispose(void *obj) * */ void -virNetworkObjAssignDef(virNetworkObjPtr network, - virNetworkDefPtr def, - bool live) +virNetworkObjUpdateAssignDef(virNetworkObjPtr network, + virNetworkDefPtr def, + bool live) { if (live) { /* before setting new live def, save (into newDef) any @@ -378,9 +378,9 @@ virNetworkAssignDefLocked(virNetworkObjListPtr nets, } } =20 - virNetworkObjAssignDef(network, - def, - !!(flags & VIR_NETWORK_OBJ_LIST_ADD_LIVE)); + virNetworkObjUpdateAssignDef(network, + def, + !!(flags & VIR_NETWORK_OBJ_LIST_ADD_L= IVE)); } else { /* UUID does not match, but if a name matches, refuse it */ if ((network =3D virNetworkObjFindByNameLocked(nets, def->name))) { diff --git a/src/conf/virnetworkobj.h b/src/conf/virnetworkobj.h index 431721b..0b6fbfe 100644 --- a/src/conf/virnetworkobj.h +++ b/src/conf/virnetworkobj.h @@ -95,9 +95,9 @@ virNetworkAssignDef(virNetworkObjListPtr nets, unsigned int flags); =20 void -virNetworkObjAssignDef(virNetworkObjPtr network, - virNetworkDefPtr def, - bool live); +virNetworkObjUpdateAssignDef(virNetworkObjPtr network, + virNetworkDefPtr def, + bool live); =20 int virNetworkObjSetDefTransient(virNetworkObjPtr network, diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 3e2cb6b..6aaa3f9 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -925,7 +925,6 @@ virNetworkConfigChangeSetup; virNetworkDeleteConfig; virNetworkLoadAllConfigs; virNetworkLoadAllState; -virNetworkObjAssignDef; virNetworkObjEndAPI; virNetworkObjFindByName; virNetworkObjFindByNameLocked; @@ -944,6 +943,7 @@ virNetworkObjSetDefTransient; virNetworkObjTaint; virNetworkObjUnsetDefTransient; virNetworkObjUpdate; +virNetworkObjUpdateAssignDef; virNetworkRemoveInactive; virNetworkSaveStatus; =20 diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c index f45c2a8..b30caf5 100644 --- a/src/network/bridge_driver.c +++ b/src/network/bridge_driver.c @@ -3490,7 +3490,7 @@ static virNetworkPtr networkDefineXML(virConnectPtr c= onn, const char *xml) * definition by making it transient. * XXX - this isn't necessarily the correct thing to do. */ - virNetworkObjAssignDef(network, NULL, false); + virNetworkObjUpdateAssignDef(network, NULL, false); goto cleanup; } =20 @@ -3554,7 +3554,7 @@ networkUndefine(virNetworkPtr net) /* if the network still exists, it was active, and we need to make * it transient (by deleting the persistent def) */ - virNetworkObjAssignDef(network, NULL, false); + virNetworkObjUpdateAssignDef(network, NULL, false); } =20 ret =3D 0; --=20 2.9.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu May 2 23:15:55 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1492041875453933.6833114527183; Wed, 12 Apr 2017 17:04:35 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id E608081F07; Thu, 13 Apr 2017 00:04:33 +0000 (UTC) Received: from colo-mx.corp.redhat.com (unknown [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id C0F05785DF; Thu, 13 Apr 2017 00:04:33 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 768A54E9BD; Thu, 13 Apr 2017 00:04:33 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v3D04ONb012188 for ; Wed, 12 Apr 2017 20:04:24 -0400 Received: by smtp.corp.redhat.com (Postfix) id E772F173F3; Thu, 13 Apr 2017 00:04:24 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-116-15.phx2.redhat.com [10.3.116.15]) by smtp.corp.redhat.com (Postfix) with ESMTP id A49BB17187 for ; Thu, 13 Apr 2017 00:04:24 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com E608081F07 Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=libvir-list-bounces@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com E608081F07 From: John Ferlan To: libvir-list@redhat.com Date: Wed, 12 Apr 2017 20:04:18 -0400 Message-Id: <20170413000418.30018-6-jferlan@redhat.com> In-Reply-To: <20170413000418.30018-1-jferlan@redhat.com> References: <20170413000418.30018-1-jferlan@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-loop: libvir-list@redhat.com Subject: [libvirt] [REPOST PATCH 5/5] conf: Use consistent function name prefixes for virnetworkobj X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Thu, 13 Apr 2017 00:04:34 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Use "virNetworkObj" as a prefix for any external API in virnetworkobj. Also a couple of functions were local to virnetworkobj.c, so remove their external defs in virnetworkobj.h. Signed-off-by: John Ferlan --- src/conf/virnetworkobj.c | 81 +++++++++++++++++++++++------------------= ---- src/conf/virnetworkobj.h | 51 ++++++++++------------------ src/libvirt_private.syms | 15 ++++----- src/network/bridge_driver.c | 57 +++++++++++++++---------------- src/test/test_driver.c | 14 ++++---- 5 files changed, 100 insertions(+), 118 deletions(-) diff --git a/src/conf/virnetworkobj.c b/src/conf/virnetworkobj.c index 55730e4..88e42b5 100644 --- a/src/conf/virnetworkobj.c +++ b/src/conf/virnetworkobj.c @@ -348,9 +348,9 @@ virNetworkObjUpdateAssignDef(virNetworkObjPtr network, * If flags is zero, network is considered as inactive and persistent. */ static virNetworkObjPtr -virNetworkAssignDefLocked(virNetworkObjListPtr nets, - virNetworkDefPtr def, - unsigned int flags) +virNetworkObjAssignDefLocked(virNetworkObjListPtr nets, + virNetworkDefPtr def, + unsigned int flags) { virNetworkObjPtr network; virNetworkObjPtr ret =3D NULL; @@ -416,7 +416,7 @@ virNetworkAssignDefLocked(virNetworkObjListPtr nets, =20 =20 /* - * virNetworkAssignDef: + * virNetworkObjAssignDef: * @nets: list of all networks * @def: the new NetworkDef (will be consumed by this function iff success= ful) * @flags: bitwise-OR of VIR_NETWORK_OBJ_LIST_ADD_* flags @@ -426,19 +426,19 @@ virNetworkAssignDefLocked(virNetworkObjListPtr nets, * def. For an existing network, use "live" and current state of the * network to determine which to replace. * - * Look at virNetworkAssignDefLocked() for @flags description. + * Look at virNetworkObjAssignDefLocked() for @flags description. * * Returns NULL on error, virNetworkObjPtr on success. */ virNetworkObjPtr -virNetworkAssignDef(virNetworkObjListPtr nets, - virNetworkDefPtr def, - unsigned int flags) +virNetworkObjAssignDef(virNetworkObjListPtr nets, + virNetworkDefPtr def, + unsigned int flags) { virNetworkObjPtr network; =20 virObjectLock(nets); - network =3D virNetworkAssignDefLocked(nets, def, flags); + network =3D virNetworkObjAssignDefLocked(nets, def, flags); virObjectUnlock(nets); return network; } @@ -534,7 +534,7 @@ virNetworkObjReplacePersistentDef(virNetworkObjPtr netw= ork, =20 =20 /* - * virNetworkConfigChangeSetup: + * virNetworkObjConfigChangeSetup: * * 1) checks whether network state is consistent with the requested * type of modification. @@ -544,9 +544,9 @@ virNetworkObjReplacePersistentDef(virNetworkObjPtr netw= ork, * * Returns 0 on success, -1 on error. */ -int -virNetworkConfigChangeSetup(virNetworkObjPtr network, - unsigned int flags) +static int +virNetworkObjConfigChangeSetup(virNetworkObjPtr network, + unsigned int flags) { bool isActive; int ret =3D -1; @@ -580,8 +580,8 @@ virNetworkConfigChangeSetup(virNetworkObjPtr network, =20 =20 void -virNetworkRemoveInactive(virNetworkObjListPtr nets, - virNetworkObjPtr net) +virNetworkObjRemoveInactive(virNetworkObjListPtr nets, + virNetworkObjPtr net) { char uuidstr[VIR_UUID_STRING_BUFLEN]; =20 @@ -637,8 +637,8 @@ virNetworkObjFormat(virNetworkObjPtr net, =20 =20 int -virNetworkSaveStatus(const char *statusDir, - virNetworkObjPtr network) +virNetworkObjSaveStatus(const char *statusDir, + virNetworkObjPtr network) { int ret =3D -1; int flags =3D 0; @@ -657,7 +657,7 @@ virNetworkSaveStatus(const char *statusDir, } =20 =20 -virNetworkObjPtr +static virNetworkObjPtr virNetworkLoadState(virNetworkObjListPtr nets, const char *stateDir, const char *name) @@ -752,7 +752,8 @@ virNetworkLoadState(virNetworkObjListPtr nets, } =20 /* create the object */ - if (!(net =3D virNetworkAssignDef(nets, def, VIR_NETWORK_OBJ_LIST_ADD_= LIVE))) + if (!(net =3D virNetworkObjAssignDef(nets, def, + VIR_NETWORK_OBJ_LIST_ADD_LIVE))) goto error; /* do not put any "goto error" below this comment */ =20 @@ -782,7 +783,7 @@ virNetworkLoadState(virNetworkObjListPtr nets, } =20 =20 -virNetworkObjPtr +static virNetworkObjPtr virNetworkLoadConfig(virNetworkObjListPtr nets, const char *configDir, const char *autostartDir, @@ -827,7 +828,7 @@ virNetworkLoadConfig(virNetworkObjListPtr nets, def->mac_specified =3D false; } =20 - if (!(net =3D virNetworkAssignDef(nets, def, 0))) + if (!(net =3D virNetworkObjAssignDef(nets, def, 0))) goto error; =20 net->autostart =3D autostart; @@ -846,8 +847,8 @@ virNetworkLoadConfig(virNetworkObjListPtr nets, =20 =20 int -virNetworkLoadAllState(virNetworkObjListPtr nets, - const char *stateDir) +virNetworkObjLoadAllState(virNetworkObjListPtr nets, + const char *stateDir) { DIR *dir; struct dirent *entry; @@ -873,9 +874,9 @@ virNetworkLoadAllState(virNetworkObjListPtr nets, =20 =20 int -virNetworkLoadAllConfigs(virNetworkObjListPtr nets, - const char *configDir, - const char *autostartDir) +virNetworkObjLoadAllConfigs(virNetworkObjListPtr nets, + const char *configDir, + const char *autostartDir) { DIR *dir; struct dirent *entry; @@ -906,9 +907,9 @@ virNetworkLoadAllConfigs(virNetworkObjListPtr nets, =20 =20 int -virNetworkDeleteConfig(const char *configDir, - const char *autostartDir, - virNetworkObjPtr net) +virNetworkObjDeleteConfig(const char *configDir, + const char *autostartDir, + virNetworkObjPtr net) { char *configFile =3D NULL; char *autostartLink =3D NULL; @@ -939,19 +940,19 @@ virNetworkDeleteConfig(const char *configDir, } =20 =20 -struct virNetworkBridgeInUseHelperData { +struct virNetworkObjBridgeInUseHelperData { const char *bridge; const char *skipname; }; =20 static int -virNetworkBridgeInUseHelper(const void *payload, - const void *name ATTRIBUTE_UNUSED, - const void *opaque) +virNetworkObjBridgeInUseHelper(const void *payload, + const void *name ATTRIBUTE_UNUSED, + const void *opaque) { int ret; virNetworkObjPtr net =3D (virNetworkObjPtr) payload; - const struct virNetworkBridgeInUseHelperData *data =3D opaque; + const struct virNetworkObjBridgeInUseHelperData *data =3D opaque; =20 virObjectLock(net); if (data->skipname && @@ -971,15 +972,15 @@ virNetworkBridgeInUseHelper(const void *payload, =20 =20 int -virNetworkBridgeInUse(virNetworkObjListPtr nets, - const char *bridge, - const char *skipname) +virNetworkObjBridgeInUse(virNetworkObjListPtr nets, + const char *bridge, + const char *skipname) { virNetworkObjPtr obj; - struct virNetworkBridgeInUseHelperData data =3D {bridge, skipname}; + struct virNetworkObjBridgeInUseHelperData data =3D {bridge, skipname}; =20 virObjectLock(nets); - obj =3D virHashSearch(nets->objs, virNetworkBridgeInUseHelper, &data); + obj =3D virHashSearch(nets->objs, virNetworkObjBridgeInUseHelper, &dat= a); virObjectUnlock(nets); =20 return obj !=3D NULL; @@ -1012,7 +1013,7 @@ virNetworkObjUpdate(virNetworkObjPtr network, virNetworkDefPtr livedef =3D NULL, configdef =3D NULL; =20 /* normalize config data, and check for common invalid requests. */ - if (virNetworkConfigChangeSetup(network, flags) < 0) + if (virNetworkObjConfigChangeSetup(network, flags) < 0) goto cleanup; =20 if (flags & VIR_NETWORK_UPDATE_AFFECT_LIVE) { diff --git a/src/conf/virnetworkobj.h b/src/conf/virnetworkobj.h index 0b6fbfe..8090c2e 100644 --- a/src/conf/virnetworkobj.h +++ b/src/conf/virnetworkobj.h @@ -90,9 +90,9 @@ typedef bool virNetworkDefPtr def); =20 virNetworkObjPtr -virNetworkAssignDef(virNetworkObjListPtr nets, - virNetworkDefPtr def, - unsigned int flags); +virNetworkObjAssignDef(virNetworkObjListPtr nets, + virNetworkDefPtr def, + unsigned int flags); =20 void virNetworkObjUpdateAssignDef(virNetworkObjPtr network, @@ -113,47 +113,32 @@ int virNetworkObjReplacePersistentDef(virNetworkObjPtr network, virNetworkDefPtr def); =20 -int -virNetworkConfigChangeSetup(virNetworkObjPtr dom, - unsigned int flags); - void -virNetworkRemoveInactive(virNetworkObjListPtr nets, - virNetworkObjPtr net); +virNetworkObjRemoveInactive(virNetworkObjListPtr nets, + virNetworkObjPtr net); =20 int -virNetworkSaveStatus(const char *statusDir, - virNetworkObjPtr net) ATTRIBUTE_RETURN_CHECK; - -virNetworkObjPtr -virNetworkLoadConfig(virNetworkObjListPtr nets, - const char *configDir, - const char *autostartDir, - const char *file); - -virNetworkObjPtr -virNetworkLoadState(virNetworkObjListPtr nets, - const char *stateDir, - const char *name); +virNetworkObjSaveStatus(const char *statusDir, + virNetworkObjPtr net) ATTRIBUTE_RETURN_CHECK; =20 int -virNetworkLoadAllConfigs(virNetworkObjListPtr nets, - const char *configDir, - const char *autostartDir); +virNetworkObjLoadAllConfigs(virNetworkObjListPtr nets, + const char *configDir, + const char *autostartDir); =20 int -virNetworkLoadAllState(virNetworkObjListPtr nets, - const char *stateDir); +virNetworkObjLoadAllState(virNetworkObjListPtr nets, + const char *stateDir); =20 int -virNetworkDeleteConfig(const char *configDir, - const char *autostartDir, - virNetworkObjPtr net); +virNetworkObjDeleteConfig(const char *configDir, + const char *autostartDir, + virNetworkObjPtr net); =20 int -virNetworkBridgeInUse(virNetworkObjListPtr nets, - const char *bridge, - const char *skipname); +virNetworkObjBridgeInUse(virNetworkObjListPtr nets, + const char *bridge, + const char *skipname); =20 int virNetworkObjUpdate(virNetworkObjPtr obj, diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 6aaa3f9..4861257 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -919,12 +919,9 @@ virInterfaceObjUnlock; =20 =20 # conf/virnetworkobj.h -virNetworkAssignDef; -virNetworkBridgeInUse; -virNetworkConfigChangeSetup; -virNetworkDeleteConfig; -virNetworkLoadAllConfigs; -virNetworkLoadAllState; +virNetworkObjAssignDef; +virNetworkObjBridgeInUse; +virNetworkObjDeleteConfig; virNetworkObjEndAPI; virNetworkObjFindByName; virNetworkObjFindByNameLocked; @@ -937,15 +934,17 @@ virNetworkObjListGetNames; virNetworkObjListNew; virNetworkObjListNumOfNetworks; virNetworkObjListPrune; +virNetworkObjLoadAllConfigs; +virNetworkObjLoadAllState; virNetworkObjNew; +virNetworkObjRemoveInactive; virNetworkObjReplacePersistentDef; +virNetworkObjSaveStatus; virNetworkObjSetDefTransient; virNetworkObjTaint; virNetworkObjUnsetDefTransient; virNetworkObjUpdate; virNetworkObjUpdateAssignDef; -virNetworkRemoveInactive; -virNetworkSaveStatus; =20 =20 # conf/virnodedeviceobj.h diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c index b30caf5..45abe16 100644 --- a/src/network/bridge_driver.c +++ b/src/network/bridge_driver.c @@ -363,7 +363,7 @@ networkRemoveInactive(virNetworkDriverStatePtr driver, unlink(statusfile); =20 /* remove the network definition */ - virNetworkRemoveInactive(driver->networks, net); + virNetworkObjRemoveInactive(driver->networks, net); =20 ret =3D 0; =20 @@ -753,13 +753,13 @@ networkStateInitialize(bool privileged, if (!(network_driver->networks =3D virNetworkObjListNew())) goto error; =20 - if (virNetworkLoadAllState(network_driver->networks, - network_driver->stateDir) < 0) + if (virNetworkObjLoadAllState(network_driver->networks, + network_driver->stateDir) < 0) goto error; =20 - if (virNetworkLoadAllConfigs(network_driver->networks, - network_driver->networkConfigDir, - network_driver->networkAutostartDir) < 0) + if (virNetworkObjLoadAllConfigs(network_driver->networks, + network_driver->networkConfigDir, + network_driver->networkAutostartDir) <= 0) goto error; =20 /* Update the internal status of all allegedly active @@ -841,11 +841,11 @@ networkStateReload(void) if (!network_driver) return 0; =20 - virNetworkLoadAllState(network_driver->networks, - network_driver->stateDir); - virNetworkLoadAllConfigs(network_driver->networks, - network_driver->networkConfigDir, - network_driver->networkAutostartDir); + virNetworkObjLoadAllState(network_driver->networks, + network_driver->stateDir); + virNetworkObjLoadAllConfigs(network_driver->networks, + network_driver->networkConfigDir, + network_driver->networkAutostartDir); networkReloadFirewallRules(network_driver); networkRefreshDaemons(network_driver); virNetworkObjListForEach(network_driver->networks, @@ -2751,7 +2751,7 @@ networkStartNetwork(virNetworkDriverStatePtr driver, * is setup. */ VIR_DEBUG("Writing network status to disk"); - if (virNetworkSaveStatus(driver->stateDir, network) < 0) + if (virNetworkObjSaveStatus(driver->stateDir, network) < 0) goto cleanup; =20 network->active =3D 1; @@ -3076,7 +3076,7 @@ networkFindUnusedBridgeName(virNetworkObjListPtr nets, * from virNetDevExists(), just in case it isn't implemented * on this platform (probably impossible). */ - if (!(virNetworkBridgeInUse(nets, newname, def->name) || + if (!(virNetworkObjBridgeInUse(nets, newname, def->name) || virNetDevExists(newname) =3D=3D 1)) { VIR_FREE(def->bridge); /*could contain template */ def->bridge =3D newname; @@ -3112,7 +3112,7 @@ networkBridgeNameValidate(virNetworkObjListPtr nets, int ret =3D -1; =20 if (def->bridge && !strstr(def->bridge, "%d")) { - if (virNetworkBridgeInUse(nets, def->bridge, def->name)) { + if (virNetworkObjBridgeInUse(nets, def->bridge, def->name)) { virReportError(VIR_ERR_INTERNAL_ERROR, _("bridge name '%s' already in use."), def->bridge); @@ -3429,15 +3429,14 @@ static virNetworkPtr networkCreateXML(virConnectPtr= conn, const char *xml) * we assign the def with live =3D true in anticipation that it will * be started momentarily. */ - if (!(network =3D virNetworkAssignDef(driver->networks, def, - VIR_NETWORK_OBJ_LIST_ADD_LIVE | - VIR_NETWORK_OBJ_LIST_ADD_CHECK_LIV= E))) + if (!(network =3D virNetworkObjAssignDef(driver->networks, def, + VIR_NETWORK_OBJ_LIST_ADD_LIVE | + VIR_NETWORK_OBJ_LIST_ADD_CHECK_= LIVE))) goto cleanup; def =3D NULL; =20 if (networkStartNetwork(driver, network) < 0) { - virNetworkRemoveInactive(driver->networks, - network); + virNetworkObjRemoveInactive(driver->networks, network); goto cleanup; } =20 @@ -3475,7 +3474,7 @@ static virNetworkPtr networkDefineXML(virConnectPtr c= onn, const char *xml) if (networkValidate(driver, def) < 0) goto cleanup; =20 - if (!(network =3D virNetworkAssignDef(driver->networks, def, 0))) + if (!(network =3D virNetworkObjAssignDef(driver->networks, def, 0))) goto cleanup; =20 /* def was assigned to network object */ @@ -3483,7 +3482,7 @@ static virNetworkPtr networkDefineXML(virConnectPtr c= onn, const char *xml) =20 if (virNetworkSaveConfig(driver->networkConfigDir, def) < 0) { if (!virNetworkObjIsActive(network)) { - virNetworkRemoveInactive(driver->networks, network); + virNetworkObjRemoveInactive(driver->networks, network); goto cleanup; } /* if network was active already, just undo new persistent @@ -3535,9 +3534,9 @@ networkUndefine(virNetworkPtr net) } =20 /* remove autostart link */ - if (virNetworkDeleteConfig(driver->networkConfigDir, - driver->networkAutostartDir, - network) < 0) + if (virNetworkObjDeleteConfig(driver->networkConfigDir, + driver->networkAutostartDir, + network) < 0) goto cleanup; =20 event =3D virNetworkEventLifecycleNew(network->def->name, @@ -3725,10 +3724,8 @@ networkUpdate(virNetworkPtr net, } =20 /* save current network state to disk */ - if ((ret =3D virNetworkSaveStatus(driver->stateDir, - network)) < 0) { + if ((ret =3D virNetworkObjSaveStatus(driver->stateDir, network)) <= 0) goto cleanup; - } } =20 /* call the 'updated' network hook script */ @@ -5312,7 +5309,7 @@ networkPlugBandwidthImpl(virNetworkObjPtr net, /* update sum of 'floor'-s of attached NICs */ net->floor_sum +=3D ifaceBand->in->floor; /* update status file */ - if (virNetworkSaveStatus(driver->stateDir, net) < 0) { + if (virNetworkObjSaveStatus(driver->stateDir, net) < 0) { ignore_value(virBitmapClearBit(net->class_id, class_id)); net->floor_sum -=3D ifaceBand->in->floor; iface->data.network.actual->class_id =3D 0; @@ -5404,7 +5401,7 @@ networkUnplugBandwidth(virNetworkObjPtr net, ignore_value(virBitmapClearBit(net->class_id, iface->data.network.actual->class_i= d)); /* update status file */ - if (virNetworkSaveStatus(driver->stateDir, net) < 0) { + if (virNetworkObjSaveStatus(driver->stateDir, net) < 0) { net->floor_sum +=3D ifaceBand->in->floor; ignore_value(virBitmapSetBit(net->class_id, iface->data.network.actual->class= _id)); @@ -5548,7 +5545,7 @@ networkBandwidthUpdate(virDomainNetDefPtr iface, =20 if (virNetDevBandwidthUpdateRate(network->def->bridge, 2, network->def->bandwidth, new_rate= ) < 0 || - virNetworkSaveStatus(driver->stateDir, network) < 0) { + virNetworkObjSaveStatus(driver->stateDir, network) < 0) { /* Ouch, rollback */ network->floor_sum -=3D newBandwidth->in->floor; network->floor_sum +=3D ifaceBand->in->floor; diff --git a/src/test/test_driver.c b/src/test/test_driver.c index 1fd7414..12eecea 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -980,7 +980,7 @@ testParseNetworks(testDriverPtr privconn, if (!def) goto error; =20 - if (!(obj =3D virNetworkAssignDef(privconn->networks, def, 0))) { + if (!(obj =3D virNetworkObjAssignDef(privconn->networks, def, 0)))= { virNetworkDefFree(def); goto error; } @@ -3371,9 +3371,9 @@ static virNetworkPtr testNetworkCreateXML(virConnectP= tr conn, const char *xml) if ((def =3D virNetworkDefParseString(xml)) =3D=3D NULL) goto cleanup; =20 - if (!(net =3D virNetworkAssignDef(privconn->networks, def, - VIR_NETWORK_OBJ_LIST_ADD_LIVE | - VIR_NETWORK_OBJ_LIST_ADD_CHECK_LIVE))) + if (!(net =3D virNetworkObjAssignDef(privconn->networks, def, + VIR_NETWORK_OBJ_LIST_ADD_LIVE | + VIR_NETWORK_OBJ_LIST_ADD_CHECK_LIVE= ))) goto cleanup; def =3D NULL; net->active =3D 1; @@ -3403,7 +3403,7 @@ virNetworkPtr testNetworkDefineXML(virConnectPtr conn= , const char *xml) if ((def =3D virNetworkDefParseString(xml)) =3D=3D NULL) goto cleanup; =20 - if (!(net =3D virNetworkAssignDef(privconn->networks, def, 0))) + if (!(net =3D virNetworkObjAssignDef(privconn->networks, def, 0))) goto cleanup; def =3D NULL; =20 @@ -3440,7 +3440,7 @@ static int testNetworkUndefine(virNetworkPtr network) VIR_NETWORK_EVENT_UNDEFINED, 0); =20 - virNetworkRemoveInactive(privconn->networks, privnet); + virNetworkObjRemoveInactive(privconn->networks, privnet); ret =3D 0; =20 cleanup: @@ -3534,7 +3534,7 @@ static int testNetworkDestroy(virNetworkPtr network) VIR_NETWORK_EVENT_STOPPED, 0); if (!privnet->persistent) - virNetworkRemoveInactive(privconn->networks, privnet); + virNetworkObjRemoveInactive(privconn->networks, privnet); =20 ret =3D 0; =20 --=20 2.9.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list