[PATCHv2 4/4] qemu: interface: check and use ovs command to set qos of ovs managed port

Michal Prívozník mprivozn at redhat.com
Fri Jul 2 15:46:23 UTC 2021


On 7/1/21 10:42 AM, zhangjl02 wrote:
> From: zhangjl02 <zhangjl02 at inspur.com>
> 
> When qos is set or delete, we have to check if the port is an ovs managed
> port. If true, call the virNetDevOpenvswitchInterfaceSetQos function when qos
> is set, and call the virNetDevOpenvswitchInterfaceClearQos function when
> the interface is to be destroyed.
> ---
>  src/qemu/qemu_command.c | 10 ++++++++--
>  src/qemu/qemu_driver.c  | 22 +++++++++++++++++++++-
>  src/qemu/qemu_hotplug.c | 39 ++++++++++++++++++++++++++++-----------
>  src/qemu/qemu_process.c | 10 ++++++++--
>  4 files changed, 65 insertions(+), 16 deletions(-)
> 
> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
> index ea513693f7..1e9ed592e1 100644
> --- a/src/qemu/qemu_command.c
> +++ b/src/qemu/qemu_command.c
> @@ -8610,8 +8610,14 @@ qemuBuildInterfaceCommandLine(virQEMUDriver *driver,
>      actualBandwidth = virDomainNetGetActualBandwidth(net);
>      if (actualBandwidth) {
>          if (virNetDevSupportsBandwidth(actualType)) {
> -            if (virNetDevBandwidthSet(net->ifname, actualBandwidth, false,
> -                                      !virDomainNetTypeSharesHostView(net)) < 0)
> +            if (virDomainNetDefIsOvsport(net, actualType)) {
> +                if (virNetDevOpenvswitchInterfaceSetQos(net->ifname, actualBandwidth,
> +                                                        def->uuid,
> +                                                        !virDomainNetTypeSharesHostView(net)) < 0)
> +                    goto cleanup;
> +            }
> +            else if (virNetDevBandwidthSet(net->ifname, actualBandwidth, false,
> +                                           !virDomainNetTypeSharesHostView(net)) < 0)
>                  goto cleanup;

Again, we use slightly different style for if-else and curly braces. I'll just paste what I think should be squashed in:

diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 1e9ed592e1..522394bb74 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -8610,15 +8610,15 @@ qemuBuildInterfaceCommandLine(virQEMUDriver *driver,
     actualBandwidth = virDomainNetGetActualBandwidth(net);
     if (actualBandwidth) {
         if (virNetDevSupportsBandwidth(actualType)) {
-            if (virDomainNetDefIsOvsport(net, actualType)) {
+            if (virDomainNetDefIsOvsport(net)) {
                 if (virNetDevOpenvswitchInterfaceSetQos(net->ifname, actualBandwidth,
                                                         def->uuid,
                                                         !virDomainNetTypeSharesHostView(net)) < 0)
                     goto cleanup;
-            }
-            else if (virNetDevBandwidthSet(net->ifname, actualBandwidth, false,
-                                           !virDomainNetTypeSharesHostView(net)) < 0)
+            } else if (virNetDevBandwidthSet(net->ifname, actualBandwidth, false,
+                                             !virDomainNetTypeSharesHostView(net)) < 0) {
                 goto cleanup;
+            }
         } else {
             VIR_WARN("setting bandwidth on interfaces of "
                      "type '%s' is not implemented yet",
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index a6212fed6a..72f550bf8d 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -10278,7 +10278,7 @@ qemuDomainSetInterfaceParameters(virDomainPtr dom,
     if (net) {
         actualType = virDomainNetGetActualType(net);
         qosSupported = virNetDevSupportsBandwidth(actualType);
-        ovsType = virDomainNetDefIsOvsport(net, actualType);
+        ovsType = virDomainNetDefIsOvsport(net);
     }
 
     if (qosSupported && persistentNet) {
@@ -10368,10 +10368,10 @@ qemuDomainSetInterfaceParameters(virDomainPtr dom,
             }
         }
 
-        if (ovsType){
+        if (ovsType) {
             if (virNetDevOpenvswitchInterfaceSetQos(net->ifname, newBandwidth,
                                                     vm->def->uuid,
-                                                    !virDomainNetTypeSharesHostView(net)) < 0){
+                                                    !virDomainNetTypeSharesHostView(net)) < 0) {
                 virErrorPtr orig_err;
 
                 virErrorPreserveLast(&orig_err);
@@ -10385,9 +10385,8 @@ qemuDomainSetInterfaceParameters(virDomainPtr dom,
                 virErrorRestore(&orig_err);
                 goto endjob;
             }
-        }
-        else if (virNetDevBandwidthSet(net->ifname, newBandwidth, false,
-                                  !virDomainNetTypeSharesHostView(net)) < 0) {
+        } else if (virNetDevBandwidthSet(net->ifname, newBandwidth, false,
+                                         !virDomainNetTypeSharesHostView(net)) < 0) {
             virErrorPtr orig_err;
 
             virErrorPreserveLast(&orig_err);
diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
index e900834e3e..cb6a4e4ea5 100644
--- a/src/qemu/qemu_hotplug.c
+++ b/src/qemu/qemu_hotplug.c
@@ -1409,15 +1409,15 @@ qemuDomainAttachNetDevice(virQEMUDriver *driver,
     actualBandwidth = virDomainNetGetActualBandwidth(net);
     if (actualBandwidth) {
         if (virNetDevSupportsBandwidth(actualType)) {
-            if (virDomainNetDefIsOvsport(net, actualType)) {
+            if (virDomainNetDefIsOvsport(net)) {
                 if (virNetDevOpenvswitchInterfaceSetQos(net->ifname, actualBandwidth,
                                                         vm->def->uuid,
                                                         !virDomainNetTypeSharesHostView(net)) < 0)
                     goto cleanup;
+            } else if (virNetDevBandwidthSet(net->ifname, actualBandwidth, false,
+                                             !virDomainNetTypeSharesHostView(net)) < 0) {
+                goto cleanup;
             }
-            else if (virNetDevBandwidthSet(net->ifname, actualBandwidth, false,
-                                  !virDomainNetTypeSharesHostView(net)) < 0)
-            goto cleanup;
         } else {
             VIR_WARN("setting bandwidth on interfaces of "
                      "type '%s' is not implemented yet",
@@ -3920,15 +3920,15 @@ qemuDomainChangeNet(virQEMUDriver *driver,
         const virNetDevBandwidth *newb = virDomainNetGetActualBandwidth(newdev);
 
         if (newb) {
-            if (virDomainNetDefIsOvsport(newdev, newType)) {
+            if (virDomainNetDefIsOvsport(newdev)) {
                 if (virNetDevOpenvswitchInterfaceSetQos(newdev->ifname, newb,
                                                         vm->def->uuid,
                                                         !virDomainNetTypeSharesHostView(newdev)) < 0)
                     goto cleanup;
+            } else if (virNetDevBandwidthSet(newdev->ifname, newb, false,
+                                             !virDomainNetTypeSharesHostView(newdev)) < 0) {
+                goto cleanup;
             }
-            else if (virNetDevBandwidthSet(newdev->ifname, newb, false,
-                                  !virDomainNetTypeSharesHostView(newdev)) < 0)
-            goto cleanup;
         } else {
             /*
              * virNetDevBandwidthSet() doesn't clear any existing
@@ -4677,15 +4677,15 @@ qemuDomainRemoveNetDevice(virQEMUDriver *driver,
     if (!(charDevAlias = qemuAliasChardevFromDevAlias(net->info.alias)))
         return -1;
 
-    if (virNetDevSupportsBandwidth(virDomainNetGetActualType(net))){
-        if (virDomainNetDefIsOvsport(net, actualType)) {
+    if (virNetDevSupportsBandwidth(virDomainNetGetActualType(net))) {
+        if (virDomainNetDefIsOvsport(net)) {
             if (virNetDevOpenvswitchInterfaceClearQos(net->ifname, vm->def->uuid) < 0)
                 VIR_WARN("cannot clear bandwidth setting for ovs device : %s",
                          net->ifname);
-        }
-        else if (virNetDevBandwidthClear(net->ifname) < 0)
+        } else if (virNetDevBandwidthClear(net->ifname) < 0) {
             VIR_WARN("cannot clear bandwidth setting for device : %s",
                      net->ifname);
+        }
     }
 
     /* deactivate the tap/macvtap device on the host, which could also
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index 95cdf232ef..3693796b06 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -7818,7 +7818,6 @@ void qemuProcessStop(virQEMUDriver *driver,
     g_autofree char *timestamp = NULL;
     g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
     g_autoptr(virConnect) conn = NULL;
-    int actualType;
 
     VIR_DEBUG("Shutting down vm=%p name=%s id=%d pid=%lld, "
               "reason=%s, asyncJob=%s, flags=0x%x",
@@ -7967,8 +7966,7 @@ void qemuProcessStop(virQEMUDriver *driver,
     for (i = 0; i < def->nnets; i++) {
         virDomainNetDef *net = def->nets[i];
         vport = virDomainNetGetActualVirtPortProfile(net);
-        actualType = virDomainNetGetActualType(net);
-        switch (actualType) {
+        switch (virDomainNetGetActualType(net)) {
         case VIR_DOMAIN_NET_TYPE_DIRECT:
             ignore_value(virNetDevMacVLanDeleteWithVPortProfile(
                              net->ifname, &net->mac,
@@ -8024,10 +8022,11 @@ void qemuProcessStop(virQEMUDriver *driver,
             else
                 VIR_WARN("Unable to release network device '%s'", NULLSTR(net->ifname));
         }
-        if (virDomainNetDefIsOvsport(net, actualType)) {
-            if (virNetDevOpenvswitchInterfaceClearQos(net->ifname, vm->def->uuid) < 0)
-                VIR_WARN("cannot clear bandwidth setting for ovs device : %s",
-                         net->ifname);
+
+        if (virDomainNetDefIsOvsport(net) &&
+            virNetDevOpenvswitchInterfaceClearQos(net->ifname, vm->def->uuid) < 0) {
+            VIR_WARN("cannot clear bandwidth setting for ovs device : %s",
+                     net->ifname);
         }
     }
 
Michal




More information about the libvir-list mailing list