Lines Matching refs:ipnetif

396 	ipnetif_t	*ipnetif;  in ipnet_populate_if()  local
426 if ((ipnetif = ipnetif_getby_index(phyif, ips)) == NULL) { in ipnet_populate_if()
427 ipnetif = ipnetif_create(name, phyif, ips, ifflags); in ipnet_populate_if()
428 if (ipnetif == NULL) { in ipnet_populate_if()
434 ipnetif->if_flags |= in ipnet_populate_if()
447 if (ipnet_match_lif(ipnetif, lif, isv6) != NULL) in ipnet_populate_if()
449 ipnet_add_ifaddr(lif, ipnetif, nd); in ipnet_populate_if()
452 ipnetif_refrele(ipnetif); in ipnet_populate_if()
920 ipnet_join_allmulti(ipnetif_t *ipnetif, ipnet_stack_t *ips) in ipnet_join_allmulti() argument
924 uint64_t index = ipnetif->if_index; in ipnet_join_allmulti()
927 if (ipnetif->if_multicnt == 0) { in ipnet_join_allmulti()
928 ASSERT((ipnetif->if_flags & in ipnet_join_allmulti()
930 if (ipnetif->if_flags & IPNETIF_IPV4PLUMBED) { in ipnet_join_allmulti()
934 ipnetif->if_flags |= IPNETIF_IPV4ALLMULTI; in ipnet_join_allmulti()
936 if (ipnetif->if_flags & IPNETIF_IPV6PLUMBED) { in ipnet_join_allmulti()
939 (ipnetif->if_flags & IPNETIF_IPV4ALLMULTI)) { in ipnet_join_allmulti()
941 ipnetif->if_flags &= ~IPNETIF_IPV4ALLMULTI; in ipnet_join_allmulti()
944 ipnetif->if_flags |= IPNETIF_IPV6ALLMULTI; in ipnet_join_allmulti()
947 ipnetif->if_multicnt++; in ipnet_join_allmulti()
955 ipnet_leave_allmulti(ipnetif_t *ipnetif, ipnet_stack_t *ips) in ipnet_leave_allmulti() argument
959 uint64_t index = ipnetif->if_index; in ipnet_leave_allmulti()
962 ASSERT(ipnetif->if_multicnt != 0); in ipnet_leave_allmulti()
963 if (--ipnetif->if_multicnt == 0) { in ipnet_leave_allmulti()
964 if (ipnetif->if_flags & IPNETIF_IPV4ALLMULTI) { in ipnet_leave_allmulti()
967 ipnetif->if_flags &= ~IPNETIF_IPV4ALLMULTI; in ipnet_leave_allmulti()
969 if (ipnetif->if_flags & IPNETIF_IPV6ALLMULTI) { in ipnet_leave_allmulti()
972 ipnetif->if_flags &= ~IPNETIF_IPV6ALLMULTI; in ipnet_leave_allmulti()
1013 ipnetif_t *ipnetif = ipnet->ipnet_if; in ipnet_get_addrtype() local
1034 mutex_enter(&ipnetif->if_addr_lock); in ipnet_get_addrtype()
1036 &ipnetif->if_ip4addr_list : &ipnetif->if_ip6addr_list; in ipnet_get_addrtype()
1063 mutex_exit(&ipnetif->if_addr_lock); in ipnet_get_addrtype()
1266 ipnetif_t *ipnetif; in ipnet_alloc_if() local
1268 if ((ipnetif = kmem_zalloc(sizeof (*ipnetif), KM_NOSLEEP)) == NULL) in ipnet_alloc_if()
1271 mutex_init(&ipnetif->if_addr_lock, NULL, MUTEX_DEFAULT, 0); in ipnet_alloc_if()
1272 list_create(&ipnetif->if_ip4addr_list, sizeof (ipnetif_addr_t), in ipnet_alloc_if()
1274 list_create(&ipnetif->if_ip6addr_list, sizeof (ipnetif_addr_t), in ipnet_alloc_if()
1276 mutex_init(&ipnetif->if_reflock, NULL, MUTEX_DEFAULT, 0); in ipnet_alloc_if()
1278 ipnetif->if_stackp = ips; in ipnet_alloc_if()
1280 return (ipnetif); in ipnet_alloc_if()
1292 ipnetif_t *ipnetif; in ipnetif_create() local
1303 if ((ipnetif = ipnet_alloc_if(ips)) == NULL) { in ipnetif_create()
1308 (void) strlcpy(ipnetif->if_name, name, LIFNAMSIZ); in ipnetif_create()
1309 ipnetif->if_index = (uint_t)index; in ipnetif_create()
1310 ipnetif->if_zoneid = netstack_get_zoneid(ips->ips_netstack); in ipnetif_create()
1311 ipnetif->if_dev = makedevice(ipnet_major, ifminor); in ipnetif_create()
1313 ipnetif->if_refcnt = 1; in ipnetif_create()
1315 ipnetif->if_flags = IPNETIF_LOOPBACK; in ipnetif_create()
1319 avl_insert(&ips->ips_avl_by_index, ipnetif, where); in ipnetif_create()
1321 avl_insert(&ips->ips_avl_by_name, ipnetif, where); in ipnetif_create()
1324 return (ipnetif); in ipnetif_create()
1328 ipnetif_remove(ipnetif_t *ipnetif, ipnet_stack_t *ips) in ipnetif_remove() argument
1336 if (ipnet->ipnet_if == ipnetif) in ipnetif_remove()
1341 avl_remove(&ips->ips_avl_by_index, ipnetif); in ipnetif_remove()
1342 avl_remove(&ips->ips_avl_by_name, ipnetif); in ipnetif_remove()
1347 ipnetif_refrele(ipnetif); in ipnetif_remove()
1364 ipnetif_free(ipnetif_t *ipnetif) in ipnetif_free() argument
1366 ASSERT(ipnetif->if_refcnt == 0); in ipnetif_free()
1367 ASSERT(ipnetif->if_sharecnt == 0); in ipnetif_free()
1370 ipnet_purge_addrlist(&ipnetif->if_ip4addr_list); in ipnetif_free()
1371 list_destroy(&ipnetif->if_ip4addr_list); in ipnetif_free()
1372 ipnet_purge_addrlist(&ipnetif->if_ip6addr_list); in ipnetif_free()
1373 list_destroy(&ipnetif->if_ip6addr_list); in ipnetif_free()
1374 mutex_destroy(&ipnetif->if_addr_lock); in ipnetif_free()
1375 mutex_destroy(&ipnetif->if_reflock); in ipnetif_free()
1376 if (ipnetif->if_dev != 0) in ipnetif_free()
1377 id_free(ipnet_minor_space, getminor(ipnetif->if_dev)); in ipnetif_free()
1378 kmem_free(ipnetif, sizeof (*ipnetif)); in ipnetif_free()
1388 ipnet_add_ifaddr(uint64_t lif, ipnetif_t *ipnetif, net_handle_t nd) in ipnet_add_ifaddr() argument
1395 uint64_t phyif = ipnetif->if_index; in ipnet_add_ifaddr()
1433 mutex_enter(&ipnetif->if_addr_lock); in ipnet_add_ifaddr()
1434 if (zoneid != ipnetif->if_zoneid) { in ipnet_add_ifaddr()
1437 ifp2 = ipnetif_clone_create(ipnetif, zoneid); in ipnet_add_ifaddr()
1441 &ipnetif->if_ip4addr_list : &ipnetif->if_ip6addr_list, ifaddr); in ipnet_add_ifaddr()
1442 mutex_exit(&ipnetif->if_addr_lock); in ipnet_add_ifaddr()
1446 ipnet_delete_ifaddr(ipnetif_addr_t *ifaddr, ipnetif_t *ipnetif, boolean_t isv6) in ipnet_delete_ifaddr() argument
1448 mutex_enter(&ipnetif->if_addr_lock); in ipnet_delete_ifaddr()
1453 &ipnetif->if_ip6addr_list : &ipnetif->if_ip4addr_list, ifaddr); in ipnet_delete_ifaddr()
1454 mutex_exit(&ipnetif->if_addr_lock); in ipnet_delete_ifaddr()
1461 ipnetif_t *ipnetif; in ipnet_plumb_ev() local
1473 if ((ipnetif = ipnetif_getby_index(ifindex, ips)) == NULL) { in ipnet_plumb_ev()
1474 ipnetif = ipnetif_create(ifname, ifindex, ips, ifflags); in ipnet_plumb_ev()
1477 if (ipnetif != NULL) { in ipnet_plumb_ev()
1478 ipnetif->if_flags |= in ipnet_plumb_ev()
1482 if (ipnetif->if_multicnt != 0) { in ipnet_plumb_ev()
1485 ipnetif->if_flags |= in ipnet_plumb_ev()
1491 ipnetif_refrele(ipnetif); in ipnet_plumb_ev()
1497 ipnetif_t *ipnetif; in ipnet_unplumb_ev() local
1499 if ((ipnetif = ipnetif_getby_index(ifindex, ips)) == NULL) in ipnet_unplumb_ev()
1502 mutex_enter(&ipnetif->if_addr_lock); in ipnet_unplumb_ev()
1504 &ipnetif->if_ip6addr_list : &ipnetif->if_ip4addr_list); in ipnet_unplumb_ev()
1505 mutex_exit(&ipnetif->if_addr_lock); in ipnet_unplumb_ev()
1512 ipnetif->if_flags &= isv6 ? ~IPNETIF_IPV6PLUMBED : ~IPNETIF_IPV4PLUMBED; in ipnet_unplumb_ev()
1513 if (!(ipnetif->if_flags & (IPNETIF_IPV4PLUMBED | IPNETIF_IPV6PLUMBED))) in ipnet_unplumb_ev()
1514 ipnetif_remove(ipnetif, ips); in ipnet_unplumb_ev()
1515 ipnetif_refrele(ipnetif); in ipnet_unplumb_ev()
1522 ipnetif_t *ipnetif; in ipnet_lifup_ev() local
1525 if ((ipnetif = ipnetif_getby_index(ifindex, ips)) == NULL) in ipnet_lifup_ev()
1527 if ((ifaddr = ipnet_match_lif(ipnetif, lifindex, isv6)) != NULL) { in ipnet_lifup_ev()
1532 ipnet_delete_ifaddr(ifaddr, ipnetif, isv6); in ipnet_lifup_ev()
1535 ipnet_add_ifaddr(lifindex, ipnetif, nd); in ipnet_lifup_ev()
1536 ipnetif_refrele(ipnetif); in ipnet_lifup_ev()
1543 ipnetif_t *ipnetif; in ipnet_lifdown_ev() local
1546 if ((ipnetif = ipnetif_getby_index(ifindex, ips)) == NULL) in ipnet_lifdown_ev()
1548 if ((ifaddr = ipnet_match_lif(ipnetif, lifindex, isv6)) != NULL) in ipnet_lifdown_ev()
1549 ipnet_delete_ifaddr(ifaddr, ipnetif, isv6); in ipnet_lifdown_ev()
1550 ipnetif_refrele(ipnetif); in ipnet_lifdown_ev()
1555 ipnetif_zonecheck(ipnetif, ips); in ipnet_lifdown_ev()
1630 ipnetif_t *ipnetif; in ipnet_if_getdev() local
1640 if ((ipnetif = avl_find(&ips->ips_avl_by_name, name, NULL)) != NULL) { in ipnet_if_getdev()
1641 if (ipnetif_in_zone(ipnetif, zoneid, ips)) in ipnet_if_getdev()
1642 dev = ipnetif->if_dev; in ipnet_if_getdev()
1653 ipnetif_t *ipnetif; in ipnetif_getby_index() local
1656 if ((ipnetif = avl_find(&ips->ips_avl_by_index, &id, NULL)) != NULL) in ipnetif_getby_index()
1657 ipnetif_refhold(ipnetif); in ipnetif_getby_index()
1659 return (ipnetif); in ipnetif_getby_index()
1665 ipnetif_t *ipnetif; in ipnetif_getby_dev() local
1670 for (ipnetif = avl_first(tree); ipnetif != NULL; in ipnetif_getby_dev()
1671 ipnetif = avl_walk(tree, ipnetif, AVL_AFTER)) { in ipnetif_getby_dev()
1672 if (ipnetif->if_dev == dev) { in ipnetif_getby_dev()
1673 ipnetif_refhold(ipnetif); in ipnetif_getby_dev()
1678 return (ipnetif); in ipnetif_getby_dev()
1682 ipnet_match_lif(ipnetif_t *ipnetif, lif_if_t lid, boolean_t isv6) in ipnet_match_lif() argument
1687 mutex_enter(&ipnetif->if_addr_lock); in ipnet_match_lif()
1688 list = isv6 ? &ipnetif->if_ip6addr_list : &ipnetif->if_ip4addr_list; in ipnet_match_lif()
1694 mutex_exit(&ipnetif->if_addr_lock); in ipnet_match_lif()
1726 ipnetif_t *ipnetif, *nipnetif; in ipnet_stack_fini() local
1746 for (ipnetif = avl_first(&ips->ips_avl_by_index); ipnetif != NULL; in ipnet_stack_fini()
1747 ipnetif = nipnetif) { in ipnet_stack_fini()
1748 nipnetif = AVL_NEXT(&ips->ips_avl_by_index, ipnetif); in ipnet_stack_fini()
1749 ipnetif_remove(ipnetif, ips); in ipnet_stack_fini()
1777 ipnetif_in_zone(ipnetif_t *ipnetif, zoneid_t zoneid, ipnet_stack_t *ips) in ipnetif_in_zone() argument
1794 mutex_enter(&ipnetif->if_addr_lock); in ipnetif_in_zone()
1795 ret = ipnet_addrs_in_zone(&ipnetif->if_ip4addr_list, zoneid) || in ipnetif_in_zone()
1796 ipnet_addrs_in_zone(&ipnetif->if_ip6addr_list, zoneid); in ipnetif_in_zone()
1797 mutex_exit(&ipnetif->if_addr_lock); in ipnetif_in_zone()
1809 ipnetif_zonecheck(ipnetif_t *ipnetif, ipnet_stack_t *ips) in ipnetif_zonecheck() argument
1817 if (ipnet->ipnet_if != ipnetif) in ipnetif_zonecheck()
1819 if (!ipnetif_in_zone(ipnetif, ipnet->ipnet_zoneid, ips)) in ipnetif_zonecheck()
1828 ipnetif_t *ipnetif; in ipnet_walk_if() local
1849 for (ipnetif = avl_first(&ips->ips_avl_by_index); ipnetif != NULL; in ipnet_walk_if()
1850 ipnetif = avl_walk(&ips->ips_avl_by_index, ipnetif, AVL_AFTER)) { in ipnet_walk_if()
1851 if (!ipnetif_in_zone(ipnetif, zoneid, ips)) in ipnet_walk_if()
1854 (void) strlcpy(cbnode->ic_ifname, ipnetif->if_name, LIFNAMSIZ); in ipnet_walk_if()
1855 cbnode->ic_dev = ipnetif->if_dev; in ipnet_walk_if()
1903 ipnetif_refhold(ipnetif_t *ipnetif) in ipnetif_refhold() argument
1905 mutex_enter(&ipnetif->if_reflock); in ipnetif_refhold()
1906 ipnetif->if_refcnt++; in ipnetif_refhold()
1907 mutex_exit(&ipnetif->if_reflock); in ipnetif_refhold()
1911 ipnetif_refrele(ipnetif_t *ipnetif) in ipnetif_refrele() argument
1913 mutex_enter(&ipnetif->if_reflock); in ipnetif_refrele()
1914 ASSERT(ipnetif->if_refcnt > 0); in ipnetif_refrele()
1915 if (--ipnetif->if_refcnt == 0) in ipnetif_refrele()
1916 ipnetif_free(ipnetif); in ipnetif_refrele()
1918 mutex_exit(&ipnetif->if_reflock); in ipnetif_refrele()
2053 ipnetif_t *ipnetif; in ipnet_open_byname() local
2066 ipnetif = avl_find(&ips->ips_avl_by_shared, (void *)key, NULL); in ipnet_open_byname()
2068 ipnetif = avl_find(&ips->ips_avl_by_name, (void *)name, NULL); in ipnet_open_byname()
2070 if (ipnetif != NULL) in ipnet_open_byname()
2071 ipnetif_refhold(ipnetif); in ipnet_open_byname()
2074 *ptr = ipnetif; in ipnet_open_byname()
2077 if (ipnetif == NULL) in ipnet_open_byname()
2375 ipnetif_clone_release(ipnetif_t *ipnetif) in ipnetif_clone_release() argument
2379 ipnet_stack_t *ips = ipnetif->if_stackp; in ipnetif_clone_release()
2381 mutex_enter(&ipnetif->if_reflock); in ipnetif_clone_release()
2382 ASSERT(ipnetif->if_refcnt > 0); in ipnetif_clone_release()
2383 if (--ipnetif->if_refcnt == 0) in ipnetif_clone_release()
2385 ASSERT(ipnetif->if_sharecnt > 0); in ipnetif_clone_release()
2386 if (--ipnetif->if_sharecnt == 0) in ipnetif_clone_release()
2388 mutex_exit(&ipnetif->if_reflock); in ipnetif_clone_release()
2391 avl_remove(&ips->ips_avl_by_shared, ipnetif); in ipnetif_clone_release()
2395 ASSERT(ipnetif->if_sharecnt == 0); in ipnetif_clone_release()
2396 ipnetif_free(ipnetif); in ipnetif_clone_release()