On Mon, Sep 05, 2011 at 05:26:50PM +0200, Peter Krempa wrote:
This patch adds functions to compare structures containing network
device configuration for equality. They serve for the purpose of
disallowing unsupported changes to live network devices.
---
src/util/network.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++
src/util/network.h | 5 ++++
2 files changed, 67 insertions(+), 0 deletions(-)
diff --git a/src/util/network.c b/src/util/network.c
index 6fcdab2..ee69557 100644
--- a/src/util/network.c
+++ b/src/util/network.c
@@ -842,6 +842,43 @@ error:
return ret;
}
+bool
+virVirtualPortProfileEqual(virVirtualPortProfileParamsPtr a,
virVirtualPortProfileParamsPtr b)
+{
+ /* NULL resistant */
+ if (!a && !b)
+ return true;
+
+ if (!a || !b)
+ return false;
+
+ if (a->virtPortType != b->virtPortType)
+ return false;
+
+ switch (a->virtPortType) {
+ case VIR_VIRTUALPORT_NONE:
+ break;
+
+ case VIR_VIRTUALPORT_8021QBG:
+ if (a->u.virtPort8021Qbg.managerID != b->u.virtPort8021Qbg.managerID ||
+ a->u.virtPort8021Qbg.typeID != b->u.virtPort8021Qbg.typeID ||
+ a->u.virtPort8021Qbg.typeIDVersion !=
b->u.virtPort8021Qbg.typeIDVersion ||
+ memcmp(a->u.virtPort8021Qbg.instanceID,
b->u.virtPort8021Qbg.instanceID, VIR_UUID_BUFLEN) != 0)
+ return false;
+ break;
+
+ case VIR_VIRTUALPORT_8021QBH:
+ if (STRNEQ(a->u.virtPort8021Qbh.profileID,
b->u.virtPort8021Qbh.profileID))
+ return false;
+ break;
+
+ default:
+ break;
+ }
+
+ return true;
+}
+
void
virVirtualPortProfileFormat(virBufferPtr buf,
virVirtualPortProfileParamsPtr virtPort,
@@ -1321,3 +1358,28 @@ cleanup:
}
return ret;
}
+
+bool
+virBandwidthEqual(virBandwidthPtr a,
+ virBandwidthPtr b)
+{
+ if (!a && !b)
+ return true;
+
+ if (!a || !b)
+ return false;
The only question I would have here is what if one of the structure
in or out pointer is NULL, since it's an internal API I would try to
harde this a bit in a following patch,
+ /* in */
+ if (a->in->average != b->in->average ||
+ a->in->peak != b->in->peak ||
+ a->in->burst != b->in->burst)
+ return false;
+
+ /*out*/
+ if (a->out->average != b->out->average ||
+ a->out->peak != b->out->peak ||
+ a->out->burst != b->out->burst)
+ return false;
+
+ return true;
+}
diff --git a/src/util/network.h b/src/util/network.h
index 6ceaa6d..4d195af 100644
--- a/src/util/network.h
+++ b/src/util/network.h
@@ -150,6 +150,8 @@ virVirtualPortProfileFormat(virBufferPtr buf,
virVirtualPortProfileParamsPtr virtPort,
const char *indent);
+bool virVirtualPortProfileEqual(virVirtualPortProfileParamsPtr a,
virVirtualPortProfileParamsPtr b);
+
virBandwidthPtr virBandwidthDefParseNode(xmlNodePtr node);
void virBandwidthDefFree(virBandwidthPtr def);
int virBandwidthDefFormat(virBufferPtr buf,
@@ -160,4 +162,7 @@ int virBandwidthEnable(virBandwidthPtr bandwidth, const char
*iface);
int virBandwidthDisable(const char *iface, bool may_fail);
int virBandwidthCopy(virBandwidthPtr *dest, const virBandwidthPtr src);
+bool virBandwidthEqual(virBandwidthPtr a, virBandwidthPtr b);
+
+
#endif /* __VIR_NETWORK_H__ */
Otherwise looks just fine, ACK
Daniel
--
Daniel Veillard | libxml Gnome XML XSLT toolkit
http://xmlsoft.org/
daniel(a)veillard.com | Rpmfind RPM search engine
http://rpmfind.net/
http://veillard.com/ | virtualization library
http://libvirt.org/