The function in question uses "tc" binary so virnetdevbandwidth feels
like better place for it.
Signed-off-by: Pavel Hrdina <phrdina(a)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 34e22d37d6..abd3dc4bd1 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -2714,7 +2714,6 @@ virNetDevSetOnline;
virNetDevSetPromiscuous;
virNetDevSetRcvAllMulti;
virNetDevSetRcvMulti;
-virNetDevSetRootQDisc;
virNetDevSetupControl;
virNetDevSysfsFile;
virNetDevValidateConfig;
@@ -2728,6 +2727,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