svn commit: r186254 - head/sys/net
Andrew Thompson
thompsa at FreeBSD.org
Wed Dec 17 20:58:11 UTC 2008
Author: thompsa
Date: Wed Dec 17 20:58:10 2008
New Revision: 186254
URL: http://svn.freebsd.org/changeset/base/186254
Log:
Update the interface baudrate taking into account the max speed for the
different aggregation protocols.
Modified:
head/sys/net/ieee8023ad_lacp.c
head/sys/net/if_lagg.c
Modified: head/sys/net/ieee8023ad_lacp.c
==============================================================================
--- head/sys/net/ieee8023ad_lacp.c Wed Dec 17 20:24:34 2008 (r186253)
+++ head/sys/net/ieee8023ad_lacp.c Wed Dec 17 20:58:10 2008 (r186254)
@@ -901,6 +901,7 @@ lacp_aggregator_bandwidth(struct lacp_ag
static void
lacp_select_active_aggregator(struct lacp_softc *lsc)
{
+ struct lagg_softc *sc = lsc->lsc_softc;
struct lacp_aggregator *la;
struct lacp_aggregator *best_la = NULL;
uint64_t best_speed = 0;
@@ -956,6 +957,7 @@ lacp_select_active_aggregator(struct lac
#endif /* defined(LACP_DEBUG) */
if (lsc->lsc_active_aggregator != best_la) {
+ sc->sc_ifp->if_baudrate = best_speed;
lsc->lsc_active_aggregator = best_la;
lacp_update_portmap(lsc);
if (best_la) {
Modified: head/sys/net/if_lagg.c
==============================================================================
--- head/sys/net/if_lagg.c Wed Dec 17 20:24:34 2008 (r186253)
+++ head/sys/net/if_lagg.c Wed Dec 17 20:58:10 2008 (r186254)
@@ -1211,6 +1211,7 @@ lagg_linkstate(struct lagg_softc *sc)
{
struct lagg_port *lp;
int new_link = LINK_STATE_DOWN;
+ uint64_t speed = 0;
/* Our link is considered up if at least one of our ports is active */
SLIST_FOREACH(lp, &sc->sc_ports, lp_entries) {
@@ -1220,6 +1221,24 @@ lagg_linkstate(struct lagg_softc *sc)
}
}
if_link_state_change(sc->sc_ifp, new_link);
+
+ /* Update if_baudrate to reflect the max possible speed */
+ switch (sc->sc_proto) {
+ case LAGG_PROTO_FAILOVER:
+ sc->sc_ifp->if_baudrate =
+ sc->sc_primary->lp_ifp->if_baudrate;
+ break;
+ case LAGG_PROTO_ROUNDROBIN:
+ case LAGG_PROTO_LOADBALANCE:
+ case LAGG_PROTO_ETHERCHANNEL:
+ SLIST_FOREACH(lp, &sc->sc_ports, lp_entries)
+ speed += lp->lp_ifp->if_baudrate;
+ sc->sc_ifp->if_baudrate = speed;
+ break;
+ case LAGG_PROTO_LACP:
+ /* LACP updates if_baudrate itself */
+ break;
+ }
}
static void
More information about the svn-src-head
mailing list