|
@@ -380,27 +380,42 @@ struct ethtool_usrip4_spec {
|
|
|
__u8 proto;
|
|
|
};
|
|
|
|
|
|
+union ethtool_flow_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_usrip4_spec usr_ip4_spec;
|
|
|
+ struct ethhdr ether_spec;
|
|
|
+ __u8 hdata[60];
|
|
|
+};
|
|
|
+
|
|
|
+struct ethtool_flow_ext {
|
|
|
+ __be16 vlan_etype;
|
|
|
+ __be16 vlan_tci;
|
|
|
+ __be32 data[2];
|
|
|
+};
|
|
|
+
|
|
|
/**
|
|
|
* struct ethtool_rx_flow_spec - specification for RX flow filter
|
|
|
* @flow_type: Type of match to perform, e.g. %TCP_V4_FLOW
|
|
|
* @h_u: Flow fields to match (dependent on @flow_type)
|
|
|
- * @m_u: Masks for flow field bits to be ignored
|
|
|
+ * @h_ext: Additional fields to match
|
|
|
+ * @m_u: Masks for flow field bits to be matched
|
|
|
+ * @m_ext: Masks for additional field bits to be matched
|
|
|
+ * Note, all additional fields must be ignored unless @flow_type
|
|
|
+ * includes the %FLOW_EXT flag.
|
|
|
* @ring_cookie: RX ring/queue index to deliver to, or %RX_CLS_FLOW_DISC
|
|
|
* if packets should be discarded
|
|
|
* @location: Index of filter in hardware table
|
|
|
*/
|
|
|
struct ethtool_rx_flow_spec {
|
|
|
__u32 flow_type;
|
|
|
- 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_usrip4_spec usr_ip4_spec;
|
|
|
- struct ethhdr ether_spec;
|
|
|
- __u8 hdata[72];
|
|
|
- } h_u, m_u;
|
|
|
+ union ethtool_flow_union h_u;
|
|
|
+ struct ethtool_flow_ext h_ext;
|
|
|
+ union ethtool_flow_union m_u;
|
|
|
+ struct ethtool_flow_ext m_ext;
|
|
|
__u64 ring_cookie;
|
|
|
__u32 location;
|
|
|
};
|
|
@@ -458,16 +473,10 @@ struct ethtool_rxnfc {
|
|
|
|
|
|
struct compat_ethtool_rx_flow_spec {
|
|
|
u32 flow_type;
|
|
|
- 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_usrip4_spec usr_ip4_spec;
|
|
|
- struct ethhdr ether_spec;
|
|
|
- u8 hdata[72];
|
|
|
- } h_u, m_u;
|
|
|
+ union ethtool_flow_union h_u;
|
|
|
+ struct ethtool_flow_ext h_ext;
|
|
|
+ union ethtool_flow_union m_u;
|
|
|
+ struct ethtool_flow_ext m_ext;
|
|
|
compat_u64 ring_cookie;
|
|
|
u32 location;
|
|
|
};
|
|
@@ -1072,6 +1081,8 @@ struct ethtool_ops {
|
|
|
#define IPV4_FLOW 0x10 /* hash only */
|
|
|
#define IPV6_FLOW 0x11 /* hash only */
|
|
|
#define ETHER_FLOW 0x12 /* spec only (ether_spec) */
|
|
|
+/* Flag to enable additional fields in struct ethtool_rx_flow_spec */
|
|
|
+#define FLOW_EXT 0x80000000
|
|
|
|
|
|
/* L3-L4 network traffic flow hash options */
|
|
|
#define RXH_L2DA (1 << 1)
|