Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7a6afab1 authored by Nikolay Aleksandrov's avatar Nikolay Aleksandrov Committed by David S. Miller
Browse files

bonding: document the new xmit policy modes and update the changed ones



Add new documentation for encap2+3 and encap3+4, also update the formula
for the old modes due to the changes.

Signed-off-by: default avatarNikolay Aleksandrov <nikolay@redhat.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 32819dc1
Loading
Loading
Loading
Loading
+36 −30
Original line number Diff line number Diff line
@@ -743,21 +743,16 @@ xmit_hash_policy
		protocol information to generate the hash.

		Uses XOR of hardware MAC addresses and IP addresses to
		generate the hash.  The IPv4 formula is
		generate the hash.  The formula is

		(((source IP XOR dest IP) AND 0xffff) XOR
			( source MAC XOR destination MAC ))
				modulo slave count
		hash = source MAC XOR destination MAC
		hash = hash XOR source IP XOR destination IP
		hash = hash XOR (hash RSHIFT 16)
		hash = hash XOR (hash RSHIFT 8)
		And then hash is reduced modulo slave count.

		The IPv6 formula is

		hash = (source ip quad 2 XOR dest IP quad 2) XOR
		       (source ip quad 3 XOR dest IP quad 3) XOR
		       (source ip quad 4 XOR dest IP quad 4)

		(((hash >> 24) XOR (hash >> 16) XOR (hash >> 8) XOR hash)
			XOR (source MAC XOR destination MAC))
				modulo slave count
		If the protocol is IPv6 then the source and destination
		addresses are first hashed using ipv6_addr_hash.

		This algorithm will place all traffic to a particular
		network peer on the same slave.  For non-IP traffic,
@@ -779,21 +774,16 @@ xmit_hash_policy
		slaves, although a single connection will not span
		multiple slaves.

		The formula for unfragmented IPv4 TCP and UDP packets is

		((source port XOR dest port) XOR
			 ((source IP XOR dest IP) AND 0xffff)
				modulo slave count
		The formula for unfragmented TCP and UDP packets is

		The formula for unfragmented IPv6 TCP and UDP packets is
		hash = source port, destination port (as in the header)
		hash = hash XOR source IP XOR destination IP
		hash = hash XOR (hash RSHIFT 16)
		hash = hash XOR (hash RSHIFT 8)
		And then hash is reduced modulo slave count.

		hash = (source port XOR dest port) XOR
		       ((source ip quad 2 XOR dest IP quad 2) XOR
			(source ip quad 3 XOR dest IP quad 3) XOR
			(source ip quad 4 XOR dest IP quad 4))

		((hash >> 24) XOR (hash >> 16) XOR (hash >> 8) XOR hash)
			modulo slave count
		If the protocol is IPv6 then the source and destination
		addresses are first hashed using ipv6_addr_hash.

		For fragmented TCP or UDP packets and all other IPv4 and
		IPv6 protocol traffic, the source and destination port
@@ -801,10 +791,6 @@ xmit_hash_policy
		formula is the same as for the layer2 transmit hash
		policy.

		The IPv4 policy is intended to mimic the behavior of
		certain switches, notably Cisco switches with PFC2 as
		well as some Foundry and IBM products.

		This algorithm is not fully 802.3ad compliant.  A
		single TCP or UDP conversation containing both
		fragmented and unfragmented packets will see packets
@@ -815,6 +801,26 @@ xmit_hash_policy
		conversations.  Other implementations of 802.3ad may
		or may not tolerate this noncompliance.

	encap2+3

		This policy uses the same formula as layer2+3 but it
		relies on skb_flow_dissect to obtain the header fields
		which might result in the use of inner headers if an
		encapsulation protocol is used. For example this will
		improve the performance for tunnel users because the
		packets will be distributed according to the encapsulated
		flows.

	encap3+4

		This policy uses the same formula as layer3+4 but it
		relies on skb_flow_dissect to obtain the header fields
		which might result in the use of inner headers if an
		encapsulation protocol is used. For example this will
		improve the performance for tunnel users because the
		packets will be distributed according to the encapsulated
		flows.

	The default value is layer2.  This option was added in bonding
	version 2.6.3.  In earlier versions of bonding, this parameter
	does not exist, and the layer2 policy is the only policy.  The