Lines Matching refs:lp

241 	struct lacp_port *lp = LACP_PORT(lgp);  in lacp_input()  local
252 lacp_pdu_input(lp, m); in lacp_input()
256 lacp_marker_input(lp, m); in lacp_input()
268 lacp_pdu_input(struct lacp_port *lp, struct mbuf *m) in lacp_pdu_input() argument
270 struct lacp_softc *lsc = lp->lp_lsc; in lacp_pdu_input()
316 lacp_dprintf(lp, "lacpdu receive\n"); in lacp_pdu_input()
320 if ((1 << lp->lp_ifp->if_dunit) & lp->lp_lsc->lsc_debug.lsc_rx_test) { in lacp_pdu_input()
321 LACP_TPRINTF((lp, "Dropping RX PDU\n")); in lacp_pdu_input()
326 lacp_sm_rx(lp, du); in lacp_pdu_input()
338 lacp_fill_actorinfo(struct lacp_port *lp, struct lacp_peerinfo *info) in lacp_fill_actorinfo() argument
340 struct lagg_port *lgp = lp->lp_lagg; in lacp_fill_actorinfo()
347 info->lip_portid.lpi_portno = htons(lp->lp_ifp->if_index); in lacp_fill_actorinfo()
348 info->lip_state = lp->lp_state; in lacp_fill_actorinfo()
352 lacp_fill_markerinfo(struct lacp_port *lp, struct lacp_markerinfo *info) in lacp_fill_markerinfo() argument
354 struct ifnet *ifp = lp->lp_ifp; in lacp_fill_markerinfo()
358 memcpy(&info->mi_rq_system, lp->lp_systemid.lsi_mac, ETHER_ADDR_LEN); in lacp_fill_markerinfo()
363 lacp_xmit_lacpdu(struct lacp_port *lp) in lacp_xmit_lacpdu() argument
365 struct lagg_port *lgp = lp->lp_lagg; in lacp_xmit_lacpdu()
370 LACP_LOCK_ASSERT(lp->lp_lsc); in lacp_xmit_lacpdu()
390 du->ldu_actor = lp->lp_actor; in lacp_xmit_lacpdu()
394 du->ldu_partner = lp->lp_partner; in lacp_xmit_lacpdu()
401 lacp_dprintf(lp, "lacpdu transmit\n"); in lacp_xmit_lacpdu()
412 error = lagg_enqueue(lp->lp_ifp, m); in lacp_xmit_lacpdu()
417 lacp_xmit_marker(struct lacp_port *lp) in lacp_xmit_marker() argument
419 struct lagg_port *lgp = lp->lp_lagg; in lacp_xmit_marker()
424 LACP_LOCK_ASSERT(lp->lp_lsc); in lacp_xmit_marker()
444 lp->lp_marker.mi_rq_xid = htonl(ntohl(lp->lp_marker.mi_rq_xid) + 1); in lacp_xmit_marker()
446 mdu->mdu_info = lp->lp_marker; in lacp_xmit_marker()
448 LACP_DPRINTF((lp, "marker transmit, port=%u, sys=%6D, id=%u\n", in lacp_xmit_marker()
453 error = lagg_enqueue(lp->lp_ifp, m); in lacp_xmit_marker()
460 struct lacp_port *lp = LACP_PORT(lgp); in lacp_linkstate() local
461 struct lacp_softc *lsc = lp->lp_lsc; in lacp_linkstate()
480 LACP_DPRINTF((lp, "media changed 0x%x -> 0x%x, ether = %d, fdx = %d, " in lacp_linkstate()
481 "link = %d\n", lp->lp_media, media, IFM_TYPE(media) == IFM_ETHER, in lacp_linkstate()
483 old_state = lp->lp_state; in lacp_linkstate()
484 old_key = lp->lp_key; in lacp_linkstate()
486 lp->lp_media = media; in lacp_linkstate()
493 lacp_port_disable(lp); in lacp_linkstate()
495 lacp_port_enable(lp); in lacp_linkstate()
497 lp->lp_key = lacp_compose_key(lp); in lacp_linkstate()
499 if (old_state != lp->lp_state || old_key != lp->lp_key) { in lacp_linkstate()
500 LACP_DPRINTF((lp, "-> UNSELECTED\n")); in lacp_linkstate()
501 lp->lp_selected = LACP_UNSELECTED; in lacp_linkstate()
510 struct lacp_port *lp; in lacp_tick() local
512 LIST_FOREACH(lp, &lsc->lsc_ports, lp_next) { in lacp_tick()
513 if ((lp->lp_state & LACP_STATE_AGGREGATION) == 0) in lacp_tick()
516 CURVNET_SET(lp->lp_ifp->if_vnet); in lacp_tick()
517 lacp_run_timers(lp); in lacp_tick()
519 lacp_select(lp); in lacp_tick()
520 lacp_sm_mux(lp); in lacp_tick()
521 lacp_sm_tx(lp); in lacp_tick()
522 lacp_sm_ptx_tx_schedule(lp); in lacp_tick()
533 struct lacp_port *lp; in lacp_port_create() local
551 lp = malloc(sizeof(struct lacp_port), in lacp_port_create()
553 if (lp == NULL) in lacp_port_create()
557 lgp->lp_psc = lp; in lacp_port_create()
558 lp->lp_ifp = ifp; in lacp_port_create()
559 lp->lp_lagg = lgp; in lacp_port_create()
560 lp->lp_lsc = lsc; in lacp_port_create()
561 lp->lp_ifma = rifma; in lacp_port_create()
563 LIST_INSERT_HEAD(&lsc->lsc_ports, lp, lp_next); in lacp_port_create()
565 lacp_fill_actorinfo(lp, &lp->lp_actor); in lacp_port_create()
566 lacp_fill_markerinfo(lp, &lp->lp_marker); in lacp_port_create()
567 lp->lp_state = LACP_STATE_ACTIVITY; in lacp_port_create()
568 lp->lp_aggregator = NULL; in lacp_port_create()
569 lacp_sm_rx_set_expired(lp); in lacp_port_create()
579 struct lacp_port *lp = LACP_PORT(lgp); in lacp_port_destroy() local
580 struct lacp_softc *lsc = lp->lp_lsc; in lacp_port_destroy()
585 LACP_TIMER_DISARM(lp, i); in lacp_port_destroy()
588 lacp_disable_collecting(lp); in lacp_port_destroy()
589 lacp_disable_distributing(lp); in lacp_port_destroy()
590 lacp_unselect(lp); in lacp_port_destroy()
592 LIST_REMOVE(lp, lp_next); in lacp_port_destroy()
597 if_delmulti_ifma(lp->lp_ifma); in lacp_port_destroy()
599 free(lp, M_DEVBUF); in lacp_port_destroy()
645 struct lacp_port *lp = LACP_PORT(lgp); in lacp_portreq() local
646 struct lacp_softc *lsc = lp->lp_lsc; in lacp_portreq()
649 req->actor_prio = ntohs(lp->lp_actor.lip_systemid.lsi_prio); in lacp_portreq()
650 memcpy(&req->actor_mac, &lp->lp_actor.lip_systemid.lsi_mac, in lacp_portreq()
652 req->actor_key = ntohs(lp->lp_actor.lip_key); in lacp_portreq()
653 req->actor_portprio = ntohs(lp->lp_actor.lip_portid.lpi_prio); in lacp_portreq()
654 req->actor_portno = ntohs(lp->lp_actor.lip_portid.lpi_portno); in lacp_portreq()
655 req->actor_state = lp->lp_actor.lip_state; in lacp_portreq()
657 req->partner_prio = ntohs(lp->lp_partner.lip_systemid.lsi_prio); in lacp_portreq()
658 memcpy(&req->partner_mac, &lp->lp_partner.lip_systemid.lsi_mac, in lacp_portreq()
660 req->partner_key = ntohs(lp->lp_partner.lip_key); in lacp_portreq()
661 req->partner_portprio = ntohs(lp->lp_partner.lip_portid.lpi_prio); in lacp_portreq()
662 req->partner_portno = ntohs(lp->lp_partner.lip_portid.lpi_portno); in lacp_portreq()
663 req->partner_state = lp->lp_partner.lip_state; in lacp_portreq()
668 lacp_disable_collecting(struct lacp_port *lp) in lacp_disable_collecting() argument
670 LACP_DPRINTF((lp, "collecting disabled\n")); in lacp_disable_collecting()
671 lp->lp_state &= ~LACP_STATE_COLLECTING; in lacp_disable_collecting()
675 lacp_enable_collecting(struct lacp_port *lp) in lacp_enable_collecting() argument
677 LACP_DPRINTF((lp, "collecting enabled\n")); in lacp_enable_collecting()
678 lp->lp_state |= LACP_STATE_COLLECTING; in lacp_enable_collecting()
682 lacp_disable_distributing(struct lacp_port *lp) in lacp_disable_distributing() argument
684 struct lacp_aggregator *la = lp->lp_aggregator; in lacp_disable_distributing()
685 struct lacp_softc *lsc = lp->lp_lsc; in lacp_disable_distributing()
691 if (la == NULL || (lp->lp_state & LACP_STATE_DISTRIBUTING) == 0) { in lacp_disable_distributing()
699 LACP_DPRINTF((lp, "disable distributing on aggregator %s, " in lacp_disable_distributing()
704 TAILQ_REMOVE(&la->la_ports, lp, lp_dist_q); in lacp_disable_distributing()
715 lp->lp_state &= ~LACP_STATE_DISTRIBUTING; in lacp_disable_distributing()
721 lacp_enable_distributing(struct lacp_port *lp) in lacp_enable_distributing() argument
723 struct lacp_aggregator *la = lp->lp_aggregator; in lacp_enable_distributing()
724 struct lacp_softc *lsc = lp->lp_lsc; in lacp_enable_distributing()
730 if ((lp->lp_state & LACP_STATE_DISTRIBUTING) != 0) { in lacp_enable_distributing()
734 LACP_DPRINTF((lp, "enable distributing on aggregator %s, " in lacp_enable_distributing()
740 TAILQ_INSERT_HEAD(&la->la_ports, lp, lp_dist_q); in lacp_enable_distributing()
744 lp->lp_state |= LACP_STATE_DISTRIBUTING; in lacp_enable_distributing()
840 struct lacp_port *lp; in lacp_select_tx_port_by_hash() local
876 lp = map[hash]; in lacp_select_tx_port_by_hash()
878 return (lp->lp_lagg); in lacp_select_tx_port_by_hash()
906 struct lacp_port *lp; in lacp_suppress_distributing() local
917 LIST_FOREACH(lp, &lsc->lsc_ports, lp_next) { in lacp_suppress_distributing()
918 lp->lp_flags |= LACP_PORT_MARK; in lacp_suppress_distributing()
919 if (lacp_xmit_marker(lp) != 0) in lacp_suppress_distributing()
920 lp->lp_flags &= ~LACP_PORT_MARK; in lacp_suppress_distributing()
954 struct lacp_port *lp; in lacp_aggregator_bandwidth() local
957 lp = TAILQ_FIRST(&la->la_ports); in lacp_aggregator_bandwidth()
958 if (lp == NULL) { in lacp_aggregator_bandwidth()
962 speed = ifmedia_baudrate(lp->lp_media); in lacp_aggregator_bandwidth()
965 LACP_DPRINTF((lp, "speed 0? media=0x%x nports=%d\n", in lacp_aggregator_bandwidth()
966 lp->lp_media, la->la_nports)); in lacp_aggregator_bandwidth()
1049 struct lacp_port *lp; in lacp_update_portmap() local
1067 TAILQ_FOREACH(lp, &la->la_ports, lp_dist_q) { in lacp_update_portmap()
1068 p->pm_map[i++] = lp; in lacp_update_portmap()
1070 domain = lp->lp_ifp->if_numa_domain; in lacp_update_portmap()
1074 p->pm_numa[domain].map[count] = lp; in lacp_update_portmap()
1100 lacp_compose_key(struct lacp_port *lp) in lacp_compose_key() argument
1102 struct lagg_port *lgp = lp->lp_lagg; in lacp_compose_key()
1104 u_int media = lp->lp_media; in lacp_compose_key()
1107 if ((lp->lp_state & LACP_STATE_AGGREGATION) == 0) { in lacp_compose_key()
1115 key = lp->lp_ifp->if_index; in lacp_compose_key()
1326 lacp_aggregator_get(struct lacp_softc *lsc, struct lacp_port *lp) in lacp_aggregator_get() argument
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()
1370 const struct lacp_port *lp) in lacp_aggregator_is_compatible() argument
1372 if (!(lp->lp_state & LACP_STATE_AGGREGATION) || in lacp_aggregator_is_compatible()
1373 !(lp->lp_partner.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()
1405 lacp_port_enable(struct lacp_port *lp) in lacp_port_enable() argument
1407 lp->lp_state |= LACP_STATE_AGGREGATION; in lacp_port_enable()
1411 lacp_port_disable(struct lacp_port *lp) in lacp_port_disable() argument
1413 lacp_set_mux(lp, LACP_MUX_DETACHED); in lacp_port_disable()
1415 lp->lp_state &= ~LACP_STATE_AGGREGATION; in lacp_port_disable()
1416 lp->lp_selected = LACP_UNSELECTED; in lacp_port_disable()
1417 lacp_sm_rx_record_default(lp); in lacp_port_disable()
1418 lp->lp_partner.lip_state &= ~LACP_STATE_AGGREGATION; in lacp_port_disable()
1419 lp->lp_state &= ~LACP_STATE_EXPIRED; in lacp_port_disable()
1426 lacp_select(struct lacp_port *lp) in lacp_select() argument
1428 struct lacp_softc *lsc = lp->lp_lsc; in lacp_select()
1432 if (lp->lp_aggregator) { in lacp_select()
1437 if (lp->lp_state & LACP_STATE_DEFAULTED) in lacp_select()
1440 KASSERT(!LACP_TIMER_ISARMED(lp, LACP_TIMER_WAIT_WHILE), in lacp_select()
1443 LACP_DPRINTF((lp, "port lagid=%s\n", in lacp_select()
1444 lacp_format_lagid(&lp->lp_actor, &lp->lp_partner, in lacp_select()
1448 if (lacp_aggregator_is_compatible(la, lp)) { in lacp_select()
1454 la = lacp_aggregator_get(lsc, lp); in lacp_select()
1456 LACP_DPRINTF((lp, "aggregator creation failed\n")); in lacp_select()
1464 lacp_fill_aggregator_id(la, lp); in lacp_select()
1465 LACP_DPRINTF((lp, "aggregator created\n")); in lacp_select()
1467 LACP_DPRINTF((lp, "compatible aggregator found\n")); in lacp_select()
1473 LACP_DPRINTF((lp, "aggregator lagid=%s\n", in lacp_select()
1477 lp->lp_aggregator = la; in lacp_select()
1478 lp->lp_selected = LACP_SELECTED; in lacp_select()
1486 lacp_unselect(struct lacp_port *lp) in lacp_unselect() argument
1488 struct lacp_softc *lsc = lp->lp_lsc; in lacp_unselect()
1489 struct lacp_aggregator *la = lp->lp_aggregator; in lacp_unselect()
1491 KASSERT(!LACP_TIMER_ISARMED(lp, LACP_TIMER_WAIT_WHILE), in lacp_unselect()
1498 lp->lp_aggregator = NULL; in lacp_unselect()
1505 lacp_sm_mux(struct lacp_port *lp) in lacp_sm_mux() argument
1507 struct lagg_port *lgp = lp->lp_lagg; in lacp_sm_mux()
1511 (lp->lp_partner.lip_state & LACP_STATE_SYNC) != 0; in lacp_sm_mux()
1513 (lp->lp_partner.lip_state & LACP_STATE_COLLECTING) != 0; in lacp_sm_mux()
1514 enum lacp_selected selected = lp->lp_selected; in lacp_sm_mux()
1518 lacp_dprintf(lp, "%s: state= 0x%x, selected= 0x%x, " in lacp_sm_mux()
1520 lp->lp_mux_state, selected, p_sync, p_collecting); in lacp_sm_mux()
1523 la = lp->lp_aggregator; in lacp_sm_mux()
1524 KASSERT(lp->lp_mux_state == LACP_MUX_DETACHED || la != NULL, in lacp_sm_mux()
1526 new_state = lp->lp_mux_state; in lacp_sm_mux()
1527 switch (lp->lp_mux_state) { in lacp_sm_mux()
1535 !LACP_TIMER_ISARMED(lp, LACP_TIMER_WAIT_WHILE), in lacp_sm_mux()
1560 lacp_dprintf(lp, "Interface stopped DISTRIBUTING, possible flapping\n"); in lacp_sm_mux()
1568 if (lp->lp_mux_state == new_state) { in lacp_sm_mux()
1572 lacp_set_mux(lp, new_state); in lacp_sm_mux()
1577 lacp_set_mux(struct lacp_port *lp, enum lacp_mux_state new_state) in lacp_set_mux() argument
1579 struct lacp_aggregator *la = lp->lp_aggregator; in lacp_set_mux()
1581 if (lp->lp_mux_state == new_state) { in lacp_set_mux()
1587 lp->lp_state &= ~LACP_STATE_SYNC; in lacp_set_mux()
1588 lacp_disable_distributing(lp); in lacp_set_mux()
1589 lacp_disable_collecting(lp); in lacp_set_mux()
1590 lacp_sm_assert_ntt(lp); in lacp_set_mux()
1592 if (LACP_TIMER_ISARMED(lp, LACP_TIMER_WAIT_WHILE)) { in lacp_set_mux()
1597 LACP_TIMER_DISARM(lp, LACP_TIMER_WAIT_WHILE); in lacp_set_mux()
1598 lacp_unselect(lp); in lacp_set_mux()
1601 LACP_TIMER_ARM(lp, LACP_TIMER_WAIT_WHILE, in lacp_set_mux()
1606 lp->lp_state |= LACP_STATE_SYNC; in lacp_set_mux()
1607 lacp_disable_collecting(lp); in lacp_set_mux()
1608 lacp_sm_assert_ntt(lp); in lacp_set_mux()
1611 lacp_enable_collecting(lp); in lacp_set_mux()
1612 lacp_disable_distributing(lp); in lacp_set_mux()
1613 lacp_sm_assert_ntt(lp); in lacp_set_mux()
1616 lacp_enable_distributing(lp); in lacp_set_mux()
1622 LACP_DPRINTF((lp, "mux_state %d -> %d\n", lp->lp_mux_state, new_state)); in lacp_set_mux()
1624 lp->lp_mux_state = new_state; in lacp_set_mux()
1628 lacp_sm_mux_timer(struct lacp_port *lp) in lacp_sm_mux_timer() argument
1630 struct lacp_aggregator *la = lp->lp_aggregator; in lacp_sm_mux_timer()
1635 LACP_DPRINTF((lp, "%s: aggregator %s, pending %d -> %d\n", __func__, in lacp_sm_mux_timer()
1646 lacp_sm_ptx_update_timeout(struct lacp_port *lp, uint8_t oldpstate) in lacp_sm_ptx_update_timeout() argument
1648 if (LACP_STATE_EQ(oldpstate, lp->lp_partner.lip_state, in lacp_sm_ptx_update_timeout()
1653 LACP_DPRINTF((lp, "partner timeout changed\n")); in lacp_sm_ptx_update_timeout()
1663 LACP_TIMER_DISARM(lp, LACP_TIMER_PERIODIC); in lacp_sm_ptx_update_timeout()
1669 if ((lp->lp_partner.lip_state & LACP_STATE_TIMEOUT)) { in lacp_sm_ptx_update_timeout()
1670 lacp_sm_assert_ntt(lp); in lacp_sm_ptx_update_timeout()
1675 lacp_sm_ptx_tx_schedule(struct lacp_port *lp) in lacp_sm_ptx_tx_schedule() argument
1679 if (!(lp->lp_state & LACP_STATE_ACTIVITY) && in lacp_sm_ptx_tx_schedule()
1680 !(lp->lp_partner.lip_state & LACP_STATE_ACTIVITY)) { in lacp_sm_ptx_tx_schedule()
1685 LACP_TIMER_DISARM(lp, LACP_TIMER_PERIODIC); in lacp_sm_ptx_tx_schedule()
1689 if (LACP_TIMER_ISARMED(lp, LACP_TIMER_PERIODIC)) { in lacp_sm_ptx_tx_schedule()
1693 timeout = (lp->lp_partner.lip_state & LACP_STATE_TIMEOUT) ? in lacp_sm_ptx_tx_schedule()
1696 LACP_TIMER_ARM(lp, LACP_TIMER_PERIODIC, timeout); in lacp_sm_ptx_tx_schedule()
1700 lacp_sm_ptx_timer(struct lacp_port *lp) in lacp_sm_ptx_timer() argument
1702 lacp_sm_assert_ntt(lp); in lacp_sm_ptx_timer()
1706 lacp_sm_rx(struct lacp_port *lp, const struct lacpdu *du) in lacp_sm_rx() argument
1714 if (!(lp->lp_state & LACP_STATE_AGGREGATION)) { in lacp_sm_rx()
1723 &lp->lp_actor.lip_systemid)) { in lacp_sm_rx()
1731 microuptime(&lp->lp_last_lacpdu_rx); in lacp_sm_rx()
1732 lacp_sm_rx_update_selected(lp, du); in lacp_sm_rx()
1733 lacp_sm_rx_update_ntt(lp, du); in lacp_sm_rx()
1734 lacp_sm_rx_record_pdu(lp, du); in lacp_sm_rx()
1736 timeout = (lp->lp_state & LACP_STATE_TIMEOUT) ? in lacp_sm_rx()
1738 LACP_TIMER_ARM(lp, LACP_TIMER_CURRENT_WHILE, timeout); in lacp_sm_rx()
1740 lp->lp_state &= ~LACP_STATE_EXPIRED; in lacp_sm_rx()
1746 lacp_sm_tx(lp); in lacp_sm_rx()
1750 lacp_sm_rx_set_expired(struct lacp_port *lp) in lacp_sm_rx_set_expired() argument
1752 lp->lp_partner.lip_state &= ~LACP_STATE_SYNC; in lacp_sm_rx_set_expired()
1753 lp->lp_partner.lip_state |= LACP_STATE_TIMEOUT; in lacp_sm_rx_set_expired()
1754 LACP_TIMER_ARM(lp, LACP_TIMER_CURRENT_WHILE, LACP_SHORT_TIMEOUT_TIME); in lacp_sm_rx_set_expired()
1755 lp->lp_state |= LACP_STATE_EXPIRED; in lacp_sm_rx_set_expired()
1759 lacp_sm_rx_timer(struct lacp_port *lp) in lacp_sm_rx_timer() argument
1761 if ((lp->lp_state & LACP_STATE_EXPIRED) == 0) { in lacp_sm_rx_timer()
1763 LACP_DPRINTF((lp, "%s: CURRENT -> EXPIRED\n", __func__)); in lacp_sm_rx_timer()
1764 lacp_sm_rx_set_expired(lp); in lacp_sm_rx_timer()
1767 LACP_DPRINTF((lp, "%s: EXPIRED -> DEFAULTED\n", __func__)); in lacp_sm_rx_timer()
1768 lacp_sm_rx_update_default_selected(lp); in lacp_sm_rx_timer()
1769 lacp_sm_rx_record_default(lp); in lacp_sm_rx_timer()
1770 lp->lp_state &= ~LACP_STATE_EXPIRED; in lacp_sm_rx_timer()
1775 lacp_sm_rx_record_pdu(struct lacp_port *lp, const struct lacpdu *du) in lacp_sm_rx_record_pdu() argument
1781 LACP_TRACE(lp); in lacp_sm_rx_record_pdu()
1783 oldpstate = lp->lp_partner.lip_state; in lacp_sm_rx_record_pdu()
1786 || ((lp->lp_state & LACP_STATE_ACTIVITY) && in lacp_sm_rx_record_pdu()
1789 lp->lp_partner = du->ldu_actor; in lacp_sm_rx_record_pdu()
1791 ((LACP_STATE_EQ(lp->lp_state, du->ldu_partner.lip_state, in lacp_sm_rx_record_pdu()
1793 !lacp_compare_peerinfo(&lp->lp_actor, &du->ldu_partner)) in lacp_sm_rx_record_pdu()
1802 if (lp->lp_lsc->lsc_strict_mode) in lacp_sm_rx_record_pdu()
1803 lp->lp_partner.lip_state |= LACP_STATE_SYNC; in lacp_sm_rx_record_pdu()
1805 lp->lp_partner.lip_state &= ~LACP_STATE_SYNC; in lacp_sm_rx_record_pdu()
1808 lp->lp_state &= ~LACP_STATE_DEFAULTED; in lacp_sm_rx_record_pdu()
1810 if (oldpstate != lp->lp_partner.lip_state) { in lacp_sm_rx_record_pdu()
1811 LACP_DPRINTF((lp, "old pstate %s\n", in lacp_sm_rx_record_pdu()
1813 LACP_DPRINTF((lp, "new pstate %s\n", in lacp_sm_rx_record_pdu()
1814 lacp_format_state(lp->lp_partner.lip_state, buf, in lacp_sm_rx_record_pdu()
1818 lacp_sm_ptx_update_timeout(lp, oldpstate); in lacp_sm_rx_record_pdu()
1822 lacp_sm_rx_update_ntt(struct lacp_port *lp, const struct lacpdu *du) in lacp_sm_rx_update_ntt() argument
1825 LACP_TRACE(lp); in lacp_sm_rx_update_ntt()
1827 if (lacp_compare_peerinfo(&lp->lp_actor, &du->ldu_partner) || in lacp_sm_rx_update_ntt()
1828 !LACP_STATE_EQ(lp->lp_state, du->ldu_partner.lip_state, in lacp_sm_rx_update_ntt()
1830 LACP_DPRINTF((lp, "%s: assert ntt\n", __func__)); in lacp_sm_rx_update_ntt()
1831 lacp_sm_assert_ntt(lp); in lacp_sm_rx_update_ntt()
1836 lacp_sm_rx_record_default(struct lacp_port *lp) in lacp_sm_rx_record_default() argument
1840 LACP_TRACE(lp); in lacp_sm_rx_record_default()
1842 oldpstate = lp->lp_partner.lip_state; in lacp_sm_rx_record_default()
1843 if (lp->lp_lsc->lsc_strict_mode) in lacp_sm_rx_record_default()
1844 lp->lp_partner = lacp_partner_admin_strict; in lacp_sm_rx_record_default()
1846 lp->lp_partner = lacp_partner_admin_optimistic; in lacp_sm_rx_record_default()
1847 lp->lp_state |= LACP_STATE_DEFAULTED; in lacp_sm_rx_record_default()
1848 lacp_sm_ptx_update_timeout(lp, oldpstate); in lacp_sm_rx_record_default()
1852 lacp_sm_rx_update_selected_from_peerinfo(struct lacp_port *lp, in lacp_sm_rx_update_selected_from_peerinfo() argument
1856 LACP_TRACE(lp); in lacp_sm_rx_update_selected_from_peerinfo()
1858 if (lacp_compare_peerinfo(&lp->lp_partner, info) || in lacp_sm_rx_update_selected_from_peerinfo()
1859 !LACP_STATE_EQ(lp->lp_partner.lip_state, info->lip_state, in lacp_sm_rx_update_selected_from_peerinfo()
1861 lp->lp_selected = LACP_UNSELECTED; in lacp_sm_rx_update_selected_from_peerinfo()
1867 lacp_sm_rx_update_selected(struct lacp_port *lp, const struct lacpdu *du) in lacp_sm_rx_update_selected() argument
1870 LACP_TRACE(lp); in lacp_sm_rx_update_selected()
1872 lacp_sm_rx_update_selected_from_peerinfo(lp, &du->ldu_actor); in lacp_sm_rx_update_selected()
1876 lacp_sm_rx_update_default_selected(struct lacp_port *lp) in lacp_sm_rx_update_default_selected() argument
1879 LACP_TRACE(lp); in lacp_sm_rx_update_default_selected()
1881 if (lp->lp_lsc->lsc_strict_mode) in lacp_sm_rx_update_default_selected()
1882 lacp_sm_rx_update_selected_from_peerinfo(lp, in lacp_sm_rx_update_default_selected()
1885 lacp_sm_rx_update_selected_from_peerinfo(lp, in lacp_sm_rx_update_default_selected()
1892 lacp_sm_tx(struct lacp_port *lp) in lacp_sm_tx() argument
1896 if (!(lp->lp_state & LACP_STATE_AGGREGATION) in lacp_sm_tx()
1898 || (!(lp->lp_state & LACP_STATE_ACTIVITY) in lacp_sm_tx()
1899 && !(lp->lp_partner.lip_state & LACP_STATE_ACTIVITY)) in lacp_sm_tx()
1902 lp->lp_flags &= ~LACP_PORT_NTT; in lacp_sm_tx()
1905 if (!(lp->lp_flags & LACP_PORT_NTT)) { in lacp_sm_tx()
1910 if (ppsratecheck(&lp->lp_last_lacpdu, &lp->lp_lacpdu_sent, in lacp_sm_tx()
1912 LACP_DPRINTF((lp, "rate limited pdu\n")); in lacp_sm_tx()
1916 if (((1 << lp->lp_ifp->if_dunit) & lp->lp_lsc->lsc_debug.lsc_tx_test) == 0) { in lacp_sm_tx()
1917 error = lacp_xmit_lacpdu(lp); in lacp_sm_tx()
1919 LACP_TPRINTF((lp, "Dropping TX PDU\n")); in lacp_sm_tx()
1923 lp->lp_flags &= ~LACP_PORT_NTT; in lacp_sm_tx()
1925 LACP_DPRINTF((lp, "lacpdu transmit failure, error %d\n", in lacp_sm_tx()
1931 lacp_sm_assert_ntt(struct lacp_port *lp) in lacp_sm_assert_ntt() argument
1934 lp->lp_flags |= LACP_PORT_NTT; in lacp_sm_assert_ntt()
1938 lacp_run_timers(struct lacp_port *lp) in lacp_run_timers() argument
1944 KASSERT(lp->lp_timer[i] >= 0, in lacp_run_timers()
1945 ("invalid timer value %d", lp->lp_timer[i])); in lacp_run_timers()
1946 if (lp->lp_timer[i] == 0) { in lacp_run_timers()
1951 timevalsub(&time_diff, &lp->lp_last_lacpdu_rx); in lacp_run_timers()
1954 --lp->lp_timer[i]; in lacp_run_timers()
1957 --lp->lp_timer[i]; in lacp_run_timers()
1960 if ((lp->lp_timer[i] <= 0) && (lacp_timer_funcs[i])) { in lacp_run_timers()
1961 (*lacp_timer_funcs[i])(lp); in lacp_run_timers()
1968 lacp_marker_input(struct lacp_port *lp, struct mbuf *m) in lacp_marker_input() argument
1970 struct lacp_softc *lsc = lp->lp_lsc; in lacp_marker_input()
1971 struct lagg_port *lgp = lp->lp_lagg; in lacp_marker_input()
2014 error = lagg_enqueue(lp->lp_ifp, m); in lacp_marker_input()
2022 LACP_DPRINTF((lp, "marker response, port=%u, sys=%6D, id=%u\n", in lacp_marker_input()
2027 if (memcmp(&mdu->mdu_info, &lp->lp_marker, in lacp_marker_input()
2032 lp->lp_flags &= ~LACP_PORT_MARK; in lacp_marker_input()
2060 LACP_DPRINTF((lp, "bad marker frame\n")); in lacp_marker_input()
2206 lacp_dprintf(const struct lacp_port *lp, const char *fmt, ...) in lacp_dprintf() argument
2210 if (lp) { in lacp_dprintf()
2211 printf("%s: ", lp->lp_ifp->if_xname); in lacp_dprintf()