diff options
Diffstat (limited to 'include/linux/ethtool.h')
| -rw-r--r-- | include/linux/ethtool.h | 177 | 
1 files changed, 128 insertions, 49 deletions
diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h index ef4a2d84d92..276b40a1683 100644 --- a/include/linux/ethtool.h +++ b/include/linux/ethtool.h @@ -61,6 +61,13 @@ struct ethtool_drvinfo {  				/* For PCI devices, use pci_name(pci_dev). */  	char	reserved1[32];  	char	reserved2[12]; +				/* +				 * Some struct members below are filled in +				 * using ops->get_sset_count().  Obtaining +				 * this info from ethtool_drvinfo is now +				 * deprecated; Use ETHTOOL_GSSET_INFO +				 * instead. +				 */  	__u32	n_priv_flags;	/* number of flags valid in ETHTOOL_GPFLAGS */  	__u32	n_stats;	/* number of u64's from ETHTOOL_GSTATS */  	__u32	testinfo_len; @@ -242,6 +249,7 @@ enum ethtool_stringset {  	ETH_SS_TEST		= 0,  	ETH_SS_STATS,  	ETH_SS_PRIV_FLAGS, +	ETH_SS_NTUPLE_FILTERS,  };  /* for passing string sets for data tagging */ @@ -252,6 +260,17 @@ struct ethtool_gstrings {  	__u8	data[0];  }; +struct ethtool_sset_info { +	__u32	cmd;		/* ETHTOOL_GSSET_INFO */ +	__u32	reserved; +	__u64	sset_mask;	/* input: each bit selects an sset to query */ +				/* output: each bit a returned sset */ +	__u32	data[0];	/* ETH_SS_xxx count, in order, based on bits +				   in sset_mask.  One bit implies one +				   __u32, two bits implies two +				   __u32's, etc. */ +}; +  enum ethtool_test_flags {  	ETH_TEST_FL_OFFLINE	= (1 << 0),	/* online / offline */  	ETH_TEST_FL_FAILED	= (1 << 1),	/* test passed / failed */ @@ -290,6 +309,8 @@ struct ethtool_perm_addr {   */  enum ethtool_flags {  	ETH_FLAG_LRO		= (1 << 15),	/* LRO is enabled */ +	ETH_FLAG_NTUPLE		= (1 << 27),	/* N-tuple filters enabled */ +	ETH_FLAG_RXHASH		= (1 << 28),  };  /* The following structures are for supporting RX network flow @@ -363,6 +384,35 @@ struct ethtool_rxnfc {  	__u32				rule_locs[0];  }; +struct ethtool_rx_ntuple_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_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 */ + +	__u16	        vlan_tag; +	__u16	        vlan_tag_mask; +	__u64		data;      /* user-defined flow spec data */ +	__u64		data_mask; /* user-defined flow spec mask */ + +	/* signed to distinguish between queue and actions (DROP) */ +	__s32		action; +#define ETHTOOL_RXNTUPLE_ACTION_DROP -1 +}; + +struct ethtool_rx_ntuple { +	__u32					cmd; +	struct ethtool_rx_ntuple_flow_spec	fs; +}; +  #define ETHTOOL_FLASH_MAX_FILENAME	128  enum ethtool_flash_op_type {  	ETHTOOL_FLASH_ALL_REGIONS	= 0, @@ -377,6 +427,20 @@ struct ethtool_flash {  #ifdef __KERNEL__ +#include <linux/rculist.h> + +struct ethtool_rx_ntuple_flow_spec_container { +	struct ethtool_rx_ntuple_flow_spec fs; +	struct list_head list; +}; + +struct ethtool_rx_ntuple_list { +#define ETHTOOL_MAX_NTUPLE_LIST_ENTRY 1024 +#define ETHTOOL_MAX_NTUPLE_STRING_PER_ENTRY 14 +	struct list_head	list; +	unsigned int		count; +}; +  struct net_device;  /* Some generic methods drivers may use in their ethtool_ops */ @@ -394,6 +458,7 @@ u32 ethtool_op_get_ufo(struct net_device *dev);  int ethtool_op_set_ufo(struct net_device *dev, u32 data);  u32 ethtool_op_get_flags(struct net_device *dev);  int ethtool_op_set_flags(struct net_device *dev, u32 data); +void ethtool_ntuple_flush(struct net_device *dev);  /**   * ðtool_ops - Alter and report network device settings @@ -426,12 +491,12 @@ int ethtool_op_set_flags(struct net_device *dev, u32 data);   * get_ufo: Report whether UDP fragmentation offload is enabled   * set_ufo: Turn UDP fragmentation offload on or off   * self_test: Run specified self-tests - * get_strings: Return a set of strings that describe the requested objects  + * get_strings: Return a set of strings that describe the requested objects   * phys_id: Identify the device   * get_stats: Return statistics about the device   * get_flags: get 32-bit flags bitmap   * set_flags: set 32-bit flags bitmap - *  + *   * Description:   *   * get_settings: @@ -467,14 +532,20 @@ struct ethtool_ops {  	int	(*nway_reset)(struct net_device *);  	u32	(*get_link)(struct net_device *);  	int	(*get_eeprom_len)(struct net_device *); -	int	(*get_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *); -	int	(*set_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *); +	int	(*get_eeprom)(struct net_device *, +			      struct ethtool_eeprom *, u8 *); +	int	(*set_eeprom)(struct net_device *, +			      struct ethtool_eeprom *, u8 *);  	int	(*get_coalesce)(struct net_device *, struct ethtool_coalesce *);  	int	(*set_coalesce)(struct net_device *, struct ethtool_coalesce *); -	void	(*get_ringparam)(struct net_device *, struct ethtool_ringparam *); -	int	(*set_ringparam)(struct net_device *, struct ethtool_ringparam *); -	void	(*get_pauseparam)(struct net_device *, struct ethtool_pauseparam*); -	int	(*set_pauseparam)(struct net_device *, struct ethtool_pauseparam*); +	void	(*get_ringparam)(struct net_device *, +				 struct ethtool_ringparam *); +	int	(*set_ringparam)(struct net_device *, +				 struct ethtool_ringparam *); +	void	(*get_pauseparam)(struct net_device *, +				  struct ethtool_pauseparam*); +	int	(*set_pauseparam)(struct net_device *, +				  struct ethtool_pauseparam*);  	u32	(*get_rx_csum)(struct net_device *);  	int	(*set_rx_csum)(struct net_device *, u32);  	u32	(*get_tx_csum)(struct net_device *); @@ -486,20 +557,25 @@ struct ethtool_ops {  	void	(*self_test)(struct net_device *, struct ethtool_test *, u64 *);  	void	(*get_strings)(struct net_device *, u32 stringset, u8 *);  	int	(*phys_id)(struct net_device *, u32); -	void	(*get_ethtool_stats)(struct net_device *, struct ethtool_stats *, u64 *); +	void	(*get_ethtool_stats)(struct net_device *, +				     struct ethtool_stats *, u64 *);  	int	(*begin)(struct net_device *);  	void	(*complete)(struct net_device *); -	u32     (*get_ufo)(struct net_device *); -	int     (*set_ufo)(struct net_device *, u32); -	u32     (*get_flags)(struct net_device *); -	int     (*set_flags)(struct net_device *, u32); -	u32     (*get_priv_flags)(struct net_device *); -	int     (*set_priv_flags)(struct net_device *, u32); +	u32	(*get_ufo)(struct net_device *); +	int	(*set_ufo)(struct net_device *, u32); +	u32	(*get_flags)(struct net_device *); +	int	(*set_flags)(struct net_device *, u32); +	u32	(*get_priv_flags)(struct net_device *); +	int	(*set_priv_flags)(struct net_device *, u32);  	int	(*get_sset_count)(struct net_device *, int); -	int	(*get_rxnfc)(struct net_device *, struct ethtool_rxnfc *, void *); +	int	(*get_rxnfc)(struct net_device *, +			     struct ethtool_rxnfc *, void *);  	int	(*set_rxnfc)(struct net_device *, struct ethtool_rxnfc *); -	int     (*flash_device)(struct net_device *, struct ethtool_flash *); +	int	(*flash_device)(struct net_device *, struct ethtool_flash *);  	int	(*reset)(struct net_device *, u32 *); +	int	(*set_rx_ntuple)(struct net_device *, +				 struct ethtool_rx_ntuple *); +	int	(*get_rx_ntuple)(struct net_device *, u32 stringset, void *);  };  #endif /* __KERNEL__ */ @@ -510,29 +586,29 @@ struct ethtool_ops {  #define ETHTOOL_GREGS		0x00000004 /* Get NIC registers. */  #define ETHTOOL_GWOL		0x00000005 /* Get wake-on-lan options. */  #define ETHTOOL_SWOL		0x00000006 /* Set wake-on-lan options. */ -#define ETHTOOL_GMSGLVL		0x00000007 /* Get driver message level */ -#define ETHTOOL_SMSGLVL		0x00000008 /* Set driver msg level. */ +#define ETHTOOL_GMSGLVL	0x00000007 /* Get driver message level */ +#define ETHTOOL_SMSGLVL	0x00000008 /* Set driver msg level. */  #define ETHTOOL_NWAY_RST	0x00000009 /* Restart autonegotiation. */  #define ETHTOOL_GLINK		0x0000000a /* Get link status (ethtool_value) */ -#define ETHTOOL_GEEPROM		0x0000000b /* Get EEPROM data */ -#define ETHTOOL_SEEPROM		0x0000000c /* Set EEPROM data. */ +#define ETHTOOL_GEEPROM	0x0000000b /* Get EEPROM data */ +#define ETHTOOL_SEEPROM	0x0000000c /* Set EEPROM data. */  #define ETHTOOL_GCOALESCE	0x0000000e /* Get coalesce config */  #define ETHTOOL_SCOALESCE	0x0000000f /* Set coalesce config. */  #define ETHTOOL_GRINGPARAM	0x00000010 /* Get ring parameters */  #define ETHTOOL_SRINGPARAM	0x00000011 /* Set ring parameters. */  #define ETHTOOL_GPAUSEPARAM	0x00000012 /* Get pause parameters */  #define ETHTOOL_SPAUSEPARAM	0x00000013 /* Set pause parameters. */ -#define ETHTOOL_GRXCSUM		0x00000014 /* Get RX hw csum enable (ethtool_value) */ -#define ETHTOOL_SRXCSUM		0x00000015 /* Set RX hw csum enable (ethtool_value) */ -#define ETHTOOL_GTXCSUM		0x00000016 /* Get TX hw csum enable (ethtool_value) */ -#define ETHTOOL_STXCSUM		0x00000017 /* Set TX hw csum enable (ethtool_value) */ +#define ETHTOOL_GRXCSUM	0x00000014 /* Get RX hw csum enable (ethtool_value) */ +#define ETHTOOL_SRXCSUM	0x00000015 /* Set RX hw csum enable (ethtool_value) */ +#define ETHTOOL_GTXCSUM	0x00000016 /* Get TX hw csum enable (ethtool_value) */ +#define ETHTOOL_STXCSUM	0x00000017 /* Set TX hw csum enable (ethtool_value) */  #define ETHTOOL_GSG		0x00000018 /* Get scatter-gather enable  					    * (ethtool_value) */  #define ETHTOOL_SSG		0x00000019 /* Set scatter-gather enable  					    * (ethtool_value). */  #define ETHTOOL_TEST		0x0000001a /* execute NIC self-test. */  #define ETHTOOL_GSTRINGS	0x0000001b /* get specified string set */ -#define ETHTOOL_PHYS_ID		0x0000001c /* identify the NIC */ +#define ETHTOOL_PHYS_ID	0x0000001c /* identify the NIC */  #define ETHTOOL_GSTATS		0x0000001d /* get NIC-specific statistics */  #define ETHTOOL_GTSO		0x0000001e /* Get TSO enable (ethtool_value) */  #define ETHTOOL_STSO		0x0000001f /* Set TSO enable (ethtool_value) */ @@ -543,21 +619,24 @@ struct ethtool_ops {  #define ETHTOOL_SGSO		0x00000024 /* Set GSO enable (ethtool_value) */  #define ETHTOOL_GFLAGS		0x00000025 /* Get flags bitmap(ethtool_value) */  #define ETHTOOL_SFLAGS		0x00000026 /* Set flags bitmap(ethtool_value) */ -#define ETHTOOL_GPFLAGS		0x00000027 /* Get driver-private flags bitmap */ -#define ETHTOOL_SPFLAGS		0x00000028 /* Set driver-private flags bitmap */ +#define ETHTOOL_GPFLAGS	0x00000027 /* Get driver-private flags bitmap */ +#define ETHTOOL_SPFLAGS	0x00000028 /* Set driver-private flags bitmap */ -#define	ETHTOOL_GRXFH		0x00000029 /* Get RX flow hash configuration */ -#define	ETHTOOL_SRXFH		0x0000002a /* Set RX flow hash configuration */ +#define ETHTOOL_GRXFH		0x00000029 /* Get RX flow hash configuration */ +#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 */ -#define	ETHTOOL_FLASHDEV	0x00000033 /* Flash firmware to device */ -#define	ETHTOOL_RESET		0x00000034 /* Reset hardware */ +#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 */ +#define ETHTOOL_FLASHDEV	0x00000033 /* Flash firmware to device */ +#define ETHTOOL_RESET		0x00000034 /* Reset hardware */ +#define ETHTOOL_SRXNTUPLE	0x00000035 /* Add an n-tuple filter to device */ +#define ETHTOOL_GRXNTUPLE	0x00000036 /* Get n-tuple filters from device */ +#define ETHTOOL_GSSET_INFO	0x00000037 /* Get string set info */  /* compatibility with older code */  #define SPARC_ETH_GSET		ETHTOOL_GSET @@ -566,18 +645,18 @@ struct ethtool_ops {  /* Indicates what features are supported by the interface. */  #define SUPPORTED_10baseT_Half		(1 << 0)  #define SUPPORTED_10baseT_Full		(1 << 1) -#define SUPPORTED_100baseT_Half		(1 << 2) -#define SUPPORTED_100baseT_Full		(1 << 3) +#define SUPPORTED_100baseT_Half	(1 << 2) +#define SUPPORTED_100baseT_Full	(1 << 3)  #define SUPPORTED_1000baseT_Half	(1 << 4)  #define SUPPORTED_1000baseT_Full	(1 << 5)  #define SUPPORTED_Autoneg		(1 << 6)  #define SUPPORTED_TP			(1 << 7)  #define SUPPORTED_AUI			(1 << 8)  #define SUPPORTED_MII			(1 << 9) -#define SUPPORTED_FIBRE			(1 << 10) +#define SUPPORTED_FIBRE		(1 << 10)  #define SUPPORTED_BNC			(1 << 11)  #define SUPPORTED_10000baseT_Full	(1 << 12) -#define SUPPORTED_Pause			(1 << 13) +#define SUPPORTED_Pause		(1 << 13)  #define SUPPORTED_Asym_Pause		(1 << 14)  #define SUPPORTED_2500baseX_Full	(1 << 15)  #define SUPPORTED_Backplane		(1 << 16) @@ -587,8 +666,8 @@ struct ethtool_ops {  #define SUPPORTED_10000baseR_FEC	(1 << 20)  /* Indicates what features are advertised by the interface. */ -#define ADVERTISED_10baseT_Half		(1 << 0) -#define ADVERTISED_10baseT_Full		(1 << 1) +#define ADVERTISED_10baseT_Half	(1 << 0) +#define ADVERTISED_10baseT_Full	(1 << 1)  #define ADVERTISED_100baseT_Half	(1 << 2)  #define ADVERTISED_100baseT_Full	(1 << 3)  #define ADVERTISED_1000baseT_Half	(1 << 4) @@ -627,12 +706,12 @@ struct ethtool_ops {  #define DUPLEX_FULL		0x01  /* Which connector port. */ -#define PORT_TP			0x00 +#define PORT_TP		0x00  #define PORT_AUI		0x01  #define PORT_MII		0x02  #define PORT_FIBRE		0x03  #define PORT_BNC		0x04 -#define PORT_DA			0x05 +#define PORT_DA		0x05  #define PORT_NONE		0xef  #define PORT_OTHER		0xff @@ -646,7 +725,7 @@ struct ethtool_ops {  /* Enable or disable autonegotiation.  If this is set to enable,   * the forced link modes above are completely ignored.   */ -#define AUTONEG_DISABLE		0x00 +#define AUTONEG_DISABLE	0x00  #define AUTONEG_ENABLE		0x01  /* Mode MDI or MDI-X */ @@ -677,8 +756,8 @@ struct ethtool_ops {  #define	AH_V6_FLOW	0x0b  #define	ESP_V6_FLOW	0x0c  #define	IP_USER_FLOW	0x0d -#define IPV4_FLOW       0x10 -#define IPV6_FLOW       0x11 +#define	IPV4_FLOW	0x10 +#define	IPV6_FLOW	0x11  /* L3-L4 network traffic flow hash options */  #define	RXH_L2DA	(1 << 1)  |