freebsd-nq/sys/net
Will Andrews 0e5f55bb95 Improve the distribution of LAGG port traffic.
I edited the original change to retain the use of arc4random() as a seed for
the hashing as a very basic defense against intentional lagg port selection.

The author's original commit message (edited slightly):

sys/net/ieee8023ad_lacp.c
sys/net/if_lagg.c
	In lagg_hashmbuf, use the FNV hash instead of the old
	hash32_buf.  The hash32 family of functions operate one octet
	at a time, and when run on a string s of length n, their output
	is equivalent to :

		   ----- i=n-1
		   \
	       n    \           (n-i-1)              32
	( seed^  +  /        33^        * s[i] ) % 2^
		   /
		   ----- i=0

	The problem is that the last five bytes of input don't get
	multiplied by sufficiently many powers of 33 to rollover 2^32.
	That means that changing the last few bytes (but obviously not
	the very last) of input will always change the value of the
	hash by a multiple of 33.  In the case of lagg_hashmbuf() with
	ipv4 input, the last four bytes are the TCP or UDP port
	numbers.  Since the output of lagg_hashmbuf is always taken
	modulo the port count, and 3 is a common port count for a lagg,
	that's bad.  It means that the UDP or TCP source port will
	never affect which lagg member is selected on a 3-port lagg.

	At 10Gbps, I was not able to measure any difference in CPU
	consumption between the old and new hash.

Submitted by:	asomers (original commit)
Reviewed by:	emaste, glebius
MFC after:	1 week
Sponsored by:	Spectra Logic
MFSpectraBSD:	1001723 on 2013/08/28 (original)
		1114258 on 2015/01/22 (edit)
2015-01-23 00:06:35 +00:00
..
bpf_buffer.c
bpf_buffer.h
bpf_filter.c
bpf_jitter.c
bpf_jitter.h
bpf_zerocopy.c
bpf_zerocopy.h
bpf.c Eliminate SIOCGIFADDR handling in bpf. 2015-01-16 10:09:28 +00:00
bpf.h MFV r276759: libpcap 1.6.2. 2015-01-06 22:29:12 +00:00
bpfdesc.h
bridgestp.c
bridgestp.h
ethernet.h Move struct ether_vlan_header to ethernet.h, out of if_vlan_var.h, 2014-11-11 10:22:33 +00:00
fddi.h
firewire.h
flowtable.c Start process of removing the use of the deprecated "M_FLOWID" flag 2014-12-01 11:45:24 +00:00
flowtable.h
ieee8023ad_lacp.c Improve the distribution of LAGG port traffic. 2015-01-23 00:06:35 +00:00
ieee8023ad_lacp.h
ieee_oui.h
if_arc.h
if_arcsubr.c Fix typo. 2015-01-09 20:29:13 +00:00
if_arp.h Remove struct arpcom. It is unused by most interface types, that allocate 2014-11-07 15:14:10 +00:00
if_atm.h
if_atmsubr.c
if_bridge.c Remove struct arpcom. It is unused by most interface types, that allocate 2014-11-07 15:14:10 +00:00
if_bridgevar.h
if_clone.c Use standard mtx(9), rwlock(9), sx(9) system initialization macros 2014-11-09 11:11:08 +00:00
if_clone.h Use standard mtx(9), rwlock(9), sx(9) system initialization macros 2014-11-09 11:11:08 +00:00
if_dead.c Provide a dead version of if_get_counter. 2014-12-12 16:10:42 +00:00
if_debug.c
if_disc.c Make checks for rt_mtu generic: 2014-11-06 13:13:09 +00:00
if_dl.h
if_edsc.c
if_enc.c
if_enc.h
if_epair.c
if_ethersubr.c Refactor / restructure the RSS code into generic, IPv4 and IPv6 specific 2015-01-18 18:06:40 +00:00
if_fddisubr.c After r275196 unbreak NOIP and NOINET kernels by hiding an otherwise 2014-11-28 14:51:49 +00:00
if_fwsubr.c After r275196 unbreak NOIP and NOINET kernels by hiding an otherwise 2014-11-28 14:51:49 +00:00
if_gif.c Restore Ethernet-within-IP Encapsulation support that was broken after 2015-01-10 08:28:50 +00:00
if_gif.h Move the recursion detection code into separate function gif_check_nesting(). 2015-01-10 03:13:16 +00:00
if_gre.c Fix an error introduced in r274246. 2015-01-10 03:26:46 +00:00
if_gre.h Extern declarations in C files loses compile-time checking that 2014-12-25 21:32:37 +00:00
if_iso88025subr.c Do not return unlocked/unreferenced lle in arpresolve/nd6_storelladdr - 2014-11-27 23:06:25 +00:00
if_lagg.c Improve the distribution of LAGG port traffic. 2015-01-23 00:06:35 +00:00
if_lagg.h Start process of removing the use of the deprecated "M_FLOWID" flag 2014-12-01 11:45:24 +00:00
if_llatbl.c
if_llatbl.h
if_llc.h
if_loop.c Make checks for rt_mtu generic: 2014-11-06 13:13:09 +00:00
if_me.c Overhaul if_gre(4). 2014-11-07 19:13:19 +00:00
if_media.c
if_media.h
if_mib.c Remove SYSCTL_VNET_* macros, and simply put CTLFLAG_VNET where needed. 2014-11-07 09:39:05 +00:00
if_mib.h
if_pflog.h
if_pfsync.h
if_sppp.h
if_spppfr.c
if_spppsubr.c Replace some calls to fuword() by fueword() with proper error checking. 2014-10-28 15:28:20 +00:00
if_stf.c Remove if_stf.h. It contains only one function declaration used by if_stf(4). 2014-12-23 20:54:59 +00:00
if_tap.c Add a sysctl `net.link.tap.deladdrs_on_close' to configure whether tap 2014-11-24 14:00:27 +00:00
if_tap.h
if_tapvar.h
if_tun.c This is the much-discussed major upgrade to the random(4) device, known to you all as /dev/random. 2014-10-30 21:21:53 +00:00
if_tun.h
if_types.h Renove faith(4) and faithd(8) from base. It looks like industry 2014-11-09 21:33:01 +00:00
if_var.h Fix some minor TSO issues: 2014-11-11 12:05:59 +00:00
if_vlan_var.h Move struct ether_vlan_header to ethernet.h, out of if_vlan_var.h, 2014-11-11 10:22:33 +00:00
if_vlan.c
if_vxlan.c Start process of removing the use of the deprecated "M_FLOWID" flag 2014-12-01 11:45:24 +00:00
if_vxlan.h
if.c Finish r274175: do control plane MTU tracking. 2014-11-17 01:05:29 +00:00
if.h
ifq.h
iso88025.h
netisr_internal.h
netisr.c Start process of removing the use of the deprecated "M_FLOWID" flag 2014-12-01 11:45:24 +00:00
netisr.h
netmap_user.h return kernel-supplied error if available. 2014-11-10 08:31:56 +00:00
netmap.h
paravirt.h
pfil.c
pfil.h
pfkeyv2.h
pfvar.h Back out r276841, r276756, r276747, r276746. The change in r276747 is very 2015-01-22 01:23:16 +00:00
ppp_defs.h
radix_mpath.c
radix_mpath.h
radix.c
radix.h
raw_cb.c
raw_cb.h
raw_usrreq.c
route.c Finish r274175: do control plane MTU tracking. 2014-11-17 01:05:29 +00:00
route.h Finish r274175: do control plane MTU tracking. 2014-11-17 01:05:29 +00:00
rss_config.c Refactor / restructure the RSS code into generic, IPv4 and IPv6 specific 2015-01-18 18:06:40 +00:00
rss_config.h Refactor / restructure the RSS code into generic, IPv4 and IPv6 specific 2015-01-18 18:06:40 +00:00
rtsock.c
sff8436.h
sff8472.h
slcompress.c
slcompress.h
toeplitz.c Refactor / restructure the RSS code into generic, IPv4 and IPv6 specific 2015-01-18 18:06:40 +00:00
toeplitz.h Refactor / restructure the RSS code into generic, IPv4 and IPv6 specific 2015-01-18 18:06:40 +00:00
vnet.c
vnet.h Remove SYSCTL_VNET_* macros, and simply put CTLFLAG_VNET where needed. 2014-11-07 09:39:05 +00:00
zlib.c
zlib.h
zutil.h