SIOCGIFRSSKEY has reported the hash key since 2016 but nothing could
change it, and nothing reported the indirection table at all, so drivers
exposed it through private sysctls instead: hn rss_ind, ixl rss_lut, ena
an rss node.
Add SIOCGIFRSSTABLE, SIOCSIFRSSTABLE and SIOCSIFRSSKEY. Table entries
and ifrt_nqueues are 16 bits because ice reports 256 receive queues, and
RSS_TABLELEN is 512 to cover the largest isc_rss_table_size iflib
reports. A table that does not fit is refused with EMSGSIZE rather than
truncated, since the ioctl number encodes the structure size.
Both setters need PRIV_NET_HWIOCTL and are otherwise unrestricted.
Nothing keeps either in step with rss_getkey() and rss_table[], so under
options RSS a divergent setting places received work on a CPU the stack
did not expect; that is left to the caller.
rss_hashconfig_to_iftypes() exists because RSS_HASHTYPE_ and RSS_TYPE_
are a permutation of each other rather than a shift.
Signed-off-by: Nick Price <nprice@FreeBSD.org>