if stoeplitz is enabled, use it to provide a flowid for tcp packets.
authordlg <dlg@openbsd.org>
Mon, 25 Jan 2021 03:40:46 +0000 (03:40 +0000)
committerdlg <dlg@openbsd.org>
Mon, 25 Jan 2021 03:40:46 +0000 (03:40 +0000)
commitaa794c2ba4c927d9ef34a66486baad043e969e5e
tree4092171efabde94c420ee0b0e2129bb0f81a3c0c
parent5df6f9650b0f9fc05757fef099a582bd245d48c0
if stoeplitz is enabled, use it to provide a flowid for tcp packets.

drivers that implement rss and multiple rings depend on the symmetric
toeplitz code, and use it to generate a key that decides with rx
ring a packet lands on. if the toeplitz code is enabled, this diff
has the pcb and tcp layer use the toeplitz code to generate a flowid
for packets they send, which in turn is used to pick a tx ring.
because the nic and the stack use the same key, the tx and rx sides
end up with the same hash/flowid. at the very least this means that
the same rx and tx queue pair on a particular nic are used for both
sides of the connection. as the stack becomes more parallel, it
will also help keep both sides of the tcp connection processing in
the one place.
sys/netinet/in_pcb.c
sys/netinet/in_pcb.h
sys/netinet/tcp_output.c
sys/netinet6/in6_pcb.c