• Eric Dumazet's avatar
    netem: fix classful handling · 50612537
    Eric Dumazet authored
    Commit 10f6dfcf (Revert "sch_netem: Remove classful functionality")
    reintroduced classful functionality to netem, but broke basic netem
    behavior :
    
    netem uses an t(ime)fifo queue, and store timestamps in skb->cb[]
    
    If qdisc is changed, time constraints are not respected and other qdisc
    can destroy skb->cb[] and block netem at dequeue time.
    
    Fix this by always using internal tfifo, and optionally attach a child
    qdisc to netem (or a tree of qdiscs)
    
    Example of use :
    
    DEV=eth3
    tc qdisc del dev $DEV root
    tc qdisc add dev $DEV root handle 30: est 1sec 8sec netem delay 20ms 10ms
    tc qdisc add dev $DEV handle 40:0 parent 30:0 tbf \
    	burst 20480 limit 20480 mtu 1514 rate 32000bps
    
    qdisc netem 30: root refcnt 18 limit 1000 delay 20.0ms  10.0ms
     Sent 190792 bytes 413 pkt (dropped 0, overlimits 0 requeues 0)
     rate 18416bit 3pps backlog 0b 0p requeues 0
    qdisc tbf 40: parent 30: rate 256000bit burst 20Kb/8 mpu 0b lat 0us
     Sent 190792 bytes 413 pkt (dropped 6, overlimits 10 requeues 0)
     backlog 0b 5p requeues 0
    Signed-off-by: default avatarEric Dumazet <eric.dumazet@gmail.com>
    CC: Stephen Hemminger <shemminger@vyatta.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    50612537
sch_netem.c 23.5 KB