Lines Matching refs:ips

245 	ipnet_stack_t		*ips;  in ipnetif_init()  local
250 ips = ns->netstack_ipnet; in ipnetif_init()
251 if ((ret = ipnet_populate_if(ips->ips_ndv4, ips, B_FALSE)) == 0) in ipnetif_init()
252 ret = ipnet_populate_if(ips->ips_ndv6, ips, B_TRUE); in ipnetif_init()
329 ipnet_register_netihook(ipnet_stack_t *ips) in ipnet_register_netihook() argument
335 HOOK_INIT(ips->ips_nicevents, ipnet_nicevent_cb, "ipnet_nicevents", in ipnet_register_netihook()
336 ips); in ipnet_register_netihook()
343 zoneid = netstackid_to_zoneid(ips->ips_netstack->netstack_stackid); in ipnet_register_netihook()
347 if ((ips->ips_ndv4 = net_protocol_lookup(netid, NHF_INET)) != NULL) { in ipnet_register_netihook()
348 if ((ret = net_hook_register(ips->ips_ndv4, NH_NIC_EVENTS, in ipnet_register_netihook()
349 ips->ips_nicevents)) != 0) { in ipnet_register_netihook()
350 VERIFY(net_protocol_release(ips->ips_ndv4) == 0); in ipnet_register_netihook()
351 ips->ips_ndv4 = NULL; in ipnet_register_netihook()
356 if ((ips->ips_ndv6 = net_protocol_lookup(netid, NHF_INET6)) != NULL) { in ipnet_register_netihook()
357 if ((ret = net_hook_register(ips->ips_ndv6, NH_NIC_EVENTS, in ipnet_register_netihook()
358 ips->ips_nicevents)) != 0) { in ipnet_register_netihook()
359 VERIFY(net_protocol_release(ips->ips_ndv6) == 0); in ipnet_register_netihook()
360 ips->ips_ndv6 = NULL; in ipnet_register_netihook()
369 ips->ips_kstatp = net_kstat_create(netid, "ipnet", 0, "ipnet_stats", in ipnet_register_netihook()
372 if (ips->ips_kstatp != NULL) { in ipnet_register_netihook()
373 bcopy(&stats_template, &ips->ips_stats, in ipnet_register_netihook()
374 sizeof (ips->ips_stats)); in ipnet_register_netihook()
375 ips->ips_kstatp->ks_data = &ips->ips_stats; in ipnet_register_netihook()
376 ips->ips_kstatp->ks_private = in ipnet_register_netihook()
377 (void *)(uintptr_t)ips->ips_netstack->netstack_stackid; in ipnet_register_netihook()
378 kstat_install(ips->ips_kstatp); in ipnet_register_netihook()
392 ipnet_populate_if(net_handle_t nd, ipnet_stack_t *ips, boolean_t isv6) in ipnet_populate_if() argument
418 mutex_enter(&ips->ips_event_lock); in ipnet_populate_if()
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()
456 mutex_exit(&ips->ips_event_lock); in ipnet_populate_if()
513 ipnet_stack_t *ips; in ipnet_open() local
536 ips = ns->netstack_ipnet; in ipnet_open()
550 mutex_enter(&ips->ips_event_lock); in ipnet_open()
556 ipnet->ipnet_if = ipnetif_getby_dev(*dev, ips); in ipnet_open()
558 !ipnetif_in_zone(ipnet->ipnet_if, zoneid, ips)) { in ipnet_open()
564 mutex_enter(&ips->ips_walkers_lock); in ipnet_open()
565 while (ips->ips_walkers_cnt != 0) in ipnet_open()
566 cv_wait(&ips->ips_walkers_cv, &ips->ips_walkers_lock); in ipnet_open()
567 list_insert_head(&ips->ips_str_list, ipnet); in ipnet_open()
575 if (list_head(&ips->ips_str_list) == list_tail(&ips->ips_str_list)) in ipnet_open()
576 ips->ips_hook = ipobs_register_hook(ns, ipnet_input); in ipnet_open()
577 mutex_exit(&ips->ips_walkers_lock); in ipnet_open()
580 mutex_exit(&ips->ips_event_lock); in ipnet_open()
596 ipnet_stack_t *ips = ipnet->ipnet_ns->netstack_ipnet; in ipnet_close() local
599 ipnet_leave_allmulti(ipnet->ipnet_if, ips); in ipnet_close()
601 ipnet_leave_allmulti(ipnet->ipnet_if, ips); in ipnet_close()
603 mutex_enter(&ips->ips_walkers_lock); in ipnet_close()
604 while (ips->ips_walkers_cnt != 0) in ipnet_close()
605 cv_wait(&ips->ips_walkers_cv, &ips->ips_walkers_lock); in ipnet_close()
609 list_remove(&ips->ips_str_list, ipnet); in ipnet_close()
614 if (list_is_empty(&ips->ips_str_list)) { in ipnet_close()
615 ipobs_unregister_hook(ips->ips_netstack, ips->ips_hook); in ipnet_close()
616 ips->ips_hook = NULL; in ipnet_close()
621 mutex_exit(&ips->ips_walkers_lock); in ipnet_close()
622 netstack_rele(ips->ips_netstack); in ipnet_close()
920 ipnet_join_allmulti(ipnetif_t *ipnetif, ipnet_stack_t *ips) in ipnet_join_allmulti() argument
923 ip_stack_t *ipst = ips->ips_netstack->netstack_ip; in ipnet_join_allmulti()
926 mutex_enter(&ips->ips_event_lock); in ipnet_join_allmulti()
950 mutex_exit(&ips->ips_event_lock); in ipnet_join_allmulti()
955 ipnet_leave_allmulti(ipnetif_t *ipnetif, ipnet_stack_t *ips) in ipnet_leave_allmulti() argument
958 ip_stack_t *ipst = ips->ips_netstack->netstack_ip; in ipnet_leave_allmulti()
961 mutex_enter(&ips->ips_event_lock); in ipnet_leave_allmulti()
975 mutex_exit(&ips->ips_event_lock); in ipnet_leave_allmulti()
1181 ipnet_stack_t *ips; in ipnet_dispatch() local
1185 ips = ((netstack_t *)hdr->hpo_ctx)->netstack_ipnet; in ipnet_dispatch()
1199 ipnet_walkers_inc(ips); in ipnet_dispatch()
1201 list = &ips->ips_str_list; in ipnet_dispatch()
1205 IPSK_BUMP(ips, ik_acceptFail); in ipnet_dispatch()
1208 IPSK_BUMP(ips, ik_acceptOk); in ipnet_dispatch()
1216 IPSK_BUMP(ips, ik_duplicationFail); in ipnet_dispatch()
1223 IPSK_BUMP(ips, ik_dispatchHeaderDrop); in ipnet_dispatch()
1231 IPSK_BUMP(ips, ik_dispatchDeliver); in ipnet_dispatch()
1234 IPSK_BUMP(ips, ik_dispatchDeliver); in ipnet_dispatch()
1237 IPSK_BUMP(ips, ik_dispatchPutDrop); in ipnet_dispatch()
1241 ipnet_walkers_dec(ips); in ipnet_dispatch()
1250 ipnet_stack_t *ips; in ipnet_input() local
1252 ips = ((netstack_t *)hdr->hpo_ctx)->netstack_ipnet; in ipnet_input()
1256 IPSK_BUMP(ips, ik_dispatchFail); in ipnet_input()
1259 IPSK_BUMP(ips, ik_dispatchOk); in ipnet_input()
1264 ipnet_alloc_if(ipnet_stack_t *ips) in ipnet_alloc_if() argument
1278 ipnetif->if_stackp = ips; in ipnet_alloc_if()
1289 ipnetif_create(const char *name, uint64_t index, ipnet_stack_t *ips, in ipnetif_create() argument
1303 if ((ipnetif = ipnet_alloc_if(ips)) == NULL) { in ipnetif_create()
1310 ipnetif->if_zoneid = netstack_get_zoneid(ips->ips_netstack); in ipnetif_create()
1317 mutex_enter(&ips->ips_avl_lock); in ipnetif_create()
1318 VERIFY(avl_find(&ips->ips_avl_by_index, &index, &where) == NULL); in ipnetif_create()
1319 avl_insert(&ips->ips_avl_by_index, ipnetif, where); in ipnetif_create()
1320 VERIFY(avl_find(&ips->ips_avl_by_name, (void *)name, &where) == NULL); in ipnetif_create()
1321 avl_insert(&ips->ips_avl_by_name, ipnetif, where); in ipnetif_create()
1322 mutex_exit(&ips->ips_avl_lock); in ipnetif_create()
1328 ipnetif_remove(ipnetif_t *ipnetif, ipnet_stack_t *ips) in ipnetif_remove() argument
1332 ipnet_walkers_inc(ips); in ipnetif_remove()
1334 for (ipnet = list_head(&ips->ips_str_list); ipnet != NULL; in ipnetif_remove()
1335 ipnet = list_next(&ips->ips_str_list, ipnet)) { in ipnetif_remove()
1339 ipnet_walkers_dec(ips); in ipnetif_remove()
1340 mutex_enter(&ips->ips_avl_lock); 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()
1343 mutex_exit(&ips->ips_avl_lock); in ipnetif_remove()
1459 ipnet_plumb_ev(ipnet_nicevent_t *ipne, ipnet_stack_t *ips, boolean_t isv6) in ipnet_plumb_ev() argument
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()
1484 ips->ips_netstack->netstack_ip) == 0) { in ipnet_plumb_ev()
1495 ipnet_unplumb_ev(uint64_t ifindex, ipnet_stack_t *ips, boolean_t isv6) in ipnet_unplumb_ev() argument
1499 if ((ipnetif = ipnetif_getby_index(ifindex, ips)) == NULL) in ipnet_unplumb_ev()
1514 ipnetif_remove(ipnetif, ips); in ipnet_unplumb_ev()
1520 ipnet_stack_t *ips, boolean_t isv6) in ipnet_lifup_ev() argument
1525 if ((ipnetif = ipnetif_getby_index(ifindex, ips)) == NULL) in ipnet_lifup_ev()
1540 ipnet_lifdown_ev(uint64_t ifindex, uint64_t lifindex, ipnet_stack_t *ips, in ipnet_lifdown_ev() argument
1546 if ((ipnetif = ipnetif_getby_index(ifindex, ips)) == NULL) in ipnet_lifdown_ev()
1555 ipnetif_zonecheck(ipnetif, ips); in ipnet_lifdown_ev()
1566 ipnet_stack_t *ips = arg; in ipnet_nicevent_cb() local
1574 ipne->ipne_stackid = ips->ips_netstack->netstack_stackid; in ipnet_nicevent_cb()
1591 ipnet_stack_t *ips; in ipnet_nicevent_task() local
1596 ips = ns->netstack_ipnet; in ipnet_nicevent_task()
1597 isv6 = (ipne->ipne_protocol == ips->ips_ndv6); in ipnet_nicevent_task()
1599 mutex_enter(&ips->ips_event_lock); in ipnet_nicevent_task()
1602 ipnet_plumb_ev(ipne, ips, isv6); in ipnet_nicevent_task()
1605 ipnet_unplumb_ev(ipne->ipne_ifindex, ips, isv6); in ipnet_nicevent_task()
1609 ipne->ipne_protocol, ips, isv6); in ipnet_nicevent_task()
1612 ipnet_lifdown_ev(ipne->ipne_ifindex, ipne->ipne_lifindex, ips, in ipnet_nicevent_task()
1618 mutex_exit(&ips->ips_event_lock); in ipnet_nicevent_task()
1629 ipnet_stack_t *ips; in ipnet_if_getdev() local
1638 ips = ns->netstack_ipnet; in ipnet_if_getdev()
1639 mutex_enter(&ips->ips_avl_lock); in ipnet_if_getdev()
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()
1644 mutex_exit(&ips->ips_avl_lock); in ipnet_if_getdev()
1651 ipnetif_getby_index(uint64_t id, ipnet_stack_t *ips) in ipnetif_getby_index() argument
1655 mutex_enter(&ips->ips_avl_lock); in ipnetif_getby_index()
1656 if ((ipnetif = avl_find(&ips->ips_avl_by_index, &id, NULL)) != NULL) in ipnetif_getby_index()
1658 mutex_exit(&ips->ips_avl_lock); in ipnetif_getby_index()
1663 ipnetif_getby_dev(dev_t dev, ipnet_stack_t *ips) in ipnetif_getby_dev() argument
1668 mutex_enter(&ips->ips_avl_lock); in ipnetif_getby_dev()
1669 tree = &ips->ips_avl_by_index; in ipnetif_getby_dev()
1677 mutex_exit(&ips->ips_avl_lock); in ipnetif_getby_dev()
1702 ipnet_stack_t *ips; in ipnet_stack_init() local
1704 ips = kmem_zalloc(sizeof (*ips), KM_SLEEP); in ipnet_stack_init()
1705 ips->ips_netstack = ns; in ipnet_stack_init()
1706 mutex_init(&ips->ips_avl_lock, NULL, MUTEX_DEFAULT, 0); in ipnet_stack_init()
1707 avl_create(&ips->ips_avl_by_index, ipnetif_compare_index, in ipnet_stack_init()
1709 avl_create(&ips->ips_avl_by_name, ipnetif_compare_name, in ipnet_stack_init()
1711 avl_create(&ips->ips_avl_by_shared, ipnetif_compare_name_zone, in ipnet_stack_init()
1713 mutex_init(&ips->ips_walkers_lock, NULL, MUTEX_DEFAULT, NULL); in ipnet_stack_init()
1714 cv_init(&ips->ips_walkers_cv, NULL, CV_DRIVER, NULL); in ipnet_stack_init()
1715 list_create(&ips->ips_str_list, sizeof (ipnet_t), in ipnet_stack_init()
1717 ipnet_register_netihook(ips); in ipnet_stack_init()
1718 return (ips); in ipnet_stack_init()
1725 ipnet_stack_t *ips = arg; in ipnet_stack_fini() local
1728 if (ips->ips_kstatp != NULL) { in ipnet_stack_fini()
1732 net_kstat_delete(net_zoneidtonetid(zoneid), ips->ips_kstatp); in ipnet_stack_fini()
1734 if (ips->ips_ndv4 != NULL) { in ipnet_stack_fini()
1735 VERIFY(net_hook_unregister(ips->ips_ndv4, NH_NIC_EVENTS, in ipnet_stack_fini()
1736 ips->ips_nicevents) == 0); in ipnet_stack_fini()
1737 VERIFY(net_protocol_release(ips->ips_ndv4) == 0); in ipnet_stack_fini()
1739 if (ips->ips_ndv6 != NULL) { in ipnet_stack_fini()
1740 VERIFY(net_hook_unregister(ips->ips_ndv6, NH_NIC_EVENTS, in ipnet_stack_fini()
1741 ips->ips_nicevents) == 0); in ipnet_stack_fini()
1742 VERIFY(net_protocol_release(ips->ips_ndv6) == 0); in ipnet_stack_fini()
1744 hook_free(ips->ips_nicevents); in ipnet_stack_fini()
1746 for (ipnetif = avl_first(&ips->ips_avl_by_index); ipnetif != NULL; 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()
1751 avl_destroy(&ips->ips_avl_by_shared); in ipnet_stack_fini()
1752 avl_destroy(&ips->ips_avl_by_index); in ipnet_stack_fini()
1753 avl_destroy(&ips->ips_avl_by_name); in ipnet_stack_fini()
1754 mutex_destroy(&ips->ips_avl_lock); in ipnet_stack_fini()
1755 mutex_destroy(&ips->ips_walkers_lock); in ipnet_stack_fini()
1756 cv_destroy(&ips->ips_walkers_cv); in ipnet_stack_fini()
1757 list_destroy(&ips->ips_str_list); in ipnet_stack_fini()
1758 kmem_free(ips, sizeof (*ips)); in ipnet_stack_fini()
1777 ipnetif_in_zone(ipnetif_t *ipnetif, zoneid_t zoneid, ipnet_stack_t *ips) in ipnetif_in_zone() argument
1787 ips->ips_netstack->netstack_stackid != GLOBAL_NETSTACKID) in ipnetif_in_zone()
1809 ipnetif_zonecheck(ipnetif_t *ipnetif, ipnet_stack_t *ips) in ipnetif_zonecheck() argument
1811 list_t *strlist = &ips->ips_str_list; in ipnetif_zonecheck()
1814 ipnet_walkers_inc(ips); in ipnetif_zonecheck()
1819 if (!ipnetif_in_zone(ipnetif, ipnet->ipnet_zoneid, ips)) in ipnetif_zonecheck()
1822 ipnet_walkers_dec(ips); in ipnetif_zonecheck()
1832 ipnet_stack_t *ips; in ipnet_walk_if() local
1844 ips = ns->netstack_ipnet; in ipnet_walk_if()
1848 mutex_enter(&ips->ips_avl_lock); in ipnet_walk_if()
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()
1858 mutex_exit(&ips->ips_avl_lock); in ipnet_walk_if()
1922 ipnet_walkers_inc(ipnet_stack_t *ips) in ipnet_walkers_inc() argument
1924 mutex_enter(&ips->ips_walkers_lock); in ipnet_walkers_inc()
1925 ips->ips_walkers_cnt++; in ipnet_walkers_inc()
1926 mutex_exit(&ips->ips_walkers_lock); in ipnet_walkers_inc()
1930 ipnet_walkers_dec(ipnet_stack_t *ips) in ipnet_walkers_dec() argument
1932 mutex_enter(&ips->ips_walkers_lock); in ipnet_walkers_dec()
1933 ASSERT(ips->ips_walkers_cnt != 0); in ipnet_walkers_dec()
1934 if (--ips->ips_walkers_cnt == 0) in ipnet_walkers_dec()
1935 cv_broadcast(&ips->ips_walkers_cv); in ipnet_walkers_dec()
1936 mutex_exit(&ips->ips_walkers_lock); in ipnet_walkers_dec()
1955 ipnet_stack_t *ips = ns->netstack_ipnet; in ipobs_bounce_func() local
1957 IPSK_BUMP(ips, ik_dispatchDupDrop); in ipobs_bounce_func()
2031 ipnet_rele(ipnet_stack_t *ips) in ipnet_rele() argument
2033 netstack_rele(ips->ips_netstack); in ipnet_rele()
2052 ipnet_stack_t *ips; in ipnet_open_byname() local
2056 VERIFY((ips = ipnet_find_by_zoneid(zoneid)) != NULL); in ipnet_open_byname()
2058 mutex_enter(&ips->ips_avl_lock); in ipnet_open_byname()
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()
2072 mutex_exit(&ips->ips_avl_lock); in ipnet_open_byname()
2075 ipnet_rele(ips); in ipnet_open_byname()
2110 ipnet_stack_t *ips; in ipnet_get_linkid_byname() local
2113 VERIFY((ips = ipnet_find_by_zoneid(zoneid)) != NULL); in ipnet_get_linkid_byname()
2114 ASSERT(mutex_owned(&ips->ips_event_lock)); in ipnet_get_linkid_byname()
2116 mutex_enter(&ips->ips_avl_lock); in ipnet_get_linkid_byname()
2117 ifp = avl_find(&ips->ips_avl_by_name, (void *)name, NULL); in ipnet_get_linkid_byname()
2127 ifp = avl_find(&ips->ips_avl_by_shared, (void *)key, NULL); in ipnet_get_linkid_byname()
2132 mutex_exit(&ips->ips_avl_lock); in ipnet_get_linkid_byname()
2133 ipnet_rele(ips); in ipnet_get_linkid_byname()
2292 ipnet_stack_t *ips; in ipnet_bpf_bounce() local
2300 ips = ((netstack_t *)hdr->hpo_ctx)->netstack_ipnet; in ipnet_bpf_bounce()
2315 IPSK_BUMP(ips, ik_acceptFail); in ipnet_bpf_bounce()
2318 IPSK_BUMP(ips, ik_acceptOk); in ipnet_bpf_bounce()
2342 ipnet_stack_t *ips = ifp->if_stackp; in ipnetif_clone_create() local
2346 mutex_enter(&ips->ips_avl_lock); in ipnetif_clone_create()
2347 newif = avl_find(&ips->ips_avl_by_shared, (void *)key, &where); in ipnetif_clone_create()
2351 mutex_exit(&ips->ips_avl_lock); in ipnetif_clone_create()
2355 newif = ipnet_alloc_if(ips); in ipnetif_clone_create()
2357 mutex_exit(&ips->ips_avl_lock); in ipnetif_clone_create()
2368 avl_insert(&ips->ips_avl_by_shared, newif, where); in ipnetif_clone_create()
2369 mutex_exit(&ips->ips_avl_lock); in ipnetif_clone_create()
2379 ipnet_stack_t *ips = ipnetif->if_stackp; in ipnetif_clone_release() local
2390 mutex_enter(&ips->ips_avl_lock); in ipnetif_clone_release()
2391 avl_remove(&ips->ips_avl_by_shared, ipnetif); in ipnetif_clone_release()
2392 mutex_exit(&ips->ips_avl_lock); in ipnetif_clone_release()