]> xenbits.xensource.com Git - libvirt.git/commitdiff
virsh: Implement VIR_DOMAIN_BANDWIDTH_IN_FLOOR
authorMichal Privoznik <mprivozn@redhat.com>
Sat, 1 Aug 2015 07:48:04 +0000 (09:48 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Tue, 11 Aug 2015 14:10:32 +0000 (16:10 +0200)
We have a function parseRateStr() that parses --inbound and
--outbound arguments to both attach-interface and domiftune.
Now that we have all virTypedParams macros needed for QoS,
lets parse even floor attribute. The extended format for the
arguments looks like this then:

  --inbound average[,peak[,burst[,floor]]]

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
tools/virsh-domain.c
tools/virsh.pod

index 95a998714b61a344aaa1fb81898b783fc8f3cf82..a95783664243e1a0f2d3b218203f7b74f32709be 100644 (file)
@@ -873,7 +873,7 @@ static int parseRateStr(vshControl *ctl,
     char *next;
     char *saveptr = NULL;
     enum {
-        AVERAGE, PEAK, BURST
+        AVERAGE, PEAK, BURST, FLOOR
     } state;
     int ret = -1;
 
@@ -882,7 +882,7 @@ static int parseRateStr(vshControl *ctl,
 
     next = vshStrdup(ctl, rateStr);
 
-    for (state = AVERAGE; state <= BURST; state++) {
+    for (state = AVERAGE; state <= FLOOR; state++) {
         unsigned long long *tmp;
         const char *field_name;
 
@@ -905,6 +905,11 @@ static int parseRateStr(vshControl *ctl,
             tmp = &rate->burst;
             field_name = "burst";
             break;
+
+        case FLOOR:
+            tmp = &rate->floor;
+            field_name = "floor";
+            break;
         }
 
         if (virStrToLong_ullp(token, NULL, 10, tmp) < 0) {
@@ -976,8 +981,8 @@ cmdAttachInterface(vshControl *ctl, const vshCmd *cmd)
         memset(&inbound, 0, sizeof(inbound));
         if (parseRateStr(ctl, inboundStr, &inbound) < 0)
             goto cleanup;
-        if (inbound.average == 0) {
-            vshError(ctl, _("inbound average is mandatory"));
+        if (!inbound.average && !inbound.floor) {
+            vshError(ctl, _("either inbound average or floor is mandatory"));
             goto cleanup;
         }
     }
@@ -989,6 +994,10 @@ cmdAttachInterface(vshControl *ctl, const vshCmd *cmd)
             vshError(ctl, _("outbound average is mandatory"));
             goto cleanup;
         }
+        if (outbound.floor) {
+            vshError(ctl, _("outbound floor is unsupported yet"));
+            goto cleanup;
+        }
     }
 
     /* Make XML of interface */
@@ -3308,8 +3317,10 @@ cmdDomIftune(vshControl *ctl, const vshCmd *cmd)
                      UINT_MAX);
             goto cleanup;
         }
-        if (inbound.average == 0 && (inbound.burst || inbound.peak)) {
-            vshError(ctl, _("inbound average is mandatory"));
+
+        if ((!inbound.average && (inbound.burst || inbound.peak)) &&
+            !inbound.floor) {
+            vshError(ctl, _("either inbound average or floor is mandatory"));
             goto cleanup;
         }
 
@@ -3329,6 +3340,12 @@ cmdDomIftune(vshControl *ctl, const vshCmd *cmd)
                                   VIR_DOMAIN_BANDWIDTH_IN_BURST,
                                   inbound.burst) < 0)
             goto save_error;
+
+        if (inbound.floor &&
+            virTypedParamsAddUInt(&params, &nparams, &maxparams,
+                                  VIR_DOMAIN_BANDWIDTH_IN_FLOOR,
+                                  inbound.floor) < 0)
+            goto save_error;
     }
 
     if (outboundStr) {
@@ -3345,6 +3362,11 @@ cmdDomIftune(vshControl *ctl, const vshCmd *cmd)
             goto cleanup;
         }
 
+        if (outbound.floor) {
+            vshError(ctl, _("outbound floor is unsupported yet"));
+            goto cleanup;
+        }
+
         if (virTypedParamsAddUInt(&params, &nparams, &maxparams,
                                   VIR_DOMAIN_BANDWIDTH_OUT_AVERAGE,
                                   outbound.average) < 0)
index 5ee9a966ef023a193f6c95ffdb3c8449d6f334da..07e6ba739f5d90a2f03836ea71d7b077f8a27f80 100644 (file)
@@ -770,7 +770,7 @@ I<interface-device> can be the interface's target name or the MAC address.
 
 =item B<domiftune> I<domain> I<interface-device>
 [[I<--config>] [I<--live>] | [I<--current>]]
-[I<--inbound average,peak,burst>]
+[I<--inbound average,peak,burst,floor>]
 [I<--outbound average,peak,burst>]
 
 Set or query the domain's network interface's bandwidth parameters.
@@ -779,10 +779,10 @@ or the MAC address.
 
 If no I<--inbound> or I<--outbound> is specified, this command will
 query and show the bandwidth settings. Otherwise, it will set the
-inbound or outbound bandwidth. I<average,peak,burst> is the same as
-in command I<attach-interface>.  Values for I<average> and I<peak> are
-expressed in kilobytes per second, while I<burst> is expressed in kilobytes
-in a single burst at -I<peak> speed as described in the Network XML
+inbound or outbound bandwidth. I<average,peak,burst,floor> is the same as
+in command I<attach-interface>.  Values for I<average>, I<peak> and I<floor>
+are expressed in kilobytes per second, while I<burst> is expressed in kilobytes
+in a single burst at I<peak> speed as described in the Network XML
 documentation at L<http://libvirt.org/formatnetwork.html#elementQoS>.
 
 To clear inbound or outbound settings, use I<--inbound> or I<--outbound>
@@ -2499,7 +2499,7 @@ Likewise, I<--shareable> is an alias for I<--mode shareable>.
 =item B<attach-interface> I<domain> I<type> I<source>
 [[[I<--live>] [I<--config>] | [I<--current>]] | [I<--persistent>]]
 [I<--target target>] [I<--mac mac>] [I<--script script>] [I<--model model>]
-[I<--inbound average,peak,burst>] [I<--outbound average,peak,burst>]
+[I<--inbound average,peak,burst,floor>] [I<--outbound average,peak,burst>]
 
 Attach a new network interface to the domain.  I<type> can be
 I<network> to indicate connection via a libvirt virtual network, or
@@ -2520,11 +2520,13 @@ instead of the default script not in addition to it; --script is valid
 only for interfaces of type I<bridge> and only for Xen domains.
 I<model> specifies the network device model to be presented to the
 domain.  I<inbound> and I<outbound> control the bandwidth of the
-interface.  I<peak> and I<burst> are optional, so "average,peak",
-"average,,burst" and "average" are also legal. Values for I<average>
-and I<peak> are expressed in kilobytes per second, while I<burst> is
-expressed in kilobytes in a single burst at -I<peak> speed as
-described in the Network XML documentation at
+interface. At least one from the I<average>, I<floor> pair must be
+specified. The other two I<peak> and I<burst> are optional, so
+"average,peak", "average,,burst", "average,,,floor", "average" and
+",,,floor" are also legal. Values for I<average>, I<floor> and I<peak>
+are expressed in kilobytes per second, while I<burst> is expressed in
+kilobytes in a single burst at I<peak> speed as described in the
+Network XML documentation at
 L<http://libvirt.org/formatnetwork.html#elementQoS>.
 
 If I<--live> is specified, affect a running domain.