Home | History | Annotate | Download | only in net

Lines Matching defs:ifv

333 	struct ifvlan *ifv;
337 ifv = malloc(sizeof(struct ifvlan), M_DEVBUF, M_WAITOK | M_ZERO);
339 ifp = &ifv->ifv_if;
340 LIST_INIT(&ifv->ifv_mc_listhead);
341 cprng_fast(ifv->ifv_lladdr, sizeof(ifv->ifv_lladdr));
342 ifv->ifv_lladdr[0] &= 0xFE; /* clear I/G bit */
343 ifv->ifv_lladdr[0] |= 0x02; /* set G/L bit */
345 mib->ifvm_ifvlan = ifv;
349 mutex_init(&ifv->ifv_lock, MUTEX_DEFAULT, IPL_NONE);
350 ifv->ifv_psz = pserialize_create();
351 ifv->ifv_mib = mib;
356 ifp->if_softc = ifv;
382 struct ifvlan *ifv = ifp->if_softc;
391 psref_target_destroy(&ifv->ifv_mib->ifvm_psref, ifvm_psref_class);
392 kmem_free(ifv->ifv_mib, sizeof(struct ifvlan_linkmib));
393 pserialize_destroy(ifv->ifv_psz);
394 mutex_destroy(&ifv->ifv_lock);
395 free(ifv, M_DEVBUF);
404 vlan_config(struct ifvlan *ifv, struct ifnet *p, uint16_t tag)
406 struct ifnet *ifp = &ifv->ifv_if;
425 mutex_enter(&ifv->ifv_lock);
426 omib = ifv->ifv_mib;
467 lla = ifv->ifv_lladdr;
515 ifv->ifv_if.if_mtu = p->if_mtu - nmib->ifvm_mtufudge;
516 ifv->ifv_if.if_flags = p->if_flags &
520 ifv->ifv_if.if_type = ifv_iftype;
522 PSLIST_ENTRY_INIT(ifv, ifv_hash);
526 PSLIST_WRITER_INSERT_HEAD(&ifv_hash.lists[idx], ifv, ifv_hash);
529 vlan_linkmib_update(ifv, nmib);
534 ifv->ifv_ifdetach_hook = ether_ifdetachhook_establish(p,
540 ifv->ifv_linkstate_hook = if_linkstate_change_establish(p,
541 vlan_link_state_changed, ifv);
542 if_link_state_change(&ifv->ifv_if, p->if_link_state);
545 mutex_exit(&ifv->ifv_lock);
563 struct ifvlan *ifv = ifp->if_softc;
571 mutex_enter(&ifv->ifv_lock);
572 error = vlan_unconfig_locked(ifv, nmib);
573 mutex_exit(&ifv->ifv_lock);
579 vlan_unconfig_locked(struct ifvlan *ifv, struct ifvlan_linkmib *nmib)
582 struct ifnet *ifp = &ifv->ifv_if;
588 KASSERT(mutex_owned(&ifv->ifv_lock));
590 if (ifv->ifv_stopping) {
597 omib = ifv->ifv_mib;
614 (*nmib->ifvm_msw->vmsw_purgemulti)(ifv);
623 ifv->ifv_stopping = true;
624 mutex_exit(&ifv->ifv_lock);
628 mutex_enter(&ifv->ifv_lock);
629 ifv->ifv_stopping = false;
639 ifv->ifv_if.if_mtu = 0;
640 ifv->ifv_flags = 0;
643 PSLIST_WRITER_REMOVE(ifv, ifv_hash);
646 PSLIST_ENTRY_DESTROY(ifv, ifv_hash);
648 ifv->ifv_linkstate_hook, NULL);
650 vlan_linkmib_update(ifv, nmib);
655 ether_ifdetachhook_disestablish(p, ifv->ifv_ifdetach_hook,
656 &ifv->ifv_lock);
657 mutex_exit(&ifv->ifv_lock);
673 mutex_enter(&ifv->ifv_lock);
783 vlan_linkmib_update(struct ifvlan *ifv, struct ifvlan_linkmib *nmib)
785 struct ifvlan_linkmib *omib = ifv->ifv_mib;
787 KASSERT(mutex_owned(&ifv->ifv_lock));
789 atomic_store_release(&ifv->ifv_mib, nmib);
791 pserialize_perform(ifv->ifv_psz);
815 struct ifvlan *ifv = ifp->if_softc;
822 mib = vlan_getref_linkmib(ifv, &psref);
829 if ((ifv->ifv_flags & IFVF_PROMISC) == 0) {
832 ifv->ifv_flags |= IFVF_PROMISC;
835 if ((ifv->ifv_flags & IFVF_PROMISC) != 0) {
838 ifv->ifv_flags &= ~IFVF_PROMISC;
851 struct ifvlan *ifv = ifp->if_softc;
865 mib = vlan_getref_linkmib(ifv, &psref);
904 mib = vlan_getref_linkmib(ifv, &psref);
930 error = vlan_config(ifv, pr, vlr.vlr_tag);
943 mib = vlan_getref_linkmib(ifv, &psref);
967 mib = vlan_getref_linkmib(ifv, &psref);
981 mutex_enter(&ifv->ifv_lock);
982 mib = ifv->ifv_mib;
985 mutex_exit(&ifv->ifv_lock);
990 (*mib->ifvm_msw->vmsw_addmulti)(ifv, ifr) : EINVAL;
992 mutex_exit(&ifv->ifv_lock);
996 mutex_enter(&ifv->ifv_lock);
997 mib = ifv->ifv_mib;
1000 mutex_exit(&ifv->ifv_lock);
1004 (*mib->ifvm_msw->vmsw_delmulti)(ifv, ifr) : EINVAL;
1006 mutex_exit(&ifv->ifv_lock);
1013 mib = vlan_getref_linkmib(ifv, &psref);
1042 mib = vlan_getref_linkmib(ifv, &psref);
1073 vlan_ether_addmulti(struct ifvlan *ifv, struct ifreq *ifr)
1081 KASSERT(mutex_owned(&ifv->ifv_lock));
1086 error = ether_addmulti(sa, &ifv->ifv_ec);
1109 ETHER_LOCK(&ifv->ifv_ec);
1110 mc->mc_enm = ether_lookup_multi(addrlo, addrhi, &ifv->ifv_ec);
1111 ETHER_UNLOCK(&ifv->ifv_ec);
1116 LIST_INSERT_HEAD(&ifv->ifv_mc_listhead, mc, mc_entries);
1118 mib = ifv->ifv_mib;
1133 (void)ether_delmulti(sa, &ifv->ifv_ec);
1138 vlan_ether_delmulti(struct ifvlan *ifv, struct ifreq *ifr)
1147 KASSERT(mutex_owned(&ifv->ifv_lock));
1156 ETHER_LOCK(&ifv->ifv_ec);
1157 enm = ether_lookup_multi(addrlo, addrhi, &ifv->ifv_ec);
1158 ETHER_UNLOCK(&ifv->ifv_ec);
1162 LIST_FOREACH(mc, &ifv->ifv_mc_listhead, mc_entries) {
1171 error = ether_delmulti(sa, &ifv->ifv_ec);
1176 mib = ifv->ifv_mib;
1184 (void)ether_addmulti(sa, &ifv->ifv_ec);
1195 vlan_ether_purgemulti(struct ifvlan *ifv)
1200 KASSERT(mutex_owned(&ifv->ifv_lock));
1201 mib = ifv->ifv_mib;
1206 while ((mc = LIST_FIRST(&ifv->ifv_mc_listhead)) != NULL) {
1229 struct ifvlan *ifv = ifp->if_softc;
1239 mib = vlan_getref_linkmib(ifv, &psref);
1344 struct ifvlan *ifv = ifp->if_softc;
1370 mib = vlan_getref_linkmib(ifv, &psref);
1452 struct ifvlan *ifv;
1466 ifv = mib->ifvm_ifvlan;
1467 if ((ifv->ifv_if.if_flags & (IFF_UP | IFF_RUNNING)) !=
1487 (ifv->ifv_if.if_flags & IFF_PROMISC) == 0) {
1491 if (memcmp(CLLADDR(ifv->ifv_if.if_sadl),
1494 if_statinc(&ifv->ifv_if, if_ierrors);
1499 m_set_rcvif(m, &ifv->ifv_if);
1507 if_input(&ifv->ifv_if, m);
1519 struct ifvlan *ifv = xifv;
1526 mib = vlan_getref_linkmib(ifv, &psref);
1538 ifp = &ifv->ifv_if;