Date: Tue, 16 Sep 2014 03:26:42 +0000 (UTC) From: Adrian Chadd <adrian@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r271660 - head/sys/netinet Message-ID: <201409160326.s8G3QgaK087676@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: adrian Date: Tue Sep 16 03:26:42 2014 New Revision: 271660 URL: http://svnweb.freebsd.org/changeset/base/271660 Log: Ensure the correct software IPv4 hash is done based on the configured RSS parameters, rather than assuming we're hashing IPv4+UDP and IPv4+TCP. Modified: head/sys/netinet/in_rss.c Modified: head/sys/netinet/in_rss.c ============================================================================== --- head/sys/netinet/in_rss.c Tue Sep 16 01:59:19 2014 (r271659) +++ head/sys/netinet/in_rss.c Tue Sep 16 03:26:42 2014 (r271660) @@ -671,7 +671,9 @@ rss_mbuf_software_hash_v4(const struct m * XXX TODO: does the hardware hash on 4-tuple if IP * options are present? */ - if (proto == IPPROTO_TCP && is_frag == 0) { + if ((rss_gethashconfig_local() & RSS_HASHTYPE_RSS_TCP_IPV4) && + (proto == IPPROTO_TCP) && + (is_frag == 0)) { if (m->m_len < iphlen + sizeof(struct tcphdr)) { printf("%s: short TCP frame?\n", __func__); return (-1); @@ -683,7 +685,9 @@ rss_mbuf_software_hash_v4(const struct m proto, hashval, hashtype); - } else if (proto == IPPROTO_UDP && is_frag == 0) { + } else if ((rss_gethashconfig_local() & RSS_HASHTYPE_RSS_UDP_IPV4) && + (proto == IPPROTO_UDP) && + (is_frag == 0)) { uh = (struct udphdr *)((caddr_t)ip + iphlen); if (m->m_len < iphlen + sizeof(struct udphdr)) { printf("%s: short UDP frame?\n", __func__); @@ -695,7 +699,7 @@ rss_mbuf_software_hash_v4(const struct m proto, hashval, hashtype); - } else { + } else if (rss_gethashconfig_local() & RSS_HASHTYPE_RSS_IPV4) { /* Default to 2-tuple hash */ return rss_proto_software_hash_v4(ip->ip_src, ip->ip_dst, 0, /* source port */ @@ -703,6 +707,9 @@ rss_mbuf_software_hash_v4(const struct m 0, /* IPPROTO_IP */ hashval, hashtype); + } else { + printf("%s: no available hashtypes!\n", __func__); + return (-1); } }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201409160326.s8G3QgaK087676>