Lines Matching full:lp

396 lagg_proto_input(struct lagg_softc *sc, struct lagg_port *lp, struct mbuf *m)
399 return (lagg_protos[sc->sc_proto].pr_input(sc, lp, m));
403 lagg_proto_addport(struct lagg_softc *sc, struct lagg_port *lp)
409 return (lagg_protos[sc->sc_proto].pr_addport(lp));
413 lagg_proto_delport(struct lagg_softc *sc, struct lagg_port *lp)
417 lagg_protos[sc->sc_proto].pr_delport(lp);
421 lagg_proto_linkstate(struct lagg_softc *sc, struct lagg_port *lp)
425 lagg_protos[sc->sc_proto].pr_linkstate(lp);
461 lagg_proto_portreq(struct lagg_softc *sc, struct lagg_port *lp, void *v)
465 lagg_protos[sc->sc_proto].pr_portreq(lp, v);
476 struct lagg_port *lp;
482 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries)
483 EVENTHANDLER_INVOKE(vlan_config, lp->lp_ifp, vtag);
495 struct lagg_port *lp;
501 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries)
502 EVENTHANDLER_INVOKE(vlan_unconfig, lp->lp_ifp, vtag);
621 struct lagg_port *lp;
632 while ((lp = CK_SLIST_FIRST(&sc->sc_ports)) != NULL)
633 lagg_port_destroy(lp, 1);
666 struct lagg_port *lp;
675 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries) {
676 ena &= lp->lp_ifp->if_capenable;
677 ena2 &= lp->lp_ifp->if_capenable2;
689 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries) {
690 lagg_setcaps(lp, ena, ena2);
691 ena &= lp->lp_ifp->if_capenable;
692 ena2 &= lp->lp_ifp->if_capenable2;
701 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries) {
702 cap &= lp->lp_ifp->if_capabilities;
703 cap2 &= lp->lp_ifp->if_capabilities2;
704 hwa &= lp->lp_ifp->if_hwassist;
705 if_hw_tsomax_common(lp->lp_ifp, &hw_tsomax);
733 struct lagg_port *lp, *tlp;
757 lp = (struct lagg_port *)ifp->if_lagg;
758 if (lp->lp_softc == sc)
802 lp = malloc(sizeof(struct lagg_port), M_LAGG, M_WAITOK | M_ZERO);
803 lp->lp_softc = sc;
810 free(lp, M_LAGG);
817 lp->lp_flags |= LAGG_PORT_STACK;
821 free(lp, M_LAGG);
833 lp->lp_ifp = ifp;
835 bcopy(IF_LLADDR(ifp), lp->lp_lladdr, ifp->if_addrlen);
836 lp->lp_ifcapenable = ifp->if_capenable;
844 lagg_setflags(lp, 1);
847 sc->sc_primary = lp;
850 lp->lp_iftype = ifp->if_type;
852 ifp->if_lagg = lp;
853 lp->lp_ioctl = ifp->if_ioctl;
855 lp->lp_output = ifp->if_output;
859 pval = lp->port_counters.val;
877 CK_SLIST_INSERT_AFTER(tlp, lp, lp_entries);
879 CK_SLIST_INSERT_HEAD(&sc->sc_ports, lp, lp_entries);
882 lagg_setmulti(lp);
884 if ((error = lagg_proto_addport(sc, lp)) != 0) {
886 lagg_port_destroy(lp, 0);
904 struct lagg_port *lp;
908 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries) {
909 if (lp->lp_flags & LAGG_PORT_STACK) {
910 sc_ptr = (struct lagg_softc *)lp->lp_ifp->if_softc;
922 struct lagg_port *lp;
925 lp = __containerof(ec, struct lagg_port, lp_epoch_ctx);
926 ifp = lp->lp_ifp;
929 free(lp, M_LAGG);
933 lagg_port_destroy(struct lagg_port *lp, int rundelport)
935 struct lagg_softc *sc = lp->lp_softc;
937 struct ifnet *ifp = lp->lp_ifp;
944 lagg_proto_delport(sc, lp);
946 if (lp->lp_detaching == 0)
947 lagg_clrmulti(lp);
950 ifp->if_type = lp->lp_iftype;
951 ifp->if_ioctl = lp->lp_ioctl;
952 ifp->if_output = lp->lp_output;
956 pval = lp->port_counters.val;
963 CK_SLIST_REMOVE(&sc->sc_ports, lp, lagg_port, lp_entries);
967 if (lp == sc->sc_primary) {
991 if (lp->lp_ifflags)
994 if (lp->lp_detaching == 0) {
995 lagg_setflags(lp, 0);
996 lagg_setcaps(lp, lp->lp_ifcapenable, lp->lp_ifcapenable2);
997 if_setlladdr(ifp, lp->lp_lladdr, ifp->if_addrlen);
1004 NET_EPOCH_CALL(lagg_port_destroy_cb, &lp->lp_epoch_ctx);
1017 struct lagg_port *lp = NULL;
1024 if ((lp = ifp->if_lagg) == NULL || (sc = lp->lp_softc) == NULL)
1040 if (__predict_true((lp = ifp->if_lagg) != NULL &&
1041 lp->lp_softc == sc))
1042 lagg_port2req(lp, rp);
1050 if (lp->lp_ioctl == NULL) {
1054 error = (*lp->lp_ioctl)(ifp, cmd, data);
1077 if (lp != NULL && lp->lp_ioctl != NULL)
1078 return ((*lp->lp_ioctl)(ifp, cmd, data));
1101 struct lagg_port *lp;
1112 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries) {
1114 oldval = lp->port_counters.val[cnt];
1116 lpifp = lp->lp_ifp;
1144 struct lagg_port *lp = ifp->if_lagg;
1149 if (lp != NULL)
1150 return ((*lp->lp_output)(ifp, m, dst, ro));
1161 struct lagg_port *lp;
1164 if ((lp = ifp->if_lagg) == NULL)
1170 sc = lp->lp_softc;
1173 lp->lp_detaching = 1;
1174 lagg_port_destroy(lp, 1);
1180 lagg_port2req(struct lagg_port *lp, struct lagg_reqport *rp)
1182 struct lagg_softc *sc = lp->lp_softc;
1185 strlcpy(rp->rp_portname, lp->lp_ifp->if_xname, sizeof(rp->rp_portname));
1186 rp->rp_prio = lp->lp_prio;
1187 rp->rp_flags = lp->lp_flags;
1188 lagg_proto_portreq(sc, lp, &rp->rp_psc);
1193 if (lp == sc->sc_primary)
1195 if (lp == lagg_link_active(sc, sc->sc_primary))
1202 if (LAGG_PORTACTIVE(lp))
1208 if (lacp_isactive(lp))
1210 if (lacp_iscollecting(lp))
1212 if (lacp_isdistributing(lp))
1224 struct lagg_port *lp;
1240 lp = lagg_link_active(sc, sc->sc_primary);
1241 if (lp != NULL) {
1243 lp_ifp = lp->lp_ifp;
1265 struct lagg_port *lp;
1269 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries) {
1271 if_up(lp->lp_ifp);
1273 if_down(lp->lp_ifp);
1275 if (lp->lp_ioctl != NULL)
1276 lp->lp_ioctl(lp->lp_ifp, SIOCSIFFLAGS, (caddr_t)&ifr);
1285 struct lagg_port *lp;
1300 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries) {
1301 if (memcmp(IF_LLADDR(ifp), IF_LLADDR(lp->lp_ifp),
1303 if_setlladdr(lp->lp_ifp, IF_LLADDR(ifp), ifp->if_addrlen);
1351 struct lagg_port *lp;
1371 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries) {
1375 lagg_port2req(lp, &rpbuf);
1425 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries)
1426 ro->ro_active += LAGG_PORTACTIVE(lp);
1517 struct lacp_port *lp;
1542 LIST_FOREACH(lp, &lsc->lsc_ports, lp_next)
1543 lp->lp_state |= LACP_STATE_TIMEOUT;
1549 LIST_FOREACH(lp, &lsc->lsc_ports, lp_next)
1550 lp->lp_state &= ~LACP_STATE_TIMEOUT;
1595 if (__predict_true((lp = tpif->if_lagg) != NULL &&
1596 lp->lp_softc == sc))
1597 lagg_port2req(lp, rp);
1659 if ((lp = (struct lagg_port *)tpif->if_lagg) == NULL ||
1660 lp->lp_softc != sc) {
1667 error = lagg_port_destroy(lp, 1);
1675 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries) {
1676 lagg_setflags(lp, 1);
1701 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries) {
1702 lagg_clrmulti(lp);
1703 lagg_setmulti(lp);
1719 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries) {
1720 if (lp->lp_ioctl != NULL)
1721 (*lp->lp_ioctl)(lp->lp_ifp, cmd, data);
1735 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries) {
1736 if (lp->lp_ioctl != NULL)
1737 error = (*lp->lp_ioctl)(lp->lp_ifp, cmd, data);
1744 ifr->ifr_mtu, lp->lp_ifp->if_xname, ifp->if_mtu);
1753 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries) {
1754 if (lp->lp_ioctl != NULL)
1755 (*lp->lp_ioctl)(lp->lp_ifp, cmd, data);
1828 struct lagg_port *lp;
1845 lp = lb->lb_ports[p];
1846 return (lagg_link_active(sc, lp));
1866 struct lagg_port *lp;
1899 lp = lookup_snd_tag_port(ifp, params->hdr.flowid,
1901 if (lp == NULL) {
1905 if (lp->lp_ifp == NULL) {
1909 lp_ifp = lp->lp_ifp;
1996 lagg_setmulti(struct lagg_port *lp)
1998 struct lagg_softc *sc = lp->lp_softc;
1999 struct ifnet *ifp = lp->lp_ifp;
2017 SLIST_INSERT_HEAD(&lp->lp_mc_head, mc, mc_entries);
2020 SLIST_FOREACH (mc, &lp->lp_mc_head, mc_entries) {
2030 lagg_clrmulti(struct lagg_port *lp)
2034 LAGG_XLOCK_ASSERT(lp->lp_softc);
2035 while ((mc = SLIST_FIRST(&lp->lp_mc_head)) != NULL) {
2036 SLIST_REMOVE(&lp->lp_mc_head, mc, lagg_mc, mc_entries);
2037 if (mc->mc_ifma && lp->lp_detaching == 0)
2045 lagg_setcaps(struct lagg_port *lp, int cap, int cap2)
2050 if (lp->lp_ifp->if_capenable == cap &&
2051 lp->lp_ifp->if_capenable2 == cap2)
2053 if (lp->lp_ioctl == NULL)
2056 if ((lp->lp_ifp->if_capabilities & IFCAP_NV) != 0) {
2060 (*lp->lp_ioctl)(lp->lp_ifp, SIOCSIFCAPNV,
2064 (*lp->lp_ioctl)(lp->lp_ifp, SIOCSIFCAP, (caddr_t)&ifr);
2070 lagg_setflag(struct lagg_port *lp, int flag, int status,
2073 struct lagg_softc *sc = lp->lp_softc;
2075 struct ifnet *ifp = lp->lp_ifp;
2092 if (status != (lp->lp_ifflags & flag)) {
2096 lp->lp_ifflags &= ~flag;
2097 lp->lp_ifflags |= status;
2108 lagg_setflags(struct lagg_port *lp, int status)
2113 error = lagg_setflag(lp, lagg_pflags[i].flag,
2176 struct lagg_port *lp = ifp->if_lagg;
2177 struct lagg_softc *sc = lp->lp_softc;
2182 lp->lp_detaching != 0 ||
2188 m = lagg_proto_input(sc, lp, m);
2211 struct lagg_port *lp = ifp->if_lagg;
2212 struct lagg_softc *sc = lp->lp_softc;
2217 lp->lp_detaching != 0 ||
2223 m = lagg_proto_input(sc, lp, m);
2253 struct lagg_port *lp;
2259 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries) {
2260 if (LAGG_PORTACTIVE(lp))
2270 struct lagg_port *lp;
2282 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries) {
2283 if (lp->lp_ifp->if_link_state == LINK_STATE_UP) {
2302 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries)
2303 speed += lp->lp_ifp->if_baudrate;
2316 struct lagg_port *lp = (struct lagg_port *)ifp->if_lagg;
2319 if (lp != NULL)
2320 sc = lp->lp_softc;
2326 lagg_proto_linkstate(sc, lp);
2331 lagg_link_active(struct lagg_softc *sc, struct lagg_port *lp)
2348 if (lp == NULL)
2350 if (LAGG_PORTACTIVE(lp)) {
2351 rval = lp;
2354 if ((lp_next = CK_SLIST_NEXT(lp, lp_entries)) != NULL &&
2405 struct lagg_port *lp;
2411 lp = CK_SLIST_FIRST(&sc->sc_ports);
2414 lp = CK_SLIST_NEXT(lp, lp_entries);
2420 if ((lp = lagg_link_active(sc, lp)) == NULL) {
2427 return (lagg_enqueue(lp->lp_ifp, m));
2438 struct lagg_port *lp, *last = NULL;
2442 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries) {
2443 if (!LAGG_PORTACTIVE(lp))
2455 last = lp;
2483 struct lagg_port *lp;
2486 if ((lp = lagg_link_active(sc, sc->sc_primary)) == NULL) {
2493 return (lagg_enqueue(lp->lp_ifp, m));
2497 lagg_fail_input(struct lagg_softc *sc, struct lagg_port *lp, struct mbuf *m)
2502 if (lp == sc->sc_primary || V_lagg_failover_rx_all) {
2513 if (tmp_tp == NULL || tmp_tp == lp) {
2529 struct lagg_port *lp;
2537 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries)
2538 lagg_lb_port_create(lp);
2552 lagg_lb_porttable(struct lagg_softc *sc, struct lagg_port *lp)
2562 if (lp_next == lp)
2578 lagg_lb_port_create(struct lagg_port *lp)
2580 struct lagg_softc *sc = lp->lp_softc;
2585 lagg_lb_port_destroy(struct lagg_port *lp)
2587 struct lagg_softc *sc = lp->lp_softc;
2588 lagg_lb_porttable(sc, lp);
2595 struct lagg_port *lp = NULL;
2604 lp = lb->lb_ports[p];
2610 if ((lp = lagg_link_active(sc, lp)) == NULL) {
2617 return (lagg_enqueue(lp->lp_ifp, m));
2626 struct lagg_port *lp;
2630 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries)
2631 lacp_port_create(lp);
2637 struct lagg_port *lp;
2641 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries)
2642 lacp_port_destroy(lp);
2652 struct lagg_port *lp;
2657 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries)
2658 lacp_port_destroy(lp);
2661 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries)
2662 lacp_port_create(lp);
2668 struct lagg_port *lp;
2671 lp = lacp_select_tx_port(sc, m, &err);
2672 if (lp == NULL) {
2679 return (lagg_enqueue(lp->lp_ifp, m));
2683 lagg_lacp_input(struct lagg_softc *sc, struct lagg_port *lp, struct mbuf *m)
2694 m = lacp_input(lp, m);
2703 if (!lacp_iscollecting(lp) || !lacp_isactive(lp)) {
2714 lagg_default_input(struct lagg_softc *sc, struct lagg_port *lp, struct mbuf *m)