Lines Matching refs:ns

171 	netstack_t *ns;  in netstack_register()  local
195 for (ns = netstack_head; ns != NULL; ns = ns->netstack_next) { in netstack_register()
196 nm_state_t *nms = &ns->netstack_m_state[moduleid]; in netstack_register()
198 mutex_enter(&ns->netstack_lock); in netstack_register()
199 if (!(ns->netstack_flags & NSF_CLOSING) && in netstack_register()
203 netstack_t *, ns, int, moduleid); in netstack_register()
205 mutex_exit(&ns->netstack_lock); in netstack_register()
221 netstack_t *ns; in netstack_unregister() local
236 for (ns = netstack_head; ns != NULL; ns = ns->netstack_next) { in netstack_unregister()
238 nm_state_t *nms = &ns->netstack_m_state[moduleid]; in netstack_unregister()
240 mutex_enter(&ns->netstack_lock); in netstack_unregister()
272 netstack_t *, ns, int, moduleid); in netstack_unregister()
279 netstack_t *, ns, int, moduleid); in netstack_unregister()
281 mutex_exit(&ns->netstack_lock); in netstack_unregister()
302 for (ns = netstack_head; ns != NULL; ns = ns->netstack_next) { in netstack_unregister()
303 nm_state_t *nms = &ns->netstack_m_state[moduleid]; in netstack_unregister()
305 mutex_enter(&ns->netstack_lock); in netstack_unregister()
309 netstack_t *, ns, int, moduleid); in netstack_unregister()
311 mutex_exit(&ns->netstack_lock); in netstack_unregister()
328 netstack_t *ns; in netstack_zone_create() local
346 ns = (netstack_t *)kmem_zalloc(sizeof (netstack_t), KM_SLEEP); in netstack_zone_create()
357 kmem_free(ns, sizeof (netstack_t)); in netstack_zone_create()
358 ns = *nsp; in netstack_zone_create()
359 mutex_enter(&ns->netstack_lock); in netstack_zone_create()
360 ns->netstack_numzones++; in netstack_zone_create()
361 mutex_exit(&ns->netstack_lock); in netstack_zone_create()
364 netstack_t *, ns); in netstack_zone_create()
367 zone->zone_netstack = ns; in netstack_zone_create()
368 return (ns); in netstack_zone_create()
372 mutex_init(&ns->netstack_lock, NULL, MUTEX_DEFAULT, NULL); in netstack_zone_create()
373 cv_init(&ns->netstack_cv, NULL, CV_DEFAULT, NULL); in netstack_zone_create()
374 ns->netstack_stackid = zoneid; in netstack_zone_create()
375 ns->netstack_numzones = 1; in netstack_zone_create()
376 ns->netstack_refcnt = 1; /* Decremented by netstack_zone_destroy */ in netstack_zone_create()
377 ns->netstack_flags = NSF_UNINIT; in netstack_zone_create()
378 *nsp = ns; in netstack_zone_create()
379 zone->zone_netstack = ns; in netstack_zone_create()
381 mutex_enter(&ns->netstack_lock); in netstack_zone_create()
387 ns->netstack_flags |= NSF_ZONE_CREATE; in netstack_zone_create()
397 nm_state_t *nms = &ns->netstack_m_state[i]; in netstack_zone_create()
405 netstack_t *, ns, int, i); in netstack_zone_create()
408 mutex_exit(&ns->netstack_lock); in netstack_zone_create()
411 apply_all_modules(ns, netstack_apply_create); in netstack_zone_create()
414 mutex_enter(&ns->netstack_lock); in netstack_zone_create()
415 ns->netstack_flags &= ~NSF_UNINIT; in netstack_zone_create()
416 ASSERT(ns->netstack_flags & NSF_ZONE_CREATE); in netstack_zone_create()
417 ns->netstack_flags &= ~NSF_ZONE_CREATE; in netstack_zone_create()
418 cv_broadcast(&ns->netstack_cv); in netstack_zone_create()
419 mutex_exit(&ns->netstack_lock); in netstack_zone_create()
421 return (ns); in netstack_zone_create()
428 netstack_t *ns = (netstack_t *)arg; in netstack_zone_shutdown() local
433 mutex_enter(&ns->netstack_lock); in netstack_zone_shutdown()
434 ASSERT(ns->netstack_numzones > 0); in netstack_zone_shutdown()
435 if (ns->netstack_numzones != 1) { in netstack_zone_shutdown()
437 mutex_exit(&ns->netstack_lock); in netstack_zone_shutdown()
438 ASSERT(ns->netstack_stackid == GLOBAL_NETSTACKID); in netstack_zone_shutdown()
441 mutex_exit(&ns->netstack_lock); in netstack_zone_shutdown()
444 mutex_enter(&ns->netstack_lock); in netstack_zone_shutdown()
450 ASSERT(!(ns->netstack_flags & NSF_ZONE_INPROGRESS)); in netstack_zone_shutdown()
451 ns->netstack_flags |= NSF_ZONE_SHUTDOWN; in netstack_zone_shutdown()
458 nm_state_t *nms = &ns->netstack_m_state[i]; in netstack_zone_shutdown()
466 netstack_t *, ns, int, i); in netstack_zone_shutdown()
469 mutex_exit(&ns->netstack_lock); in netstack_zone_shutdown()
476 apply_all_modules_reverse(ns, netstack_apply_shutdown); in netstack_zone_shutdown()
479 mutex_enter(&ns->netstack_lock); in netstack_zone_shutdown()
480 ASSERT(ns->netstack_flags & NSF_ZONE_SHUTDOWN); in netstack_zone_shutdown()
481 ns->netstack_flags &= ~NSF_ZONE_SHUTDOWN; in netstack_zone_shutdown()
482 cv_broadcast(&ns->netstack_cv); in netstack_zone_shutdown()
483 mutex_exit(&ns->netstack_lock); in netstack_zone_shutdown()
495 netstack_t *ns = (netstack_t *)arg; in netstack_zone_destroy() local
499 mutex_enter(&ns->netstack_lock); in netstack_zone_destroy()
500 ASSERT(ns->netstack_numzones > 0); in netstack_zone_destroy()
501 ns->netstack_numzones--; in netstack_zone_destroy()
502 if (ns->netstack_numzones != 0) { in netstack_zone_destroy()
504 mutex_exit(&ns->netstack_lock); in netstack_zone_destroy()
505 ASSERT(ns->netstack_stackid == GLOBAL_NETSTACKID); in netstack_zone_destroy()
513 ns->netstack_flags |= NSF_CLOSING; in netstack_zone_destroy()
514 mutex_exit(&ns->netstack_lock); in netstack_zone_destroy()
515 DTRACE_PROBE1(netstack__dec__numzones, netstack_t *, ns); in netstack_zone_destroy()
521 netstack_rele(ns); in netstack_zone_destroy()
529 netstack_stack_inactive(netstack_t *ns) in netstack_stack_inactive() argument
534 mutex_enter(&ns->netstack_lock); in netstack_stack_inactive()
540 ASSERT(!(ns->netstack_flags & NSF_ZONE_INPROGRESS)); in netstack_stack_inactive()
541 ns->netstack_flags |= NSF_ZONE_DESTROY; in netstack_stack_inactive()
552 nm_state_t *nms = &ns->netstack_m_state[i]; in netstack_stack_inactive()
560 netstack_t *, ns, int, i); in netstack_stack_inactive()
569 netstack_t *, ns, int, i); in netstack_stack_inactive()
572 mutex_exit(&ns->netstack_lock); in netstack_stack_inactive()
587 apply_all_modules_reverse(ns, netstack_apply_shutdown); in netstack_stack_inactive()
588 apply_all_modules_reverse(ns, netstack_apply_destroy); in netstack_stack_inactive()
591 mutex_enter(&ns->netstack_lock); in netstack_stack_inactive()
592 ASSERT(ns->netstack_flags & NSF_ZONE_DESTROY); in netstack_stack_inactive()
593 ns->netstack_flags &= ~NSF_ZONE_DESTROY; in netstack_stack_inactive()
594 cv_broadcast(&ns->netstack_cv); in netstack_stack_inactive()
595 mutex_exit(&ns->netstack_lock); in netstack_stack_inactive()
621 netstack_t *ns; in apply_all_netstacks() local
624 ns = netstack_head; in apply_all_netstacks()
625 while (ns != NULL) { in apply_all_netstacks()
626 if (wait_for_zone_creator(ns, &netstack_g_lock)) { in apply_all_netstacks()
628 ns = netstack_head; in apply_all_netstacks()
629 } else if ((applyfn)(&netstack_g_lock, ns, moduleid)) { in apply_all_netstacks()
631 ns = netstack_head; in apply_all_netstacks()
633 ns = ns->netstack_next; in apply_all_netstacks()
646 apply_all_modules(netstack_t *ns, applyfn_t *applyfn) in apply_all_modules() argument
656 (void) (applyfn)(&netstack_g_lock, ns, i); in apply_all_modules()
663 apply_all_modules_reverse(netstack_t *ns, applyfn_t *applyfn) in apply_all_modules_reverse() argument
673 (void) (applyfn)(&netstack_g_lock, ns, i); in apply_all_modules_reverse()
690 netstack_apply_create(kmutex_t *lockp, netstack_t *ns, int moduleid) in netstack_apply_create() argument
694 nm_state_t *nms = &ns->netstack_m_state[moduleid]; in netstack_apply_create()
698 mutex_enter(&ns->netstack_lock); in netstack_apply_create()
700 if (wait_for_nms_inprogress(ns, nms, lockp)) in netstack_apply_create()
707 netstack_t *, ns, int, moduleid); in netstack_apply_create()
708 mutex_exit(&ns->netstack_lock); in netstack_apply_create()
713 stackid = ns->netstack_stackid; in netstack_apply_create()
716 netstack_t *, ns); in netstack_apply_create()
717 result = (ns_reg[moduleid].nr_create)(stackid, ns); in netstack_apply_create()
719 void *, result, netstack_t *, ns); in netstack_apply_create()
723 mutex_enter(&ns->netstack_lock); in netstack_apply_create()
724 ns->netstack_modules[moduleid] = result; in netstack_apply_create()
729 netstack_t *, ns, int, moduleid); in netstack_apply_create()
730 mutex_exit(&ns->netstack_lock); in netstack_apply_create()
733 mutex_exit(&ns->netstack_lock); in netstack_apply_create()
750 netstack_apply_shutdown(kmutex_t *lockp, netstack_t *ns, int moduleid) in netstack_apply_shutdown() argument
754 nm_state_t *nms = &ns->netstack_m_state[moduleid]; in netstack_apply_shutdown()
758 mutex_enter(&ns->netstack_lock); in netstack_apply_shutdown()
760 if (wait_for_nms_inprogress(ns, nms, lockp)) in netstack_apply_shutdown()
767 netstack_t *, ns, int, moduleid); in netstack_apply_shutdown()
768 mutex_exit(&ns->netstack_lock); in netstack_apply_shutdown()
773 stackid = ns->netstack_stackid; in netstack_apply_shutdown()
774 netstack_module = ns->netstack_modules[moduleid]; in netstack_apply_shutdown()
780 netstack_t *, ns); in netstack_apply_shutdown()
783 mutex_enter(&ns->netstack_lock); in netstack_apply_shutdown()
788 netstack_t *, ns, int, moduleid); in netstack_apply_shutdown()
789 mutex_exit(&ns->netstack_lock); in netstack_apply_shutdown()
792 mutex_exit(&ns->netstack_lock); in netstack_apply_shutdown()
809 netstack_apply_destroy(kmutex_t *lockp, netstack_t *ns, int moduleid) in netstack_apply_destroy() argument
813 nm_state_t *nms = &ns->netstack_m_state[moduleid]; in netstack_apply_destroy()
817 mutex_enter(&ns->netstack_lock); in netstack_apply_destroy()
819 if (wait_for_nms_inprogress(ns, nms, lockp)) in netstack_apply_destroy()
826 netstack_t *, ns, int, moduleid); in netstack_apply_destroy()
827 mutex_exit(&ns->netstack_lock); in netstack_apply_destroy()
832 stackid = ns->netstack_stackid; in netstack_apply_destroy()
833 netstack_module = ns->netstack_modules[moduleid]; in netstack_apply_destroy()
839 netstack_t *, ns); in netstack_apply_destroy()
842 mutex_enter(&ns->netstack_lock); in netstack_apply_destroy()
843 ns->netstack_modules[moduleid] = NULL; in netstack_apply_destroy()
848 netstack_t *, ns, int, moduleid); in netstack_apply_destroy()
849 mutex_exit(&ns->netstack_lock); in netstack_apply_destroy()
852 mutex_exit(&ns->netstack_lock); in netstack_apply_destroy()
868 wait_for_zone_creator(netstack_t *ns, kmutex_t *lockp) in wait_for_zone_creator() argument
872 mutex_enter(&ns->netstack_lock); in wait_for_zone_creator()
873 while (ns->netstack_flags & NSF_ZONE_CREATE) { in wait_for_zone_creator()
875 netstack_t *, ns); in wait_for_zone_creator()
880 cv_wait(&ns->netstack_cv, &ns->netstack_lock); in wait_for_zone_creator()
883 mutex_exit(&ns->netstack_lock); in wait_for_zone_creator()
885 mutex_enter(&ns->netstack_lock); in wait_for_zone_creator()
888 mutex_exit(&ns->netstack_lock); in wait_for_zone_creator()
898 wait_for_nms_inprogress(netstack_t *ns, nm_state_t *nms, kmutex_t *lockp) in wait_for_nms_inprogress() argument
904 netstack_t *, ns, nm_state_t *, nms); in wait_for_nms_inprogress()
909 cv_wait(&nms->nms_cv, &ns->netstack_lock); in wait_for_nms_inprogress()
912 mutex_exit(&ns->netstack_lock); in wait_for_nms_inprogress()
914 mutex_enter(&ns->netstack_lock); in wait_for_nms_inprogress()
928 netstack_t *ns; in netstack_get_current() local
930 ns = curproc->p_zone->zone_netstack; in netstack_get_current()
931 ASSERT(ns != NULL); in netstack_get_current()
932 return (netstack_hold_if_active(ns)); in netstack_get_current()
969 netstack_t *ns; in netstack_find_by_zoneid() local
978 ns = netstack_hold_if_active(zone->zone_netstack); in netstack_find_by_zoneid()
981 return (ns); in netstack_find_by_zoneid()
1022 netstack_t *ns; in netstack_find_by_stackid() local
1025 for (ns = netstack_head; ns != NULL; ns = ns->netstack_next) { in netstack_find_by_stackid()
1027 mutex_enter(&ns->netstack_lock); in netstack_find_by_stackid()
1028 if (ns->netstack_stackid == stackid && in netstack_find_by_stackid()
1029 !(ns->netstack_flags & (NSF_UNINIT|NSF_CLOSING))) { in netstack_find_by_stackid()
1030 netstack_hold_locked(ns); in netstack_find_by_stackid()
1031 mutex_exit(&ns->netstack_lock); in netstack_find_by_stackid()
1033 return (ns); in netstack_find_by_stackid()
1035 mutex_exit(&ns->netstack_lock); in netstack_find_by_stackid()
1044 netstack_t *ns; in netstack_inuse_by_stackid() local
1049 for (ns = netstack_head; ns != NULL; ns = ns->netstack_next) { in netstack_inuse_by_stackid()
1050 if (ns->netstack_stackid == stackid) { in netstack_inuse_by_stackid()
1065 netstack_t **nsp, *ns = (netstack_t *)arg; in netstack_reap() local
1073 netstack_stack_inactive(ns); in netstack_reap()
1076 ASSERT(ns->netstack_refcnt == 0); in netstack_reap()
1077 ASSERT(ns->netstack_numzones == 0); in netstack_reap()
1084 if (*nsp == ns) { in netstack_reap()
1085 *nsp = ns->netstack_next; in netstack_reap()
1086 ns->netstack_next = NULL; in netstack_reap()
1095 ASSERT(ns->netstack_refcnt == 0); in netstack_reap()
1096 ASSERT(ns->netstack_numzones == 0); in netstack_reap()
1098 ASSERT(ns->netstack_flags & NSF_CLOSING); in netstack_reap()
1101 nm_state_t *nms = &ns->netstack_m_state[i]; in netstack_reap()
1105 mutex_destroy(&ns->netstack_lock); in netstack_reap()
1106 cv_destroy(&ns->netstack_cv); in netstack_reap()
1107 kmem_free(ns, sizeof (*ns)); in netstack_reap()
1113 netstack_rele(netstack_t *ns) in netstack_rele() argument
1117 mutex_enter(&ns->netstack_lock); in netstack_rele()
1118 ASSERT(ns->netstack_refcnt > 0); in netstack_rele()
1119 ns->netstack_refcnt--; in netstack_rele()
1126 refcnt = ns->netstack_refcnt; in netstack_rele()
1127 numzones = ns->netstack_numzones; in netstack_rele()
1128 DTRACE_PROBE1(netstack__dec__ref, netstack_t *, ns); in netstack_rele()
1129 mutex_exit(&ns->netstack_lock); in netstack_rele()
1156 (void) taskq_dispatch(system_taskq, netstack_reap, ns, in netstack_rele()
1162 netstack_hold_locked(netstack_t *ns) in netstack_hold_locked() argument
1164 ASSERT(MUTEX_HELD(&ns->netstack_lock)); in netstack_hold_locked()
1165 ns->netstack_refcnt++; in netstack_hold_locked()
1166 ASSERT(ns->netstack_refcnt > 0); in netstack_hold_locked()
1167 DTRACE_PROBE1(netstack__inc__ref, netstack_t *, ns); in netstack_hold_locked()
1176 netstack_hold_if_active(netstack_t *ns) in netstack_hold_if_active() argument
1180 mutex_enter(&ns->netstack_lock); in netstack_hold_if_active()
1181 if (ns->netstack_flags & (NSF_UNINIT | NSF_CLOSING)) { in netstack_hold_if_active()
1184 netstack_hold_locked(ns); in netstack_hold_if_active()
1185 retval = ns; in netstack_hold_if_active()
1187 mutex_exit(&ns->netstack_lock); in netstack_hold_if_active()
1193 netstack_hold(netstack_t *ns) in netstack_hold() argument
1195 mutex_enter(&ns->netstack_lock); in netstack_hold()
1196 netstack_hold_locked(ns); in netstack_hold()
1197 mutex_exit(&ns->netstack_lock); in netstack_hold()
1391 netstack_get_zoneid(netstack_t *ns) in netstack_get_zoneid() argument
1393 return (netstackid_to_zoneid(ns->netstack_stackid)); in netstack_get_zoneid()
1424 netstack_t *ns; in netstack_next() local
1432 ns = netstack_head; in netstack_next()
1434 if (ns == NULL) in netstack_next()
1436 ns = ns->netstack_next; in netstack_next()
1442 while (ns != NULL) { in netstack_next()
1443 mutex_enter(&ns->netstack_lock); in netstack_next()
1444 if ((ns->netstack_flags & (NSF_UNINIT|NSF_CLOSING)) == 0) { in netstack_next()
1446 netstack_hold_locked(ns); in netstack_next()
1447 mutex_exit(&ns->netstack_lock); in netstack_next()
1450 mutex_exit(&ns->netstack_lock); in netstack_next()
1452 ns = ns->netstack_next; in netstack_next()
1455 return (ns); in netstack_next()