[libvirt] [PATCH 0/4] Split out interface object into its own module

Feedback from the initial pass at RFC for making a common pool object was that it got really confusing trying to manage the multitude of changes. See patch 3 of the series: http://www.redhat.com/archives/libvir-list/2017-February/msg00519.html So while I figure out what it'll take to make a better object framework, I figure I could start splitting out things a bit to make future work a bit easier to understand. Also rather than trying to do them all in one massive series, I'm working through shorter series contained to each of the driver conf's - this one is for interface and if follows the same pattern as node device. John Ferlan (4): conf: Introduce virinterfaceobj conf: Adjust coding style for interface conf sources conf: Use consistent function name prefixes for virinterfaceobj conf: Alter coding style of interface function prototypes po/POTFILES.in | 1 + src/Makefile.am | 3 +- src/conf/interface_conf.c | 239 ++++++++------------------------ src/conf/interface_conf.h | 60 ++------ src/conf/virinterfaceobj.c | 217 +++++++++++++++++++++++++++++ src/conf/virinterfaceobj.h | 84 +++++++++++ src/interface/interface_backend_netcf.c | 1 + src/interface/interface_backend_udev.c | 1 + src/libvirt_private.syms | 19 +-- src/test/test_driver.c | 26 ++-- 10 files changed, 396 insertions(+), 255 deletions(-) create mode 100644 src/conf/virinterfaceobj.c create mode 100644 src/conf/virinterfaceobj.h -- 2.9.3

Move all the InterfaceObj API's into their own module virinterfaceobj from the interface_conf Purely code motion at this point. Signed-off-by: John Ferlan <jferlan@redhat.com> --- po/POTFILES.in | 1 + src/Makefile.am | 3 +- src/conf/interface_conf.c | 166 -------------------------- src/conf/interface_conf.h | 45 ------- src/conf/virinterfaceobj.c | 201 ++++++++++++++++++++++++++++++++ src/conf/virinterfaceobj.h | 70 +++++++++++ src/interface/interface_backend_netcf.c | 1 + src/interface/interface_backend_udev.c | 1 + src/libvirt_private.syms | 19 +-- src/test/test_driver.c | 1 + 10 files changed, 288 insertions(+), 220 deletions(-) create mode 100644 src/conf/virinterfaceobj.c create mode 100644 src/conf/virinterfaceobj.h diff --git a/po/POTFILES.in b/po/POTFILES.in index 7c7f530..50289a5 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -42,6 +42,7 @@ src/conf/snapshot_conf.c src/conf/storage_conf.c src/conf/virchrdev.c src/conf/virdomainobjlist.c +src/conf/virinterfaceobj.c src/conf/virnodedeviceobj.c src/conf/virsecretobj.c src/cpu/cpu.c diff --git a/src/Makefile.am b/src/Makefile.am index 7d42eac..c85927f 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -381,7 +381,8 @@ STORAGE_CONF_SOURCES = \ # Interface driver generic impl APIs INTERFACE_CONF_SOURCES = \ - conf/interface_conf.c conf/interface_conf.h + conf/interface_conf.c conf/interface_conf.h \ + conf/virinterfaceobj.c conf/virinterfaceobj.h # Secret driver generic impl APIs SECRET_CONF_SOURCES = \ diff --git a/src/conf/interface_conf.c b/src/conf/interface_conf.c index e1e6a25..dc2ddd4 100644 --- a/src/conf/interface_conf.c +++ b/src/conf/interface_conf.c @@ -1114,169 +1114,3 @@ char *virInterfaceDefFormat(const virInterfaceDef *def) } return virBufferContentAndReset(&buf); } - -/* virInterfaceObj manipulation */ - -void virInterfaceObjLock(virInterfaceObjPtr obj) -{ - virMutexLock(&obj->lock); -} - -void virInterfaceObjUnlock(virInterfaceObjPtr obj) -{ - virMutexUnlock(&obj->lock); -} - -void virInterfaceObjFree(virInterfaceObjPtr iface) -{ - if (!iface) - return; - - virInterfaceDefFree(iface->def); - virMutexDestroy(&iface->lock); - VIR_FREE(iface); -} - -/* virInterfaceObjList manipulation */ - -int virInterfaceFindByMACString(virInterfaceObjListPtr interfaces, - const char *mac, - virInterfaceObjPtr *matches, int maxmatches) -{ - size_t i; - unsigned int matchct = 0; - - for (i = 0; i < interfaces->count; i++) { - - virInterfaceObjLock(interfaces->objs[i]); - if (STRCASEEQ(interfaces->objs[i]->def->mac, mac)) { - matchct++; - if (matchct <= maxmatches) { - matches[matchct - 1] = interfaces->objs[i]; - /* keep the lock if we're returning object to caller */ - /* it is the caller's responsibility to unlock *all* matches */ - continue; - } - } - virInterfaceObjUnlock(interfaces->objs[i]); - - } - return matchct; -} - -virInterfaceObjPtr virInterfaceFindByName(virInterfaceObjListPtr interfaces, - const char *name) -{ - size_t i; - - for (i = 0; i < interfaces->count; i++) { - virInterfaceObjLock(interfaces->objs[i]); - if (STREQ(interfaces->objs[i]->def->name, name)) - return interfaces->objs[i]; - virInterfaceObjUnlock(interfaces->objs[i]); - } - - return NULL; -} - -void virInterfaceObjListFree(virInterfaceObjListPtr interfaces) -{ - size_t i; - - for (i = 0; i < interfaces->count; i++) - virInterfaceObjFree(interfaces->objs[i]); - - VIR_FREE(interfaces->objs); - interfaces->count = 0; -} - -int virInterfaceObjListClone(virInterfaceObjListPtr src, - virInterfaceObjListPtr dest) -{ - int ret = -1; - size_t i; - unsigned int cnt; - - if (!src || !dest) - goto cleanup; - - virInterfaceObjListFree(dest); /* start with an empty list */ - cnt = src->count; - for (i = 0; i < cnt; i++) { - virInterfaceDefPtr def = src->objs[i]->def; - virInterfaceDefPtr backup; - virInterfaceObjPtr iface; - char *xml = virInterfaceDefFormat(def); - - if (!xml) - goto cleanup; - - if ((backup = virInterfaceDefParseString(xml)) == NULL) { - VIR_FREE(xml); - goto cleanup; - } - - VIR_FREE(xml); - if ((iface = virInterfaceAssignDef(dest, backup)) == NULL) - goto cleanup; - virInterfaceObjUnlock(iface); /* was locked by virInterfaceAssignDef */ - } - - ret = cnt; - cleanup: - if ((ret < 0) && dest) - virInterfaceObjListFree(dest); - return ret; -} - -virInterfaceObjPtr virInterfaceAssignDef(virInterfaceObjListPtr interfaces, - virInterfaceDefPtr def) -{ - virInterfaceObjPtr iface; - - if ((iface = virInterfaceFindByName(interfaces, def->name))) { - virInterfaceDefFree(iface->def); - iface->def = def; - - return iface; - } - - if (VIR_ALLOC(iface) < 0) - return NULL; - if (virMutexInit(&iface->lock) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - "%s", _("cannot initialize mutex")); - VIR_FREE(iface); - return NULL; - } - virInterfaceObjLock(iface); - - if (VIR_APPEND_ELEMENT_COPY(interfaces->objs, - interfaces->count, iface) < 0) { - virInterfaceObjFree(iface); - return NULL; - } - - iface->def = def; - return iface; - -} - -void virInterfaceRemove(virInterfaceObjListPtr interfaces, - virInterfaceObjPtr iface) -{ - size_t i; - - virInterfaceObjUnlock(iface); - for (i = 0; i < interfaces->count; i++) { - virInterfaceObjLock(interfaces->objs[i]); - if (interfaces->objs[i] == iface) { - virInterfaceObjUnlock(interfaces->objs[i]); - virInterfaceObjFree(interfaces->objs[i]); - - VIR_DELETE_ELEMENT(interfaces->objs, i, interfaces->count); - break; - } - virInterfaceObjUnlock(interfaces->objs[i]); - } -} diff --git a/src/conf/interface_conf.h b/src/conf/interface_conf.h index 2523207..7325d65 100644 --- a/src/conf/interface_conf.h +++ b/src/conf/interface_conf.h @@ -161,46 +161,7 @@ struct _virInterfaceDef { virInterfaceProtocolDefPtr *protos; /* ptr to array of protos[nprotos] */ }; -typedef struct _virInterfaceObj virInterfaceObj; -typedef virInterfaceObj *virInterfaceObjPtr; -struct _virInterfaceObj { - virMutex lock; - - bool active; /* true if interface is active (up) */ - virInterfaceDefPtr def; /* The interface definition */ -}; - -typedef struct _virInterfaceObjList virInterfaceObjList; -typedef virInterfaceObjList *virInterfaceObjListPtr; -struct _virInterfaceObjList { - size_t count; - virInterfaceObjPtr *objs; -}; - -static inline bool -virInterfaceObjIsActive(const virInterfaceObj *iface) -{ - return iface->active; -} - -int virInterfaceFindByMACString(virInterfaceObjListPtr interfaces, - const char *mac, - virInterfaceObjPtr *matches, int maxmatches); -virInterfaceObjPtr virInterfaceFindByName(virInterfaceObjListPtr interfaces, - const char *name); - - void virInterfaceDefFree(virInterfaceDefPtr def); -void virInterfaceObjFree(virInterfaceObjPtr iface); -void virInterfaceObjListFree(virInterfaceObjListPtr vms); -int virInterfaceObjListClone(virInterfaceObjListPtr src, - virInterfaceObjListPtr dest); - - -virInterfaceObjPtr virInterfaceAssignDef(virInterfaceObjListPtr interfaces, - virInterfaceDefPtr def); -void virInterfaceRemove(virInterfaceObjListPtr interfaces, - virInterfaceObjPtr iface); virInterfaceDefPtr virInterfaceDefParseString(const char *xmlStr); virInterfaceDefPtr virInterfaceDefParseFile(const char *filename); @@ -209,12 +170,6 @@ virInterfaceDefPtr virInterfaceDefParseNode(xmlDocPtr xml, char *virInterfaceDefFormat(const virInterfaceDef *def); -void virInterfaceObjLock(virInterfaceObjPtr obj); -void virInterfaceObjUnlock(virInterfaceObjPtr obj); - -typedef bool (*virInterfaceObjListFilter)(virConnectPtr conn, - virInterfaceDefPtr def); - # define VIR_CONNECT_LIST_INTERFACES_FILTERS_ACTIVE \ (VIR_CONNECT_LIST_INTERFACES_ACTIVE | \ VIR_CONNECT_LIST_INTERFACES_INACTIVE) diff --git a/src/conf/virinterfaceobj.c b/src/conf/virinterfaceobj.c new file mode 100644 index 0000000..6c18911 --- /dev/null +++ b/src/conf/virinterfaceobj.c @@ -0,0 +1,201 @@ +/* + * virinterfaceobj.c: interface object handling + * (derived from interface_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 + * <http://www.gnu.org/licenses/>. + */ + +#include <config.h> + +#include "datatypes.h" +#include "interface_conf.h" + +#include "viralloc.h" +#include "virerror.h" +#include "virinterfaceobj.h" +#include "virlog.h" +#include "virstring.h" + +#define VIR_FROM_THIS VIR_FROM_INTERFACE + +VIR_LOG_INIT("conf.virinterfaceobj"); + + + +/* virInterfaceObj manipulation */ + +void virInterfaceObjLock(virInterfaceObjPtr obj) +{ + virMutexLock(&obj->lock); +} + +void virInterfaceObjUnlock(virInterfaceObjPtr obj) +{ + virMutexUnlock(&obj->lock); +} + +void virInterfaceObjFree(virInterfaceObjPtr iface) +{ + if (!iface) + return; + + virInterfaceDefFree(iface->def); + virMutexDestroy(&iface->lock); + VIR_FREE(iface); +} + +/* virInterfaceObjList manipulation */ + +int virInterfaceFindByMACString(virInterfaceObjListPtr interfaces, + const char *mac, + virInterfaceObjPtr *matches, int maxmatches) +{ + size_t i; + unsigned int matchct = 0; + + for (i = 0; i < interfaces->count; i++) { + + virInterfaceObjLock(interfaces->objs[i]); + if (STRCASEEQ(interfaces->objs[i]->def->mac, mac)) { + matchct++; + if (matchct <= maxmatches) { + matches[matchct - 1] = interfaces->objs[i]; + /* keep the lock if we're returning object to caller */ + /* it is the caller's responsibility to unlock *all* matches */ + continue; + } + } + virInterfaceObjUnlock(interfaces->objs[i]); + + } + return matchct; +} + +virInterfaceObjPtr virInterfaceFindByName(virInterfaceObjListPtr interfaces, + const char *name) +{ + size_t i; + + for (i = 0; i < interfaces->count; i++) { + virInterfaceObjLock(interfaces->objs[i]); + if (STREQ(interfaces->objs[i]->def->name, name)) + return interfaces->objs[i]; + virInterfaceObjUnlock(interfaces->objs[i]); + } + + return NULL; +} + +void virInterfaceObjListFree(virInterfaceObjListPtr interfaces) +{ + size_t i; + + for (i = 0; i < interfaces->count; i++) + virInterfaceObjFree(interfaces->objs[i]); + + VIR_FREE(interfaces->objs); + interfaces->count = 0; +} + +int virInterfaceObjListClone(virInterfaceObjListPtr src, + virInterfaceObjListPtr dest) +{ + int ret = -1; + size_t i; + unsigned int cnt; + + if (!src || !dest) + goto cleanup; + + virInterfaceObjListFree(dest); /* start with an empty list */ + cnt = src->count; + for (i = 0; i < cnt; i++) { + virInterfaceDefPtr def = src->objs[i]->def; + virInterfaceDefPtr backup; + virInterfaceObjPtr iface; + char *xml = virInterfaceDefFormat(def); + + if (!xml) + goto cleanup; + + if ((backup = virInterfaceDefParseString(xml)) == NULL) { + VIR_FREE(xml); + goto cleanup; + } + + VIR_FREE(xml); + if ((iface = virInterfaceAssignDef(dest, backup)) == NULL) + goto cleanup; + virInterfaceObjUnlock(iface); /* was locked by virInterfaceAssignDef */ + } + + ret = cnt; + cleanup: + if ((ret < 0) && dest) + virInterfaceObjListFree(dest); + return ret; +} + +virInterfaceObjPtr virInterfaceAssignDef(virInterfaceObjListPtr interfaces, + virInterfaceDefPtr def) +{ + virInterfaceObjPtr iface; + + if ((iface = virInterfaceFindByName(interfaces, def->name))) { + virInterfaceDefFree(iface->def); + iface->def = def; + + return iface; + } + + if (VIR_ALLOC(iface) < 0) + return NULL; + if (virMutexInit(&iface->lock) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + "%s", _("cannot initialize mutex")); + VIR_FREE(iface); + return NULL; + } + virInterfaceObjLock(iface); + + if (VIR_APPEND_ELEMENT_COPY(interfaces->objs, + interfaces->count, iface) < 0) { + virInterfaceObjFree(iface); + return NULL; + } + + iface->def = def; + return iface; + +} + +void virInterfaceRemove(virInterfaceObjListPtr interfaces, + virInterfaceObjPtr iface) +{ + size_t i; + + virInterfaceObjUnlock(iface); + for (i = 0; i < interfaces->count; i++) { + virInterfaceObjLock(interfaces->objs[i]); + if (interfaces->objs[i] == iface) { + virInterfaceObjUnlock(interfaces->objs[i]); + virInterfaceObjFree(interfaces->objs[i]); + + VIR_DELETE_ELEMENT(interfaces->objs, i, interfaces->count); + break; + } + virInterfaceObjUnlock(interfaces->objs[i]); + } +} diff --git a/src/conf/virinterfaceobj.h b/src/conf/virinterfaceobj.h new file mode 100644 index 0000000..51d7c75 --- /dev/null +++ b/src/conf/virinterfaceobj.h @@ -0,0 +1,70 @@ +/* + * virinterfaceobj.h: interface object handling entry points + * (derived from interface_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 + * <http://www.gnu.org/licenses/>. + */ + +#ifndef __VIRINTERFACEOBJ_H__ +# define __VIRINTERFACEOBJ_H__ + +# include "internal.h" + +typedef struct _virInterfaceObj virInterfaceObj; +typedef virInterfaceObj *virInterfaceObjPtr; +struct _virInterfaceObj { + virMutex lock; + + bool active; /* true if interface is active (up) */ + virInterfaceDefPtr def; /* The interface definition */ +}; + +typedef struct _virInterfaceObjList virInterfaceObjList; +typedef virInterfaceObjList *virInterfaceObjListPtr; +struct _virInterfaceObjList { + size_t count; + virInterfaceObjPtr *objs; +}; + +static inline bool +virInterfaceObjIsActive(const virInterfaceObj *iface) +{ + return iface->active; +} + +int virInterfaceFindByMACString(virInterfaceObjListPtr interfaces, + const char *mac, + virInterfaceObjPtr *matches, int maxmatches); +virInterfaceObjPtr virInterfaceFindByName(virInterfaceObjListPtr interfaces, + const char *name); + + +void virInterfaceObjFree(virInterfaceObjPtr iface); +void virInterfaceObjListFree(virInterfaceObjListPtr vms); +int virInterfaceObjListClone(virInterfaceObjListPtr src, + virInterfaceObjListPtr dest); + + +virInterfaceObjPtr virInterfaceAssignDef(virInterfaceObjListPtr interfaces, + virInterfaceDefPtr def); +void virInterfaceRemove(virInterfaceObjListPtr interfaces, + virInterfaceObjPtr iface); + +void virInterfaceObjLock(virInterfaceObjPtr obj); +void virInterfaceObjUnlock(virInterfaceObjPtr obj); + +typedef bool (*virInterfaceObjListFilter)(virConnectPtr conn, + virInterfaceDefPtr def); +#endif /* __VIRINTERFACEOBJ_H__ */ diff --git a/src/interface/interface_backend_netcf.c b/src/interface/interface_backend_netcf.c index 0181635..700a8a0 100644 --- a/src/interface/interface_backend_netcf.c +++ b/src/interface/interface_backend_netcf.c @@ -33,6 +33,7 @@ #include "virlog.h" #include "virstring.h" #include "viraccessapicheck.h" +#include "virinterfaceobj.h" #define VIR_FROM_THIS VIR_FROM_INTERFACE diff --git a/src/interface/interface_backend_udev.c b/src/interface/interface_backend_udev.c index 5d0fc64..18a45fa 100644 --- a/src/interface/interface_backend_udev.c +++ b/src/interface/interface_backend_udev.c @@ -34,6 +34,7 @@ #include "viralloc.h" #include "virstring.h" #include "viraccessapicheck.h" +#include "virinterfaceobj.h" #include "virnetdev.h" #define VIR_FROM_THIS VIR_FROM_INTERFACE diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index aed1d3d..b39e17d 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -594,19 +594,11 @@ virDomainConfVMNWFilterTeardown; # conf/interface_conf.h -virInterfaceAssignDef; virInterfaceDefFormat; virInterfaceDefFree; virInterfaceDefParseFile; virInterfaceDefParseNode; virInterfaceDefParseString; -virInterfaceFindByMACString; -virInterfaceFindByName; -virInterfaceObjListClone; -virInterfaceObjListFree; -virInterfaceObjLock; -virInterfaceObjUnlock; -virInterfaceRemove; # conf/netdev_bandwidth_conf.h @@ -948,6 +940,17 @@ virDomainObjListRemoveLocked; virDomainObjListRename; +# conf/virinterfaceobj.h +virInterfaceAssignDef; +virInterfaceFindByMACString; +virInterfaceFindByName; +virInterfaceObjListClone; +virInterfaceObjListFree; +virInterfaceObjLock; +virInterfaceObjUnlock; +virInterfaceRemove; + + # conf/virnodedeviceobj.h virNodeDeviceObjAssignDef; virNodeDeviceObjFindByName; diff --git a/src/test/test_driver.c b/src/test/test_driver.c index 61c82b9..e72a91f 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -64,6 +64,7 @@ #include "virauth.h" #include "viratomic.h" #include "virdomainobjlist.h" +#include "virinterfaceobj.h" #include "virhostcpu.h" #define VIR_FROM_THIS VIR_FROM_TEST -- 2.9.3

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 <jferlan@redhat.com> --- src/conf/interface_conf.c | 73 ++++++++++++++++++++++++++++++++++++---------- src/conf/virinterfaceobj.c | 48 ++++++++++++++++++++---------- 2 files changed, 89 insertions(+), 32 deletions(-) diff --git a/src/conf/interface_conf.c b/src/conf/interface_conf.c index dc2ddd4..8c46cf5 100644 --- a/src/conf/interface_conf.c +++ b/src/conf/interface_conf.c @@ -40,12 +40,13 @@ VIR_ENUM_IMPL(virInterface, static virInterfaceDefPtr virInterfaceDefParseXML(xmlXPathContextPtr ctxt, int parentIfType); + static int virInterfaceDefDevFormat(virBufferPtr buf, const virInterfaceDef *def, virInterfaceType parentIfType); -static -void virInterfaceIPDefFree(virInterfaceIPDefPtr def) +static void +virInterfaceIPDefFree(virInterfaceIPDefPtr def) { if (def == NULL) return; @@ -53,8 +54,9 @@ void virInterfaceIPDefFree(virInterfaceIPDefPtr def) VIR_FREE(def); } -static -void virInterfaceProtocolDefFree(virInterfaceProtocolDefPtr def) + +static void +virInterfaceProtocolDefFree(virInterfaceProtocolDefPtr def) { size_t i; @@ -68,7 +70,9 @@ void virInterfaceProtocolDefFree(virInterfaceProtocolDefPtr def) VIR_FREE(def); } -void virInterfaceDefFree(virInterfaceDefPtr def) + +void +virInterfaceDefFree(virInterfaceDefPtr def) { size_t i; int pp; @@ -111,6 +115,7 @@ void virInterfaceDefFree(virInterfaceDefPtr def) VIR_FREE(def); } + static int virInterfaceDefParseName(virInterfaceDefPtr def, xmlXPathContextPtr ctxt) @@ -127,6 +132,7 @@ virInterfaceDefParseName(virInterfaceDefPtr def, return 0; } + static int virInterfaceDefParseMtu(virInterfaceDefPtr def, xmlXPathContextPtr ctxt) @@ -145,6 +151,7 @@ virInterfaceDefParseMtu(virInterfaceDefPtr def, return 0; } + static int virInterfaceDefParseStartMode(virInterfaceDefPtr def, xmlXPathContextPtr ctxt) @@ -170,6 +177,7 @@ virInterfaceDefParseStartMode(virInterfaceDefPtr def, return 0; } + static int virInterfaceDefParseBondMode(xmlXPathContextPtr ctxt) { @@ -202,6 +210,7 @@ virInterfaceDefParseBondMode(xmlXPathContextPtr ctxt) return ret; } + static int virInterfaceDefParseBondMiiCarrier(xmlXPathContextPtr ctxt) { @@ -224,6 +233,7 @@ virInterfaceDefParseBondMiiCarrier(xmlXPathContextPtr ctxt) return ret; } + static int virInterfaceDefParseBondArpValid(xmlXPathContextPtr ctxt) { @@ -248,6 +258,7 @@ virInterfaceDefParseBondArpValid(xmlXPathContextPtr ctxt) return ret; } + static int virInterfaceDefParseDhcp(virInterfaceProtocolDefPtr def, xmlNodePtr dhcp, xmlXPathContextPtr ctxt) @@ -280,6 +291,7 @@ virInterfaceDefParseDhcp(virInterfaceProtocolDefPtr def, return ret; } + static int virInterfaceDefParseIP(virInterfaceIPDefPtr def, xmlXPathContextPtr ctxt) @@ -304,6 +316,7 @@ virInterfaceDefParseIP(virInterfaceIPDefPtr def, return 0; } + static int virInterfaceDefParseProtoIPv4(virInterfaceProtocolDefPtr def, xmlXPathContextPtr ctxt) @@ -355,6 +368,7 @@ virInterfaceDefParseProtoIPv4(virInterfaceProtocolDefPtr def, return ret; } + static int virInterfaceDefParseProtoIPv6(virInterfaceProtocolDefPtr def, xmlXPathContextPtr ctxt) @@ -410,6 +424,7 @@ virInterfaceDefParseProtoIPv6(virInterfaceProtocolDefPtr def, return ret; } + static int virInterfaceDefParseIfAdressing(virInterfaceDefPtr def, xmlXPathContextPtr ctxt) @@ -480,6 +495,7 @@ virInterfaceDefParseIfAdressing(virInterfaceDefPtr def, } + static int virInterfaceDefParseBridge(virInterfaceDefPtr def, xmlXPathContextPtr ctxt) @@ -539,6 +555,7 @@ virInterfaceDefParseBridge(virInterfaceDefPtr def, return ret; } + static int virInterfaceDefParseBondItfs(virInterfaceDefPtr def, xmlXPathContextPtr ctxt) @@ -581,6 +598,7 @@ virInterfaceDefParseBondItfs(virInterfaceDefPtr def, return ret; } + static int virInterfaceDefParseBond(virInterfaceDefPtr def, xmlXPathContextPtr ctxt) @@ -653,6 +671,7 @@ virInterfaceDefParseBond(virInterfaceDefPtr def, return 0; } + static int virInterfaceDefParseVlan(virInterfaceDefPtr def, xmlXPathContextPtr ctxt) @@ -674,8 +693,10 @@ virInterfaceDefParseVlan(virInterfaceDefPtr def, return 0; } + static virInterfaceDefPtr -virInterfaceDefParseXML(xmlXPathContextPtr ctxt, int parentIfType) +virInterfaceDefParseXML(xmlXPathContextPtr ctxt, + int parentIfType) { virInterfaceDefPtr def; int type; @@ -795,8 +816,10 @@ virInterfaceDefParseXML(xmlXPathContextPtr ctxt, int parentIfType) return NULL; } -virInterfaceDefPtr virInterfaceDefParseNode(xmlDocPtr xml, - xmlNodePtr root) + +virInterfaceDefPtr +virInterfaceDefParseNode(xmlDocPtr xml, + xmlNodePtr root) { xmlXPathContextPtr ctxt = NULL; virInterfaceDefPtr def = NULL; @@ -823,6 +846,7 @@ virInterfaceDefPtr virInterfaceDefParseNode(xmlDocPtr xml, return def; } + static virInterfaceDefPtr virInterfaceDefParse(const char *xmlStr, const char *filename) @@ -838,18 +862,24 @@ virInterfaceDefParse(const char *xmlStr, return def; } -virInterfaceDefPtr virInterfaceDefParseString(const char *xmlStr) + +virInterfaceDefPtr +virInterfaceDefParseString(const char *xmlStr) { return virInterfaceDefParse(xmlStr, NULL); } -virInterfaceDefPtr virInterfaceDefParseFile(const char *filename) + +virInterfaceDefPtr +virInterfaceDefParseFile(const char *filename) { return virInterfaceDefParse(NULL, filename); } + static int -virInterfaceBridgeDefFormat(virBufferPtr buf, const virInterfaceDef *def) +virInterfaceBridgeDefFormat(virBufferPtr buf, + const virInterfaceDef *def) { size_t i; int ret = 0; @@ -875,8 +905,10 @@ virInterfaceBridgeDefFormat(virBufferPtr buf, const virInterfaceDef *def) return ret; } + static int -virInterfaceBondDefFormat(virBufferPtr buf, const virInterfaceDef *def) +virInterfaceBondDefFormat(virBufferPtr buf, + const virInterfaceDef *def) { size_t i; int ret = 0; @@ -938,8 +970,10 @@ virInterfaceBondDefFormat(virBufferPtr buf, const virInterfaceDef *def) return ret; } + static int -virInterfaceVlanDefFormat(virBufferPtr buf, const virInterfaceDef *def) +virInterfaceVlanDefFormat(virBufferPtr buf, + const virInterfaceDef *def) { if (def->data.vlan.tag == NULL) { virReportError(VIR_ERR_INTERNAL_ERROR, @@ -961,8 +995,10 @@ virInterfaceVlanDefFormat(virBufferPtr buf, const virInterfaceDef *def) return 0; } + static int -virInterfaceProtocolDefFormat(virBufferPtr buf, const virInterfaceDef *def) +virInterfaceProtocolDefFormat(virBufferPtr buf, + const virInterfaceDef *def) { size_t i, j; @@ -1006,6 +1042,7 @@ virInterfaceProtocolDefFormat(virBufferPtr buf, const virInterfaceDef *def) return 0; } + static int virInterfaceStartmodeDefFormat(virBufferPtr buf, virInterfaceStartMode startmode) @@ -1032,8 +1069,10 @@ virInterfaceStartmodeDefFormat(virBufferPtr buf, return 0; } + static int -virInterfaceDefDevFormat(virBufferPtr buf, const virInterfaceDef *def, +virInterfaceDefDevFormat(virBufferPtr buf, + const virInterfaceDef *def, virInterfaceType parentIfType) { const char *type = NULL; @@ -1104,7 +1143,9 @@ virInterfaceDefDevFormat(virBufferPtr buf, const virInterfaceDef *def, return -1; } -char *virInterfaceDefFormat(const virInterfaceDef *def) + +char * +virInterfaceDefFormat(const virInterfaceDef *def) { virBuffer buf = VIR_BUFFER_INITIALIZER; diff --git a/src/conf/virinterfaceobj.c b/src/conf/virinterfaceobj.c index 6c18911..70f9001 100644 --- a/src/conf/virinterfaceobj.c +++ b/src/conf/virinterfaceobj.c @@ -36,17 +36,22 @@ VIR_LOG_INIT("conf.virinterfaceobj"); /* virInterfaceObj manipulation */ -void virInterfaceObjLock(virInterfaceObjPtr obj) +void +virInterfaceObjLock(virInterfaceObjPtr obj) { virMutexLock(&obj->lock); } -void virInterfaceObjUnlock(virInterfaceObjPtr obj) + +void +virInterfaceObjUnlock(virInterfaceObjPtr obj) { virMutexUnlock(&obj->lock); } -void virInterfaceObjFree(virInterfaceObjPtr iface) + +void +virInterfaceObjFree(virInterfaceObjPtr iface) { if (!iface) return; @@ -56,11 +61,12 @@ void virInterfaceObjFree(virInterfaceObjPtr iface) VIR_FREE(iface); } -/* virInterfaceObjList manipulation */ -int virInterfaceFindByMACString(virInterfaceObjListPtr interfaces, - const char *mac, - virInterfaceObjPtr *matches, int maxmatches) +/* virInterfaceObjList manipulation */ +int +virInterfaceFindByMACString(virInterfaceObjListPtr interfaces, + const char *mac, + virInterfaceObjPtr *matches, int maxmatches) { size_t i; unsigned int matchct = 0; @@ -83,8 +89,10 @@ int virInterfaceFindByMACString(virInterfaceObjListPtr interfaces, return matchct; } -virInterfaceObjPtr virInterfaceFindByName(virInterfaceObjListPtr interfaces, - const char *name) + +virInterfaceObjPtr +virInterfaceFindByName(virInterfaceObjListPtr interfaces, + const char *name) { size_t i; @@ -98,7 +106,9 @@ virInterfaceObjPtr virInterfaceFindByName(virInterfaceObjListPtr interfaces, return NULL; } -void virInterfaceObjListFree(virInterfaceObjListPtr interfaces) + +void +virInterfaceObjListFree(virInterfaceObjListPtr interfaces) { size_t i; @@ -109,8 +119,10 @@ void virInterfaceObjListFree(virInterfaceObjListPtr interfaces) interfaces->count = 0; } -int virInterfaceObjListClone(virInterfaceObjListPtr src, - virInterfaceObjListPtr dest) + +int +virInterfaceObjListClone(virInterfaceObjListPtr src, + virInterfaceObjListPtr dest) { int ret = -1; size_t i; @@ -148,8 +160,10 @@ int virInterfaceObjListClone(virInterfaceObjListPtr src, return ret; } -virInterfaceObjPtr virInterfaceAssignDef(virInterfaceObjListPtr interfaces, - virInterfaceDefPtr def) + +virInterfaceObjPtr +virInterfaceAssignDef(virInterfaceObjListPtr interfaces, + virInterfaceDefPtr def) { virInterfaceObjPtr iface; @@ -181,8 +195,10 @@ virInterfaceObjPtr virInterfaceAssignDef(virInterfaceObjListPtr interfaces, } -void virInterfaceRemove(virInterfaceObjListPtr interfaces, - virInterfaceObjPtr iface) + +void +virInterfaceRemove(virInterfaceObjListPtr interfaces, + virInterfaceObjPtr iface) { size_t i; -- 2.9.3

Use "virInterfaceObj" as a prefix for any external API in virinterfaceobj Signed-off-by: John Ferlan <jferlan@redhat.com> --- src/conf/virinterfaceobj.c | 24 ++++++++++++------------ src/conf/virinterfaceobj.h | 18 +++++++++--------- src/libvirt_private.syms | 8 ++++---- src/test/test_driver.c | 25 ++++++++++--------------- 4 files changed, 35 insertions(+), 40 deletions(-) diff --git a/src/conf/virinterfaceobj.c b/src/conf/virinterfaceobj.c index 70f9001..3af972b 100644 --- a/src/conf/virinterfaceobj.c +++ b/src/conf/virinterfaceobj.c @@ -64,9 +64,9 @@ virInterfaceObjFree(virInterfaceObjPtr iface) /* virInterfaceObjList manipulation */ int -virInterfaceFindByMACString(virInterfaceObjListPtr interfaces, - const char *mac, - virInterfaceObjPtr *matches, int maxmatches) +virInterfaceObjFindByMACString(virInterfaceObjListPtr interfaces, + const char *mac, + virInterfaceObjPtr *matches, int maxmatches) { size_t i; unsigned int matchct = 0; @@ -91,8 +91,8 @@ virInterfaceFindByMACString(virInterfaceObjListPtr interfaces, virInterfaceObjPtr -virInterfaceFindByName(virInterfaceObjListPtr interfaces, - const char *name) +virInterfaceObjFindByName(virInterfaceObjListPtr interfaces, + const char *name) { size_t i; @@ -148,9 +148,9 @@ virInterfaceObjListClone(virInterfaceObjListPtr src, } VIR_FREE(xml); - if ((iface = virInterfaceAssignDef(dest, backup)) == NULL) + if ((iface = virInterfaceObjAssignDef(dest, backup)) == NULL) goto cleanup; - virInterfaceObjUnlock(iface); /* was locked by virInterfaceAssignDef */ + virInterfaceObjUnlock(iface); /* locked by virInterfaceObjAssignDef */ } ret = cnt; @@ -162,12 +162,12 @@ virInterfaceObjListClone(virInterfaceObjListPtr src, virInterfaceObjPtr -virInterfaceAssignDef(virInterfaceObjListPtr interfaces, - virInterfaceDefPtr def) +virInterfaceObjAssignDef(virInterfaceObjListPtr interfaces, + virInterfaceDefPtr def) { virInterfaceObjPtr iface; - if ((iface = virInterfaceFindByName(interfaces, def->name))) { + if ((iface = virInterfaceObjFindByName(interfaces, def->name))) { virInterfaceDefFree(iface->def); iface->def = def; @@ -197,8 +197,8 @@ virInterfaceAssignDef(virInterfaceObjListPtr interfaces, void -virInterfaceRemove(virInterfaceObjListPtr interfaces, - virInterfaceObjPtr iface) +virInterfaceObjRemove(virInterfaceObjListPtr interfaces, + virInterfaceObjPtr iface) { size_t i; diff --git a/src/conf/virinterfaceobj.h b/src/conf/virinterfaceobj.h index 51d7c75..dfda748 100644 --- a/src/conf/virinterfaceobj.h +++ b/src/conf/virinterfaceobj.h @@ -44,11 +44,11 @@ virInterfaceObjIsActive(const virInterfaceObj *iface) return iface->active; } -int virInterfaceFindByMACString(virInterfaceObjListPtr interfaces, - const char *mac, - virInterfaceObjPtr *matches, int maxmatches); -virInterfaceObjPtr virInterfaceFindByName(virInterfaceObjListPtr interfaces, - const char *name); +int virInterfaceObjFindByMACString(virInterfaceObjListPtr interfaces, + const char *mac, + virInterfaceObjPtr *matches, int maxmatches); +virInterfaceObjPtr virInterfaceObjFindByName(virInterfaceObjListPtr interfaces, + const char *name); void virInterfaceObjFree(virInterfaceObjPtr iface); @@ -57,10 +57,10 @@ int virInterfaceObjListClone(virInterfaceObjListPtr src, virInterfaceObjListPtr dest); -virInterfaceObjPtr virInterfaceAssignDef(virInterfaceObjListPtr interfaces, - virInterfaceDefPtr def); -void virInterfaceRemove(virInterfaceObjListPtr interfaces, - virInterfaceObjPtr iface); +virInterfaceObjPtr virInterfaceObjAssignDef(virInterfaceObjListPtr interfaces, + virInterfaceDefPtr def); +void virInterfaceObjRemove(virInterfaceObjListPtr interfaces, + virInterfaceObjPtr iface); void virInterfaceObjLock(virInterfaceObjPtr obj); void virInterfaceObjUnlock(virInterfaceObjPtr obj); diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index b39e17d..2349ce0 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -941,14 +941,14 @@ virDomainObjListRename; # conf/virinterfaceobj.h -virInterfaceAssignDef; -virInterfaceFindByMACString; -virInterfaceFindByName; +virInterfaceObjAssignDef; +virInterfaceObjFindByMACString; +virInterfaceObjFindByName; virInterfaceObjListClone; virInterfaceObjListFree; virInterfaceObjLock; +virInterfaceObjRemove; virInterfaceObjUnlock; -virInterfaceRemove; # conf/virnodedeviceobj.h diff --git a/src/test/test_driver.c b/src/test/test_driver.c index e72a91f..2fd9776 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -1019,7 +1019,7 @@ testParseInterfaces(testDriverPtr privconn, if (!def) goto error; - if (!(obj = virInterfaceAssignDef(&privconn->ifaces, def))) { + if (!(obj = virInterfaceObjAssignDef(&privconn->ifaces, def))) { virInterfaceDefFree(def); goto error; } @@ -3738,7 +3738,7 @@ static virInterfacePtr testInterfaceLookupByName(virConnectPtr conn, virInterfacePtr ret = NULL; testDriverLock(privconn); - iface = virInterfaceFindByName(&privconn->ifaces, name); + iface = virInterfaceObjFindByName(&privconn->ifaces, name); testDriverUnlock(privconn); if (iface == NULL) { @@ -3763,7 +3763,7 @@ static virInterfacePtr testInterfaceLookupByMACString(virConnectPtr conn, virInterfacePtr ret = NULL; testDriverLock(privconn); - ifacect = virInterfaceFindByMACString(&privconn->ifaces, mac, &iface, 1); + ifacect = virInterfaceObjFindByMACString(&privconn->ifaces, mac, &iface, 1); testDriverUnlock(privconn); if (ifacect == 0) { @@ -3791,7 +3791,7 @@ static int testInterfaceIsActive(virInterfacePtr iface) int ret = -1; testDriverLock(privconn); - obj = virInterfaceFindByName(&privconn->ifaces, iface->name); + obj = virInterfaceObjFindByName(&privconn->ifaces, iface->name); testDriverUnlock(privconn); if (!obj) { virReportError(VIR_ERR_NO_INTERFACE, NULL); @@ -3902,8 +3902,7 @@ static char *testInterfaceGetXMLDesc(virInterfacePtr iface, virCheckFlags(0, NULL); testDriverLock(privconn); - privinterface = virInterfaceFindByName(&privconn->ifaces, - iface->name); + privinterface = virInterfaceObjFindByName(&privconn->ifaces, iface->name); testDriverUnlock(privconn); if (privinterface == NULL) { @@ -3934,7 +3933,7 @@ static virInterfacePtr testInterfaceDefineXML(virConnectPtr conn, const char *xm if ((def = virInterfaceDefParseString(xmlStr)) == NULL) goto cleanup; - if ((iface = virInterfaceAssignDef(&privconn->ifaces, def)) == NULL) + if ((iface = virInterfaceObjAssignDef(&privconn->ifaces, def)) == NULL) goto cleanup; def = NULL; @@ -3955,16 +3954,14 @@ static int testInterfaceUndefine(virInterfacePtr iface) int ret = -1; testDriverLock(privconn); - privinterface = virInterfaceFindByName(&privconn->ifaces, - iface->name); + privinterface = virInterfaceObjFindByName(&privconn->ifaces, iface->name); if (privinterface == NULL) { virReportError(VIR_ERR_NO_INTERFACE, NULL); goto cleanup; } - virInterfaceRemove(&privconn->ifaces, - privinterface); + virInterfaceObjRemove(&privconn->ifaces, privinterface); ret = 0; cleanup: @@ -3982,8 +3979,7 @@ static int testInterfaceCreate(virInterfacePtr iface, virCheckFlags(0, -1); testDriverLock(privconn); - privinterface = virInterfaceFindByName(&privconn->ifaces, - iface->name); + privinterface = virInterfaceObjFindByName(&privconn->ifaces, iface->name); if (privinterface == NULL) { virReportError(VIR_ERR_NO_INTERFACE, NULL); @@ -4015,8 +4011,7 @@ static int testInterfaceDestroy(virInterfacePtr iface, virCheckFlags(0, -1); testDriverLock(privconn); - privinterface = virInterfaceFindByName(&privconn->ifaces, - iface->name); + privinterface = virInterfaceObjFindByName(&privconn->ifaces, iface->name); if (privinterface == NULL) { virReportError(VIR_ERR_NO_INTERFACE, NULL); -- 2.9.3

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 <jferlan@redhat.com> --- src/conf/interface_conf.h | 19 ++++++++++++------ src/conf/virinterfaceobj.h | 48 ++++++++++++++++++++++++++++++---------------- 2 files changed, 44 insertions(+), 23 deletions(-) diff --git a/src/conf/interface_conf.h b/src/conf/interface_conf.h index 7325d65..76f37b6 100644 --- a/src/conf/interface_conf.h +++ b/src/conf/interface_conf.h @@ -161,14 +161,21 @@ struct _virInterfaceDef { virInterfaceProtocolDefPtr *protos; /* ptr to array of protos[nprotos] */ }; -void virInterfaceDefFree(virInterfaceDefPtr def); +void +virInterfaceDefFree(virInterfaceDefPtr def); -virInterfaceDefPtr virInterfaceDefParseString(const char *xmlStr); -virInterfaceDefPtr virInterfaceDefParseFile(const char *filename); -virInterfaceDefPtr virInterfaceDefParseNode(xmlDocPtr xml, - xmlNodePtr root); +virInterfaceDefPtr +virInterfaceDefParseString(const char *xmlStr); -char *virInterfaceDefFormat(const virInterfaceDef *def); +virInterfaceDefPtr +virInterfaceDefParseFile(const char *filename); + +virInterfaceDefPtr +virInterfaceDefParseNode(xmlDocPtr xml, + xmlNodePtr root); + +char * +virInterfaceDefFormat(const virInterfaceDef *def); # define VIR_CONNECT_LIST_INTERFACES_FILTERS_ACTIVE \ (VIR_CONNECT_LIST_INTERFACES_ACTIVE | \ diff --git a/src/conf/virinterfaceobj.h b/src/conf/virinterfaceobj.h index dfda748..6c5e2e7 100644 --- a/src/conf/virinterfaceobj.h +++ b/src/conf/virinterfaceobj.h @@ -44,27 +44,41 @@ virInterfaceObjIsActive(const virInterfaceObj *iface) return iface->active; } -int virInterfaceObjFindByMACString(virInterfaceObjListPtr interfaces, - const char *mac, - virInterfaceObjPtr *matches, int maxmatches); -virInterfaceObjPtr virInterfaceObjFindByName(virInterfaceObjListPtr interfaces, - const char *name); +int +virInterfaceObjFindByMACString(virInterfaceObjListPtr interfaces, + const char *mac, + virInterfaceObjPtr *matches, int maxmatches); +virInterfaceObjPtr +virInterfaceObjFindByName(virInterfaceObjListPtr interfaces, + const char *name); -void virInterfaceObjFree(virInterfaceObjPtr iface); -void virInterfaceObjListFree(virInterfaceObjListPtr vms); -int virInterfaceObjListClone(virInterfaceObjListPtr src, - virInterfaceObjListPtr dest); +void +virInterfaceObjFree(virInterfaceObjPtr iface); +void +virInterfaceObjListFree(virInterfaceObjListPtr vms); -virInterfaceObjPtr virInterfaceObjAssignDef(virInterfaceObjListPtr interfaces, - virInterfaceDefPtr def); -void virInterfaceObjRemove(virInterfaceObjListPtr interfaces, - virInterfaceObjPtr iface); +int +virInterfaceObjListClone(virInterfaceObjListPtr src, + virInterfaceObjListPtr dest); -void virInterfaceObjLock(virInterfaceObjPtr obj); -void virInterfaceObjUnlock(virInterfaceObjPtr obj); +virInterfaceObjPtr +virInterfaceObjAssignDef(virInterfaceObjListPtr interfaces, + virInterfaceDefPtr def); + +void +virInterfaceObjRemove(virInterfaceObjListPtr interfaces, + virInterfaceObjPtr iface); + +void +virInterfaceObjLock(virInterfaceObjPtr obj); + +void +virInterfaceObjUnlock(virInterfaceObjPtr obj); + +typedef bool +(*virInterfaceObjListFilter)(virConnectPtr conn, + virInterfaceDefPtr def); -typedef bool (*virInterfaceObjListFilter)(virConnectPtr conn, - virInterfaceDefPtr def); #endif /* __VIRINTERFACEOBJ_H__ */ -- 2.9.3

On 04.03.2017 14:12, John Ferlan wrote:
Feedback from the initial pass at RFC for making a common pool object was that it got really confusing trying to manage the multitude of changes. See patch 3 of the series:
http://www.redhat.com/archives/libvir-list/2017-February/msg00519.html
So while I figure out what it'll take to make a better object framework, I figure I could start splitting out things a bit to make future work a bit easier to understand. Also rather than trying to do them all in one massive series, I'm working through shorter series contained to each of the driver conf's - this one is for interface and if follows the same pattern as node device.
John Ferlan (4): conf: Introduce virinterfaceobj conf: Adjust coding style for interface conf sources conf: Use consistent function name prefixes for virinterfaceobj conf: Alter coding style of interface function prototypes
po/POTFILES.in | 1 + src/Makefile.am | 3 +- src/conf/interface_conf.c | 239 ++++++++------------------------ src/conf/interface_conf.h | 60 ++------ src/conf/virinterfaceobj.c | 217 +++++++++++++++++++++++++++++ src/conf/virinterfaceobj.h | 84 +++++++++++ src/interface/interface_backend_netcf.c | 1 + src/interface/interface_backend_udev.c | 1 + src/libvirt_private.syms | 19 +-- src/test/test_driver.c | 26 ++-- 10 files changed, 396 insertions(+), 255 deletions(-) create mode 100644 src/conf/virinterfaceobj.c create mode 100644 src/conf/virinterfaceobj.h
ACK Michal
participants (2)
-
John Ferlan
-
Michal Privoznik