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 incompatible private sysctls instead.
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. Nothing keeps either in step with
the stack's rss_getkey() and rss_table[], so under options RSS a
divergent setting steers received work to an unexpected CPU; 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>