Skip to content
Snippets Groups Projects
Commit 429c3be8 authored by Maxim Mikityanskiy's avatar Maxim Mikityanskiy Committed by Jakub Kicinski
Browse files

sch_htb: Fail on unsupported parameters when offload is requested


The current implementation of HTB offload doesn't support some
parameters. Instead of ignoring them, actively return the EINVAL error
when they are set to non-defaults.

As this patch goes to stable, the driver API is not changed here. If
future drivers support more offload parameters, the checks can be moved
to the driver side.

Note that the buffer and cbuffer parameters are also not supported, but
the tc userspace tool assigns some default values derived from rate and
ceil, and identifying these defaults in sch_htb would be unreliable, so
they are still ignored.

Fixes: d03b195b ("sch_htb: Hierarchical QoS hardware offload")
Reported-by: default avatarJakub Kicinski <kuba@kernel.org>
Signed-off-by: default avatarMaxim Mikityanskiy <maximmi@nvidia.com>
Reviewed-by: default avatarTariq Toukan <tariqt@nvidia.com>
Link: https://lore.kernel.org/r/20220125100654.424570-1-maximmi@nvidia.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 8bdd2494
No related branches found
No related tags found
No related merge requests found
......@@ -1810,6 +1810,26 @@ static int htb_change_class(struct Qdisc *sch, u32 classid,
if (!hopt->rate.rate || !hopt->ceil.rate)
goto failure;
if (q->offload) {
/* Options not supported by the offload. */
if (hopt->rate.overhead || hopt->ceil.overhead) {
NL_SET_ERR_MSG(extack, "HTB offload doesn't support the overhead parameter");
goto failure;
}
if (hopt->rate.mpu || hopt->ceil.mpu) {
NL_SET_ERR_MSG(extack, "HTB offload doesn't support the mpu parameter");
goto failure;
}
if (hopt->quantum) {
NL_SET_ERR_MSG(extack, "HTB offload doesn't support the quantum parameter");
goto failure;
}
if (hopt->prio) {
NL_SET_ERR_MSG(extack, "HTB offload doesn't support the prio parameter");
goto failure;
}
}
/* Keeping backward compatible with rate_table based iproute2 tc */
if (hopt->rate.linklayer == TC_LINKLAYER_UNAWARE)
qdisc_put_rtab(qdisc_get_rtab(&hopt->rate, tb[TCA_HTB_RTAB],
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment