Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 5 Sep 2017 05:28:52 +0000 (UTC)
From:      Sepherosa Ziehau <sephe@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r323170 - in head/sys: net sys
Message-ID:  <201709050528.v855Sqdb075097@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: sephe
Date: Tue Sep  5 05:28:52 2017
New Revision: 323170
URL: https://svnweb.freebsd.org/changeset/base/323170

Log:
  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

Modified:
  head/sys/net/if.c
  head/sys/net/if.h
  head/sys/sys/sockio.h

Modified: head/sys/net/if.c
==============================================================================
--- head/sys/net/if.c	Tue Sep  5 01:40:53 2017	(r323169)
+++ head/sys/net/if.c	Tue Sep  5 05:28:52 2017	(r323170)
@@ -2661,6 +2661,8 @@ ifhwioctl(u_long cmd, struct ifnet *ifp, caddr_t data,
 	case SIOCGIFMEDIA:
 	case SIOCGIFXMEDIA:
 	case SIOCGIFGENERIC:
+	case SIOCGIFRSSKEY:
+	case SIOCGIFRSSHASH:
 		if (ifp->if_ioctl == NULL)
 			return (EOPNOTSUPP);
 		error = (*ifp->if_ioctl)(ifp, cmd, data);

Modified: head/sys/net/if.h
==============================================================================
--- head/sys/net/if.h	Tue Sep  5 01:40:53 2017	(r323169)
+++ head/sys/net/if.h	Tue Sep  5 05:28:52 2017	(r323170)
@@ -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

Modified: head/sys/sys/sockio.h
==============================================================================
--- head/sys/sys/sockio.h	Tue Sep  5 01:40:53 2017	(r323169)
+++ head/sys/sys/sockio.h	Tue Sep  5 05:28:52 2017	(r323170)
@@ -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_ */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201709050528.v855Sqdb075097>