Home | History | Annotate | Download | only in lagg

Lines Matching defs:lacpp

308 lacp_dprintf(const struct lacp_softc *lsc, const struct lacp_port *lacpp,
321 if (lacpp != NULL)
322 printf("(%s)", LACP_PORT_XNAME(lacpp));
341 lacp_iscollecting(struct lacp_port *lacpp)
344 return atomic_load_relaxed(&lacpp->lp_collector);
348 lacp_isdistributing(struct lacp_port *lacpp)
351 return ISSET(lacpp->lp_actor.lpi_state, LACP_STATE_DISTRIBUTING);
355 lacp_isactive(struct lacp_softc *lsc, struct lacp_port *lacpp)
358 if (lacpp->lp_selected != LACP_SELECTED)
361 if (lacpp->lp_aggregator == NULL)
364 if (lacpp->lp_aggregator != lsc->lsc_aggregator)
667 struct lacp_port *lacpp;
678 lacpp = kmem_zalloc(sizeof(*lacpp), KM_NOSLEEP);
679 if (lacpp == NULL)
695 kmem_free(lacpp, sizeof(*lacpp));
699 lacpp->lp_added_multi = added_multi;
700 lagg_work_set(&lacpp->lp_work_smtx, lacp_sm_tx_work, lsc);
701 lagg_work_set(&lacpp->lp_work_marker, lacp_marker_work, lsc);
704 lacp_sm_port_init(lsc, lacpp, lp);
707 lp->lp_proto_ctx = (void *)lacpp;
708 lp->lp_prio = ntohs(lacpp->lp_actor.lpi_portprio);
716 struct lacp_port *lacpp;
719 lacpp = lp->lp_proto_ctx;
722 lacpp->lp_actor.lpi_portprio = htons(prio);
731 struct lacp_port *lacpp;
735 lacpp = lp->lp_proto_ctx;
741 LACP_TIMER_DISARM(lacpp, i);
744 lacp_port_disable(lsc, lacpp);
752 struct lacp_port *lacpp;
756 lacpp = lp->lp_proto_ctx;
761 lagg_workq_wait(lsc->lsc_workq, &lacpp->lp_work_smtx);
762 lagg_workq_wait(lsc->lsc_workq, &lacpp->lp_work_marker);
764 if (lacpp->lp_added_multi) {
765 lacp_mcastaddr(&ifr, LACP_PORT_XNAME(lacpp));
771 kmem_free(lacpp, sizeof(*lacpp));
819 struct lacp_port *lacpp;
824 lacpp = lp->lp_proto_ctx;
825 la = lacpp->lp_aggregator;
828 if (lacp_isactive(lsc, lacpp))
830 if (lacp_iscollecting(lacpp))
832 if (lacp_isdistributing(lacpp))
834 if (lacpp->lp_selected == LACP_STANDBY)
845 llp->actor_portprio = ntohs(lacpp->lp_actor.lpi_portprio);
846 llp->actor_portno = ntohs(lacpp->lp_actor.lpi_portno);
847 llp->actor_state = lacpp->lp_actor.lpi_state;
849 llp->partner_portprio = ntohs(lacpp->lp_partner.lpi_portprio);
850 llp->partner_portno = ntohs(lacpp->lp_partner.lpi_portno);
851 llp->partner_state = lacpp->lp_partner.lpi_state;
858 struct lacp_port *lacpp;
870 lacpp = lp->lp_proto_ctx;
889 LACP_DPRINTF((lsc, lacpp,
896 old_linkspeed = lacpp->lp_linkspeed;
897 old_state = lacpp->lp_actor.lpi_state;
900 LACP_DPRINTF((lsc, lacpp,
903 lacpp->lp_linkspeed = new_linkspeed;
909 lacp_port_enable(lsc, lacpp);
911 LACP_DPRINTF((lsc, lacpp,
916 lacp_port_disable(lsc, lacpp);
919 if (old_state != lacpp->lp_actor.lpi_state ||
921 LACP_DPRINTF((lsc, lacpp,
923 lacpp->lp_selected = LACP_UNSELECTED;
926 LACP_DPRINTF((lsc, lacpp,
997 lacp_pdu_input(struct lacp_softc *lsc, struct lacp_port *lacpp, struct mbuf *m)
1053 lacp_dprintf(lsc, lacpp, "lacpdu received\n");
1058 lacp_sm_rx(lsc, lacpp, pi_partner, pi_actor);
1071 struct lacp_softc *lsc, struct lacp_port *lacpp)
1076 if (mi->mi_rq_port != lacpp->lp_actor.lpi_portno)
1079 if (ntohl(mi->mi_rq_xid) != lacpp->lp_marker_xid)
1087 lacp_marker_reply(struct lacp_softc *lsc, struct lacp_port *lacpp,
1096 lp = lacpp->lp_laggport;
1110 lacp_dprintf(lsc, lacpp, "markerdu reply\n");
1119 lacp_marker_recv_response(struct lacp_softc *lsc, struct lacp_port *lacpp,
1130 if (marker_cmp(mi_res, lsc, lacpp) != 0) {
1134 CLR(lacpp->lp_flags, LACP_PORT_MARK);
1164 lacp_marker_input(struct lacp_softc *lsc, struct lacp_port *lacpp,
1213 lacp_dprintf(lsc, lacpp, "markerdu received\n");
1218 lacp_marker_reply(lsc, lacpp, m);
1220 error = lacp_marker_recv_response(lsc, lacpp,
1243 struct lacp_port *lacpp;
1250 lacpp = lp->lp_proto_ctx;
1276 if (!lacp_iscollecting(lacpp) || !lacp_isactive(lsc, lacpp)) {
1345 lacp_port_need_to_tell(struct lacp_port *lacpp)
1348 if (!ISSET(lacpp->lp_actor.lpi_state,
1353 if (!ISSET(lacpp->lp_actor.lpi_state,
1355 && !ISSET(lacpp->lp_partner.lpi_state,
1360 if (!ISSET(lacpp->lp_flags, LACP_PORT_NTT))
1367 lacp_sm_assert_ntt(struct lacp_port *lacpp)
1370 SET(lacpp->lp_flags, LACP_PORT_NTT);
1374 lacp_sm_negate_ntt(struct lacp_port *lacpp)
1377 CLR(lacpp->lp_flags, LACP_PORT_NTT);
1381 lacp_lacpdu_mbuf(struct lacp_softc *lsc, struct lacp_port *lacpp)
1389 ifp_port = lacpp->lp_laggport->lp_ifp;
1414 lacp_peerinfo_actor(lsc, lacpp, &du->ldu_actor);
1418 lacp_peerinfo_partner(lacpp, &du->ldu_partner);
1434 struct lacp_port *lacpp;
1442 lacpp = container_of(lw, struct lacp_port, lp_work_smtx);
1451 m = lacp_lacpdu_mbuf(lsc, lacpp);
1456 lacp_sm_negate_ntt(lacpp);
1457 lp = lacpp->lp_laggport;
1463 lacp_dprintf(lsc, lacpp, "lacpdu transmit\n");
1475 lacp_sm_tx(struct lacp_softc *lsc, struct lacp_port *lacpp)
1478 if (!lacp_port_need_to_tell(lacpp))
1481 lagg_workq_add(lsc->lsc_workq, &lacpp->lp_work_smtx);
1505 lacp_run_timers(struct lacp_softc *lsc, struct lacp_port *lacpp)
1512 KASSERT(lacpp->lp_timer[i] >= 0);
1514 if (lacpp->lp_timer[i] == 0)
1516 if (--lacpp->lp_timer[i] > 0)
1520 lacp_timer_funcs[i](lsc, lacpp);
1546 struct lacp_port *lacpp;
1565 lacpp = lp->lp_proto_ctx;
1566 if (!ISSET(lacpp->lp_actor.lpi_state,
1571 lacp_run_timers(lsc, lacpp);
1572 lacp_select(lsc, lacpp);
1573 lacp_sm_mux(lsc, lacpp);
1574 lacp_sm_tx(lsc, lacpp);
1575 lacp_sm_ptx_schedule(lacpp);
1653 lacp_peerinfo_actor(struct lacp_softc *lsc, struct lacp_port *lacpp,
1660 dst->lpi_port_no = lacpp->lp_actor.lpi_portno;
1661 dst->lpi_port_prio = lacpp->lp_actor.lpi_portprio;
1662 dst->lpi_state = lacpp->lp_actor.lpi_state;
1666 lacp_peerinfo_partner(struct lacp_port *lacpp, struct lacpdu_peerinfo *dst)
1670 la = lacpp->lp_aggregator;
1681 dst->lpi_port_no = lacpp->lp_partner.lpi_portno;
1682 dst->lpi_port_prio = lacpp->lp_partner.lpi_portprio;
1683 dst->lpi_state = lacpp->lp_partner.lpi_state;
1694 lacp_sm_rx_record_default(struct lacp_softc *lsc, struct lacp_port *lacpp)
1700 pi = &lacpp->lp_partner;
1711 SET(lacpp->lp_actor.lpi_state, LACP_STATE_DEFAULTED);
1715 LACP_DPRINTF((lsc, lacpp, "oldpstate %s\n", buf));
1718 LACP_DPRINTF((lsc, lacpp, "newpstate %s\n", buf));
1721 lacp_sm_ptx_update_timeout(lacpp, oldpstate);
1725 lacp_port_is_synced(struct lacp_softc *lsc, struct lacp_port *lacpp,
1732 !ISSET(lacpp->lp_actor.lpi_state, LACP_STATE_ACTIVITY)))
1738 lacp_peerinfo_actor(lsc, lacpp, &actor);
1751 lacp_sm_rx_record_peerinfo(struct lacp_softc *lsc, struct lacp_port *lacpp,
1759 pi = &lacpp->lp_partner;
1760 sid = &lacpp->lp_aggregator_sidbuf;
1762 oldpstate = lacpp->lp_partner.lpi_state;
1773 if (lacp_port_is_synced(lsc, lacpp, my_pi, peer_pi)) {
1775 SET(lacpp->lp_partner.lpi_state, LACP_STATE_SYNC);
1777 CLR(lacpp->lp_partner.lpi_state, LACP_STATE_SYNC);
1780 CLR(lacpp->lp_actor.lpi_state, LACP_STATE_DEFAULTED);
1782 if (oldpstate != lacpp->lp_partner.lpi_state) {
1784 LACP_DPRINTF((lsc, lacpp, "oldpstate %s\n", buf));
1786 LACP_STATE_STR(lacpp->lp_partner.lpi_state,
1788 LACP_DPRINTF((lsc, lacpp, "newpstate %s\n", buf));
1791 lacp_sm_ptx_update_timeout(lacpp, oldpstate);
1795 lacp_sm_rx_set_expired(struct lacp_port *lacpp)
1799 oldpstate = lacpp->lp_partner.lpi_state;
1801 CLR(lacpp->lp_partner.lpi_state, LACP_STATE_SYNC);
1802 SET(lacpp->lp_partner.lpi_state, LACP_STATE_TIMEOUT);
1803 LACP_TIMER_ARM(lacpp, LACP_TIMER_CURRENT_WHILE,
1805 SET(lacpp->lp_actor.lpi_state, LACP_STATE_EXPIRED);
1807 lacp_sm_ptx_update_timeout(lacpp, oldpstate);
1811 lacp_sm_port_init(struct lacp_softc *lsc, struct lacp_port *lacpp,
1817 lacpp->lp_laggport = lp;
1818 lacpp->lp_actor.lpi_state = LACP_STATE_ACTIVITY;
1819 lacpp->lp_actor.lpi_portno = htons(if_get_index(lp->lp_ifp));
1820 lacpp->lp_actor.lpi_portprio = htons(LACP_PORT_PRIO);
1821 lacpp->lp_partner.lpi_state = LACP_STATE_TIMEOUT;
1822 lacpp->lp_aggregator = NULL;
1823 lacpp->lp_marker_xid = 0;
1824 lacpp->lp_mux_state = LACP_MUX_INIT;
1826 lacp_set_mux(lsc, lacpp, LACP_MUX_DETACHED);
1827 lacp_sm_rx_record_default(lsc, lacpp);
1831 lacp_port_disable(struct lacp_softc *lsc, struct lacp_port *lacpp)
1836 if (ISSET(lacpp->lp_actor.lpi_state, LACP_STATE_AGGREGATION))
1837 LACP_DPRINTF((lsc, lacpp, "enable -> disable\n"));
1839 lacp_set_mux(lsc, lacpp, LACP_MUX_DETACHED);
1840 lacp_sm_rx_record_default(lsc, lacpp);
1841 CLR(lacpp->lp_actor.lpi_state,
1843 CLR(lacpp->lp_partner.lpi_state, LACP_STATE_AGGREGATION);
1848 struct lacp_port *lacpp)
1853 if (!ISSET(lacpp->lp_actor.lpi_state, LACP_STATE_AGGREGATION))
1854 LACP_DPRINTF((lsc, lacpp, "disable -> enable\n"));
1856 SET(lacpp->lp_actor.lpi_state, LACP_STATE_AGGREGATION);
1857 lacp_sm_rx_set_expired(lacpp);
1861 lacp_sm_rx_timer(struct lacp_softc *lsc, struct lacp_port *lacpp)
1866 if (!ISSET(lacpp->lp_actor.lpi_state, LACP_STATE_EXPIRED)) {
1868 LACP_DPRINTF((lsc, lacpp, "CURRENT -> EXPIRED\n"));
1869 lacp_sm_rx_set_expired(lacpp);
1871 LACP_DPRINTF((lsc, lacpp, "EXPIRED -> DEFAULTED\n"));
1872 lacp_set_mux(lsc, lacpp, LACP_MUX_DETACHED);
1873 lacp_sm_rx_record_default(lsc, lacpp);
1878 lacp_sm_ptx_timer(struct lacp_softc *lsc __unused, struct lacp_port *lacpp)
1882 lacp_sm_assert_ntt(lacpp);
1886 lacp_sm_ptx_schedule(struct lacp_port *lacpp)
1891 if (!ISSET(lacpp->lp_actor.lpi_state, LACP_STATE_ACTIVITY) &&
1892 !ISSET(lacpp->lp_partner.lpi_state, LACP_STATE_ACTIVITY)) {
1893 LACP_TIMER_DISARM(lacpp, LACP_TIMER_PERIODIC);
1897 if (LACP_TIMER_ISARMED(lacpp, LACP_TIMER_PERIODIC))
1900 timeout = ISSET(lacpp->lp_partner.lpi_state, LACP_STATE_TIMEOUT) ?
1903 LACP_TIMER_ARM(lacpp, LACP_TIMER_PERIODIC, timeout);
1907 lacp_sm_ptx_update_timeout(struct lacp_port *lacpp, uint8_t oldpstate)
1910 if (LACP_STATE_EQ(oldpstate, lacpp->lp_partner.lpi_state,
1914 LACP_DPRINTF((NULL, lacpp, "partner timeout changed\n"));
1916 LACP_TIMER_DISARM(lacpp, LACP_TIMER_PERIODIC);
1919 if (ISSET(lacpp->lp_partner.lpi_state, LACP_STATE_TIMEOUT))
1920 lacp_sm_assert_ntt(lacpp);
1925 struct lacp_port *lacpp)
1930 KASSERT(lacpp->lp_pending > 0);
1932 LACP_AGGREGATOR_STR(lacpp->lp_aggregator, buf, sizeof(buf));
1933 LACP_DPRINTF((lsc, lacpp, "aggregator %s, pending %d -> %d\n",
1934 buf, lacpp->lp_pending, lacpp->lp_pending -1));
1936 lacpp->lp_pending--;
1940 lacp_sm_rx_update_selected(struct lacp_softc *lsc, struct lacp_port *lacpp,
1947 if (lacpp->lp_aggregator == NULL)
1950 lacp_peerinfo_partner(lacpp, &partner);
1954 LACP_DPRINTF((lsc, lacpp,
1959 if (!LACP_STATE_EQ(lacpp->lp_partner.lpi_state,
1961 LACP_DPRINTF((lsc, lacpp,
1963 ISSET(lacpp->lp_partner.lpi_state,
1972 lacpp->lp_selected = LACP_UNSELECTED;
1973 /* lacpp->lp_aggregator will be released at lacp_set_mux() */
1977 lacp_sm_rx_update_ntt(struct lacp_softc *lsc, struct lacp_port *lacpp,
1982 lacp_peerinfo_actor(lsc, lacpp, &actor);
1985 !LACP_STATE_EQ(lacpp->lp_actor.lpi_state, my_pi->lpi_state,
1987 if (ppsratecheck(&lacpp->lp_last_lacpdu, &lacpp->lp_lacpdu_sent,
1989 LACP_DPRINTF((lsc, lacpp,
1992 LACP_DPRINTF((lsc, lacpp, "assert ntt\n"));
1993 lacp_sm_assert_ntt(lacpp);
1999 lacp_sm_rx(struct lacp_softc *lsc, struct lacp_port *lacpp,
2007 lacpp->lp_actor.lpi_state, LACP_STATE_AGGREGATION))
2016 lacp_sm_rx_update_selected(lsc, lacpp, peer_pi);
2017 lacp_sm_rx_update_ntt(lsc, lacpp, my_pi);
2018 lacp_sm_rx_record_peerinfo(lsc, lacpp, my_pi, peer_pi);
2020 timeout = ISSET(lacpp->lp_actor.lpi_state, LACP_STATE_TIMEOUT) ?
2022 LACP_TIMER_ARM(lacpp, LACP_TIMER_CURRENT_WHILE, timeout);
2024 CLR(lacpp->lp_actor.lpi_state, LACP_STATE_EXPIRED);
2027 lacp_sm_tx(lsc, lacpp);
2031 lacp_disable_collecting(struct lacp_port *lacpp)
2034 LACP_DPRINTF((NULL, lacpp, "collecting disabled\n"));
2035 CLR(lacpp->lp_actor.lpi_state, LACP_STATE_COLLECTING);
2036 atomic_store_relaxed(&lacpp->lp_collector, false);
2040 lacp_enable_collecting(struct lacp_port *lacpp)
2042 LACP_DPRINTF((NULL, lacpp, "collecting enabled\n"));
2043 SET(lacpp->lp_actor.lpi_state, LACP_STATE_COLLECTING);
2044 atomic_store_relaxed(&lacpp->lp_collector, true);
2053 struct lacp_port *lacpp;
2069 LIST_FOREACH(lacpp, &la->la_ports, lp_entry_la) {
2070 if (!ISSET(lacpp->lp_actor.lpi_state,
2075 pm_next->pm_ports[n] = lacpp->lp_laggport;
2104 lacp_disable_distributing(struct lacp_softc *lsc, struct lacp_port *lacpp)
2113 if (ISSET(lacpp->lp_actor.lpi_state, LACP_STATE_DISTRIBUTING)) {
2115 "disable distributing on %s\n", LACP_PORT_XNAME(lacpp));
2116 CLR(lacpp->lp_actor.lpi_state, LACP_STATE_DISTRIBUTING);
2125 if (pm->pm_ports[i] == lacpp->lp_laggport) {
2137 lacp_enable_distributing(struct lacp_softc *lsc, struct lacp_port *lacpp)
2142 KASSERT(lacp_isactive(lsc, lacpp));
2145 "enable distributing on %s\n", LACP_PORT_XNAME(lacpp));
2146 SET(lacpp->lp_actor.lpi_state, LACP_STATE_DISTRIBUTING);
2198 lacp_port_attached(struct lacp_softc *lsc, struct lacp_port *lacpp)
2204 if (ISSET(lacpp->lp_actor.lpi_state, LACP_STATE_SYNC))
2207 la = lacpp->lp_aggregator;
2211 SET(lacpp->lp_actor.lpi_state, LACP_STATE_SYNC);
2217 lacp_port_detached(struct lacp_softc *lsc, struct lacp_port *lacpp)
2223 if (!ISSET(lacpp->lp_actor.lpi_state, LACP_STATE_SYNC))
2226 la = lacpp->lp_aggregator;
2230 CLR(lacpp->lp_actor.lpi_state, LACP_STATE_SYNC);
2236 lacp_set_mux(struct lacp_softc *lsc, struct lacp_port *lacpp,
2244 sc = lacpp->lp_laggport->lp_softc;
2247 if (lacpp->lp_mux_state == new_state)
2252 lacp_port_detached(lsc, lacpp);
2253 lacp_disable_distributing(lsc, lacpp);
2254 lacp_disable_collecting(lacpp);
2255 lacp_sm_assert_ntt(lacpp);
2257 if (LACP_TIMER_ISARMED(lacpp, LACP_TIMER_WAIT_WHILE)) {
2258 KASSERT(lacpp->lp_pending > 0);
2259 lacpp->lp_pending--;
2260 LACP_TIMER_DISARM(lacpp, LACP_TIMER_WAIT_WHILE);
2262 lacp_unselect(lsc, lacpp);
2265 LACP_TIMER_ARM(lacpp, LACP_TIMER_WAIT_WHILE,
2267 lacpp->lp_pending++;
2271 lacp_port_attached(lsc, lacpp);
2272 lacp_disable_collecting(lacpp);
2273 lacp_sm_assert_ntt(lacpp);
2277 lacp_port_attached(lsc, lacpp);
2278 lacp_disable_collecting(lacpp);
2279 lacp_sm_assert_ntt(lacpp);
2282 lacp_enable_collecting(lacpp);
2283 lacp_disable_distributing(lsc, lacpp);
2284 lacp_sm_assert_ntt(lacpp);
2287 lacp_enable_distributing(lsc, lacpp);
2294 LACP_DPRINTF((lsc, lacpp, "mux_state %d -> %d\n",
2295 lacpp->lp_mux_state, new_state));
2297 lacpp->lp_mux_state = new_state;
2302 lacp_sm_mux(struct lacp_softc *lsc, struct lacp_port *lacpp)
2309 p_sync = ISSET(lacpp->lp_partner.lpi_state, LACP_STATE_SYNC);
2310 p_collecting = ISSET(lacpp->lp_partner.lpi_state,
2314 next_state = lacpp->lp_mux_state;
2315 la = lacpp->lp_aggregator;
2316 selected = lacpp->lp_selected;
2318 lacpp->lp_mux_state == LACP_MUX_DETACHED);
2320 switch (lacpp->lp_mux_state) {
2326 KASSERTMSG((lacpp->lp_pending > 0 ||
2327 !LACP_TIMER_ISARMED(lacpp, LACP_TIMER_WAIT_WHILE)),
2328 "lp_pending=%d, timer=%d", lacpp->lp_pending,
2329 !LACP_TIMER_ISARMED(lacpp, LACP_TIMER_WAIT_WHILE));
2333 } else if (lacpp->lp_pending == 0) {
2355 LACP_PORT_XNAME(lacpp));
2357 } else if (lacp_isactive(lsc, lacpp) && p_sync) {
2363 !lacp_isactive(lsc, lacpp)
2372 !lacp_isactive(lsc, lacpp)
2375 LACP_DPRINTF((lsc, lacpp,
2385 } while (lacp_set_mux(lsc, lacpp, next_state) == 0);
2408 struct lacp_port *lacpp;
2416 lacpp = LIST_FIRST(&la->la_ports);
2417 if (lacpp == NULL)
2420 linkspeed = lacpp->lp_linkspeed;
2422 LIST_FOREACH(lacpp, &la->la_ports, lp_entry_la) {
2423 if (lacpp->lp_selected == LACP_UNSELECTED)
2435 linkspeed != lacpp->lp_linkspeed) {
2440 if (lacpp->lp_selected != next_selected) {
2441 lacpp->lp_selected = next_selected;
2443 "%s%s\n", LACP_PORT_XNAME(lacpp), msg);
2446 if (lacpp->lp_selected == LACP_SELECTED)
2452 lacp_select(struct lacp_softc *lsc, struct lacp_port *lacpp)
2459 if (lacpp->lp_aggregator != NULL)
2463 if (ISSET(lacpp->lp_actor.lpi_state, LACP_STATE_DEFAULTED))
2466 KASSERT(!LACP_TIMER_ISARMED(lacpp, LACP_TIMER_WAIT_WHILE));
2468 sid = &lacpp->lp_aggregator_sidbuf;
2478 LACP_DPRINTF((lsc, lacpp,
2487 LACP_DPRINTF((lsc, lacpp, "a new aggregator created\n"));
2489 LACP_DPRINTF((lsc, lacpp, "aggregator found\n"));
2494 LACP_DPRINTF((lsc, lacpp, "aggregator lagid=%s\n", buf));
2496 lacpp->lp_aggregator = la;
2497 lacpp->lp_selected = LACP_READY;
2500 if (lacp_port_priority_max(lacpp0, lacpp) == lacpp) {
2501 LIST_INSERT_BEFORE(lacpp0, lacpp, lp_entry_la);
2506 LIST_INSERT_AFTER(lacpp0, lacpp, lp_entry_la);
2512 LIST_INSERT_HEAD(&la->la_ports, lacpp, lp_entry_la);
2518 lacp_unselect(struct lacp_softc *lsc, struct lacp_port *lacpp)
2525 KASSERT(!LACP_TIMER_ISARMED(lacpp, LACP_TIMER_WAIT_WHILE));
2527 la = lacpp->lp_aggregator;
2528 lacpp->lp_selected = LACP_UNSELECTED;
2536 LACP_DPRINTF((lsc, lacpp, "unselect aggregator lagid=%s\n", buf));
2538 LIST_REMOVE(lacpp, lp_entry_la);
2539 lacpp->lp_aggregator = NULL;
2564 struct lacp_port *lacpp;
2572 LIST_FOREACH(lacpp, &la->la_ports, lp_entry_la) {
2573 if (ISSET(lacpp->lp_actor.lpi_state,
2576 &lacpp->lp_work_marker);
2600 lacp_markerdu_mbuf(struct lacp_softc *lsc, struct lacp_port *lacpp)
2609 ifp_port = lacpp->lp_laggport->lp_ifp;
2636 mi->mi_rq_port = lacpp->lp_actor.lpi_portno;
2637 mi->mi_rq_xid = htonl(lacpp->lp_marker_xid);
2650 struct lacp_port *lacpp;
2658 lacpp = container_of(lw, struct lacp_port, lp_work_marker);
2661 lacpp->lp_marker_xid++;
2662 m = lacp_markerdu_mbuf(lsc, lacpp);
2667 SET(lacpp->lp_flags, LACP_PORT_MARK);
2668 lp = lacpp->lp_laggport;
2674 lacp_dprintf(lsc, lacpp, "markerdu transmit\n");
2768 struct lacp_port *lacpp;
2779 lacpp = lp->lp_proto_ctx;
2780 linkspeed = MAX(linkspeed, lacpp->lp_linkspeed);