Signed-off-by: Or Gerlitz <[EMAIL PROTECTED]> Index: net-2.6.19/drivers/net/bonding/bond_main.c =================================================================== --- net-2.6.19.orig/drivers/net/bonding/bond_main.c 2006-09-20 14:40:13.000000000 +0300 +++ net-2.6.19/drivers/net/bonding/bond_main.c 2006-09-25 11:43:52.000000000 +0300 @@ -1013,6 +1013,23 @@ static struct slave *bond_find_best_slav return bestslave; }
+void bond_setup_by_slave(struct bonding *bond, struct slave *new_active) +{ + bond->dev->hard_header = new_active->dev->hard_header; + bond->dev->rebuild_header = new_active->dev->rebuild_header; + bond->dev->hard_header_cache = new_active->dev->hard_header_cache; + bond->dev->header_cache_update = new_active->dev->header_cache_update; + bond->dev->hard_header_parse = new_active->dev->hard_header_parse; + + bond->dev->type = new_active->dev->type; + bond->dev->hard_header_len = new_active->dev->hard_header_len; + bond->dev->mtu = new_active->dev->mtu; + bond->dev->addr_len = new_active->dev->addr_len; + + memcpy(bond->dev->broadcast, new_active->dev->broadcast, + new_active->dev->addr_len); +} + /** * change_active_interface - change the active slave into the specified one * @bond: our bonding struct @@ -1091,6 +1108,14 @@ void bond_change_active_slave(struct bon if (new_active) { bond_set_slave_active_flags(new_active); } + + /* 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 attributes/functions + */ + if (new_active && new_active->dev->type != ARPHRD_ETHER) + bond_setup_by_slave(bond, new_active); + bond_send_gratuitous_arp(bond); } } - 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