On Tue, Jul 12, 2011 at 13:57:09 +0200, Michal Privoznik wrote:
These functions take on input decimal numbers optionally followed
by unit. Units are exactly the same as 'tc' accepts.
---
src/conf/domain_conf.c | 3 +
src/conf/domain_conf.h | 1 +
src/conf/network_conf.c | 5 +
src/conf/network_conf.h | 1 +
src/libvirt_private.syms | 1 +
src/util/network.c | 203 ++++++++++++++++++++++++++++++++++++++++++++++
src/util/network.h | 2 +
7 files changed, 216 insertions(+), 0 deletions(-)
This can be greatly simplified once we forbid using units in bandwidth
attributes.
...
diff --git a/src/util/network.c b/src/util/network.c
index eb16e0c..476ecde 100644
--- a/src/util/network.c
+++ b/src/util/network.c
@@ -10,6 +10,7 @@
#include <config.h>
#include <arpa/inet.h>
+#include <math.h>
BTW, why did you need to include math.h? Getting rid of it is another good
reason for removing units.
#include "memory.h"
#include "network.h"
@@ -21,6 +22,9 @@
...
+/**
+ * virBandwidthParseXML:
The name here doesn't match the function this is supposed to document.
+ * @node: XML node
+ * @def: where to store the parsed result
+ *
+ * Parse bandwidth XML and store into given pointer
+ *
+ * Returns 0 on success, -1 on error.
+ */
+int
+virBandwidthDefParseNode(xmlNodePtr node, virBandwidthPtr def)
+{
+ int ret = -1;
+ xmlNodePtr cur = node->children;
+ xmlNodePtr in = NULL, out = NULL;
+
+ if (!node || !def ||
+ !xmlStrEqual(node->name, BAD_CAST "bandwidth"))
+ return -1;
+
+ memset(def, 0, sizeof(virBandwidth));
Using sizeof(*def) is better.
+ while (cur) {
+ if (cur->type == XML_ELEMENT_NODE) {
+ if (xmlStrEqual(cur->name, BAD_CAST "inbound")) {
+ if (in) {
+ virBandwidthError(VIR_ERR_XML_DETAIL, "%s",
+ _("Only one child <inbound> "
+ "element allowed"));
+ goto cleanup;
+ }
+ in = cur;
+ } else if (xmlStrEqual(cur->name, BAD_CAST "outbound")) {
+ if (out) {
+ virBandwidthError(VIR_ERR_XML_DETAIL, "%s",
+ _("Only one child <outbound> "
+ "element allowed"));
+ goto cleanup;
+ }
+ out = cur;
+ } else {
+ virBandwidthError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("Unknown element %s"),
+ cur->name);
+ goto cleanup;
AFAIK we ignore unknown XML elements in other XML parsing code, shouldn't we
do the same here?
...
Jirka