Add support for RX packet classification in a network device
Subsystems (2)
PATCH 1/3 Add support for RX packet classification in a network device
From: Santwona Behera <[email protected]>
Subject: [PATCH 1/3] [ethtool] Add rx pkt classification interface
Signed-off-by Santwona Behera <[email protected]>
--- ethtool-copy.h | 92 +++++- ethtool.8 | 138 +++++++- ethtool.c | 1068 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 1262 insertions(+), 36 deletions(-)
ethtool-copy.h +82 -10
@@ -12,6 +12,8 @@ #ifndef _LINUX_ETHTOOL_H #define _LINUX_ETHTOOL_H +#include <linux/types.h> + /* This should work for both 32 and 64 bit userland. */ struct ethtool_cmd { __u32 cmd;
@@ -53,12 +55,13 @@ struct ethtool_drvinfo {char bus_info[ETHTOOL_BUSINFO_LEN ];/* Bus info for this IF. */ /* For PCI devices, use pci_name(pci_dev). */ char reserved1[32 ]; -char reserved2[12 ]; +char reserved2[8 ];__u32 n_priv_flags;/* number of flags valid in ETHTOOL_GPFLAGS */ __u32 n_stats;/* number of u64's from ETHTOOL_GSTATS */ __u32 testinfo_len;__u32 eedump_len;/* Size of data from ETHTOOL_GEEPROM (bytes) */ __u32 regdump_len;/* Size of data from ETHTOOL_GREGS (bytes) */ +__u32 n_rx_rules;/* number of rx classification rules */ };#define SOPASS_MAX 6
@@ -285,10 +288,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 or the # rx rings */ +__u64 data; +struct ethtool_rx_flow_spec fs; +__u32 rule_cnt; +__u32 rule_locs[0 ]; };/* CMDs currently supported */
@@ -336,6 +400,11 @@ struct ethtool_rxnfc {#define ETHTOOL_GRXFH 0x00000029/* Get RX flow hash configuration */ #define ETHTOOL_SRXFH 0x0000002a/* Set RX flow hash configuration */ +#define ETHTOOL_GRXRINGS 0x0000002b/* Get RX rings available for LB */ +#define ETHTOOL_GRXCLSRULE 0x0000002c/* Get RX classification rule */ +#define ETHTOOL_GRXCLSRLALL 0x0000002d/* Get all RX classification rule */ +#define ETHTOOL_SRXCLSRLDEL 0x0000002e/* Delete RX classification rule */ +#define ETHTOOL_SRXCLSRLINS 0x0000002f/* Insert RX classification rule */ /* compatibility with older code */ #define SPARC_ETH_GSET ETHTOOL_GSET
@@ -427,14 +496,16 @@ struct ethtool_rxnfc {#define TCP_V4_FLOW 0x01#define UDP_V4_FLOW 0x02#define SCTP_V4_FLOW 0x03 -#define AH_ESP_V4_FLOW 0x04 -#define TCP_V6_FLOW 0x05 -#define UDP_V6_FLOW 0x06 -#define SCTP_V6_FLOW 0x07 -#define AH_ESP_V6_FLOW 0x08 +#define AH_V4_FLOW 0x04 +#define ESP_V4_FLOW 0x05 +#define TCP_V6_FLOW 0x06 +#define UDP_V6_FLOW 0x07 +#define SCTP_V6_FLOW 0x08 +#define AH_V6_FLOW 0x09 +#define ESP_V6_FLOW 0x0a +#define IP_USER_FLOW 0x0b/* 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)
@@ -444,5 +515,6 @@ struct ethtool_rxnfc {#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 */
ethtool.8 +132 -6
184 lines not on this page · raw message
ethtool.c +1048 -20
1,190 lines not on this page · raw message
Signature · 1 line
1.6.0.4