• Cong Wang's avatar
    net_sched: walk through all child classes in tc_bind_tclass() · 760d228e
    Cong Wang authored
    In a complex TC class hierarchy like this:
    
    tc qdisc add dev eth0 root handle 1:0 cbq bandwidth 100Mbit         \
      avpkt 1000 cell 8
    tc class add dev eth0 parent 1:0 classid 1:1 cbq bandwidth 100Mbit  \
      rate 6Mbit weight 0.6Mbit prio 8 allot 1514 cell 8 maxburst 20      \
      avpkt 1000 bounded
    
    tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip \
      sport 80 0xffff flowid 1:3
    tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip \
      sport 25 0xffff flowid 1:4
    
    tc class add dev eth0 parent 1:1 classid 1:3 cbq bandwidth 100Mbit  \
      rate 5Mbit weight 0.5Mbit prio 5 allot 1514 cell 8 maxburst 20      \
      avpkt 1000
    tc class add dev eth0 parent 1:1 classid 1:4 cbq bandwidth 100Mbit  \
      rate 3Mbit weight 0.3Mbit prio 5 allot 1514 cell 8 maxburst 20      \
      avpkt 1000
    
    where filters are installed on qdisc 1:0, so we can't merely
    search from class 1:1 when creating class 1:3 and class 1:4. We have
    to walk through all the child classes of the direct parent qdisc.
    Otherwise we would miss filters those need reverse binding.
    
    Fixes: 07d79fc7 ("net_sched: add reverse binding for tc class")
    Cc: Jamal Hadi Salim <jhs@mojatatu.com>
    Cc: Jiri Pirko <jiri@resnulli.us>
    Signed-off-by: default avatarCong Wang <xiyou.wangcong@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    760d228e
sch_api.c 54.2 KB