[libvirt] [PATCH 10/33] Adjust naming of network device bandwidth management APIs

Daniel P. Berrange berrange at redhat.com
Thu Nov 3 17:30:06 UTC 2011


From: "Daniel P. Berrange" <berrange at redhat.com>

Rename virBandwidth to virNetDevBandwidth, and virRate to
virNetDevBandwidthRate.

* src/util/network.c, src/util/network.h: Rename bandwidth
  structs and APIs
* src/conf/domain_conf.c, src/conf/domain_conf.h,
  src/conf/network_conf.c, src/conf/network_conf.h,
  src/lxc/lxc_driver.c, src/network/bridge_driver.c,
  src/qemu/qemu_command.c, src/util/macvtap.c,
  src/util/macvtap.h, tools/virsh.c: Update for API changes.
---
 src/conf/domain_conf.c      |   14 +++---
 src/conf/domain_conf.h      |    6 +-
 src/conf/network_conf.c     |   12 ++--
 src/conf/network_conf.h     |    4 +-
 src/libvirt_private.syms    |   14 +++---
 src/lxc/lxc_driver.c        |    4 +-
 src/network/bridge_driver.c |   17 ++-----
 src/qemu/qemu_command.c     |    4 +-
 src/util/macvtap.c          |    4 +-
 src/util/macvtap.h          |    2 +-
 src/util/network.c          |  115 +++++++++++++++++-------------------------
 src/util/network.h          |   43 +++++++++-------
 tools/virsh.c               |    4 +-
 13 files changed, 110 insertions(+), 133 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 2b235c8..ab7853d 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -862,7 +862,7 @@ virDomainActualNetDefFree(virDomainActualNetDefPtr def)
         break;
     }
 
-    virBandwidthDefFree(def->bandwidth);
+    virNetDevBandwidthFree(def->bandwidth);
 
     VIR_FREE(def);
 }
@@ -921,7 +921,7 @@ void virDomainNetDefFree(virDomainNetDefPtr def)
     VIR_FREE(def->filter);
     virNWFilterHashTableFree(def->filterparams);
 
-    virBandwidthDefFree(def->bandwidth);
+    virNetDevBandwidthFree(def->bandwidth);
 
     VIR_FREE(def);
 }
@@ -3120,7 +3120,7 @@ virDomainActualNetDefParseXML(xmlNodePtr node,
 
     bandwidth_node = virXPathNode("./bandwidth", ctxt);
     if (bandwidth_node &&
-        !(actual->bandwidth = virBandwidthDefParseNode(bandwidth_node)))
+        !(actual->bandwidth = virNetDevBandwidthParse(bandwidth_node)))
         goto error;
 
     *def = actual;
@@ -3278,7 +3278,7 @@ virDomainNetDefParseXML(virCapsPtr caps,
                 if (virDomainActualNetDefParseXML(cur, ctxt, &actual) < 0)
                     goto error;
             } else if (xmlStrEqual(cur->name, BAD_CAST "bandwidth")) {
-                if (!(def->bandwidth = virBandwidthDefParseNode(cur)))
+                if (!(def->bandwidth = virNetDevBandwidthParse(cur)))
                     goto error;
             }
         }
@@ -9729,7 +9729,7 @@ virDomainActualNetDefFormat(virBufferPtr buf,
     }
 
     virBufferAdjustIndent(buf, 8);
-    if (virBandwidthDefFormat(buf, def->bandwidth) < 0)
+    if (virNetDevBandwidthFormat(def->bandwidth, buf) < 0)
         goto error;
     virBufferAdjustIndent(buf, -8);
 
@@ -9882,7 +9882,7 @@ virDomainNetDefFormat(virBufferPtr buf,
                           virDomainNetInterfaceLinkStateTypeToString(def->linkstate));
 
     virBufferAdjustIndent(buf, 6);
-    if (virBandwidthDefFormat(buf, def->bandwidth) < 0)
+    if (virNetDevBandwidthFormat(def->bandwidth, buf) < 0)
         return -1;
     virBufferAdjustIndent(buf, -6);
 
@@ -13090,7 +13090,7 @@ virDomainNetGetActualDirectVirtPortProfile(virDomainNetDefPtr iface)
     return iface->data.network.actual->data.direct.virtPortProfile;
 }
 
-virBandwidthPtr
+virNetDevBandwidthPtr
 virDomainNetGetActualBandwidth(virDomainNetDefPtr iface)
 {
     if ((iface->type == VIR_DOMAIN_NET_TYPE_NETWORK) &&
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 5ebb441..a3cb834 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -511,7 +511,7 @@ struct _virDomainActualNetDef {
             virVirtualPortProfileParamsPtr virtPortProfile;
         } direct;
     } data;
-    virBandwidthPtr bandwidth;
+    virNetDevBandwidthPtr bandwidth;
 };
 
 /* Stores the virtual network interface configuration */
@@ -576,7 +576,7 @@ struct _virDomainNetDef {
     virDomainDeviceInfo info;
     char *filter;
     virNWFilterHashTablePtr filterparams;
-    virBandwidthPtr bandwidth;
+    virNetDevBandwidthPtr bandwidth;
     int linkstate;
 };
 
@@ -1797,7 +1797,7 @@ char *virDomainNetGetActualDirectDev(virDomainNetDefPtr iface);
 int virDomainNetGetActualDirectMode(virDomainNetDefPtr iface);
 virVirtualPortProfileParamsPtr
 virDomainNetGetActualDirectVirtPortProfile(virDomainNetDefPtr iface);
-virBandwidthPtr
+virNetDevBandwidthPtr
 virDomainNetGetActualBandwidth(virDomainNetDefPtr iface);
 
 int virDomainControllerInsert(virDomainDefPtr def,
diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c
index 8dca618..a70b5a2 100644
--- a/src/conf/network_conf.c
+++ b/src/conf/network_conf.c
@@ -92,7 +92,7 @@ virPortGroupDefClear(virPortGroupDefPtr def)
 {
     VIR_FREE(def->name);
     VIR_FREE(def->virtPortProfile);
-    virBandwidthDefFree(def->bandwidth);
+    virNetDevBandwidthFree(def->bandwidth);
     def->bandwidth = NULL;
 }
 
@@ -171,7 +171,7 @@ void virNetworkDefFree(virNetworkDefPtr def)
 
     VIR_FREE(def->virtPortProfile);
 
-    virBandwidthDefFree(def->bandwidth);
+    virNetDevBandwidthFree(def->bandwidth);
 
     VIR_FREE(def);
 }
@@ -797,7 +797,7 @@ virNetworkPortGroupParseXML(virPortGroupDefPtr def,
 
     bandwidth_node = virXPathNode("./bandwidth", ctxt);
     if (bandwidth_node &&
-        !(def->bandwidth = virBandwidthDefParseNode(bandwidth_node))) {
+        !(def->bandwidth = virNetDevBandwidthParse(bandwidth_node))) {
         goto error;
     }
 
@@ -863,7 +863,7 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt)
     def->domain = virXPathString("string(./domain[1]/@name)", ctxt);
 
     if ((bandwidthNode = virXPathNode("./bandwidth", ctxt)) != NULL &&
-        (def->bandwidth = virBandwidthDefParseNode(bandwidthNode)) == NULL)
+        (def->bandwidth = virNetDevBandwidthParse(bandwidthNode)) == NULL)
         goto error;
 
     /* Parse bridge information */
@@ -1269,7 +1269,7 @@ virPortGroupDefFormat(virBufferPtr buf,
     virBufferAddLit(buf, ">\n");
     virBufferAdjustIndent(buf, 4);
     virVirtualPortProfileFormat(buf, def->virtPortProfile);
-    virBandwidthDefFormat(buf, def->bandwidth);
+    virNetDevBandwidthFormat(def->bandwidth, buf);
     virBufferAdjustIndent(buf, -4);
     virBufferAddLit(buf, "  </portgroup>\n");
 }
@@ -1344,7 +1344,7 @@ char *virNetworkDefFormat(const virNetworkDefPtr def)
         goto error;
 
     virBufferAdjustIndent(&buf, 2);
-    if (virBandwidthDefFormat(&buf, def->bandwidth) < 0)
+    if (virNetDevBandwidthFormat(def->bandwidth, &buf) < 0)
         goto error;
     virBufferAdjustIndent(&buf, -2);
 
diff --git a/src/conf/network_conf.h b/src/conf/network_conf.h
index 869085e..2cfbe46 100644
--- a/src/conf/network_conf.h
+++ b/src/conf/network_conf.h
@@ -123,7 +123,7 @@ struct _virPortGroupDef {
     char *name;
     bool isDefault;
     virVirtualPortProfileParamsPtr virtPortProfile;
-    virBandwidthPtr bandwidth;
+    virNetDevBandwidthPtr bandwidth;
 };
 
 typedef struct _virNetworkDef virNetworkDef;
@@ -155,7 +155,7 @@ struct _virNetworkDef {
 
     size_t nPortGroups;
     virPortGroupDefPtr portGroups;
-    virBandwidthPtr bandwidth;
+    virNetDevBandwidthPtr bandwidth;
 };
 
 typedef struct _virNetworkObj virNetworkObj;
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index fa8ac93..81de6b4 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -764,13 +764,13 @@ nlComm;
 
 
 # network.h
-virBandwidthCopy;
-virBandwidthDefFormat;
-virBandwidthDefFree;
-virBandwidthDefParseNode;
-virBandwidthDisable;
-virBandwidthEnable;
-virBandwidthEqual;
+virNetDevBandwidthClear;
+virNetDevBandwidthCopy;
+virNetDevBandwidthEqual;
+virNetDevBandwidthFormat;
+virNetDevBandwidthFree;
+virNetDevBandwidthParse;
+virNetDevBandwidthSet;
 virSocketAddrBroadcast;
 virSocketAddrBroadcastByPrefix;
 virSocketAddrCheckNetmask;
diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c
index 5701467..2c1154f 100644
--- a/src/lxc/lxc_driver.c
+++ b/src/lxc/lxc_driver.c
@@ -1275,8 +1275,8 @@ static int lxcSetupInterfaces(virConnectPtr conn,
         if (vethInterfaceUpOrDown(parentVeth, 1) < 0)
             goto error_exit;
 
-        if (virBandwidthEnable(virDomainNetGetActualBandwidth(def->nets[i]),
-                               def->nets[i]->ifname) < 0) {
+        if (virNetDevBandwidthSet(def->nets[i]->ifname,
+                                  virDomainNetGetActualBandwidth(def->nets[i])) < 0) {
             lxcError(VIR_ERR_INTERNAL_ERROR,
                      _("cannot set bandwidth limits on %s"),
                      def->nets[i]->ifname);
diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
index bd8f0b3..d213642 100644
--- a/src/network/bridge_driver.c
+++ b/src/network/bridge_driver.c
@@ -1778,7 +1778,7 @@ networkStartNetworkVirtual(struct network_driver *driver,
     if (v6present && networkStartRadvd(network) < 0)
         goto err4;
 
-    if (virBandwidthEnable(network->def->bandwidth, network->def->bridge) < 0) {
+    if (virNetDevBandwidthSet(network->def->bridge, network->def->bandwidth) < 0) {
         networkReportError(VIR_ERR_INTERNAL_ERROR,
                            _("cannot set bandwidth limits on %s"),
                            network->def->bridge);
@@ -1790,10 +1790,7 @@ networkStartNetworkVirtual(struct network_driver *driver,
     return 0;
 
  err5:
-    if (virBandwidthDisable(network->def->bridge, true) < 0) {
-        VIR_WARN("Failed to disable QoS on %s",
-                 network->def->bridge);
-    }
+    ignore_value(virNetDevBandwidthClear(network->def->bridge));
 
  err4:
     if (!save_err)
@@ -1836,10 +1833,7 @@ networkStartNetworkVirtual(struct network_driver *driver,
 static int networkShutdownNetworkVirtual(struct network_driver *driver,
                                         virNetworkObjPtr network)
 {
-    if (virBandwidthDisable(network->def->bridge, true) < 0) {
-        VIR_WARN("Failed to disable QoS on %s",
-                 network->def->name);
-    }
+    ignore_value(virNetDevBandwidthClear(network->def->bridge));
 
     if (network->radvdPid > 0) {
         char *radvdpidbase;
@@ -2733,10 +2727,9 @@ networkAllocateActualDevice(virDomainNetDefPtr iface)
             goto cleanup;
         }
 
-        if (virBandwidthCopy(&iface->data.network.actual->bandwidth,
-                             portgroup->bandwidth) < 0) {
+        if (virNetDevBandwidthCopy(&iface->data.network.actual->bandwidth,
+                                   portgroup->bandwidth) < 0)
             goto cleanup;
-        }
     }
 
     if ((netdef->forwardType == VIR_NETWORK_FORWARD_NONE) ||
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index fba9ace..11ebb69 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -298,8 +298,8 @@ qemuNetworkIfaceConnect(virDomainDefPtr def,
     }
 
     if (tapfd >= 0 &&
-        virBandwidthEnable(virDomainNetGetActualBandwidth(net),
-                           net->ifname) < 0) {
+        virNetDevBandwidthSet(net->ifname,
+                              virDomainNetGetActualBandwidth(net)) < 0) {
         qemuReportError(VIR_ERR_INTERNAL_ERROR,
                         _("cannot set bandwidth limits on %s"),
                         net->ifname);
diff --git a/src/util/macvtap.c b/src/util/macvtap.c
index 54dc670..cb13d2b 100644
--- a/src/util/macvtap.c
+++ b/src/util/macvtap.c
@@ -271,7 +271,7 @@ openMacvtapTap(const char *tgifname,
                char **res_ifname,
                enum virVMOperationType vmOp,
                char *stateDir,
-               virBandwidthPtr bandwidth)
+               virNetDevBandwidthPtr bandwidth)
 {
     const char *type = "macvtap";
     int c, rc;
@@ -364,7 +364,7 @@ create_name:
     } else
         goto disassociate_exit;
 
-    if (virBandwidthEnable(bandwidth, cr_ifname) < 0) {
+    if (virNetDevBandwidthSet(cr_ifname, bandwidth) < 0) {
         macvtapError(VIR_ERR_INTERNAL_ERROR,
                      _("cannot set bandwidth limits on %s"),
                      cr_ifname);
diff --git a/src/util/macvtap.h b/src/util/macvtap.h
index 2b2d835..330e5e2 100644
--- a/src/util/macvtap.h
+++ b/src/util/macvtap.h
@@ -63,7 +63,7 @@ int openMacvtapTap(const char *ifname,
                    char **res_ifname,
                    enum virVMOperationType vmop,
                    char *stateDir,
-                   virBandwidthPtr bandwidth);
+                   virNetDevBandwidthPtr bandwidth);
 
 void delMacvtap(const char *ifname,
                 const unsigned char *macaddress,
diff --git a/src/util/network.c b/src/util/network.c
index 087df22..1ecbce3 100644
--- a/src/util/network.c
+++ b/src/util/network.c
@@ -17,6 +17,7 @@
 #include "util.h"
 #include "virterror_internal.h"
 #include "command.h"
+#include "ignore-value.h"
 
 #define VIR_FROM_THIS VIR_FROM_NONE
 #define virSocketError(code, ...)                                       \
@@ -918,7 +919,7 @@ virVirtualPortProfileFormat(virBufferPtr buf,
 }
 
 static int
-virBandwidthParseChildDefNode(xmlNodePtr node, virRatePtr rate)
+virNetDevBandwidthParseRate(xmlNodePtr node, virNetDevBandwidthRatePtr rate)
 {
     int ret = -1;
     char *average = NULL;
@@ -973,17 +974,17 @@ cleanup:
 }
 
 /**
- * virBandwidthDefParseNode:
+ * virNetDevBandwidthParse:
  * @node: XML node
  *
  * Parse bandwidth XML and return pointer to structure
  *
  * Returns !NULL on success, NULL on error.
  */
-virBandwidthPtr
-virBandwidthDefParseNode(xmlNodePtr node)
+virNetDevBandwidthPtr
+virNetDevBandwidthParse(xmlNodePtr node)
 {
-    virBandwidthPtr def = NULL;
+    virNetDevBandwidthPtr def = NULL;
     xmlNodePtr cur = node->children;
     xmlNodePtr in = NULL, out = NULL;
 
@@ -1028,7 +1029,7 @@ virBandwidthDefParseNode(xmlNodePtr node)
             goto error;
         }
 
-        if (virBandwidthParseChildDefNode(in, def->in) < 0) {
+        if (virNetDevBandwidthParseRate(in, def->in) < 0) {
             /* helper reported error for us */
             goto error;
         }
@@ -1040,7 +1041,7 @@ virBandwidthDefParseNode(xmlNodePtr node)
             goto error;
         }
 
-        if (virBandwidthParseChildDefNode(out, def->out) < 0) {
+        if (virNetDevBandwidthParseRate(out, def->out) < 0) {
             /* helper reported error for us */
             goto error;
         }
@@ -1049,12 +1050,12 @@ virBandwidthDefParseNode(xmlNodePtr node)
     return def;
 
 error:
-    virBandwidthDefFree(def);
+    virNetDevBandwidthFree(def);
     return NULL;
 }
 
 void
-virBandwidthDefFree(virBandwidthPtr def)
+virNetDevBandwidthFree(virNetDevBandwidthPtr def)
 {
     if (!def)
         return;
@@ -1065,9 +1066,9 @@ virBandwidthDefFree(virBandwidthPtr def)
 }
 
 static int
-virBandwidthChildDefFormat(virBufferPtr buf,
-                           virRatePtr def,
-                           const char *elem_name)
+virNetDevBandwidthRateFormat(virNetDevBandwidthRatePtr def,
+                             virBufferPtr buf,
+                             const char *elem_name)
 {
     if (!buf || !elem_name)
         return -1;
@@ -1090,9 +1091,9 @@ virBandwidthChildDefFormat(virBufferPtr buf,
 }
 
 /**
- * virBandwidthDefFormat:
- * @buf: Buffer to print to
+ * virNetDevBandwidthDefFormat:
  * @def: Data source
+ * @buf: Buffer to print to
  *
  * Formats bandwidth and prepend each line with @indent.
  * @buf may use auto-indentation.
@@ -1100,8 +1101,7 @@ virBandwidthChildDefFormat(virBufferPtr buf,
  * Returns 0 on success, else -1.
  */
 int
-virBandwidthDefFormat(virBufferPtr buf,
-                      virBandwidthPtr def)
+virNetDevBandwidthFormat(virNetDevBandwidthPtr def, virBufferPtr buf)
 {
     int ret = -1;
 
@@ -1114,8 +1114,8 @@ virBandwidthDefFormat(virBufferPtr buf,
     }
 
     virBufferAddLit(buf, "<bandwidth>\n");
-    if (virBandwidthChildDefFormat(buf, def->in, "inbound") < 0 ||
-        virBandwidthChildDefFormat(buf, def->out, "outbound") < 0)
+    if (virNetDevBandwidthRateFormat(def->in, buf, "inbound") < 0 ||
+        virNetDevBandwidthRateFormat(def->out, buf, "outbound") < 0)
         goto cleanup;
     virBufferAddLit(buf, "</bandwidth>\n");
 
@@ -1126,9 +1126,9 @@ cleanup:
 }
 
 /**
- * virBandwidthEnable:
- * @bandwidth: rates to set
- * @iface: on which interface
+ * virNetDevBandwidthSet:
+ * @ifname: on which interface
+ * @bandwidth: rates to set (may be NULL)
  *
  * This function enables QoS on specified interface
  * and set given traffic limits for both, incoming
@@ -1138,8 +1138,8 @@ cleanup:
  * Return 0 on success, -1 otherwise.
  */
 int
-virBandwidthEnable(virBandwidthPtr bandwidth,
-                   const char *iface)
+virNetDevBandwidthSet(const char *ifname,
+                      virNetDevBandwidthPtr bandwidth)
 {
     int ret = -1;
     virCommandPtr cmd = NULL;
@@ -1147,17 +1147,13 @@ virBandwidthEnable(virBandwidthPtr bandwidth,
     char *peak = NULL;
     char *burst = NULL;
 
-    if (!iface)
-        return -1;
-
     if (!bandwidth) {
         /* nothing to be enabled */
         ret = 0;
         goto cleanup;
     }
 
-    if (virBandwidthDisable(iface, true) < 0)
-        goto cleanup;
+    ignore_value(virNetDevBandwidthClear(ifname));
 
     if (bandwidth->in) {
         if (virAsprintf(&average, "%llukbps", bandwidth->in->average) < 0)
@@ -1170,14 +1166,14 @@ virBandwidthEnable(virBandwidthPtr bandwidth,
             goto cleanup;
 
         cmd = virCommandNew(TC);
-        virCommandAddArgList(cmd, "qdisc", "add", "dev", iface, "root",
+        virCommandAddArgList(cmd, "qdisc", "add", "dev", ifname, "root",
                              "handle", "1:", "htb", "default", "1", NULL);
         if (virCommandRun(cmd, NULL) < 0)
             goto cleanup;
 
         virCommandFree(cmd);
         cmd = virCommandNew(TC);
-            virCommandAddArgList(cmd,"class", "add", "dev", iface, "parent",
+            virCommandAddArgList(cmd,"class", "add", "dev", ifname, "parent",
                                  "1:", "classid", "1:1", "htb", NULL);
         virCommandAddArgList(cmd, "rate", average, NULL);
 
@@ -1191,7 +1187,7 @@ virBandwidthEnable(virBandwidthPtr bandwidth,
 
         virCommandFree(cmd);
         cmd = virCommandNew(TC);
-            virCommandAddArgList(cmd,"filter", "add", "dev", iface, "parent",
+            virCommandAddArgList(cmd,"filter", "add", "dev", ifname, "parent",
                                  "1:0", "protocol", "ip", "handle", "1", "fw",
                                  "flowid", "1", NULL);
 
@@ -1212,7 +1208,7 @@ virBandwidthEnable(virBandwidthPtr bandwidth,
 
         virCommandFree(cmd);
         cmd = virCommandNew(TC);
-            virCommandAddArgList(cmd, "qdisc", "add", "dev", iface,
+            virCommandAddArgList(cmd, "qdisc", "add", "dev", ifname,
                                  "ingress", NULL);
 
         if (virCommandRun(cmd, NULL) < 0)
@@ -1220,7 +1216,7 @@ virBandwidthEnable(virBandwidthPtr bandwidth,
 
         virCommandFree(cmd);
         cmd = virCommandNew(TC);
-        virCommandAddArgList(cmd, "filter", "add", "dev", iface, "parent",
+        virCommandAddArgList(cmd, "filter", "add", "dev", ifname, "parent",
                              "ffff:", "protocol", "ip", "u32", "match", "ip",
                              "src", "0.0.0.0/0", "police", "rate", average,
                              "burst", burst, "mtu", burst, "drop", "flowid",
@@ -1241,9 +1237,8 @@ cleanup:
 }
 
 /**
- * virBandwidthDisable:
- * @iface: on which interface
- * @may_fail: should be unsuccessful disable considered fatal?
+ * virNetDevBandwidthClear:
+ * @ifname: on which interface
  *
  * This function tries to disable QoS on specified interface
  * by deleting root and ingress qdisc. However, this may fail
@@ -1252,59 +1247,43 @@ cleanup:
  * Return 0 on success, -1 otherwise.
  */
 int
-virBandwidthDisable(const char *iface,
-                    bool may_fail)
+virNetDevBandwidthClear(const char *ifname)
 {
-    int ret = -1;
-    int status;
+    int ret = 0;
     virCommandPtr cmd = NULL;
 
-    if (!iface)
-        return -1;
-
     cmd = virCommandNew(TC);
-    virCommandAddArgList(cmd, "qdisc", "del", "dev", iface, "root", NULL);
+    virCommandAddArgList(cmd, "qdisc", "del", "dev", ifname, "root", NULL);
 
-    if ((virCommandRun(cmd, &status) < 0) ||
-        (!may_fail && status))
-        goto cleanup;
+    if (virCommandRun(cmd, NULL) < 0)
+        ret = -1;
 
     virCommandFree(cmd);
 
     cmd = virCommandNew(TC);
-    virCommandAddArgList(cmd, "qdisc",  "del", "dev", iface, "ingress", NULL);
-
-    if ((virCommandRun(cmd, &status) < 0) ||
-        (!may_fail && status))
-        goto cleanup;
-
-    ret = 0;
+    virCommandAddArgList(cmd, "qdisc",  "del", "dev", ifname, "ingress", NULL);
 
-cleanup:
+    if (virCommandRun(cmd, NULL) < 0)
+        ret = -1;
     virCommandFree(cmd);
+
     return ret;
 }
 
 /*
- * virBandwidthCopy:
+ * virNetDevBandwidthCopy:
  * @dest: destination
- * @src:  source
+ * @src:  source (may be NULL)
  *
  * Returns -1 on OOM error (which gets reported),
  * 0 otherwise.
  */
 int
-virBandwidthCopy(virBandwidthPtr *dest,
-                 const virBandwidthPtr src)
+virNetDevBandwidthCopy(virNetDevBandwidthPtr *dest,
+                       const virNetDevBandwidthPtr src)
 {
     int ret = -1;
 
-    if (!dest) {
-        virSocketError(VIR_ERR_INVALID_ARG, "%s",
-                       _("invalid argument supplied"));
-        return -1;
-    }
-
     *dest = NULL;
     if (!src) {
         /* nothing to be copied */
@@ -1337,15 +1316,15 @@ virBandwidthCopy(virBandwidthPtr *dest,
 
 cleanup:
     if (ret < 0) {
-        virBandwidthDefFree(*dest);
+        virNetDevBandwidthFree(*dest);
         *dest = NULL;
     }
     return ret;
 }
 
 bool
-virBandwidthEqual(virBandwidthPtr a,
-                  virBandwidthPtr b)
+virNetDevBandwidthEqual(virNetDevBandwidthPtr a,
+                        virNetDevBandwidthPtr b)
 {
         if (!a && !b)
             return true;
diff --git a/src/util/network.h b/src/util/network.h
index a2c68e9..1f3a53f 100644
--- a/src/util/network.h
+++ b/src/util/network.h
@@ -48,19 +48,19 @@ typedef struct {
 
 typedef virSocketAddr *virSocketAddrPtr;
 
-typedef struct {
+typedef struct _virNetDevBandwidthRate virNetDevBandwidthRate;
+typedef virNetDevBandwidthRate *virNetDevBandwidthRatePtr;
+struct _virNetDevBandwidthRate {
     unsigned long long average;  /* kbytes/s */
     unsigned long long peak;     /* kbytes/s */
     unsigned long long burst;    /* kbytes */
-} virRate;
-
-typedef virRate *virRatePtr;
-
-typedef struct {
-    virRatePtr in, out;
-} virBandwidth;
+};
 
-typedef virBandwidth *virBandwidthPtr;
+typedef struct _virNetDevBandwidth virNetDevBandwidth;
+typedef virNetDevBandwidth *virNetDevBandwidthPtr;
+struct _virNetDevBandwidth {
+    virNetDevBandwidthRatePtr in, out;
+};
 
 int virSocketAddrParse(virSocketAddrPtr addr,
                        const char *val,
@@ -152,16 +152,21 @@ virVirtualPortProfileFormat(virBufferPtr buf,
 bool virVirtualPortProfileEqual(virVirtualPortProfileParamsPtr a,
                                 virVirtualPortProfileParamsPtr b);
 
-virBandwidthPtr virBandwidthDefParseNode(xmlNodePtr node);
-void virBandwidthDefFree(virBandwidthPtr def);
-int virBandwidthDefFormat(virBufferPtr buf,
-                          virBandwidthPtr def);
-
-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);
+virNetDevBandwidthPtr virNetDevBandwidthParse(xmlNodePtr node)
+    ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
+void virNetDevBandwidthFree(virNetDevBandwidthPtr def);
+int virNetDevBandwidthFormat(virNetDevBandwidthPtr def,
+                             virBufferPtr buf)
+    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
+
+int virNetDevBandwidthSet(const char *ifname, virNetDevBandwidthPtr bandwidth)
+    ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
+int virNetDevBandwidthClear(const char *ifname)
+    ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
+int virNetDevBandwidthCopy(virNetDevBandwidthPtr *dest, const virNetDevBandwidthPtr src)
+    ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
+
+bool virNetDevBandwidthEqual(virNetDevBandwidthPtr a, virNetDevBandwidthPtr b);
 
 
 #endif /* __VIR_NETWORK_H__ */
diff --git a/tools/virsh.c b/tools/virsh.c
index 5544a41..d8261f7 100644
--- a/tools/virsh.c
+++ b/tools/virsh.c
@@ -11250,7 +11250,7 @@ static const vshCmdOptDef opts_attach_interface[] = {
 /* parse inbound and outbound which are in the format of
  * 'average,peak,burst', in which peak and burst are optional,
  * thus 'average,,burst' and 'average,peak' are also legal. */
-static int parseRateStr(const char *rateStr, virRatePtr rate)
+static int parseRateStr(const char *rateStr, virNetDevBandwidthRatePtr rate)
 {
     const char *average = NULL;
     char *peak = NULL, *burst = NULL;
@@ -11289,7 +11289,7 @@ cmdAttachInterface(vshControl *ctl, const vshCmd *cmd)
     const char *mac = NULL, *target = NULL, *script = NULL,
                 *type = NULL, *source = NULL, *model = NULL,
                 *inboundStr = NULL, *outboundStr = NULL;
-    virRate inbound, outbound;
+    virNetDevBandwidthRate inbound, outbound;
     int typ;
     int ret;
     bool functionReturn = false;
-- 
1.7.6.4




More information about the libvir-list mailing list