This patch introduces a TC range classifier to support filtering based on ranges. Only port-range filters are supported currently. This can be combined with flower classifier to support filters that are a combination of port-ranges and other parameters based on existing fields supported by cls_flower. The 'goto chain' action can be used to combine the flower and range filter. The filter precedence is decided based on the 'prio' value.
Example: 1. Match on a port range: ----------------------- $ tc filter add dev enp4s0 protocol ip parent ffff: prio 2 range\ ip_proto tcp dst_port 1-15 skip_hw action drop $ tc -s filter show dev enp4s0 parent ffff: filter protocol ip pref 2 range chain 0 filter protocol ip pref 2 range chain 0 handle 0x1 eth_type ipv4 ip_proto tcp dst_port_min 1 dst_port_max 15 skip_hw not_in_hw action order 1: gact action drop random type none pass val 0 index 1 ref 1 bind 1 installed 34 sec used 2 sec Action statistics: Sent 1380 bytes 30 pkt (dropped 30, 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 2 flower\ dst_ip 192.168.1.1 skip_hw action goto chain 11 $ tc filter add dev enp4s0 protocol ip parent ffff: prio 2 chain 11\ range ip_proto tcp dst_port 1-15 action drop $ tc -s filter show dev enp4s0 parent ffff: filter protocol ip pref 2 flower chain 0 filter protocol ip pref 2 flower chain 0 handle 0x1 eth_type ipv4 dst_ip 192.168.1.1 skip_hw not_in_hw action order 1: gact action goto chain 11 random type none pass val 0 index 1 ref 1 bind 1 installed 1426 sec used 2 sec Action statistics: Sent 460 bytes 10 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 filter protocol ip pref 2 range chain 11 filter protocol ip pref 2 range chain 11 handle 0x1 eth_type ipv4 ip_proto tcp dst_port_min 1 dst_port_max 15 not_in_hw action order 1: gact action drop random type none pass val 0 index 2 ref 1 bind 1 installed 1310 sec used 2 sec Action statistics: Sent 460 bytes 10 pkt (dropped 10, overlimits 0 requeues 0) backlog 0b 0p requeues 0 --- Amritha Nambiar (1): net: sched: cls_range: Introduce Range classifier include/uapi/linux/pkt_cls.h | 19 + net/sched/Kconfig | 10 + net/sched/Makefile | 1 net/sched/cls_range.c | 725 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 755 insertions(+) create mode 100644 net/sched/cls_range.c --