Skip to content
  • Amritha Nambiar's avatar
    net: sched: cls_flower: Classify packets using port ranges · 5c72299f
    Amritha Nambiar authored
    
    
    Added support in tc flower for filtering based on port ranges.
    
    Example:
    1. Match on a port range:
    -------------------------
    $ tc filter add dev enp4s0 protocol ip parent ffff:\
      prio 1 flower ip_proto tcp dst_port range 20-30 skip_hw\
      action drop
    
    $ tc -s filter show dev enp4s0 parent ffff:
    filter protocol ip pref 1 flower chain 0
    filter protocol ip pref 1 flower chain 0 handle 0x1
      eth_type ipv4
      ip_proto tcp
      dst_port range 20-30
      skip_hw
      not_in_hw
            action order 1: gact action drop
             random type none pass val 0
             index 1 ref 1 bind 1 installed 85 sec used 3 sec
            Action statistics:
            Sent 460 bytes 10 pkt (dropped 10, overlimits 0 requeues 0)
            backlog 0b 0p requeues 0
    
    2. Match on IP address and port range:
    --------------------------------------
    $ tc filter add dev enp4s0 protocol ip parent ffff:\
      prio 1 flower dst_ip 192.168.1.1 ip_proto tcp dst_port range 100-200\
      skip_hw action drop
    
    $ tc -s filter show dev enp4s0 parent ffff:
    filter protocol ip pref 1 flower chain 0 handle 0x2
      eth_type ipv4
      ip_proto tcp
      dst_ip 192.168.1.1
      dst_port range 100-200
      skip_hw
      not_in_hw
            action order 1: gact action drop
             random type none pass val 0
             index 2 ref 1 bind 1 installed 58 sec used 2 sec
            Action statistics:
            Sent 920 bytes 20 pkt (dropped 20, overlimits 0 requeues 0)
            backlog 0b 0p requeues 0
    
    v4:
    1. Added condition before setting port key.
    2. Organized setting and dumping port range keys into functions
       and added validation of input range.
    
    v3:
    1. Moved new fields in UAPI enum to the end of enum.
    2. Removed couple of empty lines.
    
    v2:
    Addressed Jiri's comments:
    1. Added separate functions for dst and src comparisons.
    2. Removed endpoint enum.
    3. Added new bit TCA_FLOWER_FLAGS_RANGE to decide normal/range
      lookup.
    4. Cleaned up fl_lookup function.
    
    Signed-off-by: default avatarAmritha Nambiar <amritha.nambiar@intel.com>
    
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    5c72299f