Retire IP_RSSCPUID ; the right thing to do is query the RSS bucket;

map the bucket to an RSS queue, then map the queue to a CPU ID.
This way the bucket->queue and queue->CPU mapping can change
over time.

Introduce IP_RSSBUCKETID - which instead looks up the RSS bucket.
User applications can then map the RSS bucket to a CPU.
This commit is contained in:
Adrian Chadd 2014-06-26 04:12:41 +00:00
parent a6c88ec4fb
commit 7847796a93
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=267895
2 changed files with 12 additions and 6 deletions

View File

@ -468,9 +468,10 @@ __END_DECLS
#define IP_MINTTL 66 /* minimum TTL for packet or drop */
#define IP_DONTFRAG 67 /* don't fragment packet */
#define IP_RECVTOS 68 /* bool; receive IP TOS w/dgram */
#define IP_FLOWID 69 /* flow id for the given socket/inp */
#define IP_FLOWTYPE 70 /* flow type (M_HASHTYPE) */
#define IP_RSSCPUID 71 /* RSS flowid -> CPU id mapping */
#define IP_FLOWID 69 /* get flow id for the given socket/inp */
#define IP_FLOWTYPE 70 /* get flow type (M_HASHTYPE) */
/* 71 - XXX was IP_RSSCPUID - can recycle whenever */
#define IP_RSSBUCKETID 72 /* get RSS flowid -> bucket mapping */
/* IPv4 Source Filter Multicast API [RFC3678] */
#define IP_ADD_SOURCE_MEMBERSHIP 70 /* join a source-specific group */

View File

@ -1244,9 +1244,14 @@ ip_ctloutput(struct socket *so, struct sockopt *sopt)
optval = inp->inp_flowtype;
break;
#ifdef RSS
case IP_RSSCPUID:
optval = rss_hash2cpuid(inp->inp_flowid,
inp->inp_flowtype);
case IP_RSSBUCKETID:
retval = rss_hash2bucket(inp->inp_flowid,
inp->inp_flowtype,
&rss_bucket);
if (retval == 0)
optval = rss_bucket;
else
error = EINVAL;
break;
#endif
}