- Add new functions to in_rss.[ch] which implement software hashing for IPv4 frames that are aware of the currently configured RSS hash types.
- Extend the ip_output() API to have a flag that disables overriding the mbuf with the inp flowid details.
- Set the flowid details in the UDP IPv4 and IPv6 output paths by doing a software hash. This is currently not yet cached in the inpcb so it's recalculated each time.
- Recalculate the flowid of a reassembled IPv4 fragmented datagram.
- .. and reinject the datagram back into netisr for recalcuation.
- Shift the IPv4 netisr queue to use a CPU policy and teach it to use the rss_m2cpuid function to (re)-assign the frame to the correct queue as appropriate.
There's a few things that I know about that I haven't yet implemented:
- IPv6 software hashing;
- IPv6 fragment path handling;
- IPv4 and IPv6 de-capsulation and recalculation (IPSEC, various encapsulation protocols, etc.);
- Automatically configuring bound netisr threads for the configured RSS parameters;
- Ensuring that all fragments in the IPv4/IPv6 output path have the correct RSS hash information copied into the generated fragment mbufs.