Date: Tue, 17 Apr 2012 20:39:40 -0400 From: Ed Maste <emaste@freebsd.org> To: <freebsd-net@freebsd.org> Subject: lagg(4) MAC address selection proposal Message-ID: <20120418003939.GA32603@sandvine.com>
next in thread | raw e-mail | index | archive | help
When a new lagg(4) interface is created the link layer address from the first port in the group is assigned to the lagg and to all other lagg port members. This means the address assigned to the lagg is different if specified as, for example, "laggport em0 laggport em1" vs "laggport em1 laggport em0". The code in lagg_port_create(), in if_lagg.c that chooses the first l2 address: 575 if (SLIST_EMPTY(&sc->sc_ports)) { 576 sc->sc_primary = lp; 577 lagg_lladdr(sc, IF_LLADDR(ifp)); 578 } else { 579 /* Update link layer address for this port */ 580 lagg_port_lladdr(lp, IF_LLADDR(sc->sc_ifp)); 581 } For the current modes lagg supports this probably doesn't matter much, but we have some improvements in the pipeline for which this behaviour is undesirable. (The first of which is an interface for choosing a different master; this allows a failover lagg to be set to transmit on a new port, without changing link states. With the current behaviour this causes all ports in the lagg to then change their l2 address.) In looking into potential solutions I found that the bridgestp code in bridge(4) searches the list of associated MAC addresses and uses the lowest one when it needs to select one from a group. I'd like to propose using the same logic for lagg's MAC address selection. Can anyone foresee an issue with this change? (I'm not aware of any lagg use cases that rely on the current behaviour.) -Ed
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120418003939.GA32603>