[PATCH net-next v3 0/9] net: ethernet: ti: am65-cpsw: add network flow classification support
From: Roger Quadros <rogerq@kernel.org>
Date: 2025-05-13 12:13:12
Also in:
linux-omap, lkml
Adds support for -N/--config-nfc ethtool command for configuring RX classfiers. Currently only raw Ethernet (flow-type ether) matching is added based on source/destination addresses and VLAN Priority (PCP). The ALE policer engine is used to perform the matching and routing to a specific RX channel. Test cases: Increase number of RX channels to 8 ip link set end1 down ip link set end0 down ethtool -L end0 rx 8 1) Ether source address test ethtool -N end0 flow-type ether src xx:yy:zz:aa:bb:cc action 5 Traffic from that address should route to channel 5 2) Ether destination address test ethtool -N eth0 flow-type ether dst yy:zz:aa:bb:cc:dd action 4 Traffic to that address should route to channel 4 3) Drop test ethtool -N end0 flow-type ether src xx:yy:zz:aa:bb:cc action -1 Traffic from that address should be dropped 4) VLAN PCP test on Remote create VLAN with ID 5 and all traffic mapping to required priority to test. e.g. 7 sudo ip link add link eno1 name eno1.5 type vlan id 5 egress-qos-map 0:7 1:7 2:7 3:7 4:7 5:7 6:7 7:7 sudo ifconfig eno1.5 192.168.10.1 on DUT create VLAN with id 5 ip link add link end0 name end0.5 type vlan id 5 ifconfig end0.5 192.168.10.5 VLAN pcp 7 vid 5 route to RX channel 6 ethtool -N end0 flow-type ether vlan 0xe005 action 6 Traffic from that VLAN with PCP 7 should route to channel 6 Signed-off-by: Roger Quadros <rogerq@kernel.org> --- Changes in v3: - Fixed bug in cpsw_ale_policer_save/restore(). '* 4' is not needed for a u32 pointer. - Fixed reverse Christmas tree order - Moved mutex acquiring out of am65_cpsw_policer_find_match() and at beginning of am65_cpsw_rxnfc_add_rule() - Link to v2: https://lore.kernel.org/r/20250505-am65-cpsw-rx-class-v2-0-5359ea025144@kernel.org (local) Changes in v2: - Error out if VLAN_ID > 0 as VLAN ID based flow routing still doesn't seem to work. Drop commented out code. - Limit lines to 80 characters whereever possible. - Change struct am65_cpsw_rxnfc_rule.location from int to unsigned int. - Add information about order of rules evaluation and multiple matches in commit log. - Link to v1: https://lore.kernel.org/r/20250319-am65-cpsw-rx-class-v1-0-2bfded07490e@kernel.org (local) --- Roger Quadros (9): net: ethernet: ti: cpsw_ale: Update Policer fields for more ALE size/ports net: ethernet: ti: cpsw_ale: return ALE index in cpsw_ale_add_vlan() net: ethernet: ti: cpsw_ale: return ALE index in cpsw_ale_vlan_add_modify() net: ethernet: ti: cpsw_ale: return ALE index in cpsw_ale_add_ucast() net: ethernet: ti: cpsw_ale: add cpsw_ale_policer_reset_entry() net: ethernet: ti: cpsw_ale: add cpsw_ale_policer_set/clr_entry() net: ethernet: ti: cpsw_ale: add policer save restore for PM sleep net: ethernet: ti: am65-cpsw: add network flow classification support net: ethernet: ti: am65-cpsw: remove cpsw_ale_classifier_setup_default() drivers/net/ethernet/ti/am65-cpsw-ethtool.c | 353 ++++++++++++++++++++++++++ drivers/net/ethernet/ti/am65-cpsw-nuss.c | 32 ++- drivers/net/ethernet/ti/am65-cpsw-nuss.h | 16 ++ drivers/net/ethernet/ti/am65-cpsw-switchdev.c | 6 +- drivers/net/ethernet/ti/cpsw.c | 4 +- drivers/net/ethernet/ti/cpsw_ale.c | 214 ++++++++++------ drivers/net/ethernet/ti/cpsw_ale.h | 37 ++- drivers/net/ethernet/ti/cpsw_new.c | 4 +- drivers/net/ethernet/ti/cpsw_switchdev.c | 6 +- 9 files changed, 579 insertions(+), 93 deletions(-) --- base-commit: 9f607dc39b6658ba8ea647bd99725e68c66071b7 change-id: 20250305-am65-cpsw-rx-class-666006fab9dd Best regards, -- Roger Quadros [off-list ref]