]> git.baikalelectronics.ru Git - kernel.git/commit
netem: fix classful handling
authorEric Dumazet <eric.dumazet@gmail.com>
Wed, 28 Dec 2011 23:12:02 +0000 (23:12 +0000)
committerDavid S. Miller <davem@davemloft.net>
Fri, 30 Dec 2011 22:12:23 +0000 (17:12 -0500)
commitd2e78b2bd851937a8c269069daa03a23bf41e4c8
tree389279a18e07ce046ef694b37f44ccbc7fe796a1
parent42067af19d9d6a78bf0e2caed38ba8f9126b476a
netem: fix classful handling

Commit 2ab810aabd (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: Eric Dumazet <eric.dumazet@gmail.com>
CC: Stephen Hemminger <shemminger@vyatta.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sched/sch_netem.c