Subject: Re: [PATCH net-next 0/5] net_sched: Adjust qdisc_change() for command "#tc qdisc change/replace ..."

From: Yang Yingliang <[email-masked]>
Date: Fri, 7 Mar 2014 10:29:44 +0800

On 2014/3/7 5:08, Hiroaki SHIMODA wrote:
> On Thu, 6 Mar 2014 21:08:36 +0800
> Yang Yingliang <[email-masked]> wrote:
> 
>> Current commands "#tc qdisc replace..." and "#tc qdisc change..."
>> are not doing what they're supposed to do.
>>
>> E.g.
>>
>> With "#tc qdisc replace ...", it won't clear old option if not specified in
>> qdisc of netem.
>>
>>    # tc qdisc add dev eth4 handle 1: root netem rate 10mbit
>>    # tc qdisc show
>>      qdisc netem 1: dev eth4 root refcnt 2 limit 1000 rate 10Mbit
>>
>>    # tc qdisc replace dev eth4 handle 1: root netem latency 10ms
>>    # tc qdisc show
>>      qdisc netem 1: dev eth4 root refcnt 2 limit 1000 delay 10.0ms rate 10Mbit
>> The old option "rate" is still there.
> 
> It looks like you are trying to replace existing qdisc 1: with
> the same qdisc 1:. So the effect is the same as change.
> If you want to do replace the existing qdisc, you should specify
> other handle or different qdisc.
> 
>> With "#tc qdisc change ... ", it will clear old options if not specified in
>> qdisc of tbf.
>>
>>   # tc qdisc add dev eth4 handle 1: root tbf rate 10mbit burst 10kb latency 50ms mtu 64kb peakrate 20mbit
>>   # tc qdisc show
>>     qdisc tbf 1: dev eth4 root refcnt 2 rate 10Mbit burst 10Kb peakrate 20Mbit minburst 64Kb lat 50.0ms
>>   # tc qdisc change dev eth4 handle 1: root tbf rate 20mbit burst 10kb latency 50ms
>>   # tc qdisc show
>>     qdisc tbf 1: dev eth4 root refcnt 2 rate 20Mbit burst 10Kb lat 50.0ms
>> The old peakrate and minburst are cleared.
> 
> You are assumed to implicitly specify "peakrate 0" at change.
> It seems that you are arguing the tc command, not kernel code.
> There would exist userland commmand whose rate and peakrate
> command options are always mandatory.
> How they support its command options is up to userland I think.
> 

peakrate is not specified, it should not be changed, I think.
peakrate is not mandatory.

I think tc command has no big problem and the real problem is kernel
code treats "change" as "replace", sometimes it treats "replace" as
"change".

Thanks!