Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F157151779
D3423.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
D3423.diff
View Options
Index: head/sys/netinet6/in6_rss.h
===================================================================
--- head/sys/netinet6/in6_rss.h
+++ head/sys/netinet6/in6_rss.h
@@ -42,4 +42,12 @@
uint32_t rss_hash_ip6_2tuple(const struct in6_addr *src,
const struct in6_addr *dst);
+/*
+ * Functions to calculate a software RSS hash for a given mbuf or
+ * packet detail.
+ */
+int rss_proto_software_hash_v6(const struct in6_addr *src,
+ const struct in6_addr *dst, u_short src_port,
+ u_short dst_port, int proto, uint32_t *hashval,
+ uint32_t *hashtype);
#endif /* !_NETINET6_IN6_RSS_H_ */
Index: head/sys/netinet6/in6_rss.c
===================================================================
--- head/sys/netinet6/in6_rss.c
+++ head/sys/netinet6/in6_rss.c
@@ -101,3 +101,52 @@
datalen += sizeof(dstport);
return (rss_hash(datalen, data));
}
+
+/*
+ * Calculate an appropriate ipv6 2-tuple or 4-tuple given the given
+ * IPv6 source/destination address, UDP or TCP source/destination ports
+ * and the protocol type.
+ *
+ * The protocol code may wish to do a software hash of the given
+ * tuple. This depends upon the currently configured RSS hash types.
+ *
+ * This assumes that the packet in question isn't a fragment.
+ *
+ * It also assumes the packet source/destination address
+ * are in "incoming" packet order (ie, source is "far" address.)
+ */
+int
+rss_proto_software_hash_v6(const struct in6_addr *s, const struct in6_addr *d,
+ u_short sp, u_short dp, int proto,
+ uint32_t *hashval, uint32_t *hashtype)
+{
+ uint32_t hash;
+
+ /*
+ * Next, choose the hash type depending upon the protocol
+ * identifier.
+ */
+ if ((proto == IPPROTO_TCP) &&
+ (rss_gethashconfig() & RSS_HASHTYPE_RSS_TCP_IPV6)) {
+ hash = rss_hash_ip6_4tuple(s, sp, d, dp);
+ *hashval = hash;
+ *hashtype = M_HASHTYPE_RSS_TCP_IPV6;
+ return (0);
+ } else if ((proto == IPPROTO_UDP) &&
+ (rss_gethashconfig() & RSS_HASHTYPE_RSS_UDP_IPV6)) {
+ hash = rss_hash_ip6_4tuple(s, sp, d, dp);
+ *hashval = hash;
+ *hashtype = M_HASHTYPE_RSS_UDP_IPV6;
+ return (0);
+ } else if (rss_gethashconfig() & RSS_HASHTYPE_RSS_IPV6) {
+ /* RSS doesn't hash on other protocols like SCTP; so 2-tuple */
+ hash = rss_hash_ip6_2tuple(s, d);
+ *hashval = hash;
+ *hashtype = M_HASHTYPE_RSS_IPV6;
+ return (0);
+ }
+
+ /* No configured available hashtypes! */
+ printf("%s: no available hashtypes!\n", __func__);
+ return (-1);
+}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Tue, May 19, 7:44 PM (11 h, 2 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
33326494
Default Alt Text
D3423.diff (2 KB)
Attached To
Mode
D3423: Implement the IPv6 RSS software hash function
Attached
Detach File
Event Timeline
Log In to Comment