char *next;
char *saveptr = NULL;
enum {
- AVERAGE, PEAK, BURST
+ AVERAGE, PEAK, BURST, FLOOR
} state;
int ret = -1;
next = vshStrdup(ctl, rateStr);
- for (state = AVERAGE; state <= BURST; state++) {
+ for (state = AVERAGE; state <= FLOOR; state++) {
unsigned long long *tmp;
const char *field_name;
tmp = &rate->burst;
field_name = "burst";
break;
+
+ case FLOOR:
+ tmp = &rate->floor;
+ field_name = "floor";
+ break;
}
if (virStrToLong_ullp(token, NULL, 10, tmp) < 0) {
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;
}
}
vshError(ctl, _("outbound average is mandatory"));
goto cleanup;
}
+ if (outbound.floor) {
+ vshError(ctl, _("outbound floor is unsupported yet"));
+ goto cleanup;
+ }
}
/* Make XML of interface */
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;
}
VIR_DOMAIN_BANDWIDTH_IN_BURST,
inbound.burst) < 0)
goto save_error;
+
+ if (inbound.floor &&
+ virTypedParamsAddUInt(¶ms, &nparams, &maxparams,
+ VIR_DOMAIN_BANDWIDTH_IN_FLOOR,
+ inbound.floor) < 0)
+ goto save_error;
}
if (outboundStr) {
goto cleanup;
}
+ if (outbound.floor) {
+ vshError(ctl, _("outbound floor is unsupported yet"));
+ goto cleanup;
+ }
+
if (virTypedParamsAddUInt(¶ms, &nparams, &maxparams,
VIR_DOMAIN_BANDWIDTH_OUT_AVERAGE,
outbound.average) < 0)
=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.
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>
=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
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.