bonding: xor/802.3ad improved slave hash
Add support for alternate slave selection algorithms to bonding balance-xor and 802.3ad modes. Default mode (what we have now: xor of MAC addresses) is "layer2", new choice is "layer3+4", using IP and port information for hashing to select peer. Originally submitted by Jason Gabler for balance-xor mode; modified by Jay Vosburgh to additionally support 802.3ad mode. Jason's original comment is as follows: The attached patch to the Linux Etherchannel Bonding driver modifies the driver's "balance-xor" mode as follows: - alternate hashing policy support for mode 2 * Added kernel parameter "xmit_policy" to allow the specification of different hashing policies for mode 2. The original mode 2 policy is the default, now found in xmit_hash_policy_layer2(). * Added xmit_hash_policy_layer34() This patch was inspired by hashing policies implemented by Cisco, Foundry and IBM, which are explained in Foundry documentation found at: http://www.foundrynet.com/services/documentation/sribcg/Trunking.html#112750 Signed-off-by: Jason Gabler <jygabler@lbl.gov> Signed-off-by: Jay Vosburgh <fubar@us.ibm.com>
This commit is contained in:

committed by
Jeff Garzik

parent
c3ade5cad0
commit
169a3e6663
@@ -2346,7 +2346,6 @@ int bond_3ad_xmit_xor(struct sk_buff *skb, struct net_device *dev)
|
||||
{
|
||||
struct slave *slave, *start_at;
|
||||
struct bonding *bond = dev->priv;
|
||||
struct ethhdr *data = (struct ethhdr *)skb->data;
|
||||
int slave_agg_no;
|
||||
int slaves_in_agg;
|
||||
int agg_id;
|
||||
@@ -2377,7 +2376,7 @@ int bond_3ad_xmit_xor(struct sk_buff *skb, struct net_device *dev)
|
||||
goto out;
|
||||
}
|
||||
|
||||
slave_agg_no = (data->h_dest[5]^bond->dev->dev_addr[5]) % slaves_in_agg;
|
||||
slave_agg_no = bond->xmit_hash_policy(skb, dev, slaves_in_agg);
|
||||
|
||||
bond_for_each_slave(bond, slave, i) {
|
||||
struct aggregator *agg = SLAVE_AD_INFO(slave).port.aggregator;
|
||||
|
Reference in New Issue
Block a user