Lines Matching refs:ipnetif
391 ipnetif_t *ipnetif; in ipnet_populate_if() local
421 if ((ipnetif = ipnetif_getby_index(phyif, ips)) == NULL) { in ipnet_populate_if()
422 ipnetif = ipnetif_create(name, phyif, ips, ifflags); in ipnet_populate_if()
423 if (ipnetif == NULL) { in ipnet_populate_if()
429 ipnetif->if_flags |= in ipnet_populate_if()
442 if (ipnet_match_lif(ipnetif, lif, isv6) != NULL) in ipnet_populate_if()
444 ipnet_add_ifaddr(lif, ipnetif, nd); in ipnet_populate_if()
447 ipnetif_refrele(ipnetif); in ipnet_populate_if()
913 ipnet_join_allmulti(ipnetif_t *ipnetif, ipnet_stack_t *ips) in ipnet_join_allmulti() argument
917 uint64_t index = ipnetif->if_index; in ipnet_join_allmulti()
920 if (ipnetif->if_multicnt == 0) { in ipnet_join_allmulti()
921 ASSERT((ipnetif->if_flags & in ipnet_join_allmulti()
923 if (ipnetif->if_flags & IPNETIF_IPV4PLUMBED) { in ipnet_join_allmulti()
927 ipnetif->if_flags |= IPNETIF_IPV4ALLMULTI; in ipnet_join_allmulti()
929 if (ipnetif->if_flags & IPNETIF_IPV6PLUMBED) { in ipnet_join_allmulti()
932 (ipnetif->if_flags & IPNETIF_IPV4ALLMULTI)) { in ipnet_join_allmulti()
934 ipnetif->if_flags &= ~IPNETIF_IPV4ALLMULTI; in ipnet_join_allmulti()
937 ipnetif->if_flags |= IPNETIF_IPV6ALLMULTI; in ipnet_join_allmulti()
940 ipnetif->if_multicnt++; in ipnet_join_allmulti()
948 ipnet_leave_allmulti(ipnetif_t *ipnetif, ipnet_stack_t *ips) in ipnet_leave_allmulti() argument
952 uint64_t index = ipnetif->if_index; in ipnet_leave_allmulti()
955 ASSERT(ipnetif->if_multicnt != 0); in ipnet_leave_allmulti()
956 if (--ipnetif->if_multicnt == 0) { in ipnet_leave_allmulti()
957 if (ipnetif->if_flags & IPNETIF_IPV4ALLMULTI) { in ipnet_leave_allmulti()
960 ipnetif->if_flags &= ~IPNETIF_IPV4ALLMULTI; in ipnet_leave_allmulti()
962 if (ipnetif->if_flags & IPNETIF_IPV6ALLMULTI) { in ipnet_leave_allmulti()
965 ipnetif->if_flags &= ~IPNETIF_IPV6ALLMULTI; in ipnet_leave_allmulti()
1006 ipnetif_t *ipnetif = ipnet->ipnet_if; in ipnet_get_addrtype() local
1027 mutex_enter(&ipnetif->if_addr_lock); in ipnet_get_addrtype()
1029 &ipnetif->if_ip4addr_list : &ipnetif->if_ip6addr_list; in ipnet_get_addrtype()
1056 mutex_exit(&ipnetif->if_addr_lock); in ipnet_get_addrtype()
1259 ipnetif_t *ipnetif; in ipnet_alloc_if() local
1261 if ((ipnetif = kmem_zalloc(sizeof (*ipnetif), KM_NOSLEEP)) == NULL) in ipnet_alloc_if()
1264 mutex_init(&ipnetif->if_addr_lock, NULL, MUTEX_DEFAULT, 0); in ipnet_alloc_if()
1265 list_create(&ipnetif->if_ip4addr_list, sizeof (ipnetif_addr_t), in ipnet_alloc_if()
1267 list_create(&ipnetif->if_ip6addr_list, sizeof (ipnetif_addr_t), in ipnet_alloc_if()
1269 mutex_init(&ipnetif->if_reflock, NULL, MUTEX_DEFAULT, 0); in ipnet_alloc_if()
1271 ipnetif->if_stackp = ips; in ipnet_alloc_if()
1273 return (ipnetif); in ipnet_alloc_if()
1285 ipnetif_t *ipnetif; in ipnetif_create() local
1296 if ((ipnetif = ipnet_alloc_if(ips)) == NULL) { in ipnetif_create()
1301 (void) strlcpy(ipnetif->if_name, name, LIFNAMSIZ); in ipnetif_create()
1302 ipnetif->if_index = (uint_t)index; in ipnetif_create()
1303 ipnetif->if_zoneid = netstack_get_zoneid(ips->ips_netstack); in ipnetif_create()
1304 ipnetif->if_dev = makedevice(ipnet_major, ifminor); in ipnetif_create()
1306 ipnetif->if_refcnt = 1; in ipnetif_create()
1308 ipnetif->if_flags = IPNETIF_LOOPBACK; in ipnetif_create()
1312 avl_insert(&ips->ips_avl_by_index, ipnetif, where); in ipnetif_create()
1314 avl_insert(&ips->ips_avl_by_name, ipnetif, where); in ipnetif_create()
1317 return (ipnetif); in ipnetif_create()
1321 ipnetif_remove(ipnetif_t *ipnetif, ipnet_stack_t *ips) in ipnetif_remove() argument
1329 if (ipnet->ipnet_if == ipnetif) in ipnetif_remove()
1334 avl_remove(&ips->ips_avl_by_index, ipnetif); in ipnetif_remove()
1335 avl_remove(&ips->ips_avl_by_name, ipnetif); in ipnetif_remove()
1340 ipnetif_refrele(ipnetif); in ipnetif_remove()
1357 ipnetif_free(ipnetif_t *ipnetif) in ipnetif_free() argument
1359 ASSERT(ipnetif->if_refcnt == 0); in ipnetif_free()
1360 ASSERT(ipnetif->if_sharecnt == 0); in ipnetif_free()
1363 ipnet_purge_addrlist(&ipnetif->if_ip4addr_list); in ipnetif_free()
1364 list_destroy(&ipnetif->if_ip4addr_list); in ipnetif_free()
1365 ipnet_purge_addrlist(&ipnetif->if_ip6addr_list); in ipnetif_free()
1366 list_destroy(&ipnetif->if_ip6addr_list); in ipnetif_free()
1367 mutex_destroy(&ipnetif->if_addr_lock); in ipnetif_free()
1368 mutex_destroy(&ipnetif->if_reflock); in ipnetif_free()
1369 if (ipnetif->if_dev != 0) in ipnetif_free()
1370 id_free(ipnet_minor_space, getminor(ipnetif->if_dev)); in ipnetif_free()
1371 kmem_free(ipnetif, sizeof (*ipnetif)); in ipnetif_free()
1381 ipnet_add_ifaddr(uint64_t lif, ipnetif_t *ipnetif, net_handle_t nd) in ipnet_add_ifaddr() argument
1388 uint64_t phyif = ipnetif->if_index; in ipnet_add_ifaddr()
1426 mutex_enter(&ipnetif->if_addr_lock); in ipnet_add_ifaddr()
1427 if (zoneid != ipnetif->if_zoneid) { in ipnet_add_ifaddr()
1430 ifp2 = ipnetif_clone_create(ipnetif, zoneid); in ipnet_add_ifaddr()
1434 &ipnetif->if_ip4addr_list : &ipnetif->if_ip6addr_list, ifaddr); in ipnet_add_ifaddr()
1435 mutex_exit(&ipnetif->if_addr_lock); in ipnet_add_ifaddr()
1439 ipnet_delete_ifaddr(ipnetif_addr_t *ifaddr, ipnetif_t *ipnetif, boolean_t isv6) in ipnet_delete_ifaddr() argument
1441 mutex_enter(&ipnetif->if_addr_lock); in ipnet_delete_ifaddr()
1446 &ipnetif->if_ip6addr_list : &ipnetif->if_ip4addr_list, ifaddr); in ipnet_delete_ifaddr()
1447 mutex_exit(&ipnetif->if_addr_lock); in ipnet_delete_ifaddr()
1454 ipnetif_t *ipnetif; in ipnet_plumb_ev() local
1466 if ((ipnetif = ipnetif_getby_index(ifindex, ips)) == NULL) { in ipnet_plumb_ev()
1467 ipnetif = ipnetif_create(ifname, ifindex, ips, ifflags); in ipnet_plumb_ev()
1470 if (ipnetif != NULL) { in ipnet_plumb_ev()
1471 ipnetif->if_flags |= in ipnet_plumb_ev()
1475 if (ipnetif->if_multicnt != 0) { in ipnet_plumb_ev()
1478 ipnetif->if_flags |= in ipnet_plumb_ev()
1484 ipnetif_refrele(ipnetif); in ipnet_plumb_ev()
1490 ipnetif_t *ipnetif; in ipnet_unplumb_ev() local
1492 if ((ipnetif = ipnetif_getby_index(ifindex, ips)) == NULL) in ipnet_unplumb_ev()
1495 mutex_enter(&ipnetif->if_addr_lock); in ipnet_unplumb_ev()
1497 &ipnetif->if_ip6addr_list : &ipnetif->if_ip4addr_list); in ipnet_unplumb_ev()
1498 mutex_exit(&ipnetif->if_addr_lock); in ipnet_unplumb_ev()
1505 ipnetif->if_flags &= isv6 ? ~IPNETIF_IPV6PLUMBED : ~IPNETIF_IPV4PLUMBED; in ipnet_unplumb_ev()
1506 if (!(ipnetif->if_flags & (IPNETIF_IPV4PLUMBED | IPNETIF_IPV6PLUMBED))) in ipnet_unplumb_ev()
1507 ipnetif_remove(ipnetif, ips); in ipnet_unplumb_ev()
1508 ipnetif_refrele(ipnetif); in ipnet_unplumb_ev()
1515 ipnetif_t *ipnetif; in ipnet_lifup_ev() local
1518 if ((ipnetif = ipnetif_getby_index(ifindex, ips)) == NULL) in ipnet_lifup_ev()
1520 if ((ifaddr = ipnet_match_lif(ipnetif, lifindex, isv6)) != NULL) { in ipnet_lifup_ev()
1525 ipnet_delete_ifaddr(ifaddr, ipnetif, isv6); in ipnet_lifup_ev()
1528 ipnet_add_ifaddr(lifindex, ipnetif, nd); in ipnet_lifup_ev()
1529 ipnetif_refrele(ipnetif); in ipnet_lifup_ev()
1536 ipnetif_t *ipnetif; in ipnet_lifdown_ev() local
1539 if ((ipnetif = ipnetif_getby_index(ifindex, ips)) == NULL) in ipnet_lifdown_ev()
1541 if ((ifaddr = ipnet_match_lif(ipnetif, lifindex, isv6)) != NULL) in ipnet_lifdown_ev()
1542 ipnet_delete_ifaddr(ifaddr, ipnetif, isv6); in ipnet_lifdown_ev()
1543 ipnetif_refrele(ipnetif); in ipnet_lifdown_ev()
1548 ipnetif_zonecheck(ipnetif, ips); in ipnet_lifdown_ev()
1623 ipnetif_t *ipnetif; in ipnet_if_getdev() local
1633 if ((ipnetif = avl_find(&ips->ips_avl_by_name, name, NULL)) != NULL) { in ipnet_if_getdev()
1634 if (ipnetif_in_zone(ipnetif, zoneid, ips)) in ipnet_if_getdev()
1635 dev = ipnetif->if_dev; in ipnet_if_getdev()
1646 ipnetif_t *ipnetif; in ipnetif_getby_index() local
1649 if ((ipnetif = avl_find(&ips->ips_avl_by_index, &id, NULL)) != NULL) in ipnetif_getby_index()
1650 ipnetif_refhold(ipnetif); in ipnetif_getby_index()
1652 return (ipnetif); in ipnetif_getby_index()
1658 ipnetif_t *ipnetif; in ipnetif_getby_dev() local
1663 for (ipnetif = avl_first(tree); ipnetif != NULL; in ipnetif_getby_dev()
1664 ipnetif = avl_walk(tree, ipnetif, AVL_AFTER)) { in ipnetif_getby_dev()
1665 if (ipnetif->if_dev == dev) { in ipnetif_getby_dev()
1666 ipnetif_refhold(ipnetif); in ipnetif_getby_dev()
1671 return (ipnetif); in ipnetif_getby_dev()
1675 ipnet_match_lif(ipnetif_t *ipnetif, lif_if_t lid, boolean_t isv6) in ipnet_match_lif() argument
1680 mutex_enter(&ipnetif->if_addr_lock); in ipnet_match_lif()
1681 list = isv6 ? &ipnetif->if_ip6addr_list : &ipnetif->if_ip4addr_list; in ipnet_match_lif()
1687 mutex_exit(&ipnetif->if_addr_lock); in ipnet_match_lif()
1719 ipnetif_t *ipnetif, *nipnetif; in ipnet_stack_fini() local
1739 for (ipnetif = avl_first(&ips->ips_avl_by_index); ipnetif != NULL; in ipnet_stack_fini()
1740 ipnetif = nipnetif) { in ipnet_stack_fini()
1741 nipnetif = AVL_NEXT(&ips->ips_avl_by_index, ipnetif); in ipnet_stack_fini()
1742 ipnetif_remove(ipnetif, ips); in ipnet_stack_fini()
1770 ipnetif_in_zone(ipnetif_t *ipnetif, zoneid_t zoneid, ipnet_stack_t *ips) in ipnetif_in_zone() argument
1787 mutex_enter(&ipnetif->if_addr_lock); in ipnetif_in_zone()
1788 ret = ipnet_addrs_in_zone(&ipnetif->if_ip4addr_list, zoneid) || in ipnetif_in_zone()
1789 ipnet_addrs_in_zone(&ipnetif->if_ip6addr_list, zoneid); in ipnetif_in_zone()
1790 mutex_exit(&ipnetif->if_addr_lock); in ipnetif_in_zone()
1802 ipnetif_zonecheck(ipnetif_t *ipnetif, ipnet_stack_t *ips) in ipnetif_zonecheck() argument
1810 if (ipnet->ipnet_if != ipnetif) in ipnetif_zonecheck()
1812 if (!ipnetif_in_zone(ipnetif, ipnet->ipnet_zoneid, ips)) in ipnetif_zonecheck()
1821 ipnetif_t *ipnetif; in ipnet_walk_if() local
1842 for (ipnetif = avl_first(&ips->ips_avl_by_index); ipnetif != NULL; in ipnet_walk_if()
1843 ipnetif = avl_walk(&ips->ips_avl_by_index, ipnetif, AVL_AFTER)) { in ipnet_walk_if()
1844 if (!ipnetif_in_zone(ipnetif, zoneid, ips)) in ipnet_walk_if()
1847 (void) strlcpy(cbnode->ic_ifname, ipnetif->if_name, LIFNAMSIZ); in ipnet_walk_if()
1848 cbnode->ic_dev = ipnetif->if_dev; in ipnet_walk_if()
1896 ipnetif_refhold(ipnetif_t *ipnetif) in ipnetif_refhold() argument
1898 mutex_enter(&ipnetif->if_reflock); in ipnetif_refhold()
1899 ipnetif->if_refcnt++; in ipnetif_refhold()
1900 mutex_exit(&ipnetif->if_reflock); in ipnetif_refhold()
1904 ipnetif_refrele(ipnetif_t *ipnetif) in ipnetif_refrele() argument
1906 mutex_enter(&ipnetif->if_reflock); in ipnetif_refrele()
1907 ASSERT(ipnetif->if_refcnt > 0); in ipnetif_refrele()
1908 if (--ipnetif->if_refcnt == 0) in ipnetif_refrele()
1909 ipnetif_free(ipnetif); in ipnetif_refrele()
1911 mutex_exit(&ipnetif->if_reflock); in ipnetif_refrele()
2046 ipnetif_t *ipnetif; in ipnet_open_byname() local
2059 ipnetif = avl_find(&ips->ips_avl_by_shared, (void *)key, NULL); in ipnet_open_byname()
2061 ipnetif = avl_find(&ips->ips_avl_by_name, (void *)name, NULL); in ipnet_open_byname()
2063 if (ipnetif != NULL) in ipnet_open_byname()
2064 ipnetif_refhold(ipnetif); in ipnet_open_byname()
2067 *ptr = ipnetif; in ipnet_open_byname()
2070 if (ipnetif == NULL) in ipnet_open_byname()
2367 ipnetif_clone_release(ipnetif_t *ipnetif) in ipnetif_clone_release() argument
2371 ipnet_stack_t *ips = ipnetif->if_stackp; in ipnetif_clone_release()
2373 mutex_enter(&ipnetif->if_reflock); in ipnetif_clone_release()
2374 ASSERT(ipnetif->if_refcnt > 0); in ipnetif_clone_release()
2375 if (--ipnetif->if_refcnt == 0) in ipnetif_clone_release()
2377 ASSERT(ipnetif->if_sharecnt > 0); in ipnetif_clone_release()
2378 if (--ipnetif->if_sharecnt == 0) in ipnetif_clone_release()
2380 mutex_exit(&ipnetif->if_reflock); in ipnetif_clone_release()
2383 avl_remove(&ips->ips_avl_by_shared, ipnetif); in ipnetif_clone_release()
2387 ASSERT(ipnetif->if_sharecnt == 0); in ipnetif_clone_release()
2388 ipnetif_free(ipnetif); in ipnetif_clone_release()