Lines Matching refs:ns

158 	netstack_t *ns;  in netstack_register()  local
182 for (ns = netstack_head; ns != NULL; ns = ns->netstack_next) { in netstack_register()
183 nm_state_t *nms = &ns->netstack_m_state[moduleid]; in netstack_register()
185 mutex_enter(&ns->netstack_lock); in netstack_register()
186 if (!(ns->netstack_flags & NSF_CLOSING) && in netstack_register()
190 netstack_t *, ns, int, moduleid); in netstack_register()
192 mutex_exit(&ns->netstack_lock); in netstack_register()
208 netstack_t *ns; in netstack_unregister() local
223 for (ns = netstack_head; ns != NULL; ns = ns->netstack_next) { in netstack_unregister()
225 nm_state_t *nms = &ns->netstack_m_state[moduleid]; in netstack_unregister()
227 mutex_enter(&ns->netstack_lock); in netstack_unregister()
259 netstack_t *, ns, int, moduleid); in netstack_unregister()
266 netstack_t *, ns, int, moduleid); in netstack_unregister()
268 mutex_exit(&ns->netstack_lock); in netstack_unregister()
289 for (ns = netstack_head; ns != NULL; ns = ns->netstack_next) { in netstack_unregister()
290 nm_state_t *nms = &ns->netstack_m_state[moduleid]; in netstack_unregister()
292 mutex_enter(&ns->netstack_lock); in netstack_unregister()
296 netstack_t *, ns, int, moduleid); in netstack_unregister()
298 mutex_exit(&ns->netstack_lock); in netstack_unregister()
315 netstack_t *ns; in netstack_zone_create() local
333 ns = (netstack_t *)kmem_zalloc(sizeof (netstack_t), KM_SLEEP); in netstack_zone_create()
344 kmem_free(ns, sizeof (netstack_t)); in netstack_zone_create()
345 ns = *nsp; in netstack_zone_create()
346 mutex_enter(&ns->netstack_lock); in netstack_zone_create()
347 ns->netstack_numzones++; in netstack_zone_create()
348 mutex_exit(&ns->netstack_lock); in netstack_zone_create()
351 netstack_t *, ns); in netstack_zone_create()
354 zone->zone_netstack = ns; in netstack_zone_create()
355 return (ns); in netstack_zone_create()
359 mutex_init(&ns->netstack_lock, NULL, MUTEX_DEFAULT, NULL); in netstack_zone_create()
360 cv_init(&ns->netstack_cv, NULL, CV_DEFAULT, NULL); in netstack_zone_create()
361 ns->netstack_stackid = zoneid; in netstack_zone_create()
362 ns->netstack_numzones = 1; in netstack_zone_create()
363 ns->netstack_refcnt = 1; /* Decremented by netstack_zone_destroy */ in netstack_zone_create()
364 ns->netstack_flags = NSF_UNINIT; in netstack_zone_create()
365 *nsp = ns; in netstack_zone_create()
366 zone->zone_netstack = ns; in netstack_zone_create()
368 mutex_enter(&ns->netstack_lock); in netstack_zone_create()
374 ns->netstack_flags |= NSF_ZONE_CREATE; in netstack_zone_create()
384 nm_state_t *nms = &ns->netstack_m_state[i]; in netstack_zone_create()
392 netstack_t *, ns, int, i); in netstack_zone_create()
395 mutex_exit(&ns->netstack_lock); in netstack_zone_create()
398 apply_all_modules(ns, netstack_apply_create); in netstack_zone_create()
401 mutex_enter(&ns->netstack_lock); in netstack_zone_create()
402 ns->netstack_flags &= ~NSF_UNINIT; in netstack_zone_create()
403 ASSERT(ns->netstack_flags & NSF_ZONE_CREATE); in netstack_zone_create()
404 ns->netstack_flags &= ~NSF_ZONE_CREATE; in netstack_zone_create()
405 cv_broadcast(&ns->netstack_cv); in netstack_zone_create()
406 mutex_exit(&ns->netstack_lock); in netstack_zone_create()
408 return (ns); in netstack_zone_create()
415 netstack_t *ns = (netstack_t *)arg; in netstack_zone_shutdown() local
420 mutex_enter(&ns->netstack_lock); in netstack_zone_shutdown()
421 ASSERT(ns->netstack_numzones > 0); in netstack_zone_shutdown()
422 if (ns->netstack_numzones != 1) { in netstack_zone_shutdown()
424 mutex_exit(&ns->netstack_lock); in netstack_zone_shutdown()
425 ASSERT(ns->netstack_stackid == GLOBAL_NETSTACKID); in netstack_zone_shutdown()
428 mutex_exit(&ns->netstack_lock); in netstack_zone_shutdown()
431 mutex_enter(&ns->netstack_lock); in netstack_zone_shutdown()
437 ASSERT(!(ns->netstack_flags & NSF_ZONE_INPROGRESS)); in netstack_zone_shutdown()
438 ns->netstack_flags |= NSF_ZONE_SHUTDOWN; in netstack_zone_shutdown()
445 nm_state_t *nms = &ns->netstack_m_state[i]; in netstack_zone_shutdown()
453 netstack_t *, ns, int, i); in netstack_zone_shutdown()
456 mutex_exit(&ns->netstack_lock); in netstack_zone_shutdown()
463 apply_all_modules_reverse(ns, netstack_apply_shutdown); in netstack_zone_shutdown()
466 mutex_enter(&ns->netstack_lock); in netstack_zone_shutdown()
467 ASSERT(ns->netstack_flags & NSF_ZONE_SHUTDOWN); in netstack_zone_shutdown()
468 ns->netstack_flags &= ~NSF_ZONE_SHUTDOWN; in netstack_zone_shutdown()
469 cv_broadcast(&ns->netstack_cv); in netstack_zone_shutdown()
470 mutex_exit(&ns->netstack_lock); in netstack_zone_shutdown()
482 netstack_t *ns = (netstack_t *)arg; in netstack_zone_destroy() local
486 mutex_enter(&ns->netstack_lock); in netstack_zone_destroy()
487 ASSERT(ns->netstack_numzones > 0); in netstack_zone_destroy()
488 ns->netstack_numzones--; in netstack_zone_destroy()
489 if (ns->netstack_numzones != 0) { in netstack_zone_destroy()
491 mutex_exit(&ns->netstack_lock); in netstack_zone_destroy()
492 ASSERT(ns->netstack_stackid == GLOBAL_NETSTACKID); in netstack_zone_destroy()
500 ns->netstack_flags |= NSF_CLOSING; in netstack_zone_destroy()
501 mutex_exit(&ns->netstack_lock); in netstack_zone_destroy()
502 DTRACE_PROBE1(netstack__dec__numzones, netstack_t *, ns); in netstack_zone_destroy()
508 netstack_rele(ns); in netstack_zone_destroy()
516 netstack_stack_inactive(netstack_t *ns) in netstack_stack_inactive() argument
521 mutex_enter(&ns->netstack_lock); in netstack_stack_inactive()
527 ASSERT(!(ns->netstack_flags & NSF_ZONE_INPROGRESS)); in netstack_stack_inactive()
528 ns->netstack_flags |= NSF_ZONE_DESTROY; in netstack_stack_inactive()
539 nm_state_t *nms = &ns->netstack_m_state[i]; in netstack_stack_inactive()
547 netstack_t *, ns, int, i); in netstack_stack_inactive()
556 netstack_t *, ns, int, i); in netstack_stack_inactive()
559 mutex_exit(&ns->netstack_lock); in netstack_stack_inactive()
574 apply_all_modules_reverse(ns, netstack_apply_shutdown); in netstack_stack_inactive()
575 apply_all_modules_reverse(ns, netstack_apply_destroy); in netstack_stack_inactive()
578 mutex_enter(&ns->netstack_lock); in netstack_stack_inactive()
579 ASSERT(ns->netstack_flags & NSF_ZONE_DESTROY); in netstack_stack_inactive()
580 ns->netstack_flags &= ~NSF_ZONE_DESTROY; in netstack_stack_inactive()
581 cv_broadcast(&ns->netstack_cv); in netstack_stack_inactive()
582 mutex_exit(&ns->netstack_lock); in netstack_stack_inactive()
608 netstack_t *ns; in apply_all_netstacks() local
611 ns = netstack_head; in apply_all_netstacks()
612 while (ns != NULL) { in apply_all_netstacks()
613 if (wait_for_zone_creator(ns, &netstack_g_lock)) { in apply_all_netstacks()
615 ns = netstack_head; in apply_all_netstacks()
616 } else if ((applyfn)(&netstack_g_lock, ns, moduleid)) { in apply_all_netstacks()
618 ns = netstack_head; in apply_all_netstacks()
620 ns = ns->netstack_next; in apply_all_netstacks()
633 apply_all_modules(netstack_t *ns, applyfn_t *applyfn) in apply_all_modules() argument
643 (void) (applyfn)(&netstack_g_lock, ns, i); in apply_all_modules()
650 apply_all_modules_reverse(netstack_t *ns, applyfn_t *applyfn) in apply_all_modules_reverse() argument
660 (void) (applyfn)(&netstack_g_lock, ns, i); in apply_all_modules_reverse()
677 netstack_apply_create(kmutex_t *lockp, netstack_t *ns, int moduleid) in netstack_apply_create() argument
681 nm_state_t *nms = &ns->netstack_m_state[moduleid]; in netstack_apply_create()
685 mutex_enter(&ns->netstack_lock); in netstack_apply_create()
687 if (wait_for_nms_inprogress(ns, nms, lockp)) in netstack_apply_create()
694 netstack_t *, ns, int, moduleid); in netstack_apply_create()
695 mutex_exit(&ns->netstack_lock); in netstack_apply_create()
700 stackid = ns->netstack_stackid; in netstack_apply_create()
703 netstack_t *, ns); in netstack_apply_create()
704 result = (ns_reg[moduleid].nr_create)(stackid, ns); in netstack_apply_create()
706 void *, result, netstack_t *, ns); in netstack_apply_create()
710 mutex_enter(&ns->netstack_lock); in netstack_apply_create()
711 ns->netstack_modules[moduleid] = result; in netstack_apply_create()
716 netstack_t *, ns, int, moduleid); in netstack_apply_create()
717 mutex_exit(&ns->netstack_lock); in netstack_apply_create()
720 mutex_exit(&ns->netstack_lock); in netstack_apply_create()
737 netstack_apply_shutdown(kmutex_t *lockp, netstack_t *ns, int moduleid) in netstack_apply_shutdown() argument
741 nm_state_t *nms = &ns->netstack_m_state[moduleid]; in netstack_apply_shutdown()
745 mutex_enter(&ns->netstack_lock); in netstack_apply_shutdown()
747 if (wait_for_nms_inprogress(ns, nms, lockp)) in netstack_apply_shutdown()
754 netstack_t *, ns, int, moduleid); in netstack_apply_shutdown()
755 mutex_exit(&ns->netstack_lock); in netstack_apply_shutdown()
760 stackid = ns->netstack_stackid; in netstack_apply_shutdown()
761 netstack_module = ns->netstack_modules[moduleid]; in netstack_apply_shutdown()
767 netstack_t *, ns); in netstack_apply_shutdown()
770 mutex_enter(&ns->netstack_lock); in netstack_apply_shutdown()
775 netstack_t *, ns, int, moduleid); in netstack_apply_shutdown()
776 mutex_exit(&ns->netstack_lock); in netstack_apply_shutdown()
779 mutex_exit(&ns->netstack_lock); in netstack_apply_shutdown()
796 netstack_apply_destroy(kmutex_t *lockp, netstack_t *ns, int moduleid) in netstack_apply_destroy() argument
800 nm_state_t *nms = &ns->netstack_m_state[moduleid]; in netstack_apply_destroy()
804 mutex_enter(&ns->netstack_lock); in netstack_apply_destroy()
806 if (wait_for_nms_inprogress(ns, nms, lockp)) in netstack_apply_destroy()
813 netstack_t *, ns, int, moduleid); in netstack_apply_destroy()
814 mutex_exit(&ns->netstack_lock); in netstack_apply_destroy()
819 stackid = ns->netstack_stackid; in netstack_apply_destroy()
820 netstack_module = ns->netstack_modules[moduleid]; in netstack_apply_destroy()
826 netstack_t *, ns); in netstack_apply_destroy()
829 mutex_enter(&ns->netstack_lock); in netstack_apply_destroy()
830 ns->netstack_modules[moduleid] = NULL; in netstack_apply_destroy()
835 netstack_t *, ns, int, moduleid); in netstack_apply_destroy()
836 mutex_exit(&ns->netstack_lock); in netstack_apply_destroy()
839 mutex_exit(&ns->netstack_lock); in netstack_apply_destroy()
855 wait_for_zone_creator(netstack_t *ns, kmutex_t *lockp) in wait_for_zone_creator() argument
859 mutex_enter(&ns->netstack_lock); in wait_for_zone_creator()
860 while (ns->netstack_flags & NSF_ZONE_CREATE) { in wait_for_zone_creator()
862 netstack_t *, ns); in wait_for_zone_creator()
867 cv_wait(&ns->netstack_cv, &ns->netstack_lock); in wait_for_zone_creator()
870 mutex_exit(&ns->netstack_lock); in wait_for_zone_creator()
872 mutex_enter(&ns->netstack_lock); in wait_for_zone_creator()
875 mutex_exit(&ns->netstack_lock); in wait_for_zone_creator()
885 wait_for_nms_inprogress(netstack_t *ns, nm_state_t *nms, kmutex_t *lockp) in wait_for_nms_inprogress() argument
891 netstack_t *, ns, nm_state_t *, nms); in wait_for_nms_inprogress()
896 cv_wait(&nms->nms_cv, &ns->netstack_lock); in wait_for_nms_inprogress()
899 mutex_exit(&ns->netstack_lock); in wait_for_nms_inprogress()
901 mutex_enter(&ns->netstack_lock); in wait_for_nms_inprogress()
915 netstack_t *ns; in netstack_get_current() local
917 ns = curproc->p_zone->zone_netstack; in netstack_get_current()
918 ASSERT(ns != NULL); in netstack_get_current()
919 if (ns->netstack_flags & (NSF_UNINIT|NSF_CLOSING)) in netstack_get_current()
922 netstack_hold(ns); in netstack_get_current()
924 return (ns); in netstack_get_current()
961 netstack_t *ns; in netstack_find_by_zoneid() local
969 ns = zone->zone_netstack; in netstack_find_by_zoneid()
970 ASSERT(ns != NULL); in netstack_find_by_zoneid()
971 if (ns->netstack_flags & (NSF_UNINIT|NSF_CLOSING)) in netstack_find_by_zoneid()
972 ns = NULL; in netstack_find_by_zoneid()
974 netstack_hold(ns); in netstack_find_by_zoneid()
977 return (ns); in netstack_find_by_zoneid()
996 netstack_t *ns; in netstack_find_by_zoneid_nolock() local
1004 ns = zone->zone_netstack; in netstack_find_by_zoneid_nolock()
1005 ASSERT(ns != NULL); in netstack_find_by_zoneid_nolock()
1007 if (ns->netstack_flags & (NSF_UNINIT|NSF_CLOSING)) in netstack_find_by_zoneid_nolock()
1008 ns = NULL; in netstack_find_by_zoneid_nolock()
1010 netstack_hold(ns); in netstack_find_by_zoneid_nolock()
1013 return (ns); in netstack_find_by_zoneid_nolock()
1026 netstack_t *ns; in netstack_find_by_stackid() local
1029 for (ns = netstack_head; ns != NULL; ns = ns->netstack_next) { in netstack_find_by_stackid()
1030 mutex_enter(&ns->netstack_lock); in netstack_find_by_stackid()
1031 if (ns->netstack_stackid == stackid && in netstack_find_by_stackid()
1032 !(ns->netstack_flags & (NSF_UNINIT|NSF_CLOSING))) { in netstack_find_by_stackid()
1033 mutex_exit(&ns->netstack_lock); in netstack_find_by_stackid()
1034 netstack_hold(ns); in netstack_find_by_stackid()
1036 return (ns); in netstack_find_by_stackid()
1038 mutex_exit(&ns->netstack_lock); in netstack_find_by_stackid()
1045 netstack_rele(netstack_t *ns) in netstack_rele() argument
1052 mutex_enter(&ns->netstack_lock); in netstack_rele()
1053 ASSERT(ns->netstack_refcnt > 0); in netstack_rele()
1054 ns->netstack_refcnt--; in netstack_rele()
1061 refcnt = ns->netstack_refcnt; in netstack_rele()
1062 numzones = ns->netstack_numzones; in netstack_rele()
1063 DTRACE_PROBE1(netstack__dec__ref, netstack_t *, ns); in netstack_rele()
1064 mutex_exit(&ns->netstack_lock); in netstack_rele()
1071 netstack_stack_inactive(ns); in netstack_rele()
1074 ASSERT(ns->netstack_refcnt == 0); in netstack_rele()
1075 ASSERT(ns->netstack_numzones == 0); in netstack_rele()
1082 if (*nsp == ns) { in netstack_rele()
1083 *nsp = ns->netstack_next; in netstack_rele()
1084 ns->netstack_next = NULL; in netstack_rele()
1093 ASSERT(ns->netstack_refcnt == 0); in netstack_rele()
1094 ASSERT(ns->netstack_numzones == 0); in netstack_rele()
1096 ASSERT(ns->netstack_flags & NSF_CLOSING); in netstack_rele()
1099 nm_state_t *nms = &ns->netstack_m_state[i]; in netstack_rele()
1103 mutex_destroy(&ns->netstack_lock); in netstack_rele()
1104 cv_destroy(&ns->netstack_cv); in netstack_rele()
1105 kmem_free(ns, sizeof (*ns)); in netstack_rele()
1110 netstack_hold(netstack_t *ns) in netstack_hold() argument
1112 mutex_enter(&ns->netstack_lock); in netstack_hold()
1113 ns->netstack_refcnt++; in netstack_hold()
1114 ASSERT(ns->netstack_refcnt > 0); in netstack_hold()
1115 mutex_exit(&ns->netstack_lock); in netstack_hold()
1116 DTRACE_PROBE1(netstack__inc__ref, netstack_t *, ns); in netstack_hold()
1310 netstack_get_zoneid(netstack_t *ns) in netstack_get_zoneid() argument
1312 return (netstackid_to_zoneid(ns->netstack_stackid)); in netstack_get_zoneid()
1343 netstack_t *ns; in netstack_next() local
1351 ns = netstack_head; in netstack_next()
1353 if (ns == NULL) in netstack_next()
1355 ns = ns->netstack_next; in netstack_next()
1358 while (ns != NULL) { in netstack_next()
1359 mutex_enter(&ns->netstack_lock); in netstack_next()
1360 if ((ns->netstack_flags & (NSF_UNINIT|NSF_CLOSING)) == 0) { in netstack_next()
1361 mutex_exit(&ns->netstack_lock); in netstack_next()
1364 mutex_exit(&ns->netstack_lock); in netstack_next()
1366 ns = ns->netstack_next; in netstack_next()
1368 if (ns != NULL) { in netstack_next()
1370 netstack_hold(ns); in netstack_next()
1373 return (ns); in netstack_next()