[libvirt PATCH 09/17] virnetdev: move virNetDevSetRootQDisc to virnetdevbandwidth

Pavel Hrdina phrdina at redhat.com
Fri Apr 16 19:12:38 UTC 2021


The function in question uses "tc" binary so virnetdevbandwidth feels
like better place for it.

Signed-off-by: Pavel Hrdina <phrdina at redhat.com>
---
 src/libvirt_private.syms      |  2 +-
 src/qemu/qemu_domain.c        |  3 ++-
 src/util/virnetdev.c          | 46 --------------------------------
 src/util/virnetdev.h          |  4 ---
 src/util/virnetdevbandwidth.c | 50 +++++++++++++++++++++++++++++++++++
 src/util/virnetdevbandwidth.h |  4 +++
 tests/qemuxml2argvmock.c      |  5 ++--
 7 files changed, 60 insertions(+), 54 deletions(-)

diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 912c328821..d507a858ac 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -2713,7 +2713,6 @@ virNetDevSetOnline;
 virNetDevSetPromiscuous;
 virNetDevSetRcvAllMulti;
 virNetDevSetRcvMulti;
-virNetDevSetRootQDisc;
 virNetDevSetupControl;
 virNetDevSysfsFile;
 virNetDevValidateConfig;
@@ -2727,6 +2726,7 @@ virNetDevBandwidthEqual;
 virNetDevBandwidthFree;
 virNetDevBandwidthPlug;
 virNetDevBandwidthSet;
+virNetDevBandwidthSetRootQDisc;
 virNetDevBandwidthUnplug;
 virNetDevBandwidthUpdateFilter;
 virNetDevBandwidthUpdateRate;
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 2c8ea39840..6e3e3555c7 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -50,6 +50,7 @@
 #include "domain_event.h"
 #include "domain_validate.h"
 #include "virtime.h"
+#include "virnetdevbandwidth.h"
 #include "virnetdevopenvswitch.h"
 #include "virstoragefile.h"
 #include "storage_source.h"
@@ -11571,7 +11572,7 @@ qemuDomainInterfaceSetDefaultQDisc(virQEMUDriver *driver,
         actualType == VIR_DOMAIN_NET_TYPE_NETWORK ||
         actualType == VIR_DOMAIN_NET_TYPE_BRIDGE ||
         actualType == VIR_DOMAIN_NET_TYPE_DIRECT) {
-        if (virNetDevSetRootQDisc(net->ifname, "noqueue") < 0)
+        if (virNetDevBandwidthSetRootQDisc(net->ifname, "noqueue") < 0)
             return -1;
     }
 
diff --git a/src/util/virnetdev.c b/src/util/virnetdev.c
index 86abdc2e5b..1870f3f875 100644
--- a/src/util/virnetdev.c
+++ b/src/util/virnetdev.c
@@ -3507,52 +3507,6 @@ virNetDevRunEthernetScript(const char *ifname, const char *script)
 }
 
 
-/**
- * virNetDevSetRootQDisc:
- * @ifname: the interface name
- * @qdisc: queueing discipline to set
- *
- * For given interface @ifname set its root queueing discipline
- * to @qdisc. This can be used to replace the default qdisc
- * (usually pfifo_fast or whatever is set in
- * /proc/sys/net/core/default_qdisc) with different qdisc.
- *
- * Returns: 0 on success,
- *         -1 if failed to exec tc (with error reported)
- *         -2 if tc failed (with no error reported)
- */
-int
-virNetDevSetRootQDisc(const char *ifname,
-                      const char *qdisc)
-{
-    g_autoptr(virCommand) cmd = NULL;
-    g_autofree char *outbuf = NULL;
-    g_autofree char *errbuf = NULL;
-    int status;
-
-    /* Ideally, we would have a netlink implementation and just
-     * call it here.  But honestly, I tried and failed miserably.
-     * Fallback to spawning tc. */
-    cmd = virCommandNewArgList(TC, "qdisc", "add", "dev", ifname,
-                               "root", "handle", "0:", qdisc,
-                               NULL);
-
-    virCommandAddEnvString(cmd, "LC_ALL=C");
-    virCommandSetOutputBuffer(cmd, &outbuf);
-    virCommandSetErrorBuffer(cmd, &errbuf);
-
-    if (virCommandRun(cmd, &status) < 0)
-        return -1;
-
-    if (status != 0) {
-        VIR_DEBUG("Setting qdisc failed: output='%s' err='%s'", outbuf, errbuf);
-        return -2;
-    }
-
-    return 0;
-}
-
-
 /**
  * virNetDevReserveName:
  * @name: name of an existing network device
diff --git a/src/util/virnetdev.h b/src/util/virnetdev.h
index 1f03d88293..b694f4ac35 100644
--- a/src/util/virnetdev.h
+++ b/src/util/virnetdev.h
@@ -333,10 +333,6 @@ int virNetDevSysfsFile(char **pf_sysfs_device_link,
 int virNetDevRunEthernetScript(const char *ifname, const char *script)
     G_GNUC_NO_INLINE;
 
-int virNetDevSetRootQDisc(const char *ifname,
-                          const char *qdisc)
-    G_GNUC_NO_INLINE;
-
 int virNetDevVFInterfaceStats(virPCIDeviceAddress *vfAddr,
                               virDomainInterfaceStatsPtr stats)
 ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
diff --git a/src/util/virnetdevbandwidth.c b/src/util/virnetdevbandwidth.c
index 0fc802b174..75fc5607ad 100644
--- a/src/util/virnetdevbandwidth.c
+++ b/src/util/virnetdevbandwidth.c
@@ -23,11 +23,14 @@
 #include "vircommand.h"
 #include "viralloc.h"
 #include "virerror.h"
+#include "virlog.h"
 #include "virstring.h"
 #include "virutil.h"
 
 #define VIR_FROM_THIS VIR_FROM_NONE
 
+VIR_LOG_INIT("util.netdevbandwidth");
+
 void
 virNetDevBandwidthFree(virNetDevBandwidth *def)
 {
@@ -749,3 +752,50 @@ virNetDevBandwidthUpdateFilter(const char *ifname,
     VIR_FREE(class_id);
     return ret;
 }
+
+
+
+/**
+ * virNetDevBandwidthSetRootQDisc:
+ * @ifname: the interface name
+ * @qdisc: queueing discipline to set
+ *
+ * For given interface @ifname set its root queueing discipline
+ * to @qdisc. This can be used to replace the default qdisc
+ * (usually pfifo_fast or whatever is set in
+ * /proc/sys/net/core/default_qdisc) with different qdisc.
+ *
+ * Returns: 0 on success,
+ *         -1 if failed to exec tc (with error reported)
+ *         -2 if tc failed (with no error reported)
+ */
+int
+virNetDevBandwidthSetRootQDisc(const char *ifname,
+                               const char *qdisc)
+{
+    g_autoptr(virCommand) cmd = NULL;
+    g_autofree char *outbuf = NULL;
+    g_autofree char *errbuf = NULL;
+    int status;
+
+    /* Ideally, we would have a netlink implementation and just
+     * call it here.  But honestly, I tried and failed miserably.
+     * Fallback to spawning tc. */
+    cmd = virCommandNewArgList(TC, "qdisc", "add", "dev", ifname,
+                               "root", "handle", "0:", qdisc,
+                               NULL);
+
+    virCommandAddEnvString(cmd, "LC_ALL=C");
+    virCommandSetOutputBuffer(cmd, &outbuf);
+    virCommandSetErrorBuffer(cmd, &errbuf);
+
+    if (virCommandRun(cmd, &status) < 0)
+        return -1;
+
+    if (status != 0) {
+        VIR_DEBUG("Setting qdisc failed: output='%s' err='%s'", outbuf, errbuf);
+        return -2;
+    }
+
+    return 0;
+}
diff --git a/src/util/virnetdevbandwidth.h b/src/util/virnetdevbandwidth.h
index 35e26b66f7..3d520721f6 100644
--- a/src/util/virnetdevbandwidth.h
+++ b/src/util/virnetdevbandwidth.h
@@ -74,3 +74,7 @@ int virNetDevBandwidthUpdateFilter(const char *ifname,
                                    unsigned int id)
     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2)
     G_GNUC_WARN_UNUSED_RESULT;
+
+int virNetDevBandwidthSetRootQDisc(const char *ifname,
+                                   const char *qdisc)
+    G_GNUC_NO_INLINE;
diff --git a/tests/qemuxml2argvmock.c b/tests/qemuxml2argvmock.c
index 9d812bfc2e..77a0814c08 100644
--- a/tests/qemuxml2argvmock.c
+++ b/tests/qemuxml2argvmock.c
@@ -25,6 +25,7 @@
 #include "virmock.h"
 #include "virlog.h"
 #include "virnetdev.h"
+#include "virnetdevbandwidth.h"
 #include "virnetdevip.h"
 #include "virnetdevtap.h"
 #include "virnetdevopenvswitch.h"
@@ -277,8 +278,8 @@ qemuBuildTPMOpenBackendFDs(const char *tpmdev G_GNUC_UNUSED,
 
 
 int
-virNetDevSetRootQDisc(const char *ifname G_GNUC_UNUSED,
-                      const char *qdisc G_GNUC_UNUSED)
+virNetDevBandwidthSetRootQDisc(const char *ifname G_GNUC_UNUSED,
+                               const char *qdisc G_GNUC_UNUSED)
 {
     return 0;
 }
-- 
2.30.2




More information about the libvir-list mailing list