Signed-off-by: Or Gerlitz <[EMAIL PROTECTED]> Index: net-2.6.20/drivers/net/bonding/bond_main.c =================================================================== --- net-2.6.20.orig/drivers/net/bonding/bond_main.c 2006-11-30 10:54:23.000000000 +0200 +++ net-2.6.20/drivers/net/bonding/bond_main.c 2006-11-30 11:53:06.000000000 +0200 @@ -1252,6 +1252,24 @@ static int bond_compute_features(struct return 0; }
+ +static void bond_setup_by_slave(struct net_device *bond_dev, + struct net_device *slave_dev) +{ + bond_dev->hard_header = slave_dev->hard_header; + bond_dev->rebuild_header = slave_dev->rebuild_header; + bond_dev->hard_header_cache = slave_dev->hard_header_cache; + bond_dev->header_cache_update = slave_dev->header_cache_update; + bond_dev->hard_header_parse = slave_dev->hard_header_parse; + + bond_dev->type = slave_dev->type; + bond_dev->hard_header_len = slave_dev->hard_header_len; + bond_dev->addr_len = slave_dev->addr_len; + + memcpy(bond_dev->broadcast, slave_dev->broadcast, + slave_dev->addr_len); +} + /* enslave device <slave> to bond device <master> */ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev) { @@ -1326,6 +1344,24 @@ int bond_enslave(struct net_device *bond goto err_undo_flags; } + /* set bonding device ether type by slave - bonding netdevices are + * created with ether_setup, so when the slave type is not ARPHRD_ETHER + * there is a need to override some of the type dependent attribs/funcs. + * + * bond ether type mutual exclusion - don't allow slaves of dissimilar + * ether type (eg ARPHRD_ETHER and ARPHRD_INFINIBAND) share the same bond + */ + if (bond->slave_cnt == 0) { + if (slave_dev->type != ARPHRD_ETHER) + bond_setup_by_slave(bond_dev, slave_dev); + } else if (bond_dev->type != slave_dev->type) { + printk(KERN_ERR DRV_NAME ": %s ether type (%d) is different from " + "other slaves (%d), can not enslave it.\n", slave_dev->name, + slave_dev->type, bond_dev->type); + res = -EINVAL; + goto err_undo_flags; + } + if (slave_dev->set_mac_address == NULL) { printk(KERN_ERR DRV_NAME ": %s: Error: The slave device you specified does " Index: net-2.6.20/drivers/net/bonding/bonding.h =================================================================== --- net-2.6.20.orig/drivers/net/bonding/bonding.h 2006-11-30 10:54:23.000000000 +0200 +++ net-2.6.20/drivers/net/bonding/bonding.h 2006-11-30 10:58:10.000000000 +0200 @@ -201,6 +201,7 @@ struct bonding { struct list_head vlan_list; struct vlan_group *vlgrp; struct packet_type arp_mon_pt; + s8 do_set_mac_addr; }; /** - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html