Subject: Re: tc linklayer ADSL calc broken after commit 56b765b79 (htb: improved accuracy at high rates)

From: Jussi Kivilinna <[email-masked]>
Date: Thu, 30 May 2013 19:29:06 +0300

On 30.05.2013 18:55, Jesper Dangaard Brouer wrote:
> On Thu, 30 May 2013 07:39:10 -0700
> Eric Dumazet <[email-masked]> wrote:
> 
>> On Thu, 2013-05-30 at 09:51 +0200, Jesper Dangaard Brouer wrote:
>>> On Wed, 29 May 2013 08:52:04 -0700
>>> Eric Dumazet <[email-masked]> wrote:
>>
>>>> I am not sure it will solve the ATM logic (with the 5 bytes
>>>> overhead per 48 bytes cell)
>>>
>>> Are you talking about, that for GSO frames we are not adding a encap
>>> overhead to each "sub" skb.
>>
>> This part is now done properly in qdisc_pkt_len_init() since linux-3.9
> 
> Thanks for the pointer, but qdisc_pkt_len_init() only adds the
> EthMAC+IP+TCP header size for each GSO segment (stored in
> qdisc_skb_cb(skb)->pkt_len).
> It is still missing the AAL5 encapsulation overhead per GSO segment.
> 
> Besides I can see that __qdisc_calculate_pkt_len() "forgets" this
> information and overwrites qdisc_skb_cb(skb)->pkt_len (iif a stab is
> defined on the qdisc).
> 

Maybe change qdisc_pkt_len_init() to take the additional overhead value as
input and change __qdisc_calculate_pkt_len() use

	qdisc_pkt_len_init(skb, stab->szopts.overhead);

instead of

	pkt_len = skb->len + stab->szopts.overhead;

-Jussi