Add support for RX packet classification in a network device
Subsystems (3)
PATCH 2/3 Add support for RX packet classification in a network device
From: Santwona Behera <[email protected]>
Subject: [PATCH 2/3] [Ethtool] Add RX pkt classification interface
Signed-off-by Santwona Behera <[email protected]>
--- include/linux/ethtool.h | 84 +++++++++++++++++++++++++++++++++++++++++++--- net/core/ethtool.c | 58 +++++++++++++++++++++++++++----- 2 files changed, 126 insertions(+), 16 deletions(-)
include/linux/ethtool.h +78 -6
@@ -287,10 +287,71 @@ enum ethtool_flags { ETH_FLAG_LRO = (1 << 15), /* LRO is enabled */ }; -struct ethtool_rxnfc { -__u32 cmd; +struct ethtool_tcpip4_spec { +__u32 ip4src; +__u32 ip4dst; +__u16 psrc; +__u16 pdst; +__u8 tos; +}; + +struct ethtool_ah_espip4_spec { +__u32 ip4src; +__u32 ip4dst; +__u32 spi; +__u8 tos; +}; + +struct ethtool_rawip4_spec { +__u32 ip4src; +__u32 ip4dst; +__u8 hdata[64 ]; +}; + +struct ethtool_ether_spec { +__u16 ether_type; +__u8 frame_size; +__u8 eframe[16 ]; +}; + +#define ETH_RX_NFC_IP4 1 +#define ETH_RX_NFC_IP6 2 + +struct ethtool_usrip4_spec { +__u32 ip4src; +__u32 ip4dst; +__u32 l4_4_bytes; +__u8 tos; +__u8 ip_ver; +__u8 proto; +}; + +struct ethtool_rx_flow_spec {__u32 flow_type; -__u64 data; +union + { +struct ethtool_tcpip4_spec tcp_ip4_spec; +struct ethtool_tcpip4_spec udp_ip4_spec; +struct ethtool_tcpip4_spec sctp_ip4_spec; +struct ethtool_ah_espip4_spec ah_ip4_spec; +struct ethtool_ah_espip4_spec esp_ip4_spec; +struct ethtool_rawip4_spec raw_ip4_spec; +struct ethtool_ether_spec ether_spec; +struct ethtool_usrip4_spec usr_ip4_spec; +__u8 hdata[64 ]; + } h_u, m_u;/* entry, mask */ +__u64 ring_cookie; +__u32 location; +}; + +struct ethtool_rxnfc { +__u32 cmd; +__u32 flow_type; +/* The rx flow hash value or the rule DB size */ +__u64 data; +struct ethtool_rx_flow_spec fs; +__u32 rule_cnt; +__u32 rule_locs[0 ]; };#ifdef __KERNEL__
@@ -417,8 +478,8 @@ struct ethtool_ops {/* the following hooks are obsolete */ int (*self_test_count)(struct net_device *);/* use get_sset_count */ int (*get_stats_count)(struct net_device *);/* use get_sset_count */ -int (*get_rxhash)(struct net_device *,struct ethtool_rxnfc *); - int (*set_rxhash)(struct net_device *, struct ethtool_rxnfc *); +int (*get_rxnfc)(struct net_device *,struct ethtool_rxnfc *,void *); + int (*set_rxnfc)(struct net_device *, struct ethtool_rxnfc *); };#endif /* __KERNEL__ */
@@ -469,6 +530,12 @@ struct ethtool_ops {#define ETHTOOL_SRXFH 0x0000002a/* Set RX flow hash configuration */ #define ETHTOOL_GGRO 0x0000002b/* Get GRO enable (ethtool_value) */ #define ETHTOOL_SGRO 0x0000002c/* Set GRO enable (ethtool_value) */ +#define ETHTOOL_GRXRINGS 0x0000002d/* Get RX rings available for LB */ +#define ETHTOOL_GRXCLSRLCNT 0x0000002e/* Get RX class rule count */ +#define ETHTOOL_GRXCLSRULE 0x0000002f/* Get RX classification rule */ +#define ETHTOOL_GRXCLSRLALL 0x00000030/* Get all RX classification rule */ +#define ETHTOOL_SRXCLSRLDEL 0x00000031/* Delete RX classification rule */ +#define ETHTOOL_SRXCLSRLINS 0x00000032/* Insert RX classification rule */ /* compatibility with older code */ #define SPARC_ETH_GSET ETHTOOL_GSET
@@ -565,9 +632,13 @@ struct ethtool_ops {#define UDP_V6_FLOW 0x06#define SCTP_V6_FLOW 0x07#define AH_ESP_V6_FLOW 0x08 +#define AH_V4_FLOW 0x09 +#define ESP_V4_FLOW 0x0a +#define AH_V6_FLOW 0x0b +#define ESP_V6_FLOW 0x0c +#define IP_USER_FLOW 0x0d/* L3-L4 network traffic flow hash options */ -#define RXH_DEV_PORT (1 << 0)#define RXH_L2DA (1 << 1)#define RXH_VLAN (1 << 2)#define RXH_L3_PROTO (1 << 3)
@@ -577,5 +648,6 @@ struct ethtool_ops {#define RXH_L4_B_2_3 (1 << 7)/* dst port in case of TCP/UDP/SCTP */ #define RXH_DISCARD (1 << 31) +#define RX_CLS_FLOW_DISC 0xffffffffffffffffULL#endif /* _LINUX_ETHTOOL_H */
net/core/ethtool.c +48 -10
98 lines not on this page · raw message
Signature · 1 line
1.6.0.4