aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/linux/ethtool.h50
-rw-r--r--include/linux/netdevice.h3
2 files changed, 53 insertions, 0 deletions
diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h
index ef4a2d84d922..a3cac53a0766 100644
--- a/include/linux/ethtool.h
+++ b/include/linux/ethtool.h
@@ -14,6 +14,7 @@
14#define _LINUX_ETHTOOL_H 14#define _LINUX_ETHTOOL_H
15 15
16#include <linux/types.h> 16#include <linux/types.h>
17#include <linux/rculist.h>
17 18
18/* This should work for both 32 and 64 bit userland. */ 19/* This should work for both 32 and 64 bit userland. */
19struct ethtool_cmd { 20struct ethtool_cmd {
@@ -242,6 +243,7 @@ enum ethtool_stringset {
242 ETH_SS_TEST = 0, 243 ETH_SS_TEST = 0,
243 ETH_SS_STATS, 244 ETH_SS_STATS,
244 ETH_SS_PRIV_FLAGS, 245 ETH_SS_PRIV_FLAGS,
246 ETH_SS_NTUPLE_FILTERS,
245}; 247};
246 248
247/* for passing string sets for data tagging */ 249/* for passing string sets for data tagging */
@@ -290,6 +292,7 @@ struct ethtool_perm_addr {
290 */ 292 */
291enum ethtool_flags { 293enum ethtool_flags {
292 ETH_FLAG_LRO = (1 << 15), /* LRO is enabled */ 294 ETH_FLAG_LRO = (1 << 15), /* LRO is enabled */
295 ETH_FLAG_NTUPLE = (1 << 27), /* N-tuple filters enabled */
293}; 296};
294 297
295/* The following structures are for supporting RX network flow 298/* The following structures are for supporting RX network flow
@@ -363,6 +366,35 @@ struct ethtool_rxnfc {
363 __u32 rule_locs[0]; 366 __u32 rule_locs[0];
364}; 367};
365 368
369struct ethtool_rx_ntuple_flow_spec {
370 __u32 flow_type;
371 union {
372 struct ethtool_tcpip4_spec tcp_ip4_spec;
373 struct ethtool_tcpip4_spec udp_ip4_spec;
374 struct ethtool_tcpip4_spec sctp_ip4_spec;
375 struct ethtool_ah_espip4_spec ah_ip4_spec;
376 struct ethtool_ah_espip4_spec esp_ip4_spec;
377 struct ethtool_rawip4_spec raw_ip4_spec;
378 struct ethtool_ether_spec ether_spec;
379 struct ethtool_usrip4_spec usr_ip4_spec;
380 __u8 hdata[64];
381 } h_u, m_u; /* entry, mask */
382
383 __u16 vlan_tag;
384 __u16 vlan_tag_mask;
385 __u64 data; /* user-defined flow spec data */
386 __u64 data_mask; /* user-defined flow spec mask */
387
388 /* signed to distinguish between queue and actions (DROP) */
389 __s32 action;
390#define ETHTOOL_RXNTUPLE_ACTION_DROP -1
391};
392
393struct ethtool_rx_ntuple {
394 __u32 cmd;
395 struct ethtool_rx_ntuple_flow_spec fs;
396};
397
366#define ETHTOOL_FLASH_MAX_FILENAME 128 398#define ETHTOOL_FLASH_MAX_FILENAME 128
367enum ethtool_flash_op_type { 399enum ethtool_flash_op_type {
368 ETHTOOL_FLASH_ALL_REGIONS = 0, 400 ETHTOOL_FLASH_ALL_REGIONS = 0,
@@ -377,6 +409,18 @@ struct ethtool_flash {
377 409
378#ifdef __KERNEL__ 410#ifdef __KERNEL__
379 411
412struct ethtool_rx_ntuple_flow_spec_container {
413 struct ethtool_rx_ntuple_flow_spec fs;
414 struct list_head list;
415};
416
417struct ethtool_rx_ntuple_list {
418#define ETHTOOL_MAX_NTUPLE_LIST_ENTRY 1024
419#define ETHTOOL_MAX_NTUPLE_STRING_PER_ENTRY 14
420 struct list_head list;
421 unsigned int count;
422};
423
380struct net_device; 424struct net_device;
381 425
382/* Some generic methods drivers may use in their ethtool_ops */ 426/* Some generic methods drivers may use in their ethtool_ops */
@@ -394,6 +438,7 @@ u32 ethtool_op_get_ufo(struct net_device *dev);
394int ethtool_op_set_ufo(struct net_device *dev, u32 data); 438int ethtool_op_set_ufo(struct net_device *dev, u32 data);
395u32 ethtool_op_get_flags(struct net_device *dev); 439u32 ethtool_op_get_flags(struct net_device *dev);
396int ethtool_op_set_flags(struct net_device *dev, u32 data); 440int ethtool_op_set_flags(struct net_device *dev, u32 data);
441void ethtool_ntuple_flush(struct net_device *dev);
397 442
398/** 443/**
399 * &ethtool_ops - Alter and report network device settings 444 * &ethtool_ops - Alter and report network device settings
@@ -500,6 +545,8 @@ struct ethtool_ops {
500 int (*set_rxnfc)(struct net_device *, struct ethtool_rxnfc *); 545 int (*set_rxnfc)(struct net_device *, struct ethtool_rxnfc *);
501 int (*flash_device)(struct net_device *, struct ethtool_flash *); 546 int (*flash_device)(struct net_device *, struct ethtool_flash *);
502 int (*reset)(struct net_device *, u32 *); 547 int (*reset)(struct net_device *, u32 *);
548 int (*set_rx_ntuple)(struct net_device *, struct ethtool_rx_ntuple *);
549 int (*get_rx_ntuple)(struct net_device *, u32 stringset, void *);
503}; 550};
504#endif /* __KERNEL__ */ 551#endif /* __KERNEL__ */
505 552
@@ -559,6 +606,9 @@ struct ethtool_ops {
559#define ETHTOOL_FLASHDEV 0x00000033 /* Flash firmware to device */ 606#define ETHTOOL_FLASHDEV 0x00000033 /* Flash firmware to device */
560#define ETHTOOL_RESET 0x00000034 /* Reset hardware */ 607#define ETHTOOL_RESET 0x00000034 /* Reset hardware */
561 608
609#define ETHTOOL_SRXNTUPLE 0x00000035 /* Add an n-tuple filter to device */
610#define ETHTOOL_GRXNTUPLE 0x00000036 /* Get n-tuple filters from device */
611
562/* compatibility with older code */ 612/* compatibility with older code */
563#define SPARC_ETH_GSET ETHTOOL_GSET 613#define SPARC_ETH_GSET ETHTOOL_GSET
564#define SPARC_ETH_SSET ETHTOOL_SSET 614#define SPARC_ETH_SSET ETHTOOL_SSET
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index e535700a3b72..cdf53a8d9ff5 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -746,6 +746,7 @@ struct net_device {
746#define NETIF_F_FCOE_CRC (1 << 24) /* FCoE CRC32 */ 746#define NETIF_F_FCOE_CRC (1 << 24) /* FCoE CRC32 */
747#define NETIF_F_SCTP_CSUM (1 << 25) /* SCTP checksum offload */ 747#define NETIF_F_SCTP_CSUM (1 << 25) /* SCTP checksum offload */
748#define NETIF_F_FCOE_MTU (1 << 26) /* Supports max FCoE MTU, 2158 bytes*/ 748#define NETIF_F_FCOE_MTU (1 << 26) /* Supports max FCoE MTU, 2158 bytes*/
749#define NETIF_F_NTUPLE (1 << 27) /* N-tuple filters supported */
749 750
750 /* Segmentation offload features */ 751 /* Segmentation offload features */
751#define NETIF_F_GSO_SHIFT 16 752#define NETIF_F_GSO_SHIFT 16
@@ -954,6 +955,8 @@ struct net_device {
954 /* max exchange id for FCoE LRO by ddp */ 955 /* max exchange id for FCoE LRO by ddp */
955 unsigned int fcoe_ddp_xid; 956 unsigned int fcoe_ddp_xid;
956#endif 957#endif
958 /* n-tuple filter list attached to this device */
959 struct ethtool_rx_ntuple_list ethtool_ntuple_list;
957}; 960};
958#define to_net_dev(d) container_of(d, struct net_device, dev) 961#define to_net_dev(d) container_of(d, struct net_device, dev)
959 962