From mboxrd@z Thu Jan 1 00:00:00 1970 From: Amritha Nambiar Subject: [net-next,RFC PATCH] Introduce TC Range classifier Date: Thu, 13 Sep 2018 13:52:01 -0700 Message-ID: <153687160312.43503.11156697286063840163.stgit@anamhost.jf.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Cc: alexander.h.duyck@intel.com, jakub.kicinski@netronome.com, amritha.nambiar@intel.com, sridhar.samudrala@intel.com, jhs@mojatatu.com, jesse.brandeburg@intel.com, jiri@resnulli.us, xiyou.wangcong@gmail.com To: netdev@vger.kernel.org, davem@davemloft.net Return-path: Received: from mga14.intel.com ([192.55.52.115]:15125 "EHLO mga14.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726771AbeINHFL (ORCPT ); Fri, 14 Sep 2018 03:05:11 -0400 Sender: netdev-owner@vger.kernel.org List-ID: 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