Lines Matching refs:ips

240 	ipnet_stack_t		*ips;  in ipnetif_init()  local
245 ips = ns->netstack_ipnet; in ipnetif_init()
246 if ((ret = ipnet_populate_if(ips->ips_ndv4, ips, B_FALSE)) == 0) in ipnetif_init()
247 ret = ipnet_populate_if(ips->ips_ndv6, ips, B_TRUE); in ipnetif_init()
324 ipnet_register_netihook(ipnet_stack_t *ips) in ipnet_register_netihook() argument
330 HOOK_INIT(ips->ips_nicevents, ipnet_nicevent_cb, "ipnet_nicevents", in ipnet_register_netihook()
331 ips); in ipnet_register_netihook()
338 zoneid = netstackid_to_zoneid(ips->ips_netstack->netstack_stackid); in ipnet_register_netihook()
342 if ((ips->ips_ndv4 = net_protocol_lookup(netid, NHF_INET)) != NULL) { in ipnet_register_netihook()
343 if ((ret = net_hook_register(ips->ips_ndv4, NH_NIC_EVENTS, in ipnet_register_netihook()
344 ips->ips_nicevents)) != 0) { in ipnet_register_netihook()
345 VERIFY(net_protocol_release(ips->ips_ndv4) == 0); in ipnet_register_netihook()
346 ips->ips_ndv4 = NULL; in ipnet_register_netihook()
351 if ((ips->ips_ndv6 = net_protocol_lookup(netid, NHF_INET6)) != NULL) { in ipnet_register_netihook()
352 if ((ret = net_hook_register(ips->ips_ndv6, NH_NIC_EVENTS, in ipnet_register_netihook()
353 ips->ips_nicevents)) != 0) { in ipnet_register_netihook()
354 VERIFY(net_protocol_release(ips->ips_ndv6) == 0); in ipnet_register_netihook()
355 ips->ips_ndv6 = NULL; in ipnet_register_netihook()
364 ips->ips_kstatp = net_kstat_create(netid, "ipnet", 0, "ipnet_stats", in ipnet_register_netihook()
367 if (ips->ips_kstatp != NULL) { in ipnet_register_netihook()
368 bcopy(&stats_template, &ips->ips_stats, in ipnet_register_netihook()
369 sizeof (ips->ips_stats)); in ipnet_register_netihook()
370 ips->ips_kstatp->ks_data = &ips->ips_stats; in ipnet_register_netihook()
371 ips->ips_kstatp->ks_private = in ipnet_register_netihook()
372 (void *)(uintptr_t)ips->ips_netstack->netstack_stackid; in ipnet_register_netihook()
373 kstat_install(ips->ips_kstatp); in ipnet_register_netihook()
387 ipnet_populate_if(net_handle_t nd, ipnet_stack_t *ips, boolean_t isv6) in ipnet_populate_if() argument
413 mutex_enter(&ips->ips_event_lock); in ipnet_populate_if()
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()
451 mutex_exit(&ips->ips_event_lock); in ipnet_populate_if()
508 ipnet_stack_t *ips; in ipnet_open() local
531 ips = ns->netstack_ipnet; in ipnet_open()
545 mutex_enter(&ips->ips_event_lock); in ipnet_open()
551 ipnet->ipnet_if = ipnetif_getby_dev(*dev, ips); in ipnet_open()
553 !ipnetif_in_zone(ipnet->ipnet_if, zoneid, ips)) { in ipnet_open()
559 mutex_enter(&ips->ips_walkers_lock); in ipnet_open()
560 while (ips->ips_walkers_cnt != 0) in ipnet_open()
561 cv_wait(&ips->ips_walkers_cv, &ips->ips_walkers_lock); in ipnet_open()
562 list_insert_head(&ips->ips_str_list, ipnet); in ipnet_open()
570 if (list_head(&ips->ips_str_list) == list_tail(&ips->ips_str_list)) in ipnet_open()
571 ips->ips_hook = ipobs_register_hook(ns, ipnet_input); in ipnet_open()
572 mutex_exit(&ips->ips_walkers_lock); in ipnet_open()
575 mutex_exit(&ips->ips_event_lock); in ipnet_open()
590 ipnet_stack_t *ips = ipnet->ipnet_ns->netstack_ipnet; in ipnet_close() local
593 ipnet_leave_allmulti(ipnet->ipnet_if, ips); in ipnet_close()
595 ipnet_leave_allmulti(ipnet->ipnet_if, ips); in ipnet_close()
597 mutex_enter(&ips->ips_walkers_lock); in ipnet_close()
598 while (ips->ips_walkers_cnt != 0) in ipnet_close()
599 cv_wait(&ips->ips_walkers_cv, &ips->ips_walkers_lock); in ipnet_close()
603 list_remove(&ips->ips_str_list, ipnet); in ipnet_close()
608 if (list_is_empty(&ips->ips_str_list)) { in ipnet_close()
609 ipobs_unregister_hook(ips->ips_netstack, ips->ips_hook); in ipnet_close()
610 ips->ips_hook = NULL; in ipnet_close()
615 mutex_exit(&ips->ips_walkers_lock); in ipnet_close()
616 netstack_rele(ips->ips_netstack); in ipnet_close()
913 ipnet_join_allmulti(ipnetif_t *ipnetif, ipnet_stack_t *ips) in ipnet_join_allmulti() argument
916 ip_stack_t *ipst = ips->ips_netstack->netstack_ip; in ipnet_join_allmulti()
919 mutex_enter(&ips->ips_event_lock); in ipnet_join_allmulti()
943 mutex_exit(&ips->ips_event_lock); in ipnet_join_allmulti()
948 ipnet_leave_allmulti(ipnetif_t *ipnetif, ipnet_stack_t *ips) in ipnet_leave_allmulti() argument
951 ip_stack_t *ipst = ips->ips_netstack->netstack_ip; in ipnet_leave_allmulti()
954 mutex_enter(&ips->ips_event_lock); in ipnet_leave_allmulti()
968 mutex_exit(&ips->ips_event_lock); in ipnet_leave_allmulti()
1174 ipnet_stack_t *ips; in ipnet_dispatch() local
1178 ips = ((netstack_t *)hdr->hpo_ctx)->netstack_ipnet; in ipnet_dispatch()
1192 ipnet_walkers_inc(ips); in ipnet_dispatch()
1194 list = &ips->ips_str_list; in ipnet_dispatch()
1198 IPSK_BUMP(ips, ik_acceptFail); in ipnet_dispatch()
1201 IPSK_BUMP(ips, ik_acceptOk); in ipnet_dispatch()
1209 IPSK_BUMP(ips, ik_duplicationFail); in ipnet_dispatch()
1216 IPSK_BUMP(ips, ik_dispatchHeaderDrop); in ipnet_dispatch()
1224 IPSK_BUMP(ips, ik_dispatchDeliver); in ipnet_dispatch()
1227 IPSK_BUMP(ips, ik_dispatchDeliver); in ipnet_dispatch()
1230 IPSK_BUMP(ips, ik_dispatchPutDrop); in ipnet_dispatch()
1234 ipnet_walkers_dec(ips); in ipnet_dispatch()
1243 ipnet_stack_t *ips; in ipnet_input() local
1245 ips = ((netstack_t *)hdr->hpo_ctx)->netstack_ipnet; in ipnet_input()
1249 IPSK_BUMP(ips, ik_dispatchFail); in ipnet_input()
1252 IPSK_BUMP(ips, ik_dispatchOk); in ipnet_input()
1257 ipnet_alloc_if(ipnet_stack_t *ips) in ipnet_alloc_if() argument
1271 ipnetif->if_stackp = ips; in ipnet_alloc_if()
1282 ipnetif_create(const char *name, uint64_t index, ipnet_stack_t *ips, in ipnetif_create() argument
1296 if ((ipnetif = ipnet_alloc_if(ips)) == NULL) { in ipnetif_create()
1303 ipnetif->if_zoneid = netstack_get_zoneid(ips->ips_netstack); in ipnetif_create()
1310 mutex_enter(&ips->ips_avl_lock); in ipnetif_create()
1311 VERIFY(avl_find(&ips->ips_avl_by_index, &index, &where) == NULL); in ipnetif_create()
1312 avl_insert(&ips->ips_avl_by_index, ipnetif, where); in ipnetif_create()
1313 VERIFY(avl_find(&ips->ips_avl_by_name, (void *)name, &where) == NULL); in ipnetif_create()
1314 avl_insert(&ips->ips_avl_by_name, ipnetif, where); in ipnetif_create()
1315 mutex_exit(&ips->ips_avl_lock); in ipnetif_create()
1321 ipnetif_remove(ipnetif_t *ipnetif, ipnet_stack_t *ips) in ipnetif_remove() argument
1325 ipnet_walkers_inc(ips); in ipnetif_remove()
1327 for (ipnet = list_head(&ips->ips_str_list); ipnet != NULL; in ipnetif_remove()
1328 ipnet = list_next(&ips->ips_str_list, ipnet)) { in ipnetif_remove()
1332 ipnet_walkers_dec(ips); in ipnetif_remove()
1333 mutex_enter(&ips->ips_avl_lock); 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()
1336 mutex_exit(&ips->ips_avl_lock); in ipnetif_remove()
1452 ipnet_plumb_ev(ipnet_nicevent_t *ipne, ipnet_stack_t *ips, boolean_t isv6) in ipnet_plumb_ev() argument
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()
1477 ips->ips_netstack->netstack_ip) == 0) { in ipnet_plumb_ev()
1488 ipnet_unplumb_ev(uint64_t ifindex, ipnet_stack_t *ips, boolean_t isv6) in ipnet_unplumb_ev() argument
1492 if ((ipnetif = ipnetif_getby_index(ifindex, ips)) == NULL) in ipnet_unplumb_ev()
1507 ipnetif_remove(ipnetif, ips); in ipnet_unplumb_ev()
1513 ipnet_stack_t *ips, boolean_t isv6) in ipnet_lifup_ev() argument
1518 if ((ipnetif = ipnetif_getby_index(ifindex, ips)) == NULL) in ipnet_lifup_ev()
1533 ipnet_lifdown_ev(uint64_t ifindex, uint64_t lifindex, ipnet_stack_t *ips, in ipnet_lifdown_ev() argument
1539 if ((ipnetif = ipnetif_getby_index(ifindex, ips)) == NULL) in ipnet_lifdown_ev()
1548 ipnetif_zonecheck(ipnetif, ips); in ipnet_lifdown_ev()
1559 ipnet_stack_t *ips = arg; in ipnet_nicevent_cb() local
1567 ipne->ipne_stackid = ips->ips_netstack->netstack_stackid; in ipnet_nicevent_cb()
1584 ipnet_stack_t *ips; in ipnet_nicevent_task() local
1589 ips = ns->netstack_ipnet; in ipnet_nicevent_task()
1590 isv6 = (ipne->ipne_protocol == ips->ips_ndv6); in ipnet_nicevent_task()
1592 mutex_enter(&ips->ips_event_lock); in ipnet_nicevent_task()
1595 ipnet_plumb_ev(ipne, ips, isv6); in ipnet_nicevent_task()
1598 ipnet_unplumb_ev(ipne->ipne_ifindex, ips, isv6); in ipnet_nicevent_task()
1602 ipne->ipne_protocol, ips, isv6); in ipnet_nicevent_task()
1605 ipnet_lifdown_ev(ipne->ipne_ifindex, ipne->ipne_lifindex, ips, in ipnet_nicevent_task()
1611 mutex_exit(&ips->ips_event_lock); in ipnet_nicevent_task()
1622 ipnet_stack_t *ips; in ipnet_if_getdev() local
1631 ips = ns->netstack_ipnet; in ipnet_if_getdev()
1632 mutex_enter(&ips->ips_avl_lock); in ipnet_if_getdev()
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()
1637 mutex_exit(&ips->ips_avl_lock); in ipnet_if_getdev()
1644 ipnetif_getby_index(uint64_t id, ipnet_stack_t *ips) in ipnetif_getby_index() argument
1648 mutex_enter(&ips->ips_avl_lock); in ipnetif_getby_index()
1649 if ((ipnetif = avl_find(&ips->ips_avl_by_index, &id, NULL)) != NULL) in ipnetif_getby_index()
1651 mutex_exit(&ips->ips_avl_lock); in ipnetif_getby_index()
1656 ipnetif_getby_dev(dev_t dev, ipnet_stack_t *ips) in ipnetif_getby_dev() argument
1661 mutex_enter(&ips->ips_avl_lock); in ipnetif_getby_dev()
1662 tree = &ips->ips_avl_by_index; in ipnetif_getby_dev()
1670 mutex_exit(&ips->ips_avl_lock); in ipnetif_getby_dev()
1695 ipnet_stack_t *ips; in ipnet_stack_init() local
1697 ips = kmem_zalloc(sizeof (*ips), KM_SLEEP); in ipnet_stack_init()
1698 ips->ips_netstack = ns; in ipnet_stack_init()
1699 mutex_init(&ips->ips_avl_lock, NULL, MUTEX_DEFAULT, 0); in ipnet_stack_init()
1700 avl_create(&ips->ips_avl_by_index, ipnetif_compare_index, in ipnet_stack_init()
1702 avl_create(&ips->ips_avl_by_name, ipnetif_compare_name, in ipnet_stack_init()
1704 avl_create(&ips->ips_avl_by_shared, ipnetif_compare_name_zone, in ipnet_stack_init()
1706 mutex_init(&ips->ips_walkers_lock, NULL, MUTEX_DEFAULT, NULL); in ipnet_stack_init()
1707 cv_init(&ips->ips_walkers_cv, NULL, CV_DRIVER, NULL); in ipnet_stack_init()
1708 list_create(&ips->ips_str_list, sizeof (ipnet_t), in ipnet_stack_init()
1710 ipnet_register_netihook(ips); in ipnet_stack_init()
1711 return (ips); in ipnet_stack_init()
1718 ipnet_stack_t *ips = arg; in ipnet_stack_fini() local
1721 if (ips->ips_kstatp != NULL) { in ipnet_stack_fini()
1725 net_kstat_delete(net_zoneidtonetid(zoneid), ips->ips_kstatp); in ipnet_stack_fini()
1727 if (ips->ips_ndv4 != NULL) { in ipnet_stack_fini()
1728 VERIFY(net_hook_unregister(ips->ips_ndv4, NH_NIC_EVENTS, in ipnet_stack_fini()
1729 ips->ips_nicevents) == 0); in ipnet_stack_fini()
1730 VERIFY(net_protocol_release(ips->ips_ndv4) == 0); in ipnet_stack_fini()
1732 if (ips->ips_ndv6 != NULL) { in ipnet_stack_fini()
1733 VERIFY(net_hook_unregister(ips->ips_ndv6, NH_NIC_EVENTS, in ipnet_stack_fini()
1734 ips->ips_nicevents) == 0); in ipnet_stack_fini()
1735 VERIFY(net_protocol_release(ips->ips_ndv6) == 0); in ipnet_stack_fini()
1737 hook_free(ips->ips_nicevents); in ipnet_stack_fini()
1739 for (ipnetif = avl_first(&ips->ips_avl_by_index); ipnetif != NULL; 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()
1744 avl_destroy(&ips->ips_avl_by_shared); in ipnet_stack_fini()
1745 avl_destroy(&ips->ips_avl_by_index); in ipnet_stack_fini()
1746 avl_destroy(&ips->ips_avl_by_name); in ipnet_stack_fini()
1747 mutex_destroy(&ips->ips_avl_lock); in ipnet_stack_fini()
1748 mutex_destroy(&ips->ips_walkers_lock); in ipnet_stack_fini()
1749 cv_destroy(&ips->ips_walkers_cv); in ipnet_stack_fini()
1750 list_destroy(&ips->ips_str_list); in ipnet_stack_fini()
1751 kmem_free(ips, sizeof (*ips)); in ipnet_stack_fini()
1770 ipnetif_in_zone(ipnetif_t *ipnetif, zoneid_t zoneid, ipnet_stack_t *ips) in ipnetif_in_zone() argument
1780 ips->ips_netstack->netstack_stackid != GLOBAL_NETSTACKID) in ipnetif_in_zone()
1802 ipnetif_zonecheck(ipnetif_t *ipnetif, ipnet_stack_t *ips) in ipnetif_zonecheck() argument
1804 list_t *strlist = &ips->ips_str_list; in ipnetif_zonecheck()
1807 ipnet_walkers_inc(ips); in ipnetif_zonecheck()
1812 if (!ipnetif_in_zone(ipnetif, ipnet->ipnet_zoneid, ips)) in ipnetif_zonecheck()
1815 ipnet_walkers_dec(ips); in ipnetif_zonecheck()
1825 ipnet_stack_t *ips; in ipnet_walk_if() local
1837 ips = ns->netstack_ipnet; in ipnet_walk_if()
1841 mutex_enter(&ips->ips_avl_lock); in ipnet_walk_if()
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()
1851 mutex_exit(&ips->ips_avl_lock); in ipnet_walk_if()
1915 ipnet_walkers_inc(ipnet_stack_t *ips) in ipnet_walkers_inc() argument
1917 mutex_enter(&ips->ips_walkers_lock); in ipnet_walkers_inc()
1918 ips->ips_walkers_cnt++; in ipnet_walkers_inc()
1919 mutex_exit(&ips->ips_walkers_lock); in ipnet_walkers_inc()
1923 ipnet_walkers_dec(ipnet_stack_t *ips) in ipnet_walkers_dec() argument
1925 mutex_enter(&ips->ips_walkers_lock); in ipnet_walkers_dec()
1926 ASSERT(ips->ips_walkers_cnt != 0); in ipnet_walkers_dec()
1927 if (--ips->ips_walkers_cnt == 0) in ipnet_walkers_dec()
1928 cv_broadcast(&ips->ips_walkers_cv); in ipnet_walkers_dec()
1929 mutex_exit(&ips->ips_walkers_lock); in ipnet_walkers_dec()
1948 ipnet_stack_t *ips = ns->netstack_ipnet; in ipobs_bounce_func() local
1950 IPSK_BUMP(ips, ik_dispatchDupDrop); in ipobs_bounce_func()
2024 ipnet_rele(ipnet_stack_t *ips) in ipnet_rele() argument
2026 netstack_rele(ips->ips_netstack); in ipnet_rele()
2045 ipnet_stack_t *ips; in ipnet_open_byname() local
2049 VERIFY((ips = ipnet_find_by_zoneid(zoneid)) != NULL); in ipnet_open_byname()
2051 mutex_enter(&ips->ips_avl_lock); in ipnet_open_byname()
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()
2065 mutex_exit(&ips->ips_avl_lock); in ipnet_open_byname()
2068 ipnet_rele(ips); in ipnet_open_byname()
2103 ipnet_stack_t *ips; in ipnet_get_linkid_byname() local
2106 VERIFY((ips = ipnet_find_by_zoneid(zoneid)) != NULL); in ipnet_get_linkid_byname()
2107 ASSERT(mutex_owned(&ips->ips_event_lock)); in ipnet_get_linkid_byname()
2109 mutex_enter(&ips->ips_avl_lock); in ipnet_get_linkid_byname()
2110 ifp = avl_find(&ips->ips_avl_by_name, (void *)name, NULL); in ipnet_get_linkid_byname()
2120 ifp = avl_find(&ips->ips_avl_by_shared, (void *)key, NULL); in ipnet_get_linkid_byname()
2125 mutex_exit(&ips->ips_avl_lock); in ipnet_get_linkid_byname()
2126 ipnet_rele(ips); in ipnet_get_linkid_byname()
2284 ipnet_stack_t *ips; in ipnet_bpf_bounce() local
2292 ips = ((netstack_t *)hdr->hpo_ctx)->netstack_ipnet; in ipnet_bpf_bounce()
2307 IPSK_BUMP(ips, ik_acceptFail); in ipnet_bpf_bounce()
2310 IPSK_BUMP(ips, ik_acceptOk); in ipnet_bpf_bounce()
2334 ipnet_stack_t *ips = ifp->if_stackp; in ipnetif_clone_create() local
2338 mutex_enter(&ips->ips_avl_lock); in ipnetif_clone_create()
2339 newif = avl_find(&ips->ips_avl_by_shared, (void *)key, &where); in ipnetif_clone_create()
2343 mutex_exit(&ips->ips_avl_lock); in ipnetif_clone_create()
2347 newif = ipnet_alloc_if(ips); in ipnetif_clone_create()
2349 mutex_exit(&ips->ips_avl_lock); in ipnetif_clone_create()
2360 avl_insert(&ips->ips_avl_by_shared, newif, where); in ipnetif_clone_create()
2361 mutex_exit(&ips->ips_avl_lock); in ipnetif_clone_create()
2371 ipnet_stack_t *ips = ipnetif->if_stackp; in ipnetif_clone_release() local
2382 mutex_enter(&ips->ips_avl_lock); in ipnetif_clone_release()
2383 avl_remove(&ips->ips_avl_by_shared, ipnetif); in ipnetif_clone_release()
2384 mutex_exit(&ips->ips_avl_lock); in ipnetif_clone_release()