mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-08-05 08:23:48 +00:00
virsh: Implement VIR_DOMAIN_BANDWIDTH_IN_FLOOR
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>
This commit is contained in:
parent
55d0e859fd
commit
d7f5c88961
@ -873,7 +873,7 @@ static int parseRateStr(vshControl *ctl,
|
|||||||
char *next;
|
char *next;
|
||||||
char *saveptr = NULL;
|
char *saveptr = NULL;
|
||||||
enum {
|
enum {
|
||||||
AVERAGE, PEAK, BURST
|
AVERAGE, PEAK, BURST, FLOOR
|
||||||
} state;
|
} state;
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
|
|
||||||
@ -882,7 +882,7 @@ static int parseRateStr(vshControl *ctl,
|
|||||||
|
|
||||||
next = vshStrdup(ctl, rateStr);
|
next = vshStrdup(ctl, rateStr);
|
||||||
|
|
||||||
for (state = AVERAGE; state <= BURST; state++) {
|
for (state = AVERAGE; state <= FLOOR; state++) {
|
||||||
unsigned long long *tmp;
|
unsigned long long *tmp;
|
||||||
const char *field_name;
|
const char *field_name;
|
||||||
|
|
||||||
@ -905,6 +905,11 @@ static int parseRateStr(vshControl *ctl,
|
|||||||
tmp = &rate->burst;
|
tmp = &rate->burst;
|
||||||
field_name = "burst";
|
field_name = "burst";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case FLOOR:
|
||||||
|
tmp = &rate->floor;
|
||||||
|
field_name = "floor";
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (virStrToLong_ullp(token, NULL, 10, tmp) < 0) {
|
if (virStrToLong_ullp(token, NULL, 10, tmp) < 0) {
|
||||||
@ -976,8 +981,8 @@ cmdAttachInterface(vshControl *ctl, const vshCmd *cmd)
|
|||||||
memset(&inbound, 0, sizeof(inbound));
|
memset(&inbound, 0, sizeof(inbound));
|
||||||
if (parseRateStr(ctl, inboundStr, &inbound) < 0)
|
if (parseRateStr(ctl, inboundStr, &inbound) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
if (inbound.average == 0) {
|
if (!inbound.average && !inbound.floor) {
|
||||||
vshError(ctl, _("inbound average is mandatory"));
|
vshError(ctl, _("either inbound average or floor is mandatory"));
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -989,6 +994,10 @@ cmdAttachInterface(vshControl *ctl, const vshCmd *cmd)
|
|||||||
vshError(ctl, _("outbound average is mandatory"));
|
vshError(ctl, _("outbound average is mandatory"));
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
if (outbound.floor) {
|
||||||
|
vshError(ctl, _("outbound floor is unsupported yet"));
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Make XML of interface */
|
/* Make XML of interface */
|
||||||
@ -3308,8 +3317,10 @@ cmdDomIftune(vshControl *ctl, const vshCmd *cmd)
|
|||||||
UINT_MAX);
|
UINT_MAX);
|
||||||
goto cleanup;
|
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;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3329,6 +3340,12 @@ cmdDomIftune(vshControl *ctl, const vshCmd *cmd)
|
|||||||
VIR_DOMAIN_BANDWIDTH_IN_BURST,
|
VIR_DOMAIN_BANDWIDTH_IN_BURST,
|
||||||
inbound.burst) < 0)
|
inbound.burst) < 0)
|
||||||
goto save_error;
|
goto save_error;
|
||||||
|
|
||||||
|
if (inbound.floor &&
|
||||||
|
virTypedParamsAddUInt(¶ms, &nparams, &maxparams,
|
||||||
|
VIR_DOMAIN_BANDWIDTH_IN_FLOOR,
|
||||||
|
inbound.floor) < 0)
|
||||||
|
goto save_error;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (outboundStr) {
|
if (outboundStr) {
|
||||||
@ -3345,6 +3362,11 @@ cmdDomIftune(vshControl *ctl, const vshCmd *cmd)
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (outbound.floor) {
|
||||||
|
vshError(ctl, _("outbound floor is unsupported yet"));
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
if (virTypedParamsAddUInt(¶ms, &nparams, &maxparams,
|
if (virTypedParamsAddUInt(¶ms, &nparams, &maxparams,
|
||||||
VIR_DOMAIN_BANDWIDTH_OUT_AVERAGE,
|
VIR_DOMAIN_BANDWIDTH_OUT_AVERAGE,
|
||||||
outbound.average) < 0)
|
outbound.average) < 0)
|
||||||
|
@ -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>
|
=item B<domiftune> I<domain> I<interface-device>
|
||||||
[[I<--config>] [I<--live>] | [I<--current>]]
|
[[I<--config>] [I<--live>] | [I<--current>]]
|
||||||
[I<--inbound average,peak,burst>]
|
[I<--inbound average,peak,burst,floor>]
|
||||||
[I<--outbound average,peak,burst>]
|
[I<--outbound average,peak,burst>]
|
||||||
|
|
||||||
Set or query the domain's network interface's bandwidth parameters.
|
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
|
If no I<--inbound> or I<--outbound> is specified, this command will
|
||||||
query and show the bandwidth settings. Otherwise, it will set the
|
query and show the bandwidth settings. Otherwise, it will set the
|
||||||
inbound or outbound bandwidth. I<average,peak,burst> is the same as
|
inbound or outbound bandwidth. I<average,peak,burst,floor> is the same as
|
||||||
in command I<attach-interface>. Values for I<average> and I<peak> are
|
in command I<attach-interface>. Values for I<average>, I<peak> and I<floor>
|
||||||
expressed in kilobytes per second, while I<burst> is expressed in kilobytes
|
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
|
in a single burst at I<peak> speed as described in the Network XML
|
||||||
documentation at L<http://libvirt.org/formatnetwork.html#elementQoS>.
|
documentation at L<http://libvirt.org/formatnetwork.html#elementQoS>.
|
||||||
|
|
||||||
To clear inbound or outbound settings, use I<--inbound> or I<--outbound>
|
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>
|
=item B<attach-interface> I<domain> I<type> I<source>
|
||||||
[[[I<--live>] [I<--config>] | [I<--current>]] | [I<--persistent>]]
|
[[[I<--live>] [I<--config>] | [I<--current>]] | [I<--persistent>]]
|
||||||
[I<--target target>] [I<--mac mac>] [I<--script script>] [I<--model model>]
|
[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
|
Attach a new network interface to the domain. I<type> can be
|
||||||
I<network> to indicate connection via a libvirt virtual network, or
|
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.
|
only for interfaces of type I<bridge> and only for Xen domains.
|
||||||
I<model> specifies the network device model to be presented to the
|
I<model> specifies the network device model to be presented to the
|
||||||
domain. I<inbound> and I<outbound> control the bandwidth of the
|
domain. I<inbound> and I<outbound> control the bandwidth of the
|
||||||
interface. I<peak> and I<burst> are optional, so "average,peak",
|
interface. At least one from the I<average>, I<floor> pair must be
|
||||||
"average,,burst" and "average" are also legal. Values for I<average>
|
specified. The other two I<peak> and I<burst> are optional, so
|
||||||
and I<peak> are expressed in kilobytes per second, while I<burst> is
|
"average,peak", "average,,burst", "average,,,floor", "average" and
|
||||||
expressed in kilobytes in a single burst at -I<peak> speed as
|
",,,floor" are also legal. Values for I<average>, I<floor> and I<peak>
|
||||||
described in the Network XML documentation at
|
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>.
|
L<http://libvirt.org/formatnetwork.html#elementQoS>.
|
||||||
|
|
||||||
If I<--live> is specified, affect a running domain.
|
If I<--live> is specified, affect a running domain.
|
||||||
|
Loading…
Reference in New Issue
Block a user