Lines Matching defs:bif
227 struct bridge_iflist *bif;
238 while ((bif = SMR_SLIST_FIRST_LOCKED(&sc->sc_iflist)) != NULL)
239 bridge_ifremove(bif);
240 while ((bif = SMR_SLIST_FIRST_LOCKED(&sc->sc_spanlist)) != NULL)
241 bridge_spanremove(bif);
258 struct bridge_iflist *bif;
308 SMR_SLIST_FOREACH_LOCKED(bif, &sc->sc_spanlist, bif_next) {
309 if (bif->ifp == ifs)
312 if (bif != NULL) {
318 bif = malloc(sizeof(*bif), M_DEVBUF, M_NOWAIT|M_ZERO);
319 if (bif == NULL) {
330 free(bif, M_DEVBUF, sizeof(*bif));
345 bif->bridge_sc = sc;
346 bif->ifp = ifs;
347 bif->bif_flags = IFBIF_LEARNING | IFBIF_DISCOVER;
348 SIMPLEQ_INIT(&bif->bif_brlin);
349 SIMPLEQ_INIT(&bif->bif_brlout);
351 task_set(&bif->bif_dtask, bridge_ifdetach, bif);
352 if_detachhook_add(ifs, &bif->bif_dtask);
353 ether_brport_set(bif->ifp, &bridge_brport);
354 SMR_SLIST_INSERT_HEAD_LOCKED(&sc->sc_iflist, bif, bif_next);
359 error = bridge_findbif(sc, req->ifbr_ifsname, &bif);
362 bridge_ifremove(bif);
388 SMR_SLIST_FOREACH_LOCKED(bif, &sc->sc_spanlist, bif_next) {
389 if (bif->ifp == ifs)
392 if (bif != NULL) {
397 bif = malloc(sizeof(*bif), M_DEVBUF, M_NOWAIT|M_ZERO);
398 if (bif == NULL) {
408 bif->bridge_sc = sc;
409 bif->ifp = ifs;
410 bif->bif_flags = IFBIF_SPAN;
411 SIMPLEQ_INIT(&bif->bif_brlin);
412 SIMPLEQ_INIT(&bif->bif_brlout);
413 task_set(&bif->bif_dtask, bridge_spandetach, bif);
414 if_detachhook_add(ifs, &bif->bif_dtask);
415 SMR_SLIST_INSERT_HEAD_LOCKED(&sc->sc_spanlist, bif, bif_next);
425 SMR_SLIST_FOREACH_LOCKED(bif, &sc->sc_spanlist, bif_next) {
426 if (bif->ifp == ifs)
430 if (bif == NULL) {
434 bridge_spanremove(bif);
437 error = bridge_findbif(sc, req->ifbr_ifsname, &bif);
440 req->ifbr_ifsflags = bif->bif_flags;
441 req->ifbr_portno = bif->ifp->if_index & 0xfff;
442 req->ifbr_protected = bif->bif_protected;
443 if (bif->bif_flags & IFBIF_STP)
444 bridge_bifgetstp(sc, bif, req);
453 error = bridge_findbif(sc, req->ifbr_ifsname, &bif);
457 if ((bif->bif_flags & IFBIF_STP) == 0) {
459 if ((bif->bif_stp = bstp_add(sc->sc_stp,
460 bif->ifp)) == NULL) {
466 bstp_ifsflags(bif->bif_stp, req->ifbr_ifsflags);
468 } else if (bif->bif_flags & IFBIF_STP) {
469 bstp_delete(bif->bif_stp);
470 bif->bif_stp = NULL;
472 bif->bif_flags = req->ifbr_ifsflags;
501 error = bridge_findbif(sc, req->ifbr_ifsname, &bif);
504 bif->bif_protected = req->ifbr_protected;
549 bridge_ifremove(struct bridge_iflist *bif)
551 struct bridge_softc *sc = bif->bridge_sc;
554 SMR_SLIST_REMOVE_LOCKED(&sc->sc_iflist, bif, bridge_iflist, bif_next);
555 if_detachhook_del(bif->ifp, &bif->bif_dtask);
556 ether_brport_clr(bif->ifp);
560 if (bif->bif_flags & IFBIF_STP) {
561 bstp_delete(bif->bif_stp);
562 bif->bif_stp = NULL;
565 bif->ifp->if_bridgeidx = 0;
567 error = ifpromisc(bif->ifp, 0);
570 bridge_rtdelete(sc, bif->ifp, 0);
571 bridge_flushrule(bif);
573 if_put(bif->ifp);
574 bif->ifp = NULL;
575 free(bif, M_DEVBUF, sizeof(*bif));
581 bridge_spanremove(struct bridge_iflist *bif)
583 struct bridge_softc *sc = bif->bridge_sc;
585 SMR_SLIST_REMOVE_LOCKED(&sc->sc_spanlist, bif, bridge_iflist, bif_next);
586 if_detachhook_del(bif->ifp, &bif->bif_dtask);
590 if_put(bif->ifp);
591 bif->ifp = NULL;
592 free(bif, M_DEVBUF, sizeof(*bif));
598 struct bridge_iflist *bif = xbif;
606 bridge_ifremove(bif);
613 struct bridge_iflist *bif = xbif;
621 bridge_spanremove(bif);
626 bridge_bifgetstp(struct bridge_softc *sc, struct bridge_iflist *bif,
630 struct bstp_port *bp = bif->bif_stp;
659 struct bridge_iflist *bif;
664 SMR_SLIST_FOREACH_LOCKED(bif, &sc->sc_iflist, bif_next)
667 SMR_SLIST_FOREACH_LOCKED(bif, &sc->sc_spanlist, bif_next)
679 SMR_SLIST_FOREACH_LOCKED(bif, &sc->sc_iflist, bif_next) {
684 strlcpy(breq->ifbr_ifsname, bif->ifp->if_xname, IFNAMSIZ);
685 breq->ifbr_ifsflags = bif->bif_flags;
686 breq->ifbr_portno = bif->ifp->if_index & 0xfff;
687 breq->ifbr_protected = bif->bif_protected;
688 if (bif->bif_flags & IFBIF_STP)
689 bridge_bifgetstp(sc, bif, breq);
692 SMR_SLIST_FOREACH_LOCKED(bif, &sc->sc_spanlist, bif_next) {
697 strlcpy(breq->ifbr_ifsname, bif->ifp->if_xname, IFNAMSIZ);
698 breq->ifbr_ifsflags = bif->bif_flags | IFBIF_SPAN;
699 breq->ifbr_portno = bif->ifp->if_index & 0xfff;
715 struct bridge_iflist *bif;
728 SMR_SLIST_FOREACH_LOCKED(bif, &sc->sc_iflist, bif_next) {
729 if (bif->ifp == ifp)
733 if (bif == NULL) {
738 *rbif = bif;
748 struct bridge_iflist *bif;
759 SMR_SLIST_FOREACH_LOCKED(bif, &sc->sc_iflist, bif_next) {
760 if (bif->ifp == ifp)
766 return (bif);
871 struct bridge_iflist *bif;
875 SMR_SLIST_FOREACH(bif, &sc->sc_iflist, bif_next) {
876 dst_if = bif->ifp;
887 (bif->bif_flags & IFBIF_STP) &&
888 (bif->bif_state == BSTP_IFSTATE_DISCARDING))
890 if ((bif->bif_flags & IFBIF_DISCOVER) == 0 &&
894 if (bridge_filterrule(&bif->bif_brlout, eh, m) ==
966 struct bridge_iflist *bif;
977 bif = bridge_getbif(src_if);
978 KASSERT(bif != NULL);
988 if ((bif->bif_flags & IFBIF_LEARNING) &&
993 if ((bif->bif_flags & IFBIF_STP) &&
994 (bif->bif_state == BSTP_IFSTATE_LEARNING)) {
1051 if (bif->bif_flags & IFBIF_BLOCKNONIP && bridge_blocknonip(&eh, m)) {
1056 if (bridge_filterrule(&bif->bif_brlin, &eh, m) == BRL_ACTION_BLOCK) {
1072 protected = bif->bif_protected;
1084 bif = bridge_getbif(dst_if);
1085 if ((bif == NULL) || ((bif->bif_flags & IFBIF_STP) &&
1086 (bif->bif_state == BSTP_IFSTATE_DISCARDING)))
1092 if (protected != 0 && (protected & bif->bif_protected))
1094 if (bridge_filterrule(&bif->bif_brlout, &eh, m) == BRL_ACTION_BLOCK)
1118 * Return 1 if `ena' belongs to `bif', 0 otherwise.
1160 struct bridge_iflist *bif = NULL, *bif0 = NULL;
1197 SMR_SLIST_FOREACH_LOCKED(bif, &sc->sc_iflist, bif_next) {
1198 struct arpcom *ac = (struct arpcom *)bif->ifp;
1201 if (bif->ifp == ifp)
1202 bif0 = bif;
1251 bif = bif0;
1253 SMR_SLIST_FOREACH_LOCKED(bif, &sc->sc_iflist, bif_next) {
1254 if (bif->ifp == ifp)
1256 if (bridge_ourether(bif->ifp, eh->ether_dhost))
1260 if (bif != NULL) {
1274 ifp = bif->ifp;
1298 struct bridge_iflist *bif;
1304 bif = bridge_getbif(ifp);
1305 KASSERT(bif != NULL);
1306 protected = bif->bif_protected;
1308 SMR_SLIST_FOREACH_LOCKED(bif, &sc->sc_iflist, bif_next) {
1309 dst_if = bif->ifp;
1314 if ((bif->bif_flags & IFBIF_STP) &&
1315 (bif->bif_state == BSTP_IFSTATE_DISCARDING))
1318 if ((bif->bif_flags & IFBIF_DISCOVER) == 0 &&
1323 if (bif->bif_flags & IFBIF_BLOCKNONIP &&
1331 if (protected != 0 && (protected & bif->bif_protected))
1334 if (bridge_filterrule(&bif->bif_brlout, eh, m) ==
1349 if (SMR_SLIST_NEXT_LOCKED(bif, bif_next) == NULL) {
1420 struct bridge_iflist *bif;
1426 SMR_SLIST_FOREACH(bif, &sc->sc_spanlist, bif_next) {
1427 ifp = bif->ifp;