if: Add ioctls to get RSS key and hash type/function.
It will be needed by hn(4) to configure its RSS key and hash type/function in the transparent VF mode in order to match VF's RSS settings. The description of the transparent VF mode and the RSS hash value issue are here: https://svnweb.freebsd.org/base?view=revision&revision=322299 https://svnweb.freebsd.org/base?view=revision&revision=322485 These are generic enough to promise two independent IOCs instead of abusing SIOCGDRVSPEC. Setting RSS key and hash type/function is a different story, which probably requires more discussion. Comment about UDP_{IPV4,IPV6,IPV6_EX} were only in the patch in the review request; these hash types are standardized now. Reviewed by: gallatin MFC after: 1 week Sponsored by: Microsoft Differential Revision: https://reviews.freebsd.org/D12174
This commit is contained in:
		| @@ -526,6 +526,42 @@ struct ifi2creq { | ||||
| 	uint8_t data[8];	/* read buffer */ | ||||
| };  | ||||
|  | ||||
| /* | ||||
|  * RSS hash. | ||||
|  */ | ||||
|  | ||||
| #define	RSS_FUNC_NONE		0		/* RSS disabled */ | ||||
| #define	RSS_FUNC_PRIVATE	1		/* non-standard */ | ||||
| #define	RSS_FUNC_TOEPLITZ	2 | ||||
|  | ||||
| #define	RSS_TYPE_IPV4		0x00000001 | ||||
| #define	RSS_TYPE_TCP_IPV4	0x00000002 | ||||
| #define	RSS_TYPE_IPV6		0x00000004 | ||||
| #define	RSS_TYPE_IPV6_EX	0x00000008 | ||||
| #define	RSS_TYPE_TCP_IPV6	0x00000010 | ||||
| #define	RSS_TYPE_TCP_IPV6_EX	0x00000020 | ||||
| #define	RSS_TYPE_UDP_IPV4	0x00000040 | ||||
| #define	RSS_TYPE_UDP_IPV6	0x00000080 | ||||
| #define	RSS_TYPE_UDP_IPV6_EX	0x00000100 | ||||
|  | ||||
| #define	RSS_KEYLEN		128 | ||||
|  | ||||
| struct ifrsskey { | ||||
| 	char		ifrk_name[IFNAMSIZ];	/* if name, e.g. "en0" */ | ||||
| 	uint8_t		ifrk_func;		/* RSS_FUNC_ */ | ||||
| 	uint8_t		ifrk_spare0; | ||||
| 	uint16_t	ifrk_keylen; | ||||
| 	uint8_t		ifrk_key[RSS_KEYLEN]; | ||||
| }; | ||||
|  | ||||
| struct ifrsshash { | ||||
| 	char		ifrh_name[IFNAMSIZ];	/* if name, e.g. "en0" */ | ||||
| 	uint8_t		ifrh_func;		/* RSS_FUNC_ */ | ||||
| 	uint8_t		ifrh_spare0; | ||||
| 	uint16_t	ifrh_spare1; | ||||
| 	uint32_t	ifrh_types;		/* RSS_TYPE_ */ | ||||
| }; | ||||
|  | ||||
| #endif /* __BSD_VISIBLE */ | ||||
|  | ||||
| #ifdef _KERNEL | ||||
|   | ||||
| @@ -134,4 +134,8 @@ | ||||
| #define	SIOCGIFGMEMB	_IOWR('i', 138, struct ifgroupreq) /* get members */ | ||||
| #define	SIOCGIFXMEDIA	_IOWR('i', 139, struct ifmediareq) /* get net xmedia */ | ||||
|  | ||||
| #define	SIOCGIFRSSKEY	_IOWR('i', 150, struct ifrsskey)/* get RSS key */ | ||||
| #define	SIOCGIFRSSHASH	_IOWR('i', 151, struct ifrsshash)/* get the current RSS | ||||
| 							type/func settings */ | ||||
|  | ||||
| #endif /* !_SYS_SOCKIO_H_ */ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user