Lines Matching refs:bif
403 bif_ifflags_are_set(struct bridge_iflist * bif, uint32_t flags) in bif_ifflags_are_set() argument
405 return (bif->bif_ifflags & flags) != 0; in bif_ifflags_are_set()
409 bif_has_checksum_offload(struct bridge_iflist * bif) in bif_has_checksum_offload() argument
411 return bif_ifflags_are_set(bif, IFBIF_CHECKSUM_OFFLOAD); in bif_has_checksum_offload()
415 bif_has_mac_nat(struct bridge_iflist * bif) in bif_has_mac_nat() argument
417 return bif_ifflags_are_set(bif, IFBIF_MAC_NAT); in bif_has_mac_nat()
1685 struct bridge_iflist *bif; in bridge_clone_destroy() local
1707 while ((bif = TAILQ_FIRST(&sc->sc_iflist)) != NULL) { in bridge_clone_destroy()
1708 bridge_delete_member(sc, bif); in bridge_clone_destroy()
1711 while ((bif = TAILQ_FIRST(&sc->sc_spanlist)) != NULL) { in bridge_clone_destroy()
1712 bridge_delete_span(sc, bif); in bridge_clone_destroy()
1785 bif_set_input_broadcast(struct bridge_iflist * bif, boolean_t input_broadcast) in bif_set_input_broadcast() argument
1789 old_input_broadcast = (bif->bif_flags & BIFF_INPUT_BROADCAST) != 0; in bif_set_input_broadcast()
1791 bif->bif_flags |= BIFF_INPUT_BROADCAST; in bif_set_input_broadcast()
1793 bif->bif_flags &= ~BIFF_INPUT_BROADCAST; in bif_set_input_broadcast()
1808 struct bridge_iflist *bif; in bridge_ioctl() local
1948 TAILQ_FOREACH(bif, &sc->sc_iflist, bif_next) { in bridge_ioctl()
1949 if (bif->bif_ifp->if_mtu != (unsigned)ifr->ifr_mtu) { in bridge_ioctl()
1953 bif->bif_ifp->if_mtu, in bridge_ioctl()
1954 bif->bif_ifp->if_xname, ifr->ifr_mtu); in bridge_ioctl()
1993 struct bridge_iflist *bif; in bridge_mutecaps() local
1999 TAILQ_FOREACH(bif, &sc->sc_iflist, bif_next) { in bridge_mutecaps()
2001 mask &= bif->bif_savedcaps; in bridge_mutecaps()
2004 TAILQ_FOREACH(bif, &sc->sc_iflist, bif_next) { in bridge_mutecaps()
2005 enabled = bif->bif_ifp->if_capenable; in bridge_mutecaps()
2011 bridge_set_ifcap(sc, bif, enabled); in bridge_mutecaps()
2016 bridge_set_ifcap(struct bridge_softc *sc, struct bridge_iflist *bif, int set) in bridge_set_ifcap() argument
2018 struct ifnet *ifp = bif->bif_ifp; in bridge_set_ifcap()
2103 struct bridge_iflist *bif; in bridge_set_tso() local
2115 TAILQ_FOREACH(bif, &sc->sc_iflist, bif_next) { in bridge_set_tso()
2116 ifnet_t ifp = bif->bif_ifp; in bridge_set_tso()
2206 struct bridge_iflist *bif; in bridge_lookup_member() local
2212 TAILQ_FOREACH(bif, &sc->sc_iflist, bif_next) { in bridge_lookup_member()
2213 ifp = bif->bif_ifp; in bridge_lookup_member()
2215 return bif; in bridge_lookup_member()
2230 struct bridge_iflist *bif; in bridge_lookup_member_if() local
2234 TAILQ_FOREACH(bif, &sc->sc_iflist, bif_next) { in bridge_lookup_member_if()
2235 if (bif->bif_ifp == member_ifp) { in bridge_lookup_member_if()
2236 return bif; in bridge_lookup_member_if()
2249 struct bridge_iflist *bif = (struct bridge_iflist *)cookie; in bridge_iff_input() local
2250 struct bridge_softc *sc = bif->bif_sc; in bridge_iff_input()
2337 struct bridge_iflist *bif = (struct bridge_iflist *)cookie; in bridge_iff_output() local
2338 struct bridge_softc *sc = bif->bif_sc; in bridge_iff_output()
2367 struct bridge_iflist *bif = (struct bridge_iflist *)cookie; in bridge_iff_event() local
2368 struct bridge_softc *sc = bif->bif_sc; in bridge_iff_event()
2391 if ((bif->bif_flags & BIFF_PROMISC) == 0) { in bridge_iff_event()
2401 bif->bif_flags |= BIFF_PROMISC; in bridge_iff_event()
2404 if ((bif->bif_flags & BIFF_WIFI_INFRA) != 0 && in bridge_iff_event()
2405 (bif->bif_flags & BIFF_ALL_MULTI) == 0) { in bridge_iff_event()
2415 bif->bif_flags |= BIFF_ALL_MULTI; in bridge_iff_event()
2450 struct bridge_iflist *bif; in bridge_iff_detached() local
2458 bif = bridge_lookup_member_if(sc, ifp); in bridge_iff_detached()
2459 if (bif != NULL) { in bridge_iff_detached()
2460 bridge_delete_member(sc, bif); in bridge_iff_detached()
2469 TAILQ_FOREACH(bif, &sc->sc_spanlist, bif_next) in bridge_iff_detached()
2470 if (ifp == bif->bif_ifp) { in bridge_iff_detached()
2471 bridge_delete_span(sc, bif); in bridge_iff_detached()
2531 bridge_delete_member(struct bridge_softc *sc, struct bridge_iflist *bif) in bridge_delete_member() argument
2537 struct ifnet *ifs = bif->bif_ifp, *bifp = sc->sc_ifp; in bridge_delete_member()
2549 if ((bif->bif_flags & BIFF_IN_MEMBER_LIST) != 0) { in bridge_delete_member()
2550 bif->bif_flags &= ~BIFF_IN_MEMBER_LIST; in bridge_delete_member()
2552 TAILQ_REMOVE(&sc->sc_iflist, bif, bif_next); in bridge_delete_member()
2556 if (bif == sc->sc_mac_nat_bif) { in bridge_delete_member()
2559 bridge_mac_nat_flush_entries(sc, bif); in bridge_delete_member()
2563 if ((bif->bif_ifflags & IFBIF_STP) != 0) { in bridge_delete_member()
2564 bstp_disable(&bif->bif_stp); in bridge_delete_member()
2599 KASSERT(bif->bif_addrcnt == 0, in bridge_delete_member()
2600 ("%s: %d bridge routes referenced", __func__, bif->bif_addrcnt)); in bridge_delete_member()
2606 bif_flags = bif->bif_flags; in bridge_delete_member()
2628 bridge_set_ifcap(sc, bif, bif->bif_savedcaps); in bridge_delete_member()
2636 iflt_detach(bif->bif_iff_ref); in bridge_delete_member()
2655 bstp_destroy(&bif->bif_stp); /* prepare to free */ in bridge_delete_member()
2658 kfree_type(struct bridge_iflist, bif); in bridge_delete_member()
2678 bridge_delete_span(struct bridge_softc *sc, struct bridge_iflist *bif) in bridge_delete_span() argument
2682 KASSERT(bif->bif_ifp->if_bridge == NULL, in bridge_delete_span()
2685 ifnet_release(bif->bif_ifp); in bridge_delete_span()
2687 TAILQ_REMOVE(&sc->sc_spanlist, bif, bif_next); in bridge_delete_span()
2688 kfree_type(struct bridge_iflist, bif); in bridge_delete_span()
2695 struct bridge_iflist *bif = NULL; in bridge_ioctl_add() local
2718 TAILQ_FOREACH(bif, &sc->sc_spanlist, bif_next) { in bridge_ioctl_add()
2719 if (ifs == bif->bif_ifp) { in bridge_ioctl_add()
2767 bif = kalloc_type(struct bridge_iflist, Z_WAITOK | Z_ZERO | Z_NOFAIL); in bridge_ioctl_add()
2768 bif->bif_ifp = ifs; in bridge_ioctl_add()
2770 bif->bif_ifflags |= IFBIF_LEARNING | IFBIF_DISCOVER; in bridge_ioctl_add()
2772 bif->bif_savedcaps = ifs->if_capenable; in bridge_ioctl_add()
2774 bif->bif_sc = sc; in bridge_ioctl_add()
2776 (void)bridge_mac_nat_enable(sc, bif); in bridge_ioctl_add()
2799 bstp_create(&sc->sc_stp, &bif->bif_stp, bif->bif_ifp); in bridge_ioctl_add()
2816 bif->bif_flags |= BIFF_PROMISC; in bridge_ioctl_add()
2837 bif->bif_flags |= BIFF_WIFI_INFRA; in bridge_ioctl_add()
2840 bif->bif_flags |= BIFF_ALL_MULTI; in bridge_ioctl_add()
2854 bif->bif_flags |= BIFF_FLOWSWITCH_ATTACHED; in bridge_ioctl_add()
2860 bif->bif_flags |= BIFF_NETAGENT_REMOVED; in bridge_ioctl_add()
2868 iff.iff_cookie = bif; in bridge_ioctl_add()
2874 error = dlil_attach_filter(ifs, &iff, &bif->bif_iff_ref, in bridge_ioctl_add()
2881 bif->bif_flags |= BIFF_FILTER_ATTACHED; in bridge_ioctl_add()
2894 bif->bif_flags |= BIFF_PROTO_ATTACHED; in bridge_ioctl_add()
2905 bif->bif_flags |= BIFF_LRO_DISABLED; in bridge_ioctl_add()
2912 bif->bif_flags |= BIFF_IN_MEMBER_LIST; in bridge_ioctl_add()
2914 TAILQ_INSERT_TAIL(&sc->sc_iflist, bif, bif_next); in bridge_ioctl_add()
2919 bif->bif_flags |= BIFF_MEDIA_ACTIVE; in bridge_ioctl_add()
2921 bif->bif_flags &= ~BIFF_MEDIA_ACTIVE; in bridge_ioctl_add()
2929 bif_set_input_broadcast(bif, input_broadcast); in bridge_ioctl_add()
2947 if (bif != NULL) { in bridge_ioctl_add()
2948 bridge_delete_member(sc, bif); in bridge_ioctl_add()
2961 struct bridge_iflist *bif; in bridge_ioctl_del() local
2963 bif = bridge_lookup_member(sc, req->ifbr_ifsname); in bridge_ioctl_del()
2964 if (bif == NULL) { in bridge_ioctl_del()
2968 bridge_delete_member(sc, bif); in bridge_ioctl_del()
2984 struct bridge_iflist *bif; in bridge_ioctl_gifflags() local
2986 bif = bridge_lookup_member(sc, req->ifbr_ifsname); in bridge_ioctl_gifflags()
2987 if (bif == NULL) { in bridge_ioctl_gifflags()
2993 bp = &bif->bif_stp; in bridge_ioctl_gifflags()
3000 req->ifbr_ifsflags = bif->bif_ifflags; in bridge_ioctl_gifflags()
3022 req->ifbr_portno = bif->bif_ifp->if_index & 0xfff; in bridge_ioctl_gifflags()
3023 req->ifbr_addrcnt = bif->bif_addrcnt; in bridge_ioctl_gifflags()
3024 req->ifbr_addrmax = bif->bif_addrmax; in bridge_ioctl_gifflags()
3025 req->ifbr_addrexceeded = bif->bif_addrexceeded; in bridge_ioctl_gifflags()
3034 struct bridge_iflist *bif; in bridge_ioctl_sifflags() local
3041 bif = bridge_lookup_member(sc, req->ifbr_ifsname); in bridge_ioctl_sifflags()
3042 if (bif == NULL) { in bridge_ioctl_sifflags()
3058 if ((bif->bif_flags & BIFF_HOST_FILTER) != 0) { in bridge_ioctl_sifflags()
3062 error = bridge_mac_nat_enable(sc, bif); in bridge_ioctl_sifflags()
3066 } else if (sc->sc_mac_nat_bif == bif) { in bridge_ioctl_sifflags()
3072 if ((bif->bif_ifflags & IFBIF_STP) == 0) { in bridge_ioctl_sifflags()
3073 error = bstp_enable(&bif->bif_stp); in bridge_ioctl_sifflags()
3079 if ((bif->bif_ifflags & IFBIF_STP) != 0) { in bridge_ioctl_sifflags()
3080 bstp_disable(&bif->bif_stp); in bridge_ioctl_sifflags()
3085 bp = &bif->bif_stp; in bridge_ioctl_sifflags()
3097 bif->bif_ifflags = ifsflags & IFBIFMASK; in bridge_ioctl_sifflags()
3123 struct bridge_iflist *bif; \
3129 TAILQ_FOREACH(bif, &sc->sc_iflist, bif_next) \
3131 TAILQ_FOREACH(bif, &sc->sc_spanlist, bif_next) \
3147 TAILQ_FOREACH(bif, &sc->sc_iflist, bif_next) { \
3152 "%s", bif->bif_ifp->if_xname); \
3162 TAILQ_FOREACH(bif, &sc->sc_spanlist, bif_next) { \
3168 "%s", bif->bif_ifp->if_xname); \
3169 breq.ifbr_ifsflags = bif->bif_ifflags; \
3171 = bif->bif_ifp->if_index & 0xfff; \
3292 struct bridge_iflist *bif; in bridge_ioctl_saddr32() local
3295 bif = bridge_lookup_member(sc, req->ifba_ifsname); in bridge_ioctl_saddr32()
3296 if (bif == NULL) { in bridge_ioctl_saddr32()
3300 error = bridge_rtupdate(sc, req->ifba_dst, req->ifba_vlan, bif, 1, in bridge_ioctl_saddr32()
3310 struct bridge_iflist *bif; in bridge_ioctl_saddr64() local
3313 bif = bridge_lookup_member(sc, req->ifba_ifsname); in bridge_ioctl_saddr64()
3314 if (bif == NULL) { in bridge_ioctl_saddr64()
3318 error = bridge_rtupdate(sc, req->ifba_dst, req->ifba_vlan, bif, 1, in bridge_ioctl_saddr64()
3468 struct bridge_iflist *bif; in bridge_ioctl_sifprio() local
3470 bif = bridge_lookup_member(sc, req->ifbr_ifsname); in bridge_ioctl_sifprio()
3471 if (bif == NULL) { in bridge_ioctl_sifprio()
3475 return bstp_set_port_priority(&bif->bif_stp, req->ifbr_priority); in bridge_ioctl_sifprio()
3487 struct bridge_iflist *bif; in bridge_ioctl_sifcost() local
3489 bif = bridge_lookup_member(sc, req->ifbr_ifsname); in bridge_ioctl_sifcost()
3490 if (bif == NULL) { in bridge_ioctl_sifcost()
3494 return bstp_set_path_cost(&bif->bif_stp, req->ifbr_path_cost); in bridge_ioctl_sifcost()
3533 struct bridge_iflist *bif; in bridge_ioctl_sifmaxaddr() local
3535 bif = bridge_lookup_member(sc, req->ifbr_ifsname); in bridge_ioctl_sifmaxaddr()
3536 if (bif == NULL) { in bridge_ioctl_sifmaxaddr()
3540 bif->bif_addrmax = req->ifbr_addrmax; in bridge_ioctl_sifmaxaddr()
3548 struct bridge_iflist *bif = NULL; in bridge_ioctl_addspan() local
3560 TAILQ_FOREACH(bif, &sc->sc_spanlist, bif_next) in bridge_ioctl_addspan()
3561 if (ifs == bif->bif_ifp) { in bridge_ioctl_addspan()
3578 bif = kalloc_type(struct bridge_iflist, Z_WAITOK | Z_ZERO | Z_NOFAIL); in bridge_ioctl_addspan()
3580 bif->bif_ifp = ifs; in bridge_ioctl_addspan()
3581 bif->bif_ifflags = IFBIF_SPAN; in bridge_ioctl_addspan()
3583 ifnet_reference(bif->bif_ifp); in bridge_ioctl_addspan()
3585 TAILQ_INSERT_HEAD(&sc->sc_spanlist, bif, bif_next); in bridge_ioctl_addspan()
3594 struct bridge_iflist *bif; in bridge_ioctl_delspan() local
3602 TAILQ_FOREACH(bif, &sc->sc_spanlist, bif_next) in bridge_ioctl_delspan()
3603 if (ifs == bif->bif_ifp) { in bridge_ioctl_delspan()
3607 if (bif == NULL) { in bridge_ioctl_delspan()
3611 bridge_delete_span(sc, bif); in bridge_ioctl_delspan()
3669 struct bridge_iflist *bif; \
3676 TAILQ_FOREACH(bif, &sc->sc_iflist, bif_next) { \
3677 if ((bif->bif_ifflags & IFBIF_STP) != 0) \
3695 TAILQ_FOREACH(bif, &sc->sc_iflist, bif_next) { \
3699 if ((bif->bif_ifflags & IFBIF_STP) == 0) \
3702 bp = &bif->bif_stp; \
3703 bpreq.ifbp_portno = bif->bif_ifp->if_index & 0xfff; \
3777 struct bridge_iflist *bif; in bridge_ioctl_ghostfilter() local
3779 bif = bridge_lookup_member(sc, req->ifbrhf_ifsname); in bridge_ioctl_ghostfilter()
3780 if (bif == NULL) { in bridge_ioctl_ghostfilter()
3785 if (bif->bif_flags & BIFF_HOST_FILTER) { in bridge_ioctl_ghostfilter()
3787 bcopy(bif->bif_hf_hwsrc, req->ifbrhf_hwsrca, in bridge_ioctl_ghostfilter()
3789 req->ifbrhf_ipsrc = bif->bif_hf_ipsrc.s_addr; in bridge_ioctl_ghostfilter()
3798 struct bridge_iflist *bif; in bridge_ioctl_shostfilter() local
3800 bif = bridge_lookup_member(sc, req->ifbrhf_ifsname); in bridge_ioctl_shostfilter()
3801 if (bif == NULL) { in bridge_ioctl_shostfilter()
3804 if (bif_has_mac_nat(bif)) { in bridge_ioctl_shostfilter()
3809 bif->bif_flags |= BIFF_HOST_FILTER; in bridge_ioctl_shostfilter()
3812 bcopy(req->ifbrhf_hwsrca, bif->bif_hf_hwsrc, in bridge_ioctl_shostfilter()
3816 bif->bif_flags |= BIFF_HF_HWSRC; in bridge_ioctl_shostfilter()
3818 bif->bif_flags &= ~BIFF_HF_HWSRC; in bridge_ioctl_shostfilter()
3822 bif->bif_hf_ipsrc.s_addr = req->ifbrhf_ipsrc; in bridge_ioctl_shostfilter()
3823 if (bif->bif_hf_ipsrc.s_addr != INADDR_ANY) { in bridge_ioctl_shostfilter()
3824 bif->bif_flags |= BIFF_HF_IPSRC; in bridge_ioctl_shostfilter()
3826 bif->bif_flags &= ~BIFF_HF_IPSRC; in bridge_ioctl_shostfilter()
3830 bif->bif_flags &= ~(BIFF_HOST_FILTER | BIFF_HF_HWSRC | in bridge_ioctl_shostfilter()
3832 bzero(bif->bif_hf_hwsrc, ETHER_ADDR_LEN); in bridge_ioctl_shostfilter()
3833 bif->bif_hf_ipsrc.s_addr = INADDR_ANY; in bridge_ioctl_shostfilter()
3966 struct bridge_iflist *bif; in bridge_ioctl_gifstats() local
3970 bif = bridge_lookup_member(sc, mreq->brmr_ifname); in bridge_ioctl_gifstats()
3971 if (bif == NULL) { in bridge_ioctl_gifstats()
3986 error = copyout(&bif->bif_stats, user_addr, buflen); in bridge_ioctl_gifstats()
4016 struct bridge_iflist *bif; in bridge_proto_attach_changed() local
4026 bif = bridge_lookup_member_if(sc, ifp); in bridge_proto_attach_changed()
4027 if (bif != NULL) { in bridge_proto_attach_changed()
4028 changed = bif_set_input_broadcast(bif, input_broadcast); in bridge_proto_attach_changed()
4070 struct bridge_iflist *bif; in bridge_updatelinkstatus() local
4079 TAILQ_FOREACH(bif, &sc->sc_iflist, bif_next) { in bridge_updatelinkstatus()
4080 if (bif->bif_flags & BIFF_MEDIA_ACTIVE) { in bridge_updatelinkstatus()
4104 struct bridge_iflist *bif; in bridge_iflinkevent() local
4117 bif = bridge_lookup_member_if(sc, ifp); in bridge_iflinkevent()
4118 if (bif != NULL) { in bridge_iflinkevent()
4120 bif->bif_flags |= BIFF_MEDIA_ACTIVE; in bridge_iflinkevent()
4122 bif->bif_flags &= ~BIFF_MEDIA_ACTIVE; in bridge_iflinkevent()
4125 bridge_mac_nat_flush_entries(sc, bif); in bridge_iflinkevent()
5491 struct bridge_iflist *bif;
5508 TAILQ_FOREACH(bif, &sc->sc_iflist, bif_next) {
5509 dst_if = bif->bif_ifp;
5515 if ((bif->bif_flags & BIFF_MEDIA_ACTIVE) == 0) {
5528 if ((bif->bif_ifflags & IFBIF_STP) &&
5529 bif->bif_stp.bp_state == BSTP_IFSTATE_DISCARDING) {
6161 struct bridge_iflist *bif, *bif2;
6229 bif = bridge_lookup_member_if(sc, ifp);
6230 if (bif == NULL) {
6237 if (is_ip && bif_has_checksum_offload(bif)) {
6239 &info, &bif->bif_stats.brms_in_ip);
6244 bif->bif_ifp->if_xname, error);
6248 &bif->bif_stats);
6253 bif->bif_ifp->if_xname, error);
6267 if (bif->bif_flags & BIFF_HOST_FILTER) {
6268 error = bridge_host_filter(bif, data);
6272 bif->bif_ifp->if_xname);
6284 if (sc->sc_mac_nat_bif == bif && is_ifp_mac && is_ip) {
6308 bstp_input(&bif->bif_stp, m);
6328 if ((bif->bif_ifflags & IFBIF_STP) &&
6329 bif->bif_stp.bp_state == BSTP_IFSTATE_DISCARDING) {
6357 bridge_forward(sc, bif, mc);
6383 if ((bif->bif_ifflags & IFBIF_STP) &&
6384 bif->bif_stp.bp_state == BSTP_IFSTATE_DISCARDING) {
6393 if (bif->bif_ifflags & IFBIF_LEARNING) { \
6395 vlan, bif, 0, IFBAF_DYNAMIC); \
6396 if (error && bif->bif_addrmax) { \
6419 if (is_ifp_mac && sc->sc_mac_nat_bif == bif) {
6452 if (bif->bif_ifflags & IFBIF_LEARNING) {
6454 vlan, bif, 0, IFBAF_DYNAMIC);
6493 bridge_forward(sc, bif, m);
6963 struct bridge_iflist *bif;
6971 TAILQ_FOREACH(bif, &sc->sc_spanlist, bif_next) {
6972 dst_if = bif->bif_ifp;
6996 struct bridge_iflist *bif, int setflags, uint8_t flags)
7025 if (bif->bif_addrmax && bif->bif_addrcnt >= bif->bif_addrmax) {
7026 bif->bif_addrexceeded++;
7043 if (bif->bif_ifflags & IFBIF_STICKY) {
7056 brt->brt_dst = bif;
7057 bif->bif_addrcnt++;
7067 brt->brt_dst != bif) {
7069 brt->brt_dst = bif;
7714 bridge_dhcp_filter(struct bridge_iflist *bif, struct mbuf *m, size_t offset)
7743 if (bcmp(dhcp.dp_chaddr, bif->bif_hf_hwsrc,
7751 if (dhcp.dp_ciaddr.s_addr != bif->bif_hf_ipsrc.s_addr &&
7762 bridge_host_filter_arp(struct bridge_iflist *bif, mbuf_t *data)
7819 if ((bif->bif_flags & BIFF_HF_HWSRC) != 0) {
7823 if (bcmp(ea->arp_sha, bif->bif_hf_hwsrc,
7829 if ((bif->bif_flags & BIFF_HF_IPSRC) != 0) {
7834 if (bcmp(ea->arp_spa, &bif->bif_hf_ipsrc.s_addr,
7849 bridge_host_filter(struct bridge_iflist *bif, mbuf_t *data)
7860 if ((bif->bif_flags & BIFF_HF_HWSRC) != 0 &&
7861 bcmp(eh->ether_shost, bif->bif_hf_hwsrc,
7871 error = bridge_host_filter_arp(bif, data);
7893 if ((bif->bif_flags & BIFF_HF_IPSRC) != 0) {
7910 if (iphdr.ip_src.s_addr != bif->bif_hf_ipsrc.s_addr &&
7938 error = bridge_dhcp_filter(bif, m, offset);
7947 } else if (iphdr.ip_src.s_addr != bif->bif_hf_ipsrc.s_addr) {
7948 assert(bif->bif_hf_ipsrc.s_addr != INADDR_ANY);
8021 bridge_mac_nat_enable(struct bridge_softc *sc, struct bridge_iflist *bif)
8027 if (IFNET_IS_VMNET(bif->bif_ifp)) {
8032 if (sc->sc_mac_nat_bif != bif) {
8037 sc->sc_mac_nat_bif = bif;
8038 bif->bif_ifflags |= IFBIF_MAC_NAT;
8141 struct bridge_iflist *bif, const char eaddr[ETHER_ADDR_LEN])
8160 mne->mne_bif = bif;
8172 struct bridge_iflist *bif, const struct in_addr *ip, const char eaddr[ETHER_ADDR_LEN])
8176 mne = bridge_create_mac_nat_entry_common(sc, bif, eaddr);
8189 struct bridge_iflist *bif, const struct in6_addr *ip6, const char eaddr[ETHER_ADDR_LEN])
8193 mne = bridge_create_mac_nat_entry_common(sc, bif, eaddr);
8206 bridge_update_mac_nat_entry_common(struct bridge_softc *sc, struct bridge_iflist *bif,
8214 if (mne->mne_bif != bif) {
8217 bif->bif_ifp->if_xname);
8220 } else if (mne->mne_bif != bif) {
8223 mne->mne_bif = bif;
8239 struct bridge_iflist *bif, struct in_addr *ip, const char eaddr[ETHER_ADDR_LEN])
8245 return bridge_update_mac_nat_entry_common(sc, bif, mne, eaddr);
8248 mne = bridge_create_mac_nat_entry_ipv4(sc, bif, ip, eaddr);
8254 struct bridge_iflist *bif, struct in6_addr *ip6, const char eaddr[ETHER_ADDR_LEN])
8260 return bridge_update_mac_nat_entry_common(sc, bif, mne, eaddr);
8263 mne = bridge_create_mac_nat_entry_ipv6(sc, bif, ip6, eaddr);
8269 struct mac_nat_entry_list *list, struct bridge_iflist *bif)
8275 if (bif != NULL && mne->mne_bif != bif) {
8290 bridge_mac_nat_flush_entries(struct bridge_softc *sc, struct bridge_iflist * bif)
8294 flush_bif = (bif == sc->sc_mac_nat_bif) ? NULL : bif;
8529 struct bridge_iflist *bif, mbuf_t *data, struct mac_nat_record *mnr)
8556 mne = bridge_update_mac_nat_entry_ipv4(sc, bif, &ip,
8648 struct bridge_iflist *bif, mbuf_t m,
8696 bif->bif_ifp->if_xname,
8704 struct bridge_iflist *bif, mbuf_t *data, struct mac_nat_record *mnr)
8730 mne = bridge_update_mac_nat_entry_ipv4(sc, bif, &ip,
8736 bridge_mac_nat_udp_output(sc, bif, *data,
8781 struct bridge_iflist *bif,
9005 sc->sc_if_xname, bif->bif_ifp->if_xname, str,
9040 struct bridge_iflist *bif, mbuf_t *data, struct mac_nat_record *mnr)
9049 translate = (bif == sc->sc_mac_nat_bif) ? FALSE : TRUE;
9060 bridge_mac_nat_icmpv6_output(sc, bif, data, ip6h, &saddr, mnr);
9065 (void)bridge_update_mac_nat_entry_ipv6(sc, bif, &saddr,
9344 struct bridge_iflist *bif, mbuf_t *data, struct mac_nat_record *mnr)
9359 translate = bridge_mac_nat_arp_output(sc, bif, data, mnr);
9362 translate = bridge_mac_nat_ip_output(sc, bif, data, mnr);
9365 translate = bridge_mac_nat_ipv6_output(sc, bif, data, mnr);
9919 bridge_filter_arp_list(struct bridge_iflist * bif, mbuf_t m)
9932 error = bridge_host_filter_arp(bif, &scan);
9951 bridge_filter_checksum(ifnet_t bridge_ifp, struct bridge_iflist * bif, mbuf_t m,
9968 &bif->bif_stats.brms_in_ip);
9973 bif->bif_ifp->if_xname, error);
10003 error = bridge_offload_checksum(&m, &info, &bif->bif_stats);
10008 bif->bif_ifp->if_xname, error);
10030 bridge_filter_checksum_list(ifnet_t bridge_ifp, struct bridge_iflist * bif,
10042 scan = bridge_filter_checksum(bridge_ifp, bif,
10115 struct bridge_iflist * bif;
10117 TAILQ_FOREACH(bif, &sc->sc_iflist, bif_next) {
10118 if (bif == sbif) {
10122 if (_ether_cmp(IF_LLADDR(bif->bif_ifp), lladdr) == 0) {
10123 return bif->bif_ifp;
10148 struct bridge_iflist * bif;
10196 bif = bridge_lookup_member_if(sc, ifp);
10197 if (bif == NULL) {
10210 host_filter = (bif->bif_flags & BIFF_HOST_FILTER) != 0;
10217 } else if ((bif->bif_flags & BIFF_HF_HWSRC) != 0 &&
10218 bcmp(eh_in_p->ether_shost, bif->bif_hf_hwsrc, ETHER_ADDR_LEN)
10233 discarding = (bif->bif_ifflags & IFBIF_STP) != 0 &&
10234 bif->bif_stp.bp_state == BSTP_IFSTATE_DISCARDING;
10257 bridge_bstp_input_list(&bif->bif_stp, list.head);
10283 if ((bif->bif_ifflags & IFBIF_LEARNING) != 0) {
10284 error = bridge_rtupdate(sc, shost, vlan, bif, 0, IFBAF_DYNAMIC);
10289 if (error != 0 && bif->bif_addrmax) {
10295 if ((bif->bif_ifflags & IFBIF_STP) != 0 &&
10296 bif->bif_stp.bp_state == BSTP_IFSTATE_LEARNING) {
10310 checksum_offload = bif_has_checksum_offload(bif);
10316 list = bridge_filter_arp_list(bif, list.head);
10325 list = bridge_filter_checksum_list(bridge_ifp, bif,
10332 } else if (is_ifp_mac && bif == sc->sc_mac_nat_bif &&
10357 if (sc->sc_mac_nat_bif == bif) {
10368 bridge_broadcast_list(sc, bif, etypef, ip_bcast,
10397 member_input = bridge_find_member(sc, dhost, bif);
10404 if (bridge_find_member(sc, shost, bif) != NULL) {
10414 bridge_broadcast_list(sc, bif, etypef, list.head, true);
10417 bridge_forward_list(sc, bif, dst_if, etypef, list.head);