Lines Matching defs:la
67 lacp_aggregator_addref(struct lacp_softc *lsc, struct lacp_aggregator *la)
75 lacp_format_lagid(&la->la_actor, &la->la_partner,
77 la->la_refcnt, la->la_refcnt + 1));
79 KASSERT(la->la_refcnt > 0);
80 la->la_refcnt++;
81 KASSERT(la->la_refcnt > la->la_nports);
85 lacp_aggregator_delref(struct lacp_softc *lsc, struct lacp_aggregator *la)
93 lacp_format_lagid(&la->la_actor, &la->la_partner,
95 la->la_refcnt, la->la_refcnt - 1));
97 KASSERT(la->la_refcnt > la->la_nports);
98 la->la_refcnt--;
99 if (la->la_refcnt > 0) {
103 KASSERT(la->la_refcnt == 0);
104 KASSERT(lsc->lsc_active_aggregator != la);
106 TAILQ_REMOVE(&lsc->lsc_aggregators, la, la_q);
108 free(la, M_DEVBUF);
118 struct lacp_aggregator *la;
120 la = malloc(sizeof(*la), M_DEVBUF, M_NOWAIT);
121 if (la) {
122 la->la_refcnt = 1;
123 la->la_nports = 0;
124 TAILQ_INIT(&la->la_ports);
125 la->la_pending = 0;
126 TAILQ_INSERT_TAIL(&lsc->lsc_aggregators, la, la_q);
129 return la;
137 lacp_fill_aggregator_id(struct lacp_aggregator *la, const struct lacp_port *lp)
140 lacp_fill_aggregator_id_peer(&la->la_partner, &lp->lp_partner);
141 lacp_fill_aggregator_id_peer(&la->la_actor, &lp->lp_actor);
143 la->la_actor.lip_state = lp->lp_state & LACP_STATE_AGGREGATION;
161 lacp_aggregator_is_compatible(const struct lacp_aggregator *la,
170 if (!(la->la_actor.lip_state & LACP_STATE_AGGREGATION)) {
174 if (!lacp_peerinfo_is_compatible(&la->la_partner, &lp->lp_partner)) {
178 if (!lacp_peerinfo_is_compatible(&la->la_actor, &lp->lp_actor)) {
210 struct lacp_aggregator *la;
225 TAILQ_FOREACH(la, &lsc->lsc_aggregators, la_q) {
226 if (lacp_aggregator_is_compatible(la, lp)) {
231 if (la == NULL) {
232 la = lacp_aggregator_get(lsc, lp);
233 if (la == NULL) {
242 lacp_fill_aggregator_id(la, lp);
246 lacp_aggregator_addref(lsc, la);
250 lacp_format_lagid(&la->la_actor, &la->la_partner,
253 lp->lp_aggregator = la;
265 struct lacp_aggregator *la = lp->lp_aggregator;
269 if (la == NULL) {
274 lacp_aggregator_delref(lsc, la);