]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
virnetdevopenvswitch: Introduce virNetDevOpenvswitchInterfaceClearTxQos and virNetDev...
authorJinsheng Zhang <zhangjl02@inspur.com>
Tue, 17 Aug 2021 04:38:14 +0000 (12:38 +0800)
committerMichal Privoznik <mprivozn@redhat.com>
Thu, 19 Aug 2021 14:47:38 +0000 (16:47 +0200)
Separate virNetDevOpenvswitchInterfaceClearQos into two steps. When setting
qos, we can set only rx or tx and the other one should be cleared.

Signed-off-by: zhangjl02 <zhangjl02@inspur.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/libvirt_private.syms
src/util/virnetdevopenvswitch.c
src/util/virnetdevopenvswitch.h

index fcb02c21b17923fe33ab83d938ecb9852c453636..090ac80691cbd92faf1e9a220d6e2aec339005ff 100644 (file)
@@ -2817,6 +2817,8 @@ virNetDevOpenvswitchAddPort;
 virNetDevOpenvswitchGetMigrateData;
 virNetDevOpenvswitchGetVhostuserIfname;
 virNetDevOpenvswitchInterfaceClearQos;
+virNetDevOpenvswitchInterfaceClearRxQos;
+virNetDevOpenvswitchInterfaceClearTxQos;
 virNetDevOpenvswitchInterfaceGetMaster;
 virNetDevOpenvswitchInterfaceParseStats;
 virNetDevOpenvswitchInterfaceSetQos;
index 039cd28c4fad1a90896ce7ecb050e09e941a968f..8a89b717e7dc28974cf50fda924d3cc92b934334 100644 (file)
@@ -789,6 +789,10 @@ virNetDevOpenvswitchInterfaceSetQos(const char *ifname,
                 return -1;
             }
         }
+    } else {
+        if (virNetDevOpenvswitchInterfaceClearTxQos(ifname, vmuuid) < 0) {
+            VIR_WARN("Clean tx qos for interface %s failed", ifname);
+        }
     }
 
     if (rx) {
@@ -807,14 +811,18 @@ virNetDevOpenvswitchInterfaceSetQos(const char *ifname,
                            _("Unable to set vlan configuration on port %s"), ifname);
             return -1;
         }
+    } else {
+        if (virNetDevOpenvswitchInterfaceClearRxQos(ifname) < 0) {
+            VIR_WARN("Clean rx qos for interface %s failed", ifname);
+        }
     }
 
     return 0;
 }
 
 int
-virNetDevOpenvswitchInterfaceClearQos(const char *ifname,
-                                      const unsigned char *vmuuid)
+virNetDevOpenvswitchInterfaceClearTxQos(const char *ifname,
+                                        const unsigned char *vmuuid)
 {
     char vmuuidstr[VIR_UUID_STRING_BUFLEN];
     g_autoptr(virCommand) cmd = NULL;
@@ -891,3 +899,41 @@ virNetDevOpenvswitchInterfaceClearQos(const char *ifname,
 
     return 0;
 }
+
+int
+virNetDevOpenvswitchInterfaceClearRxQos(const char *ifname)
+{
+    g_autoptr(virCommand) cmd = NULL;
+
+    cmd = virNetDevOpenvswitchCreateCmd();
+    virCommandAddArgList(cmd, "set", "Interface", ifname, NULL);
+    virCommandAddArgFormat(cmd, "ingress_policing_rate=%llu", 0llu);
+    virCommandAddArgFormat(cmd, "ingress_policing_burst=%llu", 0llu);
+
+    if (virCommandRun(cmd, NULL) < 0) {
+        virReportError(VIR_ERR_INTERNAL_ERROR,
+                       _("Unable to set vlan configuration on port %s"), ifname);
+        return -1;
+    }
+
+    return 0;
+}
+
+int
+virNetDevOpenvswitchInterfaceClearQos(const char *ifname,
+                                      const unsigned char *vmuuid)
+{
+    int ret = 0;
+
+    if (virNetDevOpenvswitchInterfaceClearTxQos(ifname, vmuuid) < 0) {
+        VIR_WARN("Clean tx qos for interface %s failed", ifname);
+        ret = -1;
+    }
+
+    if (virNetDevOpenvswitchInterfaceClearRxQos(ifname) < 0) {
+        VIR_WARN("Clean rx qos for interface %s failed", ifname);
+        ret = -1;
+    }
+
+    return ret;
+}
index b16c8fe318296f99680e872ccdb89a459b9d2569..4478f2bb3747c9243dd60bdd185880bcc93b9366 100644 (file)
@@ -80,3 +80,10 @@ int virNetDevOpenvswitchInterfaceSetQos(const char *ifname,
 int virNetDevOpenvswitchInterfaceClearQos(const char *ifname,
                                           const unsigned char *vmuuid)
     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) G_GNUC_WARN_UNUSED_RESULT;
+
+int virNetDevOpenvswitchInterfaceClearRxQos(const char *ifname)
+ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) G_GNUC_WARN_UNUSED_RESULT;
+
+int virNetDevOpenvswitchInterfaceClearTxQos(const char *ifname,
+                                                    const unsigned char *vmid)
+ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) G_GNUC_WARN_UNUSED_RESULT;