Lines Matching +full:emc +full:- +full:tables
1 /*-
4 * Copyright 2017 Dell EMC Isilon
36 * if_vlan.c - pseudo-device driver for IEEE 802.1Q virtual LANs.
95 ((ifp)->if_flags & IFF_UP && (ifp)->if_drv_flags & IFF_DRV_RUNNING)
106 struct ifvlanhead *hash; /* dynamic hash-list table */
135 if (((_ifv) = (_trunk)->vlans[_i]) != NULL)
140 for (_i = 0; _i < (1 << (_trunk)->hwidth); _i++) \
141 CK_SLIST_FOREACH_SAFE((_ifv), &(_trunk)->hash[_i], ifv_list, _next)
150 /* The VLAN_ARRAY case is simple -- just a for loop using the condition. */
154 if (((_ifv) = (_trunk)->vlans[_i]))
168 !(_cond) && _i < (1 << (_trunk)->hwidth); \
170 if (((_ifv) = CK_SLIST_FIRST(&(_trunk)->hash[_i])) != NULL && \
183 #define TRUNK(ifv) ((ifv)->ifv_trunk)
184 #define PARENT(ifv) (TRUNK(ifv)->parent)
224 * if_vlan uses two module-level synchronizations primitives to allow concurrent
228 * there is a non-sleepable epoch(9) and an sx(9).
230 * The performance-sensitive paths that warrant using the epoch(9) are
260 * We also have a per-trunk mutex that should be acquired when changing
263 #define TRUNK_LOCK_INIT(trunk) mtx_init(&(trunk)->lock, vlanname, NULL, MTX_DEF)
264 #define TRUNK_LOCK_DESTROY(trunk) mtx_destroy(&(trunk)->lock)
265 #define TRUNK_WLOCK(trunk) mtx_lock(&(trunk)->lock)
266 #define TRUNK_WUNLOCK(trunk) mtx_unlock(&(trunk)->lock)
267 #define TRUNK_WLOCK_ASSERT(trunk) mtx_assert(&(trunk)->lock, MA_OWNED);
404 KASSERT(trunk->hwidth == 0 && trunk->hash == NULL, in vlan_inithash()
407 trunk->hwidth = VLAN_DEF_HWIDTH; in vlan_inithash()
408 n = 1 << trunk->hwidth; in vlan_inithash()
409 trunk->hmask = n - 1; in vlan_inithash()
410 trunk->hash = malloc(sizeof(struct ifvlanhead) * n, M_VLAN, M_WAITOK); in vlan_inithash()
412 CK_SLIST_INIT(&trunk->hash[i]); in vlan_inithash()
421 KASSERT(trunk->hwidth > 0, ("%s: hwidth not positive", __func__)); in vlan_freehash()
422 for (i = 0; i < (1 << trunk->hwidth); i++) in vlan_freehash()
423 KASSERT(CK_SLIST_EMPTY(&trunk->hash[i]), in vlan_freehash()
426 free(trunk->hash, M_VLAN); in vlan_freehash()
427 trunk->hash = NULL; in vlan_freehash()
428 trunk->hwidth = trunk->hmask = 0; in vlan_freehash()
438 KASSERT(trunk->hwidth > 0, ("%s: hwidth not positive", __func__)); in vlan_inshash()
440 b = 1 << trunk->hwidth; in vlan_inshash()
441 i = HASH(ifv->ifv_vid, trunk->hmask); in vlan_inshash()
442 CK_SLIST_FOREACH(ifv2, &trunk->hash[i], ifv_list) in vlan_inshash()
443 if (ifv->ifv_vid == ifv2->ifv_vid) in vlan_inshash()
448 * hash buckets squared. This will make the average linked-list length in vlan_inshash()
451 if (trunk->refcnt > (b * b) / 2) { in vlan_inshash()
453 i = HASH(ifv->ifv_vid, trunk->hmask); in vlan_inshash()
455 CK_SLIST_INSERT_HEAD(&trunk->hash[i], ifv, ifv_list); in vlan_inshash()
456 trunk->refcnt++; in vlan_inshash()
468 KASSERT(trunk->hwidth > 0, ("%s: hwidth not positive", __func__)); in vlan_remhash()
470 b = 1 << (trunk->hwidth - 1); in vlan_remhash()
471 i = HASH(ifv->ifv_vid, trunk->hmask); in vlan_remhash()
472 CK_SLIST_FOREACH(ifv2, &trunk->hash[i], ifv_list) in vlan_remhash()
474 trunk->refcnt--; in vlan_remhash()
475 CK_SLIST_REMOVE(&trunk->hash[i], ifv2, ifvlan, ifv_list); in vlan_remhash()
476 if (trunk->refcnt < (b * b) / 2) in vlan_remhash()
477 vlan_growhash(trunk, -1); in vlan_remhash()
496 KASSERT(trunk->hwidth > 0, ("%s: hwidth not positive", __func__)); in vlan_growhash()
504 hwidth2 = trunk->hwidth + howmuch; in vlan_growhash()
505 n = 1 << trunk->hwidth; in vlan_growhash()
515 while ((ifv = CK_SLIST_FIRST(&trunk->hash[i])) != NULL) { in vlan_growhash()
516 CK_SLIST_REMOVE(&trunk->hash[i], ifv, ifvlan, ifv_list); in vlan_growhash()
517 j = HASH(ifv->ifv_vid, n2 - 1); in vlan_growhash()
521 free(trunk->hash, M_VLAN); in vlan_growhash()
522 trunk->hash = hash2; in vlan_growhash()
523 trunk->hwidth = hwidth2; in vlan_growhash()
524 trunk->hmask = n2 - 1; in vlan_growhash()
527 if_printf(trunk->parent, in vlan_growhash()
538 CK_SLIST_FOREACH(ifv, &trunk->hash[HASH(vid, trunk->hmask)], ifv_list) in vlan_gethash()
539 if (ifv->ifv_vid == vid) in vlan_gethash()
552 for (i = 0; i < (1 << trunk->hwidth); i++) {
554 CK_SLIST_FOREACH(ifv, &trunk->hash[i], ifv_list)
555 printf("%s ", ifv->ifv_ifp->if_xname);
566 return trunk->vlans[vid]; in vlan_gethash()
573 if (trunk->vlans[ifv->ifv_vid] != NULL) in vlan_inshash()
575 trunk->vlans[ifv->ifv_vid] = ifv; in vlan_inshash()
576 trunk->refcnt++; in vlan_inshash()
585 trunk->vlans[ifv->ifv_vid] = NULL; in vlan_remhash()
586 trunk->refcnt--; in vlan_remhash()
609 trunk->parent->if_vlantrunk = NULL; in trunk_destroy()
611 if_rele(trunk->parent); in trunk_destroy()
635 sc = ifp->if_softc; in vlan_setmulti()
638 CURVNET_SET_QUIET(ifp_p->if_vnet); in vlan_setmulti()
641 while ((mc = CK_SLIST_FIRST(&sc->vlan_mc_listhead)) != NULL) { in vlan_setmulti()
642 CK_SLIST_REMOVE_HEAD(&sc->vlan_mc_listhead, mc_entries); in vlan_setmulti()
643 (void)if_delmulti(ifp_p, (struct sockaddr *)&mc->mc_addr); in vlan_setmulti()
644 NET_EPOCH_CALL(vlan_mc_free, &mc->mc_epoch_ctx); in vlan_setmulti()
649 CK_STAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) { in vlan_setmulti()
650 if (ifma->ifma_addr->sa_family != AF_LINK) in vlan_setmulti()
658 bcopy(ifma->ifma_addr, &mc->mc_addr, ifma->ifma_addr->sa_len); in vlan_setmulti()
659 mc->mc_addr.sdl_index = ifp_p->if_index; in vlan_setmulti()
660 CK_SLIST_INSERT_HEAD(&sc->vlan_mc_listhead, mc, mc_entries); in vlan_setmulti()
663 CK_SLIST_FOREACH (mc, &sc->vlan_mc_listhead, mc_entries) { in vlan_setmulti()
664 error = if_addmulti(ifp_p, (struct sockaddr *)&mc->mc_addr, in vlan_setmulti()
690 trunk = ifp->if_vlantrunk; in vlan_ifevent()
698 ifv->ifv_ifp->if_baudrate = ifp->if_baudrate; in vlan_ifevent()
720 trunk = ifp->if_vlantrunk; in vlan_iflladdr()
740 ifv_ifp = ifv->ifv_ifp; in vlan_iflladdr()
742 ifp->if_addrlen); in vlan_iflladdr()
743 sdl = (struct sockaddr_dl *)ifv_ifp->if_addr->ifa_addr; in vlan_iflladdr()
744 sdl->sdl_alen = ifp->if_addrlen; in vlan_iflladdr()
745 taskqueue_enqueue(taskqueue_thread, &ifv->lladdr_task); in vlan_iflladdr()
755 * by ejecting its hot-plug card. However, if an ifnet is simply
765 if (ifp->if_flags & IFF_RENAMING) in vlan_ifdetach()
768 trunk = ifp->if_vlantrunk; in vlan_ifdetach()
779 VLAN_FOREACH_UNTIL_SAFE(ifv, ifp->if_vlantrunk, in vlan_ifdetach()
780 ifp->if_vlantrunk == NULL) in vlan_ifdetach()
781 vlan_unconfig_locked(ifv->ifv_ifp, 1); in vlan_ifdetach()
784 KASSERT(ifp->if_vlantrunk == NULL, ("%s: purge failed", __func__)); in vlan_ifdetach()
798 if (ifp->if_type != IFT_L2VLAN) in vlan_trunkdev()
801 ifv = ifp->if_softc; in vlan_trunkdev()
803 if (ifv->ifv_trunk) in vlan_trunkdev()
809 * Return the 12-bit VLAN VID for this interface, for use by external
820 if (ifp->if_type != IFT_L2VLAN) in vlan_tag()
822 ifv = ifp->if_softc; in vlan_tag()
823 *vidp = ifv->ifv_vid; in vlan_tag()
832 if (ifp->if_type != IFT_L2VLAN) in vlan_pcp()
834 ifv = ifp->if_softc; in vlan_pcp()
835 *pcpp = ifv->ifv_pcp; in vlan_pcp()
848 if (ifp->if_type != IFT_L2VLAN) in vlan_cookie()
850 ifv = ifp->if_softc; in vlan_cookie()
851 return (ifv->ifv_cookie); in vlan_cookie()
856 * private per-instance data in.
863 if (ifp->if_type != IFT_L2VLAN) in vlan_setcookie()
865 ifv = ifp->if_softc; in vlan_setcookie()
866 ifv->ifv_cookie = cookie; in vlan_setcookie()
881 trunk = ifp->if_vlantrunk; in vlan_devat()
887 ifp = ifv->ifv_ifp; in vlan_devat()
938 "full-size arrays" in vlan_modevent()
940 "hash tables with chaining" in vlan_modevent()
1023 vid = (vid * 10) + (*cp - '0'); in vlan_clone_match_ethervid()
1089 if (ifd->params != NULL) { in vlan_clone_create()
1106 * is not fixed (-1) in vlan_clone_create()
1145 if (snprintf(dp, len - (dp-name), "%d", unit) > in vlan_clone_create()
1146 len - (dp-name) - 1) { in vlan_clone_create()
1152 ifp = ifv->ifv_ifp = if_alloc(IFT_ETHER); in vlan_clone_create()
1153 CK_SLIST_INIT(&ifv->vlan_mc_listhead); in vlan_clone_create()
1154 ifp->if_softc = ifv; in vlan_clone_create()
1159 strlcpy(ifp->if_xname, name, IFNAMSIZ); in vlan_clone_create()
1160 ifp->if_dname = vlanname; in vlan_clone_create()
1161 ifp->if_dunit = unit; in vlan_clone_create()
1163 ifp->if_init = vlan_init; in vlan_clone_create()
1165 ifp->if_start = vlan_altq_start; in vlan_clone_create()
1166 ifp->if_transmit = vlan_altq_transmit; in vlan_clone_create()
1167 IFQ_SET_MAXLEN(&ifp->if_snd, ifqmaxlen); in vlan_clone_create()
1168 ifp->if_snd.ifq_drv_maxlen = 0; in vlan_clone_create()
1169 IFQ_SET_READY(&ifp->if_snd); in vlan_clone_create()
1171 ifp->if_transmit = vlan_transmit; in vlan_clone_create()
1173 ifp->if_qflush = vlan_qflush; in vlan_clone_create()
1174 ifp->if_ioctl = vlan_ioctl; in vlan_clone_create()
1176 ifp->if_snd_tag_alloc = vlan_snd_tag_alloc; in vlan_clone_create()
1177 ifp->if_ratelimit_query = vlan_ratelimit_query; in vlan_clone_create()
1179 ifp->if_flags = VLAN_IFFLAGS; in vlan_clone_create()
1180 ifp->if_type = IFT_L2VLAN; in vlan_clone_create()
1183 ifp->if_baudrate = 0; in vlan_clone_create()
1184 ifp->if_hdrlen = ETHER_VLAN_ENCAP_LEN; in vlan_clone_create()
1185 ifa = ifp->if_addr; in vlan_clone_create()
1186 sdl = (struct sockaddr_dl *)ifa->ifa_addr; in vlan_clone_create()
1187 sdl->sdl_type = IFT_L2VLAN; in vlan_clone_create()
1245 struct nl_pstate *npt = ifd->npt; in vlan_clone_create_nl()
1246 struct nl_parsed_link *lattrs = ifd->lattrs; in vlan_clone_create_nl()
1252 * lattrs.ifla_idata contains un-parsed vlan data in vlan_clone_create_nl()
1259 if (lattrs->ifla_idata == NULL) { in vlan_clone_create_nl()
1264 error = nl_parse_nested(lattrs->ifla_idata, &vlan_parser, npt, &attrs); in vlan_clone_create_nl()
1280 struct ifc_data ifd_new = { .flags = IFC_F_SYSSPACE, .unit = ifd->unit, .params = ¶ms }; in vlan_clone_create_nl()
1283 ifp_parent = ifnet_byindex(lattrs->ifi_index); in vlan_clone_create_nl()
1289 nlmsg_report_err_msg(npt, "unable to find parent interface %u", lattrs->ifi_index); in vlan_clone_create_nl()
1293 error = vlan_clone_create(ifc, name, len, &ifd_new, &ifd->ifp); in vlan_clone_create_nl()
1301 struct nl_parsed_link *lattrs = ifd->lattrs; in vlan_clone_modify_nl()
1303 if ((lattrs->ifla_idata != NULL) && ((ifd->flags & IFC_F_CREATE) == 0)) { in vlan_clone_modify_nl()
1310 error = nl_parse_nested(lattrs->ifla_idata, &vlan_parser, ifd->npt, &attrs); in vlan_clone_modify_nl()
1315 struct ifnet *ifp_parent = ifnet_byindex_ref(lattrs->ifla_link); in vlan_clone_modify_nl()
1319 nlmsg_report_err_msg(ifd->npt, "unable to find parent interface %u", in vlan_clone_modify_nl()
1320 lattrs->ifla_link); in vlan_clone_modify_nl()
1324 struct ifvlan *ifv = ifp->if_softc; in vlan_clone_modify_nl()
1332 return (nl_modify_ifp_generic(ifp, ifd->lattrs, ifd->bm, ifd->npt)); in vlan_clone_modify_nl()
1349 struct ifvlan *ifv = ifp->if_softc; in vlan_clone_dump_nl()
1351 parent_index = PARENT(ifv)->if_index; in vlan_clone_dump_nl()
1352 vlan_id = ifv->ifv_vid; in vlan_clone_dump_nl()
1353 vlan_proto = ifv->ifv_proto; in vlan_clone_dump_nl()
1375 struct ifvlan *ifv = ifp->if_softc; in vlan_clone_destroy()
1376 int unit = ifp->if_dunit; in vlan_clone_destroy()
1378 if (ifp->if_vlantrunk) in vlan_clone_destroy()
1382 IFQ_PURGE(&ifp->if_snd); in vlan_clone_destroy()
1384 ether_ifdetach(ifp); /* first, remove it from system-wide lists */ in vlan_clone_destroy()
1391 taskqueue_drain(taskqueue_thread, &ifv->lladdr_task); in vlan_clone_destroy()
1402 * The ifp->if_init entry point for vlan(4) is a no-op.
1421 ifv = ifp->if_softc; in vlan_transmit()
1428 len = m->m_pkthdr.len; in vlan_transmit()
1429 mcast = (m->m_flags & (M_MCAST | M_BCAST)) ? 1 : 0; in vlan_transmit()
1434 if (m->m_pkthdr.csum_flags & CSUM_SND_TAG) { in vlan_transmit()
1438 MPASS(m->m_pkthdr.snd_tag->ifp == ifp); in vlan_transmit()
1439 mst = m->m_pkthdr.snd_tag; in vlan_transmit()
1441 if (vst->tag->ifp != p) { in vlan_transmit()
1447 m->m_pkthdr.snd_tag = m_snd_tag_ref(vst->tag); in vlan_transmit()
1462 if (!ether_8021q_frame(&m, ifp, p, &ifv->ifv_qtag)) { in vlan_transmit()
1470 error = (p->if_transmit)(p, m); in vlan_transmit()
1490 * Find the first non-VLAN parent interface. in vlan_output()
1492 ifv = ifp->if_softc; in vlan_output()
1499 ifv = p->if_softc; in vlan_output()
1500 } while (p->if_type == IFT_L2VLAN); in vlan_output()
1502 return p->if_output(ifp, m, dst, ro); in vlan_output()
1509 struct ifaltq *ifq = &ifp->if_snd; in vlan_altq_start()
1526 if (ALTQ_IS_ENABLED(&ifp->if_snd)) { in vlan_altq_transmit()
1527 IFQ_ENQUEUE(&ifp->if_snd, m, err); in vlan_altq_transmit()
1538 * The ifp->if_qflush entry point for vlan(4) is a no-op.
1555 trunk = ifp->if_vlantrunk; in vlan_input()
1561 if (m->m_flags & M_VLANTAG) { in vlan_input()
1564 * Ethernet frame; the tag is stored out-of-band. in vlan_input()
1566 tag = m->m_pkthdr.ether_vtag; in vlan_input()
1567 m->m_flags &= ~M_VLANTAG; in vlan_input()
1572 * Packet is tagged in-band as specified by 802.1q. in vlan_input()
1574 switch (ifp->if_type) { in vlan_input()
1576 if (m->m_len < sizeof(*evl) && in vlan_input()
1582 tag = ntohs(evl->evl_tag); in vlan_input()
1591 ETHER_HDR_LEN - ETHER_TYPE_LEN); in vlan_input()
1598 __func__, ifp->if_xname, ifp->if_type); in vlan_input()
1609 if (ifv == NULL || !UP_AND_RUNNING(ifv->ifv_ifp)) { in vlan_input()
1637 m->m_pkthdr.rcvif = ifv->ifv_ifp; in vlan_input()
1638 if_inc_counter(ifv->ifv_ifp, IFCOUNTER_IPACKETS, 1); in vlan_input()
1641 (*ifv->ifv_ifp->if_input)(ifv->ifv_ifp, m); in vlan_input()
1651 ifp = ifv->ifv_ifp; in vlan_lladdr_fn()
1653 CURVNET_SET(ifp->if_vnet); in vlan_lladdr_fn()
1656 if_setlladdr(ifp, IF_LLADDR(ifp), ifp->if_addrlen); in vlan_lladdr_fn()
1671 * We can handle non-ethernet hardware types as long as in vlan_config()
1674 if (p->if_type != IFT_ETHER && in vlan_config()
1675 p->if_type != IFT_L2VLAN && in vlan_config()
1676 p->if_type != IFT_BRIDGE && in vlan_config()
1677 (p->if_capenable & IFCAP_VLAN_HWTAGGING) == 0) in vlan_config()
1679 if ((p->if_flags & VLAN_IFFLAGS) != VLAN_IFFLAGS) in vlan_config()
1688 if (ifv->ifv_trunk) { in vlan_config()
1689 trunk = ifv->ifv_trunk; in vlan_config()
1690 if (trunk->parent != p) in vlan_config()
1695 ifv->ifv_proto = proto; in vlan_config()
1697 if (ifv->ifv_vid != vid) { in vlan_config()
1698 int oldvid = ifv->ifv_vid; in vlan_config()
1700 /* Re-hash */ in vlan_config()
1702 ifv->ifv_vid = vid; in vlan_config()
1707 ifv->ifv_vid = oldvid; in vlan_config()
1708 /* Re-insert back where we found it. */ in vlan_config()
1718 if (p->if_vlantrunk == NULL) { in vlan_config()
1724 p->if_vlantrunk = trunk; in vlan_config()
1725 trunk->parent = p; in vlan_config()
1726 if_ref(trunk->parent); in vlan_config()
1729 trunk = p->if_vlantrunk; in vlan_config()
1732 ifv->ifv_vid = vid; /* must set this before vlan_inshash() */ in vlan_config()
1733 ifv->ifv_pcp = 0; /* Default: best effort delivery. */ in vlan_config()
1737 ifv->ifv_proto = proto; in vlan_config()
1738 ifv->ifv_encaplen = ETHER_VLAN_ENCAP_LEN; in vlan_config()
1739 ifv->ifv_mintu = ETHERMIN; in vlan_config()
1740 ifv->ifv_pflags = 0; in vlan_config()
1741 ifv->ifv_capenable = -1; in vlan_config()
1742 ifv->ifv_capenable2 = -1; in vlan_config()
1749 if (p->if_capenable & IFCAP_VLAN_MTU) { in vlan_config()
1754 ifv->ifv_mtufudge = 0; in vlan_config()
1763 ifv->ifv_mtufudge = ifv->ifv_encaplen; in vlan_config()
1766 ifv->ifv_trunk = trunk; in vlan_config()
1767 ifp = ifv->ifv_ifp; in vlan_config()
1770 * work with ether_ifattach() but allows for non-ethernet in vlan_config()
1773 ifp->if_mtu = p->if_mtu - ifv->ifv_mtufudge; in vlan_config()
1774 ifp->if_baudrate = p->if_baudrate; in vlan_config()
1775 ifp->if_input = p->if_input; in vlan_config()
1776 ifp->if_resolvemulti = p->if_resolvemulti; in vlan_config()
1777 ifp->if_addrlen = p->if_addrlen; in vlan_config()
1778 ifp->if_broadcastaddr = p->if_broadcastaddr; in vlan_config()
1779 ifp->if_pcp = ifv->ifv_pcp; in vlan_config()
1785 ifp->if_output = vlan_output; in vlan_config()
1792 ifp->if_flags &= ~VLAN_COPY_FLAGS; in vlan_config()
1793 ifp->if_flags |= p->if_flags & VLAN_COPY_FLAGS; in vlan_config()
1796 ifp->if_link_state = p->if_link_state; in vlan_config()
1806 TASK_INIT(&ifv->lladdr_task, 0, vlan_lladdr_fn, ifv); in vlan_config()
1807 ((struct sockaddr_dl *)ifp->if_addr->ifa_addr)->sdl_alen = in vlan_config()
1808 p->if_addrlen; in vlan_config()
1815 if (memcmp(IF_LLADDR(p), IF_LLADDR(ifp), p->if_addrlen) != 0) { in vlan_config()
1816 bcopy(IF_LLADDR(p), IF_LLADDR(ifp), p->if_addrlen); in vlan_config()
1817 taskqueue_enqueue(taskqueue_thread, &ifv->lladdr_task); in vlan_config()
1821 ifp->if_drv_flags |= IFF_DRV_RUNNING; in vlan_config()
1834 EVENTHANDLER_INVOKE(vlan_config, p, ifv->ifv_vid); in vlan_config()
1860 ifv = ifp->if_softc; in vlan_unconfig_locked()
1861 trunk = ifv->ifv_trunk; in vlan_unconfig_locked()
1865 parent = trunk->parent; in vlan_unconfig_locked()
1872 while ((mc = CK_SLIST_FIRST(&ifv->vlan_mc_listhead)) != NULL) { in vlan_unconfig_locked()
1883 (struct sockaddr *)&mc->mc_addr); in vlan_unconfig_locked()
1889 CK_SLIST_REMOVE_HEAD(&ifv->vlan_mc_listhead, mc_entries); in vlan_unconfig_locked()
1890 NET_EPOCH_CALL(vlan_mc_free, &mc->mc_epoch_ctx); in vlan_unconfig_locked()
1896 ifv->ifv_trunk = NULL; in vlan_unconfig_locked()
1901 if (trunk->refcnt == 0) { in vlan_unconfig_locked()
1902 parent->if_vlantrunk = NULL; in vlan_unconfig_locked()
1909 if (ifv->ifv_pflags) in vlan_unconfig_locked()
1911 ifp->if_mtu = ETHERMTU; in vlan_unconfig_locked()
1912 ifp->if_link_state = LINK_STATE_UNKNOWN; in vlan_unconfig_locked()
1913 ifp->if_drv_flags &= ~IFF_DRV_RUNNING; in vlan_unconfig_locked()
1921 EVENTHANDLER_INVOKE(vlan_unconfig, parent, ifv->ifv_vid); in vlan_unconfig_locked()
1934 ifv = ifp->if_softc; in vlan_setflag()
1935 status = status ? (ifp->if_flags & flag) : 0; in vlan_setflag()
1947 if (status != (ifv->ifv_pflags & flag)) { in vlan_setflag()
1951 ifv->ifv_pflags &= ~flag; in vlan_setflag()
1952 ifv->ifv_pflags |= status; in vlan_setflag()
1985 trunk = ifp->if_vlantrunk; in vlan_link_state()
1993 ifv->ifv_ifp->if_baudrate = trunk->parent->if_baudrate; in vlan_link_state()
1994 if_link_state_change(ifv->ifv_ifp, in vlan_link_state()
1995 trunk->parent->if_link_state); in vlan_link_state()
2007 ifv = ifp->if_softc; \
2012 error = p->if_ipsec_accel_m->exp; \
2061 return (trunk->if_ipsec_accel_m->if_hwassist(trunk, sav, in vlan_if_ipsec_hwassist()
2091 ifp = ifv->ifv_ifp; in vlan_capabilities()
2094 mena = p->if_capenable & ifv->ifv_capenable; in vlan_capabilities()
2095 mena2 = p->if_capenable2 & ifv->ifv_capenable2; in vlan_capabilities()
2099 * on VLANs, then propagate its hardware-assisted in vlan_capabilities()
2103 if (p->if_capabilities & IFCAP_VLAN_HWCSUM) in vlan_capabilities()
2104 cap |= p->if_capabilities & (IFCAP_HWCSUM | IFCAP_HWCSUM_IPV6); in vlan_capabilities()
2105 if (p->if_capenable & IFCAP_VLAN_HWCSUM && in vlan_capabilities()
2106 p->if_capenable & IFCAP_VLAN_HWTAGGING) { in vlan_capabilities()
2109 hwa |= p->if_hwassist & (CSUM_IP | CSUM_TCP | in vlan_capabilities()
2112 hwa |= p->if_hwassist & (CSUM_TCP_IPV6 | in vlan_capabilities()
2118 * propagate the hardware-assisted flag. TSO on VLANs in vlan_capabilities()
2124 if (p->if_capabilities & IFCAP_VLAN_HWTSO) in vlan_capabilities()
2125 cap |= p->if_capabilities & IFCAP_TSO; in vlan_capabilities()
2126 if (p->if_capenable & IFCAP_VLAN_HWTSO) { in vlan_capabilities()
2129 hwa |= p->if_hwassist & CSUM_TSO; in vlan_capabilities()
2137 if (p->if_capabilities & IFCAP_VLAN_HWCSUM) in vlan_capabilities()
2138 cap |= p->if_capabilities & IFCAP_LRO; in vlan_capabilities()
2139 if (p->if_capenable & IFCAP_VLAN_HWCSUM) in vlan_capabilities()
2151 if (p->if_capabilities & IFCAP_VLAN_TOE) in vlan_capabilities()
2152 cap |= p->if_capabilities & IFCAP_TOE; in vlan_capabilities()
2153 if (p->if_capenable & IFCAP_VLAN_TOE) { in vlan_capabilities()
2162 cap |= (p->if_capabilities & IFCAP_LINKSTATE); in vlan_capabilities()
2170 cap |= (p->if_capabilities & IFCAP_TXRTLMT); in vlan_capabilities()
2181 cap |= (p->if_capabilities & IFCAP_MEXTPG); in vlan_capabilities()
2193 if (p->if_capabilities & (IFCAP_TXTLS | IFCAP_TXTLS_RTLMT)) in vlan_capabilities()
2194 cap |= p->if_capabilities & (IFCAP_TXTLS | IFCAP_TXTLS_RTLMT); in vlan_capabilities()
2195 if (p->if_capenable & (IFCAP_TXTLS | IFCAP_TXTLS_RTLMT)) in vlan_capabilities()
2198 ifp->if_capabilities = cap; in vlan_capabilities()
2199 ifp->if_capenable = ena; in vlan_capabilities()
2200 ifp->if_hwassist = hwa; in vlan_capabilities()
2203 cap2 |= p->if_capabilities2 & IFCAP2_BIT(IFCAP2_IPSEC_OFFLOAD); in vlan_capabilities()
2205 ifp->if_ipsec_accel_m = &vlan_if_ipsec_accel_methods; in vlan_capabilities()
2208 ifp->if_capabilities2 = cap2; in vlan_capabilities()
2209 ifp->if_capenable2 = ena2; in vlan_capabilities()
2220 trunk = ifp->if_vlantrunk; in vlan_trunk_capabilities()
2249 ifv = ifp->if_softc; in vlan_ioctl()
2253 ifp->if_flags |= IFF_UP; in vlan_ioctl()
2255 if (ifa->ifa_addr->sa_family == AF_INET) in vlan_ioctl()
2260 bcopy(IF_LLADDR(ifp), &ifr->ifr_addr.sa_data[0], in vlan_ioctl()
2261 ifp->if_addrlen); in vlan_ioctl()
2268 error = (*p->if_ioctl)(p, SIOCGIFMEDIA, data); in vlan_ioctl()
2275 if (ifmr->ifm_count >= 1 && ifmr->ifm_ulist) { in vlan_ioctl()
2276 ifmr->ifm_count = 1; in vlan_ioctl()
2277 error = copyout(&ifmr->ifm_current, in vlan_ioctl()
2278 ifmr->ifm_ulist, in vlan_ioctl()
2300 if (ifr->ifr_mtu > in vlan_ioctl()
2301 (PARENT(ifv)->if_mtu - ifv->ifv_mtufudge) || in vlan_ioctl()
2302 ifr->ifr_mtu < in vlan_ioctl()
2303 (ifv->ifv_mintu - ifv->ifv_mtufudge)) in vlan_ioctl()
2306 ifp->if_mtu = ifr->ifr_mtu; in vlan_ioctl()
2322 if (ifp->if_vnet != ifp->if_home_vnet) { in vlan_ioctl()
2341 oldmtu = ifp->if_mtu; in vlan_ioctl()
2349 if (ifp->if_mtu != oldmtu) in vlan_ioctl()
2355 if (ifp->if_vnet != ifp->if_home_vnet) { in vlan_ioctl()
2363 strlcpy(vlr.vlr_parent, PARENT(ifv)->if_xname, in vlan_ioctl()
2365 vlr.vlr_tag = ifv->ifv_vid; in vlan_ioctl()
2366 vlr.vlr_proto = ifv->ifv_proto; in vlan_ioctl()
2401 if (ifp->if_vnet != ifp->if_home_vnet) { in vlan_ioctl()
2406 ifr->ifr_vlan_pcp = ifv->ifv_pcp; in vlan_ioctl()
2411 if (ifp->if_vnet != ifp->if_home_vnet) { in vlan_ioctl()
2419 if (ifr->ifr_vlan_pcp > VLAN_PCP_MAX) { in vlan_ioctl()
2423 ifv->ifv_pcp = ifr->ifr_vlan_pcp; in vlan_ioctl()
2424 ifp->if_pcp = ifv->ifv_pcp; in vlan_ioctl()
2431 ifv->ifv_capenable = ifr->ifr_reqcap; in vlan_ioctl()
2466 ifv = ifp->if_softc; in vlan_snd_tag_alloc()
2468 switch (params->hdr.type) { in vlan_snd_tag_alloc()
2483 if (params->tls_rx.vlan_id != 0) in vlan_snd_tag_alloc()
2485 params->tls_rx.vlan_id = ifv->ifv_vid; in vlan_snd_tag_alloc()
2497 if (ifv->ifv_trunk != NULL) in vlan_snd_tag_alloc()
2523 m_snd_tag_init(&vst->com, ifp, sw); in vlan_snd_tag_alloc()
2524 vst->tag = mst; in vlan_snd_tag_alloc()
2526 *ppmt = &vst->com; in vlan_snd_tag_alloc()
2542 return (vst->tag); in vlan_next_snd_tag()
2552 return (vst->tag->sw->snd_tag_modify(vst->tag, params)); in vlan_snd_tag_modify()
2562 return (vst->tag->sw->snd_tag_query(vst->tag, params)); in vlan_snd_tag_query()
2571 m_snd_tag_rele(vst->tag); in vlan_snd_tag_free()
2584 q->rate_table = NULL; in vlan_ratelimit_query()
2585 q->flags = RT_IS_INDIRECT; in vlan_ratelimit_query()
2586 q->max_flows = 0; in vlan_ratelimit_query()
2587 q->number_of_rates = 0; in vlan_ratelimit_query()