Lines Matching refs:la

607 	struct lacp_aggregator *la;  in lacp_req()  local
619 la = lsc->lsc_active_aggregator; in lacp_req()
621 if (la != NULL) { in lacp_req()
622 req->actor_prio = ntohs(la->la_actor.lip_systemid.lsi_prio); in lacp_req()
623 memcpy(&req->actor_mac, &la->la_actor.lip_systemid.lsi_mac, in lacp_req()
625 req->actor_key = ntohs(la->la_actor.lip_key); in lacp_req()
626 req->actor_portprio = ntohs(la->la_actor.lip_portid.lpi_prio); in lacp_req()
627 req->actor_portno = ntohs(la->la_actor.lip_portid.lpi_portno); in lacp_req()
628 req->actor_state = la->la_actor.lip_state; in lacp_req()
630 req->partner_prio = ntohs(la->la_partner.lip_systemid.lsi_prio); in lacp_req()
631 memcpy(&req->partner_mac, &la->la_partner.lip_systemid.lsi_mac, in lacp_req()
633 req->partner_key = ntohs(la->la_partner.lip_key); in lacp_req()
634 req->partner_portprio = ntohs(la->la_partner.lip_portid.lpi_prio); in lacp_req()
635 req->partner_portno = ntohs(la->la_partner.lip_portid.lpi_portno); in lacp_req()
636 req->partner_state = la->la_partner.lip_state; in lacp_req()
684 struct lacp_aggregator *la = lp->lp_aggregator; in lacp_disable_distributing() local
691 if (la == NULL || (lp->lp_state & LACP_STATE_DISTRIBUTING) == 0) { in lacp_disable_distributing()
695 KASSERT(!TAILQ_EMPTY(&la->la_ports), ("no aggregator ports")); in lacp_disable_distributing()
696 KASSERT(la->la_nports > 0, ("nports invalid (%d)", la->la_nports)); in lacp_disable_distributing()
697 KASSERT(la->la_refcnt >= la->la_nports, ("aggregator refcnt invalid")); in lacp_disable_distributing()
701 lacp_format_lagid_aggregator(la, buf, sizeof(buf)), in lacp_disable_distributing()
702 la->la_nports, la->la_nports - 1)); in lacp_disable_distributing()
704 TAILQ_REMOVE(&la->la_ports, lp, lp_dist_q); in lacp_disable_distributing()
705 la->la_nports--; in lacp_disable_distributing()
706 sc->sc_active = la->la_nports; in lacp_disable_distributing()
708 if (lsc->lsc_active_aggregator == la) { in lacp_disable_distributing()
709 lacp_suppress_distributing(lsc, la); in lacp_disable_distributing()
723 struct lacp_aggregator *la = lp->lp_aggregator; in lacp_enable_distributing() local
736 lacp_format_lagid_aggregator(la, buf, sizeof(buf)), in lacp_enable_distributing()
737 la->la_nports, la->la_nports + 1)); in lacp_enable_distributing()
739 KASSERT(la->la_refcnt > la->la_nports, ("aggregator refcnt invalid")); in lacp_enable_distributing()
740 TAILQ_INSERT_HEAD(&la->la_ports, lp, lp_dist_q); in lacp_enable_distributing()
741 la->la_nports++; in lacp_enable_distributing()
742 sc->sc_active = la->la_nports; in lacp_enable_distributing()
746 if (lsc->lsc_active_aggregator == la) { in lacp_enable_distributing()
747 lacp_suppress_distributing(lsc, la); in lacp_enable_distributing()
904 lacp_suppress_distributing(struct lacp_softc *lsc, struct lacp_aggregator *la) in lacp_suppress_distributing() argument
908 if (lsc->lsc_active_aggregator != la) { in lacp_suppress_distributing()
952 lacp_aggregator_bandwidth(struct lacp_aggregator *la) in lacp_aggregator_bandwidth() argument
957 lp = TAILQ_FIRST(&la->la_ports); in lacp_aggregator_bandwidth()
963 speed *= la->la_nports; in lacp_aggregator_bandwidth()
966 lp->lp_media, la->la_nports)); in lacp_aggregator_bandwidth()
980 struct lacp_aggregator *la; in lacp_select_active_aggregator() local
987 TAILQ_FOREACH(la, &lsc->lsc_aggregators, la_q) { in lacp_select_active_aggregator()
990 if (la->la_nports == 0) { in lacp_select_active_aggregator()
994 speed = lacp_aggregator_bandwidth(la); in lacp_select_active_aggregator()
996 lacp_format_lagid_aggregator(la, buf, sizeof(buf)), in lacp_select_active_aggregator()
997 speed, la->la_nports)); in lacp_select_active_aggregator()
1004 if ((best_la != NULL && LACP_SYS_PRI(la->la_partner) < in lacp_select_active_aggregator()
1008 la == lsc->lsc_active_aggregator)) { in lacp_select_active_aggregator()
1009 best_la = la; in lacp_select_active_aggregator()
1047 struct lacp_aggregator *la; in lacp_update_portmap() local
1060 la = lsc->lsc_active_aggregator; in lacp_update_portmap()
1064 if (la != NULL && la->la_nports > 0) { in lacp_update_portmap()
1065 p->pm_count = la->la_nports; in lacp_update_portmap()
1067 TAILQ_FOREACH(lp, &la->la_ports, lp_dist_q) { in lacp_update_portmap()
1086 speed = lacp_aggregator_bandwidth(la); in lacp_update_portmap()
1281 lacp_aggregator_addref(struct lacp_softc *lsc, struct lacp_aggregator *la) in lacp_aggregator_addref() argument
1287 lacp_format_lagid(&la->la_actor, &la->la_partner, in lacp_aggregator_addref()
1289 la->la_refcnt, la->la_refcnt + 1)); in lacp_aggregator_addref()
1291 KASSERT(la->la_refcnt > 0, ("refcount <= 0")); in lacp_aggregator_addref()
1292 la->la_refcnt++; in lacp_aggregator_addref()
1293 KASSERT(la->la_refcnt > la->la_nports, ("invalid refcount")); in lacp_aggregator_addref()
1297 lacp_aggregator_delref(struct lacp_softc *lsc, struct lacp_aggregator *la) in lacp_aggregator_delref() argument
1303 lacp_format_lagid(&la->la_actor, &la->la_partner, in lacp_aggregator_delref()
1305 la->la_refcnt, la->la_refcnt - 1)); in lacp_aggregator_delref()
1307 KASSERT(la->la_refcnt > la->la_nports, ("invalid refcnt")); in lacp_aggregator_delref()
1308 la->la_refcnt--; in lacp_aggregator_delref()
1309 if (la->la_refcnt > 0) { in lacp_aggregator_delref()
1313 KASSERT(la->la_refcnt == 0, ("refcount not zero")); in lacp_aggregator_delref()
1314 KASSERT(lsc->lsc_active_aggregator != la, ("aggregator active")); in lacp_aggregator_delref()
1316 TAILQ_REMOVE(&lsc->lsc_aggregators, la, la_q); in lacp_aggregator_delref()
1318 free(la, M_DEVBUF); in lacp_aggregator_delref()
1328 struct lacp_aggregator *la; in lacp_aggregator_get() local
1330 la = malloc(sizeof(*la), M_DEVBUF, M_NOWAIT); in lacp_aggregator_get()
1331 if (la) { in lacp_aggregator_get()
1332 la->la_refcnt = 1; in lacp_aggregator_get()
1333 la->la_nports = 0; in lacp_aggregator_get()
1334 TAILQ_INIT(&la->la_ports); in lacp_aggregator_get()
1335 la->la_pending = 0; in lacp_aggregator_get()
1336 TAILQ_INSERT_TAIL(&lsc->lsc_aggregators, la, la_q); in lacp_aggregator_get()
1339 return (la); in lacp_aggregator_get()
1347 lacp_fill_aggregator_id(struct lacp_aggregator *la, const struct lacp_port *lp) in lacp_fill_aggregator_id() argument
1349 lacp_fill_aggregator_id_peer(&la->la_partner, &lp->lp_partner); in lacp_fill_aggregator_id()
1350 lacp_fill_aggregator_id_peer(&la->la_actor, &lp->lp_actor); in lacp_fill_aggregator_id()
1352 la->la_actor.lip_state = lp->lp_state & LACP_STATE_AGGREGATION; in lacp_fill_aggregator_id()
1369 lacp_aggregator_is_compatible(const struct lacp_aggregator *la, in lacp_aggregator_is_compatible() argument
1377 if (!(la->la_actor.lip_state & LACP_STATE_AGGREGATION)) in lacp_aggregator_is_compatible()
1380 if (!lacp_peerinfo_is_compatible(&la->la_partner, &lp->lp_partner)) in lacp_aggregator_is_compatible()
1383 if (!lacp_peerinfo_is_compatible(&la->la_actor, &lp->lp_actor)) in lacp_aggregator_is_compatible()
1429 struct lacp_aggregator *la; in lacp_select() local
1447 TAILQ_FOREACH(la, &lsc->lsc_aggregators, la_q) { in lacp_select()
1448 if (lacp_aggregator_is_compatible(la, lp)) { in lacp_select()
1453 if (la == NULL) { in lacp_select()
1454 la = lacp_aggregator_get(lsc, lp); in lacp_select()
1455 if (la == NULL) { in lacp_select()
1464 lacp_fill_aggregator_id(la, lp); in lacp_select()
1468 if (la->la_refcnt == LACP_MAX_PORTS) in lacp_select()
1470 lacp_aggregator_addref(lsc, la); in lacp_select()
1474 lacp_format_lagid(&la->la_actor, &la->la_partner, in lacp_select()
1477 lp->lp_aggregator = la; in lacp_select()
1489 struct lacp_aggregator *la = lp->lp_aggregator; in lacp_unselect() local
1494 if (la == NULL) { in lacp_unselect()
1499 lacp_aggregator_delref(lsc, la); in lacp_unselect()
1515 struct lacp_aggregator *la; in lacp_sm_mux() local
1523 la = lp->lp_aggregator; in lacp_sm_mux()
1524 KASSERT(lp->lp_mux_state == LACP_MUX_DETACHED || la != NULL, in lacp_sm_mux()
1534 KASSERT(la->la_pending > 0 || in lacp_sm_mux()
1537 if (selected == LACP_SELECTED && la->la_pending == 0) { in lacp_sm_mux()
1579 struct lacp_aggregator *la = lp->lp_aggregator; in lacp_set_mux() local
1593 KASSERT(la->la_pending > 0, in lacp_set_mux()
1595 la->la_pending--; in lacp_set_mux()
1603 la->la_pending++; in lacp_set_mux()
1630 struct lacp_aggregator *la = lp->lp_aggregator; in lacp_sm_mux_timer() local
1633 KASSERT(la->la_pending > 0, ("no pending event")); in lacp_sm_mux_timer()
1636 lacp_format_lagid(&la->la_actor, &la->la_partner, in lacp_sm_mux_timer()
1638 la->la_pending, la->la_pending - 1)); in lacp_sm_mux_timer()
1640 la->la_pending--; in lacp_sm_mux_timer()
2170 lacp_format_lagid_aggregator(const struct lacp_aggregator *la, in lacp_format_lagid_aggregator() argument
2173 if (la == NULL) { in lacp_format_lagid_aggregator()
2177 return (lacp_format_lagid(&la->la_actor, &la->la_partner, buf, buflen)); in lacp_format_lagid_aggregator()