Lines Matching refs:lp

397 lagg_proto_input(struct lagg_softc *sc, struct lagg_port *lp, struct mbuf *m)
400 return (lagg_protos[sc->sc_proto].pr_input(sc, lp, m));
404 lagg_proto_addport(struct lagg_softc *sc, struct lagg_port *lp)
410 return (lagg_protos[sc->sc_proto].pr_addport(lp));
414 lagg_proto_delport(struct lagg_softc *sc, struct lagg_port *lp)
418 lagg_protos[sc->sc_proto].pr_delport(lp);
422 lagg_proto_linkstate(struct lagg_softc *sc, struct lagg_port *lp)
426 lagg_protos[sc->sc_proto].pr_linkstate(lp);
462 lagg_proto_portreq(struct lagg_softc *sc, struct lagg_port *lp, void *v)
466 lagg_protos[sc->sc_proto].pr_portreq(lp, v);
477 struct lagg_port *lp;
483 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries)
484 EVENTHANDLER_INVOKE(vlan_config, lp->lp_ifp, vtag);
496 struct lagg_port *lp;
502 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries)
503 EVENTHANDLER_INVOKE(vlan_unconfig, lp->lp_ifp, vtag);
626 struct lagg_port *lp;
637 while ((lp = CK_SLIST_FIRST(&sc->sc_ports)) != NULL)
638 lagg_port_destroy(lp, 1);
671 struct lagg_port *lp;
680 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries) {
681 ena &= lp->lp_ifp->if_capenable;
682 ena2 &= lp->lp_ifp->if_capenable2;
694 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries) {
695 lagg_setcaps(lp, ena, ena2);
696 ena &= lp->lp_ifp->if_capenable;
697 ena2 &= lp->lp_ifp->if_capenable2;
705 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries) {
706 cap &= lp->lp_ifp->if_capabilities;
707 cap2 &= lp->lp_ifp->if_capabilities2;
708 hwa &= lp->lp_ifp->if_hwassist;
709 if_hw_tsomax_common(lp->lp_ifp, &hw_tsomax);
736 struct lagg_port *lp, *tlp;
760 lp = (struct lagg_port *)ifp->if_lagg;
761 if (lp->lp_softc == sc)
805 lp = malloc(sizeof(struct lagg_port), M_LAGG, M_WAITOK | M_ZERO);
806 lp->lp_softc = sc;
813 free(lp, M_LAGG);
820 lp->lp_flags |= LAGG_PORT_STACK;
824 free(lp, M_LAGG);
836 lp->lp_ifp = ifp;
838 bcopy(IF_LLADDR(ifp), lp->lp_lladdr, ifp->if_addrlen);
839 lp->lp_ifcapenable = ifp->if_capenable;
847 lagg_setflags(lp, 1);
850 sc->sc_primary = lp;
853 lp->lp_iftype = ifp->if_type;
855 ifp->if_lagg = lp;
856 lp->lp_ioctl = ifp->if_ioctl;
858 lp->lp_output = ifp->if_output;
862 pval = lp->port_counters.val;
880 CK_SLIST_INSERT_AFTER(tlp, lp, lp_entries);
882 CK_SLIST_INSERT_HEAD(&sc->sc_ports, lp, lp_entries);
885 lagg_setmulti(lp);
887 if ((error = lagg_proto_addport(sc, lp)) != 0) {
889 lagg_port_destroy(lp, 0);
907 struct lagg_port *lp;
911 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries) {
912 if (lp->lp_flags & LAGG_PORT_STACK) {
913 sc_ptr = (struct lagg_softc *)lp->lp_ifp->if_softc;
925 struct lagg_port *lp;
928 lp = __containerof(ec, struct lagg_port, lp_epoch_ctx);
929 ifp = lp->lp_ifp;
932 free(lp, M_LAGG);
936 lagg_port_destroy(struct lagg_port *lp, int rundelport)
938 struct lagg_softc *sc = lp->lp_softc;
940 struct ifnet *ifp = lp->lp_ifp;
947 lagg_proto_delport(sc, lp);
949 if (lp->lp_detaching == 0)
950 lagg_clrmulti(lp);
953 ifp->if_type = lp->lp_iftype;
954 ifp->if_ioctl = lp->lp_ioctl;
955 ifp->if_output = lp->lp_output;
959 pval = lp->port_counters.val;
966 CK_SLIST_REMOVE(&sc->sc_ports, lp, lagg_port, lp_entries);
970 if (lp == sc->sc_primary) {
994 if (lp->lp_ifflags)
997 if (lp->lp_detaching == 0) {
998 lagg_setflags(lp, 0);
999 lagg_setcaps(lp, lp->lp_ifcapenable, lp->lp_ifcapenable2);
1000 if_setlladdr(ifp, lp->lp_lladdr, ifp->if_addrlen);
1007 NET_EPOCH_CALL(lagg_port_destroy_cb, &lp->lp_epoch_ctx);
1020 struct lagg_port *lp = NULL;
1027 if ((lp = ifp->if_lagg) == NULL || (sc = lp->lp_softc) == NULL)
1043 if (__predict_true((lp = ifp->if_lagg) != NULL &&
1044 lp->lp_softc == sc))
1045 lagg_port2req(lp, rp);
1053 if (lp->lp_ioctl == NULL) {
1057 error = (*lp->lp_ioctl)(ifp, cmd, data);
1080 if (lp != NULL && lp->lp_ioctl != NULL)
1081 return ((*lp->lp_ioctl)(ifp, cmd, data));
1104 struct lagg_port *lp;
1115 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries) {
1117 oldval = lp->port_counters.val[cnt];
1119 lpifp = lp->lp_ifp;
1147 struct lagg_port *lp = ifp->if_lagg;
1152 if (lp != NULL)
1153 return ((*lp->lp_output)(ifp, m, dst, ro));
1164 struct lagg_port *lp;
1167 if ((lp = ifp->if_lagg) == NULL)
1173 sc = lp->lp_softc;
1176 lp->lp_detaching = 1;
1177 lagg_port_destroy(lp, 1);
1183 lagg_port2req(struct lagg_port *lp, struct lagg_reqport *rp)
1185 struct lagg_softc *sc = lp->lp_softc;
1188 strlcpy(rp->rp_portname, lp->lp_ifp->if_xname, sizeof(rp->rp_portname));
1189 rp->rp_prio = lp->lp_prio;
1190 rp->rp_flags = lp->lp_flags;
1191 lagg_proto_portreq(sc, lp, &rp->rp_psc);
1196 if (lp == sc->sc_primary)
1198 if (lp == lagg_link_active(sc, sc->sc_primary))
1205 if (LAGG_PORTACTIVE(lp))
1211 if (lacp_isactive(lp))
1213 if (lacp_iscollecting(lp))
1215 if (lacp_isdistributing(lp))
1227 struct lagg_port *lp;
1243 lp = lagg_link_active(sc, sc->sc_primary);
1244 if (lp != NULL) {
1246 lp_ifp = lp->lp_ifp;
1268 struct lagg_port *lp;
1272 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries) {
1274 if_up(lp->lp_ifp);
1276 if_down(lp->lp_ifp);
1278 if (lp->lp_ioctl != NULL)
1279 lp->lp_ioctl(lp->lp_ifp, SIOCSIFFLAGS, (caddr_t)&ifr);
1288 struct lagg_port *lp;
1303 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries) {
1304 if (memcmp(IF_LLADDR(ifp), IF_LLADDR(lp->lp_ifp),
1306 if_setlladdr(lp->lp_ifp, IF_LLADDR(ifp), ifp->if_addrlen);
1354 struct lagg_port *lp;
1374 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries) {
1378 lagg_port2req(lp, &rpbuf);
1428 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries)
1429 ro->ro_active += LAGG_PORTACTIVE(lp);
1520 struct lacp_port *lp;
1545 LIST_FOREACH(lp, &lsc->lsc_ports, lp_next)
1546 lp->lp_state |= LACP_STATE_TIMEOUT;
1552 LIST_FOREACH(lp, &lsc->lsc_ports, lp_next)
1553 lp->lp_state &= ~LACP_STATE_TIMEOUT;
1598 if (__predict_true((lp = tpif->if_lagg) != NULL &&
1599 lp->lp_softc == sc))
1600 lagg_port2req(lp, rp);
1662 if ((lp = (struct lagg_port *)tpif->if_lagg) == NULL ||
1663 lp->lp_softc != sc) {
1670 error = lagg_port_destroy(lp, 1);
1678 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries) {
1679 lagg_setflags(lp, 1);
1704 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries) {
1705 lagg_clrmulti(lp);
1706 lagg_setmulti(lp);
1722 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries) {
1723 if (lp->lp_ioctl != NULL)
1724 (*lp->lp_ioctl)(lp->lp_ifp, cmd, data);
1738 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries) {
1739 if (lp->lp_ioctl != NULL)
1740 error = (*lp->lp_ioctl)(lp->lp_ifp, cmd, data);
1747 ifr->ifr_mtu, lp->lp_ifp->if_xname, ifp->if_mtu);
1756 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries) {
1757 if (lp->lp_ioctl != NULL)
1758 (*lp->lp_ioctl)(lp->lp_ifp, cmd, data);
1831 struct lagg_port *lp;
1848 lp = lb->lb_ports[p];
1849 return (lagg_link_active(sc, lp));
1869 struct lagg_port *lp;
1902 lp = lookup_snd_tag_port(ifp, params->hdr.flowid,
1904 if (lp == NULL) {
1908 if (lp->lp_ifp == NULL) {
1912 lp_ifp = lp->lp_ifp;
1999 lagg_setmulti(struct lagg_port *lp)
2001 struct lagg_softc *sc = lp->lp_softc;
2002 struct ifnet *ifp = lp->lp_ifp;
2020 SLIST_INSERT_HEAD(&lp->lp_mc_head, mc, mc_entries);
2023 SLIST_FOREACH (mc, &lp->lp_mc_head, mc_entries) {
2033 lagg_clrmulti(struct lagg_port *lp)
2037 LAGG_XLOCK_ASSERT(lp->lp_softc);
2038 while ((mc = SLIST_FIRST(&lp->lp_mc_head)) != NULL) {
2039 SLIST_REMOVE(&lp->lp_mc_head, mc, lagg_mc, mc_entries);
2040 if (mc->mc_ifma && lp->lp_detaching == 0)
2048 lagg_setcaps(struct lagg_port *lp, int cap, int cap2)
2053 if (lp->lp_ifp->if_capenable == cap &&
2054 lp->lp_ifp->if_capenable2 == cap2)
2056 if (lp->lp_ioctl == NULL)
2059 if ((lp->lp_ifp->if_capabilities & IFCAP_NV) != 0) {
2063 (*lp->lp_ioctl)(lp->lp_ifp, SIOCSIFCAPNV,
2067 (*lp->lp_ioctl)(lp->lp_ifp, SIOCSIFCAP, (caddr_t)&ifr);
2073 lagg_setflag(struct lagg_port *lp, int flag, int status,
2076 struct lagg_softc *sc = lp->lp_softc;
2078 struct ifnet *ifp = lp->lp_ifp;
2095 if (status != (lp->lp_ifflags & flag)) {
2099 lp->lp_ifflags &= ~flag;
2100 lp->lp_ifflags |= status;
2111 lagg_setflags(struct lagg_port *lp, int status)
2116 error = lagg_setflag(lp, lagg_pflags[i].flag,
2179 struct lagg_port *lp = ifp->if_lagg;
2180 struct lagg_softc *sc = lp->lp_softc;
2185 lp->lp_detaching != 0 ||
2191 m = lagg_proto_input(sc, lp, m);
2214 struct lagg_port *lp = ifp->if_lagg;
2215 struct lagg_softc *sc = lp->lp_softc;
2220 lp->lp_detaching != 0 ||
2226 m = lagg_proto_input(sc, lp, m);
2256 struct lagg_port *lp;
2262 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries) {
2263 if (LAGG_PORTACTIVE(lp))
2273 struct lagg_port *lp;
2285 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries) {
2286 if (lp->lp_ifp->if_link_state == LINK_STATE_UP) {
2305 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries)
2306 speed += lp->lp_ifp->if_baudrate;
2319 struct lagg_port *lp = (struct lagg_port *)ifp->if_lagg;
2322 if (lp != NULL)
2323 sc = lp->lp_softc;
2329 lagg_proto_linkstate(sc, lp);
2334 lagg_link_active(struct lagg_softc *sc, struct lagg_port *lp)
2351 if (lp == NULL)
2353 if (LAGG_PORTACTIVE(lp)) {
2354 rval = lp;
2357 if ((lp_next = CK_SLIST_NEXT(lp, lp_entries)) != NULL &&
2408 struct lagg_port *lp;
2414 lp = CK_SLIST_FIRST(&sc->sc_ports);
2417 lp = CK_SLIST_NEXT(lp, lp_entries);
2423 if ((lp = lagg_link_active(sc, lp)) == NULL) {
2430 return (lagg_enqueue(lp->lp_ifp, m));
2441 struct lagg_port *lp, *last = NULL;
2445 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries) {
2446 if (!LAGG_PORTACTIVE(lp))
2458 last = lp;
2486 struct lagg_port *lp;
2489 if ((lp = lagg_link_active(sc, sc->sc_primary)) == NULL) {
2496 return (lagg_enqueue(lp->lp_ifp, m));
2500 lagg_fail_input(struct lagg_softc *sc, struct lagg_port *lp, struct mbuf *m)
2505 if (lp == sc->sc_primary || V_lagg_failover_rx_all) {
2516 if (tmp_tp == NULL || tmp_tp == lp) {
2532 struct lagg_port *lp;
2540 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries)
2541 lagg_lb_port_create(lp);
2555 lagg_lb_porttable(struct lagg_softc *sc, struct lagg_port *lp)
2565 if (lp_next == lp)
2581 lagg_lb_port_create(struct lagg_port *lp)
2583 struct lagg_softc *sc = lp->lp_softc;
2588 lagg_lb_port_destroy(struct lagg_port *lp)
2590 struct lagg_softc *sc = lp->lp_softc;
2591 lagg_lb_porttable(sc, lp);
2598 struct lagg_port *lp = NULL;
2607 lp = lb->lb_ports[p];
2613 if ((lp = lagg_link_active(sc, lp)) == NULL) {
2620 return (lagg_enqueue(lp->lp_ifp, m));
2629 struct lagg_port *lp;
2633 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries)
2634 lacp_port_create(lp);
2640 struct lagg_port *lp;
2644 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries)
2645 lacp_port_destroy(lp);
2655 struct lagg_port *lp;
2660 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries)
2661 lacp_port_destroy(lp);
2664 CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries)
2665 lacp_port_create(lp);
2671 struct lagg_port *lp;
2674 lp = lacp_select_tx_port(sc, m, &err);
2675 if (lp == NULL) {
2682 return (lagg_enqueue(lp->lp_ifp, m));
2686 lagg_lacp_input(struct lagg_softc *sc, struct lagg_port *lp, struct mbuf *m)
2697 m = lacp_input(lp, m);
2706 if (!lacp_iscollecting(lp) || !lacp_isactive(lp)) {
2717 lagg_default_input(struct lagg_softc *sc, struct lagg_port *lp, struct mbuf *m)