Each packet type gets its own RSS profile on the E810.
ice_set_rss_flow_flds() adds the UDP profiles only when
rss_gethashconfig() asks for UDP to be hashed on its ports, and the
IPv4 and IPv6 profiles do not match UDP packets. The kernel hashes UDP
on the addresses unless net.inet.rss.udp_4tuple is set, so by default
UDP is not hashed at all and all UDP traffic arrives on one receive
queue.
ice has used rss_gethashconfig() this way since 6e5650896fe4 in
kernels with options RSS, and since 012ecdde3a81 in all kernels.
Before, it used its own configuration, which hashed UDP on its ports.
When the kernel does not ask for the UDP ports, add UDP profiles that
hash the addresses, as the kernel does, and report those packets as
M_HASHTYPE_RSS_IPV4 or M_HASHTYPE_RSS_IPV6, so that the stack uses the
hash instead of computing one in software. SCTP, which the kernel has
no hash type for and which ice never hashed, gets such a profile too;
ice already reports it as M_HASHTYPE_RSS_IPV4 or M_HASHTYPE_RSS_IPV6.
The IPv6 profiles also serve the _EX hash types, so test those bits for
TCP and UDP as well, and count them as configured instead of warning on
every attach that not every requested hash type could be configured.
Fixes: 6e5650896fe4 ("ice(4): properly use kernel option RSS")
Fixes: 012ecdde3a81 ("ice: use newly exposed RSS hash key...")
MFC after: 1 week
Sponsored by: Rubicon Communications, LLC ("Netgate")