From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wengang Subject: Re: [PATCH] bonding: move ipoib_header_ops to vmlinux Date: Wed, 26 Nov 2014 09:30:52 +0800 Message-ID: <54752D4C.7000603@oracle.com> References: <20141125.010741.450666241983239119.davem@davemloft.net> <54742D6E.9030605@mellanox.com> <19740.1416940877@famine> <20141125.134450.1265438298771389292.davem@davemloft.net> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: QUOTED-PRINTABLE Cc: ogerlitz-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org, netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org To: David Miller , jay.vosburgh-Z7WLFzj8eWMS+FvcfC7Uqw@public.gmane.org Return-path: In-Reply-To: <20141125.134450.1265438298771389292.davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org> Sender: linux-rdma-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org List-Id: netdev.vger.kernel.org =E4=BA=8E 2014=E5=B9=B411=E6=9C=8826=E6=97=A5 02:44, David Miller =E5=86= =99=E9=81=93: > From: Jay Vosburgh > Date: Tue, 25 Nov 2014 10:41:17 -0800 > >> Or Gerlitz wrote: >> >>> On 11/25/2014 8:07 AM, David Miller wrote: >>>> IPOIB should not work over bonding as it requires that the device >>>> use ARPHRD_ETHER. >>> Hi Dave, >>> >>> IPoIB devices can be enslaved to both bonding and teaming in their = HA mode, >>> the bond device type becomes ARPHRD_INFINIBAND when this happens. >> The point was that pktgen disallows ARPHRD_INFINIBAND, not that >> bonding does. >> >> Pktgen specifically checks for type !=3D ARPHRD_ETHER, so the >> IPoIB bond should not be able to be used with pkgten. My suspicion = is >> that pktgen is being configured on the bond first, then an IPoIB sla= ve >> is added to the bond; this would change its type in a way that pktge= n >> wouldn't notice. > +1 I think it go this way: 1) bond_master is ready 2) bond_enslave enslave a IPOIB interface calling bond_setup_by_slave 3) then bond_setup_by_slave set change master type to ARPHRD_INFINIBAND= =2E code is like this: 1 /* enslave device to bond device */ 2 int bond_enslave(struct net_device *bond_dev, struct net_device=20 *slave_dev) 3 { 4 ... 5 /* set bonding device ether type by slave - bonding netdevices are 6 * created with ether_setup, so when the slave type is not ARPHRD_ETHE= R 7 * there is a need to override some of the type dependent attribs/func= s. 8 * 9 * bond ether type mutual exclusion - don't allow slaves of dissimilar 10 * ether type (eg ARPHRD_ETHER and ARPHRD_INFINIBAND) share the same = bond 11 */ 12 if (!bond_has_slaves(bond)) { 13 if (bond_dev->type !=3D slave_dev->type) { 14 ... 15 if (slave_dev->type !=3D ARPHRD_ETHER) 16 bond_setup_by_slave(bond_dev, slave_dev); 17 else { 18 ether_setup(bond_dev); 19 bond_dev->priv_flags &=3D ~IFF_TX_SKB_SHARING; 20 } 21 22 call_netdevice_notifiers(NETDEV_POST_TYPE_CHANGE, 23 bond_dev); 24 } 25 ... 26 } 27 28 static void bond_setup_by_slave(struct net_device *bond_dev, 29 struct net_device *slave_dev) 30 { 31 bond_dev->header_ops =3D slave_dev->header_ops; 32 33 bond_dev->type =3D slave_dev->type; 34 bond_dev->hard_header_len =3D slave_dev->hard_header_len; 35 bond_dev->addr_len =3D slave_dev->addr_len; 36 37 memcpy(bond_dev->broadcast, slave_dev->broadcast, 38 slave_dev->addr_len); 39 } 40 thanks wengang -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" i= n the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html