• Cong Wang's avatar
    net_sched: fix tcm_parent in tc filter dump · a7df4870
    Cong Wang authored
    When we tell kernel to dump filters from root (ffff:ffff),
    those filters on ingress (ffff:0000) are matched, but their
    true parents must be dumped as they are. However, kernel
    dumps just whatever we tell it, that is either ffff:ffff
    or ffff:0000:
    
     $ nl-cls-list --dev=dummy0 --parent=root
     cls basic dev dummy0 id none parent root prio 49152 protocol ip match-all
     cls basic dev dummy0 id :1 parent root prio 49152 protocol ip match-all
     $ nl-cls-list --dev=dummy0 --parent=ffff:
     cls basic dev dummy0 id none parent ffff: prio 49152 protocol ip match-all
     cls basic dev dummy0 id :1 parent ffff: prio 49152 protocol ip match-all
    
    This is confusing and misleading, more importantly this is
    a regression since 4.15, so the old behavior must be restored.
    
    And, when tc filters are installed on a tc class, the parent
    should be the classid, rather than the qdisc handle. Commit
    edf6711c ("net: sched: remove classid and q fields from tcf_proto")
    removed the classid we save for filters, we can just restore
    this classid in tcf_block.
    
    Steps to reproduce this:
     ip li set dev dummy0 up
     tc qd add dev dummy0 ingress
     tc filter add dev dummy0 parent ffff: protocol arp basic action pass
     tc filter show dev dummy0 root
    
    Before this patch:
     filter protocol arp pref 49152 basic
     filter protocol arp pref 49152 basic handle 0x1
    	action order 1: gact action pass
    	 random type none pass val 0
    	 index 1 ref 1 bind 1
    
    After this patch:
     filter parent ffff: protocol arp pref 49152 basic
     filter parent ffff: protocol arp pref 49152 basic handle 0x1
     	action order 1: gact action pass
     	 random type none pass val 0
    	 index 1 ref 1 bind 1
    
    Fixes: a10fa201 ("net: sched: propagate q and parent from caller down to tcf_fill_node")
    Fixes: edf6711c ("net: sched: remove classid and q fields from tcf_proto")
    Cc: Jamal Hadi Salim <jhs@mojatatu.com>
    Cc: Jiri Pirko <jiri@resnulli.us>
    Signed-off-by: default avatarCong Wang <xiyou.wangcong@gmail.com>
    Acked-by: default avatarJamal Hadi Salim <jhs@mojatatu.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    a7df4870
cls_api.c 92.8 KB