History

bonding: modify the old and add new xmit hash policies

This patch adds two new hash policy modes which use skb_flow_dissect: 3 - Encapsulated layer 2+3 4 - Encapsulated layer 3+4 There should be a good improvement for tunnel users in those modes. It also changes the old hash functions to: hash ^= (__force u32)flow.dst ^ (__force u32)flow.src; hash ^= (hash >> 16); hash ^= (hash >> 8); Where hash will be initialized either to L2 hash, that is SRCMAC[5] XOR DSTMAC[5], or to flow->ports which should be extracted from the upper layer. Flow's dst and src are also extracted based on the xmit policy either directly from the buffer or by using skb_flow_dissect, but in both cases if the protocol is IPv6 then dst and src are obtained by ipv6_addr_hash() on the real addresses. In case of a non-dissectable packet, the algorithms fall back to L2 hashing. The bond_set_mode_ops() function is now obsolete and thus deleted because it was used only to set the proper hash policy. Also we trim a pointer from struct bonding because we no longer need to keep the hash function, now there's only a single hash function - bond_xmit_hash that works based on bond->params.xmit_policy. The hash function and skb_flow_dissect were suggested by Eric Dumazet. The layer names were suggested by Andy Gospodarek, because I suck at semantics.

Nikolay Aleksandrov committed 13 years ago

Commit 32819dc1 parent 357afe95 files · +72 −134Browse files

Showing the changes to include/uapi/linux (1 of 5 files). Show all

Unified · Split

include/uapi/linux/if_bonding.h+2−0
@@ -91,6 +91,8 @@ · 90 unmodified lines
9191 #define BOND_XMIT_POLICY_LAYER2 0 /* layer 2 (MAC only), default */
9292 #define BOND_XMIT_POLICY_LAYER34 1 /* layer 3+4 (IP ^ (TCP || UDP)) */
9393 #define BOND_XMIT_POLICY_LAYER23 2 /* layer 2+3 (IP ^ MAC) */
94+#define BOND_XMIT_POLICY_ENCAP23 3 /* encapsulated layer 2+3 */
95+#define BOND_XMIT_POLICY_ENCAP34 4 /* encapsulated layer 3+4 */
9496
9597 typedef struct ifbond {
9698 __s32 bond_mode;