Home | History | Annotate | Download | only in lagg

Lines Matching refs:psc

111 		lagg_link_active(struct lagg_proto_softc *psc,
155 struct lagg_proto_softc *psc;
170 psc = kmem_zalloc(sizeof(*psc), KM_NOSLEEP);
171 if (psc == NULL)
176 psc->psc_workq = lagg_workq_create(xnamebuf,
178 if (psc->psc_workq == NULL) {
180 kmem_free(psc, sizeof(*psc));
185 psc->psc_ctx = kmem_zalloc(ctxsiz, KM_NOSLEEP);
186 if (psc->psc_ctx == NULL) {
187 lagg_workq_destroy(psc->psc_workq);
188 kmem_free(psc, sizeof(*psc));
192 psc->psc_ctxsiz = ctxsiz;
195 PSLIST_INIT(&psc->psc_ports);
196 psc->psc_psz = pserialize_create();
197 mutex_init(&psc->psc_lock, MUTEX_DEFAULT, IPL_SOFTNET);
198 psc->psc_softc = sc;
200 return psc;
204 lagg_proto_free(struct lagg_proto_softc *psc)
207 lagg_workq_wait(psc->psc_workq, &psc->psc_work_linkspeed);
208 pserialize_destroy(psc->psc_psz);
209 mutex_destroy(&psc->psc_lock);
210 lagg_workq_destroy(psc->psc_workq);
211 PSLIST_DESTROY(&psc->psc_ports);
213 if (psc->psc_ctxsiz > 0)
214 kmem_free(psc->psc_ctx, psc->psc_ctxsiz);
216 kmem_free(psc, sizeof(*psc));
220 lagg_link_active(struct lagg_proto_softc *psc,
238 PSLIST_READER_FOREACH(pport, &psc->psc_ports,
254 lagg_common_allocport(struct lagg_proto_softc *psc, struct lagg_port *lp)
258 KASSERT(LAGG_LOCKED(psc->psc_softc));
271 lagg_common_freeport(struct lagg_proto_softc *psc, struct lagg_port *lp)
283 lagg_proto_insert_port(struct lagg_proto_softc *psc,
293 LAGG_PROTO_LOCK(psc);
294 PSLIST_WRITER_FOREACH(pport0, &psc->psc_ports,
308 PSLIST_WRITER_INSERT_HEAD(&psc->psc_ports, pport,
315 LAGG_PROTO_UNLOCK(psc);
319 lagg_proto_remove_port(struct lagg_proto_softc *psc,
323 LAGG_PROTO_LOCK(psc);
325 LAGG_PROTO_UNLOCK(psc);
326 pserialize_perform(psc->psc_psz);
334 lagg_common_startport(struct lagg_proto_softc *psc, struct lagg_port *lp)
339 lagg_proto_insert_port(psc, pport);
341 LAGG_PROTO_LOCK(psc);
343 LAGG_PROTO_UNLOCK(psc);
345 lagg_common_linkstate(psc, lp);
349 lagg_common_stopport(struct lagg_proto_softc *psc, struct lagg_port *lp)
356 LAGG_PROTO_LOCK(psc);
358 LAGG_PROTO_UNLOCK(psc);
360 lagg_proto_remove_port(psc, pport);
363 KASSERT(psc->psc_nactports > 0);
364 psc->psc_nactports--;
366 if (psc->psc_nactports == 0) {
367 ifp = &psc->psc_softc->sc_if;
374 lagg_workq_add(psc->psc_workq, &psc->psc_work_linkspeed);
377 lagg_common_linkstate(struct lagg_proto_softc *psc, struct lagg_port *lp)
383 lagg_common_linkstate_ifnet_locked(psc, lp);
388 lagg_common_linkstate_ifnet_locked(struct lagg_proto_softc *psc, struct lagg_port *lp)
403 LAGG_PROTO_LOCK(psc);
406 LAGG_PROTO_UNLOCK(psc);
410 ifp = &psc->psc_softc->sc_if;
414 psc->psc_nactports++;
415 if (psc->psc_nactports == 1)
418 KASSERT(psc->psc_nactports > 0);
419 psc->psc_nactports--;
421 if (psc->psc_nactports == 0)
424 LAGG_PROTO_UNLOCK(psc);
434 LAGG_PROTO_LOCK(psc);
436 LAGG_PROTO_UNLOCK(psc);
437 lagg_workq_add(psc->psc_workq, &psc->psc_work_linkspeed);
441 lagg_common_detach(struct lagg_proto_softc *psc)
444 lagg_proto_free(psc);
458 struct lagg_proto_softc *psc;
461 psc = lagg_proto_alloc(LAGG_PROTO_FAILOVER, sc);
462 if (psc == NULL)
465 fovr = psc->psc_ctx;
467 lagg_work_set(&psc->psc_work_linkspeed,
468 lagg_fail_linkspeed_work, psc);
470 *xpsc = psc;
475 lagg_fail_transmit(struct lagg_proto_softc *psc, struct mbuf *m)
481 lp = lagg_link_active(psc, NULL, &psref);
483 ifp = &psc->psc_softc->sc_if;
489 lagg_output(psc->psc_softc, lp, m);
495 lagg_fail_input(struct lagg_proto_softc *psc, struct lagg_port *lp,
503 fovr = psc->psc_ctx;
507 lp0 = lagg_link_active(psc, NULL, &psref);
521 ifp = &psc->psc_softc->sc_if;
528 lagg_fail_portstat(struct lagg_proto_softc *psc, struct lagg_port *lp,
536 fovr = psc->psc_ctx;
540 lp0 = lagg_link_active(psc, NULL, &psref);
559 lagg_fail_ioctl(struct lagg_proto_softc *psc, struct laggreqproto *lreq)
567 fovr = psc->psc_ctx;
590 struct lagg_proto_softc *psc = xpsc;
597 lp = lagg_link_active(psc, NULL, &psref);
600 LAGG_PROTO_LOCK(psc);
602 LAGG_PROTO_UNLOCK(psc);
609 LAGG_LOCK(psc->psc_softc);
610 lagg_set_linkspeed(psc->psc_softc, linkspeed);
611 LAGG_UNLOCK(psc->psc_softc);
617 struct lagg_proto_softc *psc;
620 psc = lagg_proto_alloc(LAGG_PROTO_LOADBALANCE, sc);
621 if (psc == NULL)
624 lb = psc->psc_ctx;
626 lagg_work_set(&psc->psc_work_linkspeed,
627 lagg_lb_linkspeed_work, psc);
629 *xpsc = psc;
634 lagg_lb_startport(struct lagg_proto_softc *psc, struct lagg_port *lp)
640 lb = psc->psc_ctx;
641 lagg_common_startport(psc, lp);
643 LAGG_PROTO_LOCK(psc);
656 LAGG_PROTO_UNLOCK(psc);
657 pserialize_perform(psc->psc_psz);
661 lagg_lb_stopport(struct lagg_proto_softc *psc, struct lagg_port *lp)
667 lb = psc->psc_ctx;
669 LAGG_PROTO_LOCK(psc);
685 LAGG_PROTO_UNLOCK(psc);
686 pserialize_perform(psc->psc_psz);
688 lagg_common_stopport(psc, lp);
692 lagg_lb_transmit(struct lagg_proto_softc *psc, struct mbuf *m)
702 lb = psc->psc_ctx;
703 hash = lagg_hashmbuf(psc->psc_softc, m);
711 lp = lagg_link_active(psc, lp0->lp_proto_ctx, &psref);
719 ifp = &psc->psc_softc->sc_if;
725 lagg_output(psc->psc_softc, lp, m);
732 lagg_lb_input(struct lagg_proto_softc *psc __unused,
740 lagg_lb_portstat(struct lagg_proto_softc *psc, struct lagg_port *lp,
756 struct lagg_proto_softc *psc = xpsc;
762 LAGG_PROTO_LOCK(psc); /* acquired to refer lpp_linkspeed */
763 PSLIST_READER_FOREACH(pport, &psc->psc_ports,
770 LAGG_PROTO_UNLOCK(psc);
772 LAGG_LOCK(psc->psc_softc);
773 lagg_set_linkspeed(psc->psc_softc, linkspeed);
774 LAGG_UNLOCK(psc->psc_softc);