[libvirt] [PATCH-RFC] qemu: Add network bandwidth setting for ethernet interfaces

Anirban Chakraborty abchak at juniper.net
Thu Sep 4 22:02:54 UTC 2014


ethernet interfaces in libvirt currently do not support bandwidth setting.
For example, following xml file for an interface will not apply these
settings to corresponding qdiscs.

----
    <interface type="ethernet">
      <mac address="02:36:1d:18:2a:e4"/>
      <model type="virtio"/>
      <script path=""/>
      <target dev="tap361d182a-e4"/>
      <bandwidth>
        <inbound average="984" peak="1024" burst="64"/>
        <outbound average="2000" peak="2048" burst="128"/>
      </bandwidth>
    </interface>
-----

This patch fixes the behavior. Please review it and if it appears ok,
please apply.

thanks,
Anirban Chakraborty


Signed-off-by: Anirban Chakraborty <abchak at juniper.net>
---
 src/qemu/qemu_command.c | 5 +++++
 src/qemu/qemu_hotplug.c | 3 +++
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 2184caa..258c6a7 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -7251,6 +7251,11 @@ qemuBuildInterfaceCommandLine(virCommandPtr cmd,
         if (tapfd[0] < 0)
             goto cleanup;
     }
+	/* Configure network bandwidth for ethernet type network interfaces */
+	if (actualType == VIR_DOMAIN_NET_TYPE_ETHERNET)
+		if (virNetDevBandwidthSet(net->ifname,
+			virDomainNetGetActualBandwidth(net), false) < 0)
+			goto cleanup;

     if ((actualType == VIR_DOMAIN_NET_TYPE_NETWORK ||
          actualType == VIR_DOMAIN_NET_TYPE_BRIDGE ||
diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
index a364c52..aeb53c5 100644
--- a/src/qemu/qemu_hotplug.c
+++ b/src/qemu/qemu_hotplug.c
@@ -940,6 +940,9 @@ int qemuDomainAttachNetDevice(virConnectPtr conn,
         if (qemuOpenVhostNet(vm->def, net, priv->qemuCaps, vhostfd, &vhostfdSize) < 0)
             goto cleanup;
     } else if (actualType == VIR_DOMAIN_NET_TYPE_ETHERNET) {
+		if (virNetDevBandwidthSet(net->ifname,
+				virDomainNetGetActualBandwidth(net), false) < 0)
+			goto cleanup;
         vhostfdSize = 1;
         if (VIR_ALLOC(vhostfd) < 0)
             goto cleanup;
-- 
1.8.2.3




More information about the libvir-list mailing list