On Wed, 13 May 2020 21:47:17 +0200 Maciej Fijalkowski <maciej.fijalkow...@intel.com> wrote:
> Provide a sanity check that will make sure whether queues count/offset > pair count will not exceed the actual number of TCs being created. > > Example command that is invalid because there are 4 count/offset pairs > whereas num_tc is only 2. > > # tc qdisc add dev enp96s0f0 root mqprio num_tc 2 map 0 0 0 0 1 1 1 1 > queues 4@0 4@4 4@8 4@12 hw 1 mode channel > > Store the parsed count/offset pair count onto a dedicated variable that > will be compared against opt.num_tc after all of the command line > arguments were parsed. Bail out if this count is higher than opt.num_tc > and let user know about it. > > Drivers were swallowing such commands as they were iterating over > count/offset pairs where num_tc was used as a delimiter, so this is not > a big deal, but better catch such misconfiguration at the command line > argument parsing level. > > Signed-off-by: Maciej Fijalkowski <maciej.fijalkow...@intel.com> > --- > tc/q_mqprio.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/tc/q_mqprio.c b/tc/q_mqprio.c > index 0eb41308..f26ba8d7 100644 > --- a/tc/q_mqprio.c > +++ b/tc/q_mqprio.c > @@ -48,6 +48,7 @@ static int mqprio_parse_opt(struct qdisc_util *qu, int argc, > __u64 max_rate64[TC_QOPT_MAX_QUEUE] = {0}; > __u16 shaper = TC_MQPRIO_SHAPER_DCB; > __u16 mode = TC_MQPRIO_MODE_DCB; > + int cnt_off_pairs = 0; Since opt.num_tc is u8, shouldn't this be u8 as well? Note: maximum number of queue is TC_QOPT_MAX_QUEUE (16).