Lines Matching refs:ifv

106 #define	TRUNK(ifv)	((ifv)->ifv_trunk)
107 #define PARENT(ifv) ((ifv)->ifv_trunk->parent)
183 static int vlan_inshash(struct ifvlantrunk *trunk, struct ifvlan *ifv);
184 static int vlan_remhash(struct ifvlantrunk *trunk, struct ifvlan *ifv);
202 static int vlan_config(struct ifvlan *ifv, struct ifnet *p, uint16_t tag);
204 static void vlan_capabilities(struct ifvlan *ifv);
265 vlan_inshash(struct ifvlantrunk *trunk, struct ifvlan *ifv)
274 i = HASH(ifv->ifv_vid, trunk->hmask);
276 if (ifv->ifv_vid == ifv2->ifv_vid)
286 i = HASH(ifv->ifv_vid, trunk->hmask);
288 LIST_INSERT_HEAD(&trunk->hash[i], ifv, ifv_list);
295 vlan_remhash(struct ifvlantrunk *trunk, struct ifvlan *ifv)
304 i = HASH(ifv->ifv_vid, trunk->hmask);
306 if (ifv2 == ifv) {
324 struct ifvlan *ifv;
354 while ((ifv = LIST_FIRST(&trunk->hash[i])) != NULL) {
355 LIST_REMOVE(ifv, ifv_list);
356 j = HASH(ifv->ifv_vid, n2 - 1);
357 LIST_INSERT_HEAD(&hash2[j], ifv, ifv_list);
372 struct ifvlan *ifv;
376 LIST_FOREACH(ifv, &trunk->hash[HASH(vid, trunk->hmask)], ifv_list)
377 if (ifv->ifv_vid == vid)
378 return (ifv);
388 struct ifvlan *ifv;
392 LIST_FOREACH(ifv, &trunk->hash[i], ifv_list)
393 printf("%s ", ifv->ifv_ifp->if_xname);
408 vlan_inshash(struct ifvlantrunk *trunk, struct ifvlan *ifv)
411 if (trunk->vlans[ifv->ifv_vid] != NULL)
413 trunk->vlans[ifv->ifv_vid] = ifv;
420 vlan_remhash(struct ifvlantrunk *trunk, struct ifvlan *ifv)
423 trunk->vlans[ifv->ifv_vid] = NULL;
519 struct ifvlan *ifv;
538 if ((ifv = ifp->if_vlantrunk->vlans[i])) {
541 LIST_FOREACH_SAFE(ifv, &ifp->if_vlantrunk->hash[i], ifv_list, next) {
544 if_setlladdr(ifv->ifv_ifp, IF_LLADDR(ifp),
562 struct ifvlan *ifv;
584 if ((ifv = ifp->if_vlantrunk->vlans[i])) {
585 vlan_unconfig_locked(ifv->ifv_ifp, 1);
592 if ((ifv = LIST_FIRST(&ifp->if_vlantrunk->hash[i]))) {
593 vlan_unconfig_locked(ifv->ifv_ifp, 1);
611 struct ifvlan *ifv;
615 ifv = ifp->if_softc;
618 if (ifv->ifv_trunk)
619 ifp = PARENT(ifv);
634 struct ifvlan *ifv;
638 ifv = ifp->if_softc;
639 *vidp = ifv->ifv_vid;
650 struct ifvlan *ifv;
654 ifv = ifp->if_softc;
655 return (ifv->ifv_cookie);
665 struct ifvlan *ifv;
669 ifv = ifp->if_softc;
670 ifv->ifv_cookie = cookie;
681 struct ifvlan *ifv;
688 ifv = vlan_gethash(trunk, vid);
689 if (ifv)
690 ifp = ifv->ifv_ifp;
864 struct ifvlan *ifv;
938 ifv = malloc(sizeof(struct ifvlan), M_VLAN, M_WAITOK | M_ZERO);
939 ifp = ifv->ifv_ifp = if_alloc(IFT_ETHER);
942 free(ifv, M_VLAN);
945 SLIST_INIT(&ifv->vlan_mc_listhead);
947 ifp->if_softc = ifv;
956 ifp->if_linkmib = &ifv->ifv_mib;
957 ifp->if_linkmiblen = sizeof(ifv->ifv_mib);
975 error = vlan_config(ifv, p, vid);
986 free(ifv, M_VLAN);
1001 struct ifvlan *ifv = ifp->if_softc;
1007 free(ifv, M_VLAN);
1027 struct ifvlan *ifv;
1031 ifv = ifp->if_softc;
1032 p = PARENT(ifv);
1085 m->m_pkthdr.ether_vtag = ifv->ifv_vid;
1088 m = ether_vlanencap(m, ifv->ifv_vid);
1121 struct ifvlan *ifv;
1172 ifv = vlan_gethash(trunk, vid);
1173 if (ifv == NULL || !UP_AND_RUNNING(ifv->ifv_ifp)) {
1181 m->m_pkthdr.rcvif = ifv->ifv_ifp;
1182 ifv->ifv_ifp->if_ipackets++;
1185 (*ifp->if_input)(ifv->ifv_ifp, m);
1189 vlan_config(struct ifvlan *ifv, struct ifnet *p, uint16_t vid)
1203 if (ifv->ifv_trunk)
1228 ifv->ifv_vid = vid; /* must set this before vlan_inshash() */
1229 error = vlan_inshash(trunk, ifv);
1232 ifv->ifv_proto = ETHERTYPE_VLAN;
1233 ifv->ifv_encaplen = ETHER_VLAN_ENCAP_LEN;
1234 ifv->ifv_mintu = ETHERMIN;
1235 ifv->ifv_pflags = 0;
1247 ifv->ifv_mtufudge = 0;
1256 ifv->ifv_mtufudge = ifv->ifv_encaplen;
1259 ifv->ifv_trunk = trunk;
1260 ifp = ifv->ifv_ifp;
1266 ifp->if_mtu = p->if_mtu - ifv->ifv_mtufudge;
1285 vlan_capabilities(ifv);
1306 EVENTHANDLER_INVOKE(vlan_config, p, ifv->ifv_vid);
1326 struct ifvlan *ifv;
1332 ifv = ifp->if_softc;
1333 trunk = ifv->ifv_trunk;
1346 while ((mc = SLIST_FIRST(&ifv->vlan_mc_listhead)) != NULL) {
1363 SLIST_REMOVE_HEAD(&ifv->vlan_mc_listhead, mc_entries);
1368 vlan_remhash(trunk, ifv);
1369 ifv->ifv_trunk = NULL;
1390 if (ifv->ifv_pflags)
1402 EVENTHANDLER_INVOKE(vlan_unconfig, parent, ifv->ifv_vid);
1410 struct ifvlan *ifv;
1415 ifv = ifp->if_softc;
1428 if (status != (ifv->ifv_pflags & flag)) {
1429 error = (*func)(PARENT(ifv), status);
1432 ifv->ifv_pflags &= ~flag;
1433 ifv->ifv_pflags |= status;
1462 struct ifvlan *ifv;
1469 ifv = trunk->vlans[i];
1472 LIST_FOREACH(ifv, &trunk->hash[i], ifv_list) {
1474 ifv->ifv_ifp->if_baudrate = trunk->parent->if_baudrate;
1475 if_link_state_change(ifv->ifv_ifp,
1482 vlan_capabilities(struct ifvlan *ifv)
1484 struct ifnet *p = PARENT(ifv);
1485 struct ifnet *ifp = ifv->ifv_ifp;
1488 TRUNK_LOCK_ASSERT(TRUNK(ifv));
1547 struct ifvlan *ifv;
1554 ifv = trunk->vlans[i];
1557 LIST_FOREACH(ifv, &trunk->hash[i], ifv_list)
1559 vlan_capabilities(ifv);
1570 struct ifvlan *ifv;
1577 ifv = ifp->if_softc;
1597 if (TRUNK(ifv) != NULL) {
1598 p = PARENT(ifv);
1628 if (TRUNK(ifv) != NULL) {
1630 (PARENT(ifv)->if_mtu - ifv->ifv_mtufudge) ||
1632 (ifv->ifv_mintu - ifv->ifv_mtufudge))
1675 error = vlan_config(ifv, p, vlr.vlr_tag);
1692 if (TRUNK(ifv) != NULL) {
1693 strlcpy(vlr.vlr_parent, PARENT(ifv)->if_xname,
1695 vlr.vlr_tag = ifv->ifv_vid;
1706 if (TRUNK(ifv) != NULL)
1716 trunk = TRUNK(ifv);