bonding: fix l23 and l34 load balancing in forwarding path
authorEric Dumazet <[email protected]>
Mon, 15 Apr 2013 17:03:24 +0000 (17:03 +0000)
committerDavid S. Miller <[email protected]>
Thu, 18 Apr 2013 19:07:29 +0000 (15:07 -0400)
commit4394542ca4ec9f28c3c8405063d200b1e7c347d7
treec9a7a3b404ca74bafb3cf45bbfd3de4ceb7bb7e8
parent0c14e5ced264620284bd96f888614768c9bd0976
bonding: fix l23 and l34 load balancing in forwarding path

Since commit 6b923cb7188d46 (bonding: support for IPv6 transmit hashing)
bonding doesn't properly hash traffic in forwarding setups.

Vitaly V. Bursov diagnosed that skb_network_header_len() returned 0 in
this case.

More generally, the transport header might not be in the skb head.

Use pskb_may_pull() & skb_header_pointer() to get it right, and use
proto_ports_offset() in bond_xmit_hash_policy_l34() to get support for
more protocols than TCP and UDP.

Reported-by: Vitaly V. Bursov <[email protected]>
Signed-off-by: Eric Dumazet <[email protected]>
Cc: Jay Vosburgh <[email protected]>
Cc: Andy Gospodarek <[email protected]>
Cc: John Eaglesham <[email protected]>
Tested-by: Vitaly V. Bursov <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
drivers/net/bonding/bond_main.c