提交 d7f5c889 编写于 作者: M Michal Privoznik

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: NMichal Privoznik <mprivozn@redhat.com>
上级 55d0e859
...@@ -873,7 +873,7 @@ static int parseRateStr(vshControl *ctl, ...@@ -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, ...@@ -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, ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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(&params, &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) ...@@ -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(&params, &nparams, &maxparams, if (virTypedParamsAddUInt(&params, &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. ...@@ -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. ...@@ -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>. ...@@ -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 ...@@ -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.
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册