Lines Matching defs:ifv

311 ifvlan_flags_promisc(ifvlan_ref ifv)
313 return ((ifv->ifv_flags & IFVF_PROMISC) != 0);
317 ifvlan_flags_set_promisc(ifvlan_ref ifv)
319 ifv->ifv_flags |= IFVF_PROMISC;
324 ifvlan_flags_clear_promisc(ifvlan_ref ifv)
326 ifv->ifv_flags &= ~IFVF_PROMISC;
331 ifvlan_flags_ready(ifvlan_ref ifv)
333 return ((ifv->ifv_flags & IFVF_READY) != 0);
337 ifvlan_flags_set_ready(ifvlan_ref ifv)
339 ifv->ifv_flags |= IFVF_READY;
344 ifvlan_flags_clear_ready(ifvlan_ref ifv)
346 ifv->ifv_flags &= ~IFVF_READY;
351 ifvlan_flags_detaching(ifvlan_ref ifv)
353 return ((ifv->ifv_flags & IFVF_DETACHING) != 0);
357 ifvlan_flags_set_detaching(ifvlan_ref ifv)
359 ifv->ifv_flags |= IFVF_DETACHING;
382 static int vlan_unconfig(ifvlan_ref ifv, int need_to_wait);
385 static int vlan_remove(ifvlan_ref ifv, int need_to_wait);
396 static int ifvlan_new_mtu(ifvlan_ref ifv, int mtu);
402 ifvlan_retain(ifvlan_ref ifv)
404 if (ifv->ifv_signature != IFV_SIGNATURE) {
407 if (ifv->ifv_retain_count == 0) {
410 OSIncrementAtomic(&ifv->ifv_retain_count);
414 ifvlan_release(ifvlan_ref ifv)
418 if (ifv->ifv_signature != IFV_SIGNATURE) {
421 old_retain_count = OSDecrementAtomic(&ifv->ifv_retain_count);
428 printf("ifvlan_release(%s)\n", ifv->ifv_name);
430 ifv->ifv_signature = 0;
431 FREE(ifv, M_VLAN);
440 ifvlan_get_vlan_parent_retained(ifvlan_ref ifv)
442 vlan_parent_ref vlp = ifv->ifv_vlp;
458 ifvlan_ref ifv;
460 ifv = (ifvlan_ref)ifnet_softc(ifp);
461 return (ifv);
467 ifvlan_ref ifv;
469 ifv = ifnet_get_ifvlan(ifp);
470 if (ifv == NULL) {
473 if (ifvlan_flags_detaching(ifv)) {
476 ifvlan_retain(ifv);
477 return (ifv);
481 ifnet_ifvlan_vlan_parent_ok(struct ifnet * ifp, ifvlan_ref ifv,
487 if (check_ifv != ifv || ifvlan_flags_detaching(ifv)) {
491 if (ifv->ifv_vlp != vlp) {
709 ifvlan_ref ifv;
714 ifv = ifnet_get_ifvlan_retained(ifp);
715 if (ifv == NULL) {
718 vlp = ifvlan_get_vlan_parent_retained(ifv);
726 if (ifnet_ifvlan_vlan_parent_ok(ifp, ifv, vlp) == FALSE) {
733 error = multicast_list_program(&ifv->ifv_multicast, ifp, p);
742 if (ifv != NULL) {
743 ifvlan_release(ifv);
770 ifvlan_ref ifv;
772 LIST_FOREACH(ifv, &vlp->vlp_vlan_list, ifv_vlan_list) {
773 if (tag == ifv->ifv_tag) {
774 return (ifv);
796 ifvlan_ref ifv;
798 LIST_FOREACH(ifv, &vlp->vlp_vlan_list, ifv_vlan_list) {
801 if (exclude_ifv == ifv) {
804 req_mtu = ifnet_mtu(ifv->ifv_ifp) + ifv->ifv_mtufudge;
852 ifvlan_ref ifv;
874 for (ifv = LIST_FIRST(&vlp->vlp_vlan_list); ifv != NULL; ifv = next) {
875 struct ifnet * ifp = ifv->ifv_ifp;
878 next = LIST_NEXT(ifv, ifv_vlan_list);
879 removed = vlan_remove(ifv, FALSE);
911 vlan_parent_add_vlan(vlan_parent_ref vlp, ifvlan_ref ifv, int tag)
913 LIST_INSERT_HEAD(&vlp->vlp_vlan_list, ifv, ifv_vlan_list);
914 ifv->ifv_vlp = vlp;
915 ifv->ifv_tag = tag;
920 vlan_parent_remove_vlan(__unused vlan_parent_ref vlp, ifvlan_ref ifv)
922 ifv->ifv_vlp = NULL;
923 LIST_REMOVE(ifv, ifv_vlan_list);
943 ifvlan_ref ifv;
951 ifv = _MALLOC(sizeof(struct ifvlan), M_VLAN, M_WAITOK);
952 if (ifv == NULL)
954 bzero(ifv, sizeof(struct ifvlan));
955 ifv->ifv_retain_count = 1;
956 ifv->ifv_signature = IFV_SIGNATURE;
957 multicast_list_init(&ifv->ifv_multicast);
961 snprintf(ifv->ifv_name, sizeof(ifv->ifv_name), "%s%d",
962 ifc->ifc_name, unit) >= sizeof(ifv->ifv_name)) {
963 ifvlan_release(ifv);
968 vlan_init.uniqueid = ifv->ifv_name;
969 vlan_init.uniqueid_len = strlen(ifv->ifv_name);
980 vlan_init.softc = ifv;
989 ifvlan_release(ifv);
1001 ifvlan_release(ifv);
1004 ifv->ifv_ifp = ifp;
1012 vlan_remove(ifvlan_ref ifv, int need_to_wait)
1015 if (ifvlan_flags_detaching(ifv)) {
1018 ifvlan_flags_set_detaching(ifv);
1019 vlan_unconfig(ifv, need_to_wait);
1027 ifvlan_ref ifv;
1030 ifv = ifnet_get_ifvlan_retained(ifp);
1031 if (ifv == NULL) {
1035 if (vlan_remove(ifv, TRUE) == 0) {
1037 ifvlan_release(ifv);
1041 ifvlan_release(ifv);
1050 ifvlan_ref ifv;
1053 ifv = ifnet_get_ifvlan_retained(ifp);
1054 if (ifv == NULL) {
1060 ifv->ifv_bpf_input = ifv->ifv_bpf_output = NULL;
1064 ifv->ifv_bpf_input = func;
1068 ifv->ifv_bpf_output = func;
1072 ifv->ifv_bpf_input = ifv->ifv_bpf_output = func;
1078 ifvlan_release(ifv);
1088 ifvlan_ref ifv;
1104 ifv = ifnet_get_ifvlan_retained(ifp);
1105 if (ifv == NULL || ifvlan_flags_ready(ifv) == 0) {
1108 vlp = ifvlan_get_vlan_parent_retained(ifv);
1115 bpf_func = ifv->ifv_bpf_output;
1116 tag = ifv->ifv_tag;
1117 encaplen = ifv->ifv_encaplen;
1120 ifvlan_release(ifv);
1187 if (ifv != NULL) {
1188 ifvlan_release(ifv);
1248 ifvlan_ref ifv;
1256 ifv = vlan_lookup_parent_and_tag(p, tag);
1257 if (ifv != NULL) {
1258 ifp = ifv->ifv_ifp;
1260 if (ifv == NULL
1261 || ifvlan_flags_ready(ifv) == 0
1267 bpf_func = ifv->ifv_bpf_input;
1303 ifvlan_ref ifv = NULL;
1318 ifv = ifnet_get_ifvlan_retained(ifp);
1319 if (ifv == NULL || ifv->ifv_vlp != NULL) {
1321 if (ifv != NULL) {
1322 ifvlan_release(ifv);
1352 if (ifnet_get_ifvlan(ifp) != ifv) {
1364 || ifvlan_flags_detaching(ifv) || ifv->ifv_vlp != NULL) {
1379 vlan_parent_add_vlan(vlp, ifv, tag);
1380 ifvlan_retain(ifv); /* parent references ifv */
1407 error = multicast_list_program(&ifv->ifv_multicast, ifp, p);
1422 ifv->ifv_encaplen = ETHER_VLAN_ENCAP_LEN;
1423 ifv->ifv_flags = 0;
1425 ifv->ifv_mtufudge = 0;
1434 ifv->ifv_mtufudge = ifv->ifv_encaplen;
1436 ifnet_set_mtu(ifp, ETHERMTU - ifv->ifv_mtufudge);
1452 ifvlan_flags_set_ready(ifv);
1459 if (ifv != NULL) {
1460 ifvlan_release(ifv);
1473 vlan_parent_remove_vlan(vlp, ifv);
1496 if (ifv != NULL) {
1498 ifvlan_release(ifv);
1500 ifvlan_release(ifv);
1526 vlan_unconfig(ifvlan_ref ifv, int need_to_wait)
1528 struct ifnet * ifp = ifv->ifv_ifp;
1536 vlp = ifv->ifv_vlp;
1546 if (ifv != ifnet_get_ifvlan(ifp)) {
1549 if (ifv->ifv_vlp != vlp) {
1555 /* ifv has a reference on vlp, need to remove it */
1569 (void)ifvlan_new_mtu(ifv, ETHERMTU - ifv->ifv_mtufudge);
1574 (void)multicast_list_remove(&ifv->ifv_multicast);
1591 ifv->ifv_mtufudge = 0;
1594 vlan_parent_remove_vlan(vlp, ifv);
1595 ifv->ifv_flags = 0;
1597 /* vlan_parent has reference to ifv, remove it */
1600 /* from this point on, no more referencing ifv */
1619 ifvlan_release(ifv);
1632 ifvlan_ref ifv;
1636 ifv = ifnet_get_ifvlan_retained(ifp);
1637 if (ifv == NULL) {
1642 vlp = ifv->ifv_vlp;
1647 if (!ifvlan_flags_promisc(ifv)) {
1650 ifvlan_flags_set_promisc(ifv);
1654 if (ifvlan_flags_promisc(ifv)) {
1657 ifvlan_flags_clear_promisc(ifv);
1663 if (ifv != NULL) {
1664 ifvlan_release(ifv);
1670 ifvlan_new_mtu(ifvlan_ref ifv, int mtu)
1674 struct ifnet * ifp = ifv->ifv_ifp;
1681 vlp = ifv->ifv_vlp;
1683 req_mtu = mtu + ifv->ifv_mtufudge;
1687 max_mtu = vlan_parent_find_max_mtu(vlp, ifv);
1713 ifvlan_ref ifv;
1720 ifv = ifnet_get_ifvlan_retained(ifp);
1721 if (ifv == NULL) {
1725 vlp = ifvlan_get_vlan_parent_retained(ifv);
1728 ifvlan_release(ifv);
1737 if (ifnet_get_ifvlan(ifp) != ifv
1738 || ifvlan_flags_detaching(ifv)) {
1742 if (ifv->ifv_vlp != vlp) {
1752 error = ifvlan_new_mtu(ifv, mtu);
1758 ifvlan_release(ifv);
1771 ifvlan_ref ifv;
1792 ifv = (ifvlan_ref)ifnet_softc(ifp);
1793 if (ifv == NULL || ifvlan_flags_detaching(ifv)) {
1795 return (ifv == NULL ? EOPNOTSUPP : EBUSY);
1797 p = (ifv->ifv_vlp == NULL) ? NULL : ifv->ifv_vlp->vlp_ifp;
1838 ifv = (ifvlan_ref)ifnet_softc(ifp);
1839 if (ifv == NULL || ifvlan_flags_detaching(ifv)) {
1841 return (ifv == NULL ? EOPNOTSUPP : EBUSY);
1843 vlp = ifv->ifv_vlp;
1845 int min_mtu = vlp->vlp_devmtu.ifdm_min - ifv->ifv_mtufudge;
1849 devmtu_p->ifdm_max = vlp->vlp_devmtu.ifdm_max - ifv->ifv_mtufudge;
1907 ifv = (ifvlan_ref)ifnet_softc(ifp);
1908 if (ifv == NULL || ifvlan_flags_detaching(ifv)) {
1910 error = (ifv == NULL ? EOPNOTSUPP : EBUSY);
1913 need_link_event = vlan_remove(ifv, TRUE);
1924 ifv = (ifvlan_ref)ifnet_softc(ifp);
1925 if (ifv == NULL || ifvlan_flags_detaching(ifv)) {
1927 return (ifv == NULL ? EOPNOTSUPP : EBUSY);
1929 p = (ifv->ifv_vlp == NULL) ? NULL : ifv->ifv_vlp->vlp_ifp;
1930 tag = ifv->ifv_tag;
1963 ifvlan_ref ifv;
1968 ifv = (ifvlan_ref)ifnet_softc(ifp);
1969 if (ifv == NULL) {
1972 ifvlan_release(ifv);
2036 ifvlan_ref ifv;
2061 LIST_FOREACH(ifv, &vlp->vlp_vlan_list, ifv_vlan_list) {
2062 struct ifnet * ifp = ifv->ifv_ifp;