Lines Matching refs:ins

252 ipd_nextrand(ipd_netstack_t *ins)  in ipd_nextrand()  argument
254 ins->ipdn_rand = ins->ipdn_rand * 1103515245L + 12345; in ipd_nextrand()
255 return (ins->ipdn_rand & 0x7fffffff); in ipd_nextrand()
281 ipd_netstack_t *ins = arg; in ipd_hook() local
284 mutex_enter(&ins->ipdn_lock); in ipd_hook()
285 status = ins->ipdn_status; in ipd_hook()
286 dwait = ins->ipdn_delay; in ipd_hook()
287 corrupt = ins->ipdn_corrupt; in ipd_hook()
288 drop = ins->ipdn_drop; in ipd_hook()
289 rand = ipd_nextrand(ins); in ipd_hook()
290 mutex_exit(&ins->ipdn_lock); in ipd_hook()
304 ipd_ksbump(&ins->ipdn_ksdata.ink_ndrops); in ipd_hook()
314 ipd_ksbump(&ins->ipdn_ksdata.ink_ndelays); in ipd_hook()
345 ipd_ksbump(&ins->ipdn_ksdata.ink_ncorrupts); in ipd_hook()
360 ipd_setup_hooks(ipd_netstack_t *ins) in ipd_setup_hooks() argument
362 ASSERT(MUTEX_HELD(&ins->ipdn_lock)); in ipd_setup_hooks()
363 ins->ipdn_v4hdl = net_protocol_lookup(ins->ipdn_netid, NHF_INET); in ipd_setup_hooks()
364 if (ins->ipdn_v4hdl == NULL) in ipd_setup_hooks()
367 ins->ipdn_v6hdl = net_protocol_lookup(ins->ipdn_netid, NHF_INET6); in ipd_setup_hooks()
368 if (ins->ipdn_v6hdl == NULL) in ipd_setup_hooks()
371 ins->ipdn_v4in = hook_alloc(HOOK_VERSION); in ipd_setup_hooks()
372 if (ins->ipdn_v4in == NULL) in ipd_setup_hooks()
375 ins->ipdn_v4in->h_flags = 0; in ipd_setup_hooks()
376 ins->ipdn_v4in->h_hint = HH_NONE; in ipd_setup_hooks()
377 ins->ipdn_v4in->h_hintvalue = 0; in ipd_setup_hooks()
378 ins->ipdn_v4in->h_func = ipd_hook; in ipd_setup_hooks()
379 ins->ipdn_v4in->h_arg = ins; in ipd_setup_hooks()
380 ins->ipdn_v4in->h_name = "ipd IPv4 in"; in ipd_setup_hooks()
382 if (net_hook_register(ins->ipdn_v4hdl, NH_PHYSICAL_IN, in ipd_setup_hooks()
383 ins->ipdn_v4in) != 0) in ipd_setup_hooks()
385 ins->ipdn_hooked |= IPDN_HOOK_V4IN; in ipd_setup_hooks()
387 ins->ipdn_v4out = hook_alloc(HOOK_VERSION); in ipd_setup_hooks()
388 if (ins->ipdn_v4out == NULL) in ipd_setup_hooks()
390 ins->ipdn_v4out->h_flags = 0; in ipd_setup_hooks()
391 ins->ipdn_v4out->h_hint = HH_NONE; in ipd_setup_hooks()
392 ins->ipdn_v4out->h_hintvalue = 0; in ipd_setup_hooks()
393 ins->ipdn_v4out->h_func = ipd_hook; in ipd_setup_hooks()
394 ins->ipdn_v4out->h_arg = ins; in ipd_setup_hooks()
395 ins->ipdn_v4out->h_name = "ipd IPv4 out"; in ipd_setup_hooks()
397 if (net_hook_register(ins->ipdn_v4hdl, NH_PHYSICAL_OUT, in ipd_setup_hooks()
398 ins->ipdn_v4out) != 0) in ipd_setup_hooks()
400 ins->ipdn_hooked |= IPDN_HOOK_V4OUT; in ipd_setup_hooks()
402 ins->ipdn_v6in = hook_alloc(HOOK_VERSION); in ipd_setup_hooks()
403 if (ins->ipdn_v6in == NULL) in ipd_setup_hooks()
405 ins->ipdn_v6in->h_flags = 0; in ipd_setup_hooks()
406 ins->ipdn_v6in->h_hint = HH_NONE; in ipd_setup_hooks()
407 ins->ipdn_v6in->h_hintvalue = 0; in ipd_setup_hooks()
408 ins->ipdn_v6in->h_func = ipd_hook; in ipd_setup_hooks()
409 ins->ipdn_v6in->h_arg = ins; in ipd_setup_hooks()
410 ins->ipdn_v6in->h_name = "ipd IPv6 in"; in ipd_setup_hooks()
412 if (net_hook_register(ins->ipdn_v6hdl, NH_PHYSICAL_IN, in ipd_setup_hooks()
413 ins->ipdn_v6in) != 0) in ipd_setup_hooks()
415 ins->ipdn_hooked |= IPDN_HOOK_V6IN; in ipd_setup_hooks()
417 ins->ipdn_v6out = hook_alloc(HOOK_VERSION); in ipd_setup_hooks()
418 if (ins->ipdn_v6out == NULL) in ipd_setup_hooks()
420 ins->ipdn_v6out->h_flags = 0; in ipd_setup_hooks()
421 ins->ipdn_v6out->h_hint = HH_NONE; in ipd_setup_hooks()
422 ins->ipdn_v6out->h_hintvalue = 0; in ipd_setup_hooks()
423 ins->ipdn_v6out->h_func = ipd_hook; in ipd_setup_hooks()
424 ins->ipdn_v6out->h_arg = ins; in ipd_setup_hooks()
425 ins->ipdn_v6out->h_name = "ipd IPv6 out"; in ipd_setup_hooks()
427 if (net_hook_register(ins->ipdn_v6hdl, NH_PHYSICAL_OUT, in ipd_setup_hooks()
428 ins->ipdn_v6out) != 0) in ipd_setup_hooks()
430 ins->ipdn_hooked |= IPDN_HOOK_V6OUT; in ipd_setup_hooks()
438 if (ins->ipdn_hooked & IPDN_HOOK_V6OUT) in ipd_setup_hooks()
439 (void) net_hook_unregister(ins->ipdn_v6hdl, NH_PHYSICAL_OUT, in ipd_setup_hooks()
440 ins->ipdn_v6out); in ipd_setup_hooks()
442 if (ins->ipdn_hooked & IPDN_HOOK_V6IN) in ipd_setup_hooks()
443 (void) net_hook_unregister(ins->ipdn_v6hdl, NH_PHYSICAL_IN, in ipd_setup_hooks()
444 ins->ipdn_v6in); in ipd_setup_hooks()
446 if (ins->ipdn_hooked & IPDN_HOOK_V4OUT) in ipd_setup_hooks()
447 (void) net_hook_unregister(ins->ipdn_v4hdl, NH_PHYSICAL_OUT, in ipd_setup_hooks()
448 ins->ipdn_v4out); in ipd_setup_hooks()
450 if (ins->ipdn_hooked & IPDN_HOOK_V4IN) in ipd_setup_hooks()
451 (void) net_hook_unregister(ins->ipdn_v4hdl, NH_PHYSICAL_IN, in ipd_setup_hooks()
452 ins->ipdn_v4in); in ipd_setup_hooks()
454 ins->ipdn_hooked = IPDN_HOOK_NONE; in ipd_setup_hooks()
456 if (ins->ipdn_v6out != NULL) in ipd_setup_hooks()
457 hook_free(ins->ipdn_v6out); in ipd_setup_hooks()
459 if (ins->ipdn_v6in != NULL) in ipd_setup_hooks()
460 hook_free(ins->ipdn_v6in); in ipd_setup_hooks()
462 if (ins->ipdn_v4out != NULL) in ipd_setup_hooks()
463 hook_free(ins->ipdn_v4out); in ipd_setup_hooks()
465 if (ins->ipdn_v4in != NULL) in ipd_setup_hooks()
466 hook_free(ins->ipdn_v4in); in ipd_setup_hooks()
468 if (ins->ipdn_v6hdl != NULL) in ipd_setup_hooks()
469 (void) net_protocol_release(ins->ipdn_v6hdl); in ipd_setup_hooks()
471 if (ins->ipdn_v4hdl != NULL) in ipd_setup_hooks()
472 (void) net_protocol_release(ins->ipdn_v4hdl); in ipd_setup_hooks()
478 ipd_teardown_hooks(ipd_netstack_t *ins) in ipd_teardown_hooks() argument
480 ASSERT(ins->ipdn_hooked == IPDN_HOOK_ALL); in ipd_teardown_hooks()
481 VERIFY(net_hook_unregister(ins->ipdn_v6hdl, NH_PHYSICAL_OUT, in ipd_teardown_hooks()
482 ins->ipdn_v6out) == 0); in ipd_teardown_hooks()
483 VERIFY(net_hook_unregister(ins->ipdn_v6hdl, NH_PHYSICAL_IN, in ipd_teardown_hooks()
484 ins->ipdn_v6in) == 0); in ipd_teardown_hooks()
485 VERIFY(net_hook_unregister(ins->ipdn_v4hdl, NH_PHYSICAL_OUT, in ipd_teardown_hooks()
486 ins->ipdn_v4out) == 0); in ipd_teardown_hooks()
487 VERIFY(net_hook_unregister(ins->ipdn_v4hdl, NH_PHYSICAL_IN, in ipd_teardown_hooks()
488 ins->ipdn_v4in) == 0); in ipd_teardown_hooks()
490 ins->ipdn_hooked = IPDN_HOOK_NONE; in ipd_teardown_hooks()
492 hook_free(ins->ipdn_v6out); in ipd_teardown_hooks()
493 hook_free(ins->ipdn_v6in); in ipd_teardown_hooks()
494 hook_free(ins->ipdn_v4out); in ipd_teardown_hooks()
495 hook_free(ins->ipdn_v4in); in ipd_teardown_hooks()
497 VERIFY(net_protocol_release(ins->ipdn_v6hdl) == 0); in ipd_teardown_hooks()
498 VERIFY(net_protocol_release(ins->ipdn_v4hdl) == 0); in ipd_teardown_hooks()
506 ipd_check_hooks(ipd_netstack_t *ins, int type, boolean_t enable) in ipd_check_hooks() argument
509 olden = ins->ipdn_enabled; in ipd_check_hooks()
512 ins->ipdn_enabled |= type; in ipd_check_hooks()
514 ins->ipdn_enabled &= ~type; in ipd_check_hooks()
519 if (olden == 0 && ins->ipdn_enabled != 0) { in ipd_check_hooks()
520 rval = ipd_setup_hooks(ins); in ipd_check_hooks()
522 ins->ipdn_enabled &= ~type; in ipd_check_hooks()
523 ASSERT(ins->ipdn_enabled == 0); in ipd_check_hooks()
530 if (olden != 0 && ins->ipdn_enabled == 0) { in ipd_check_hooks()
549 mutex_exit(&ins->ipdn_lock); in ipd_check_hooks()
550 ipd_teardown_hooks(ins); in ipd_check_hooks()
551 mutex_enter(&ins->ipdn_lock); in ipd_check_hooks()
558 ASSERT((olden == 0) == (ins->ipdn_enabled == 0)); in ipd_check_hooks()
563 ipd_toggle_corrupt(ipd_netstack_t *ins, int percent) in ipd_toggle_corrupt() argument
567 ASSERT(MUTEX_HELD(&ins->ipdn_lock)); in ipd_toggle_corrupt()
576 if (percent == ins->ipdn_corrupt) in ipd_toggle_corrupt()
579 ins->ipdn_corrupt = percent; in ipd_toggle_corrupt()
580 rval = ipd_check_hooks(ins, IPD_CORRUPT, percent != 0); in ipd_toggle_corrupt()
588 ins->ipdn_corrupt = 0; in ipd_toggle_corrupt()
594 ipd_toggle_delay(ipd_netstack_t *ins, uint32_t delay) in ipd_toggle_delay() argument
598 ASSERT(MUTEX_HELD(&ins->ipdn_lock)); in ipd_toggle_delay()
607 if (delay == ins->ipdn_delay) in ipd_toggle_delay()
610 ins->ipdn_delay = delay; in ipd_toggle_delay()
611 rval = ipd_check_hooks(ins, IPD_DELAY, delay != 0); in ipd_toggle_delay()
619 ins->ipdn_delay = 0; in ipd_toggle_delay()
624 ipd_toggle_drop(ipd_netstack_t *ins, int percent) in ipd_toggle_drop() argument
628 ASSERT(MUTEX_HELD(&ins->ipdn_lock)); in ipd_toggle_drop()
637 if (percent == ins->ipdn_drop) in ipd_toggle_drop()
640 ins->ipdn_drop = percent; in ipd_toggle_drop()
641 rval = ipd_check_hooks(ins, IPD_DROP, percent != 0); in ipd_toggle_drop()
649 ins->ipdn_drop = 0; in ipd_toggle_drop()
658 ipd_netstack_t *ins; in ipd_ioctl_perturb() local
682 for (ins = list_head(&ipd_nsl); ins != NULL; in ipd_ioctl_perturb()
683 ins = list_next(&ipd_nsl, ins)) { in ipd_ioctl_perturb()
684 if (ins->ipdn_zoneid == ipi->ipip_zoneid) in ipd_ioctl_perturb()
688 if (ins == NULL) { in ipd_ioctl_perturb()
693 mutex_enter(&ins->ipdn_lock); in ipd_ioctl_perturb()
695 if (ins->ipdn_status & IPDN_STATUS_CONDEMNED) { in ipd_ioctl_perturb()
702 rval = ipd_toggle_corrupt(ins, ipi->ipip_arg); in ipd_ioctl_perturb()
705 rval = ipd_toggle_delay(ins, ipi->ipip_arg); in ipd_ioctl_perturb()
708 rval = ipd_toggle_drop(ins, ipi->ipip_arg); in ipd_ioctl_perturb()
713 mutex_exit(&ins->ipdn_lock); in ipd_ioctl_perturb()
722 ipd_netstack_t *ins; in ipd_ioctl_remove() local
737 for (ins = list_head(&ipd_nsl); ins != NULL; in ipd_ioctl_remove()
738 ins = list_next(&ipd_nsl, ins)) { in ipd_ioctl_remove()
739 if (ins->ipdn_zoneid == ipi->ipip_zoneid) in ipd_ioctl_remove()
743 if (ins == NULL) { in ipd_ioctl_remove()
748 mutex_enter(&ins->ipdn_lock); in ipd_ioctl_remove()
758 if (ins->ipdn_status & IPDN_STATUS_CONDEMNED) { in ipd_ioctl_remove()
770 ins->ipdn_corrupt = 0; in ipd_ioctl_remove()
771 (void) ipd_check_hooks(ins, IPD_CORRUPT, B_FALSE); in ipd_ioctl_remove()
776 ins->ipdn_delay = 0; in ipd_ioctl_remove()
777 (void) ipd_check_hooks(ins, IPD_DELAY, B_FALSE); in ipd_ioctl_remove()
782 ins->ipdn_drop = 0; in ipd_ioctl_remove()
783 (void) ipd_check_hooks(ins, IPD_DROP, B_FALSE); in ipd_ioctl_remove()
788 mutex_exit(&ins->ipdn_lock); in ipd_ioctl_remove()
811 ipd_netstack_t *ins; in ipd_ioctl_list() local
849 for (ins = list_head(&ipd_nsl); ins != NULL; in ipd_ioctl_list()
850 ins = list_next(&ipd_nsl, ins)) { in ipd_ioctl_list()
851 if (ins->ipdn_enabled == 0) in ipd_ioctl_list()
856 if (zid == GLOBAL_ZONEID || zid == ins->ipdn_zoneid) { in ipd_ioctl_list()
857 configs[cur].ipii_zoneid = ins->ipdn_zoneid; in ipd_ioctl_list()
859 mutex_enter(&ins->ipdn_lock); in ipd_ioctl_list()
860 configs[cur].ipii_corrupt = ins->ipdn_corrupt; in ipd_ioctl_list()
861 configs[cur].ipii_delay = ins->ipdn_delay; in ipd_ioctl_list()
862 configs[cur].ipii_drop = ins->ipdn_drop; in ipd_ioctl_list()
863 mutex_exit(&ins->ipdn_lock); in ipd_ioctl_list()
868 if (zid != GLOBAL_ZONEID && zid == ins->ipdn_zoneid) in ipd_ioctl_list()
897 ipd_netstack_t *ins; in ipd_nin_create() local
900 ins = kmem_zalloc(sizeof (ipd_netstack_t), KM_SLEEP); in ipd_nin_create()
901 ins->ipdn_status = IPDN_STATUS_DISABLED; in ipd_nin_create()
902 ins->ipdn_netid = id; in ipd_nin_create()
903 ins->ipdn_zoneid = netstackid_to_zoneid(id); in ipd_nin_create()
904 ins->ipdn_rand = gethrtime(); in ipd_nin_create()
905 mutex_init(&ins->ipdn_lock, NULL, MUTEX_DRIVER, NULL); in ipd_nin_create()
907 ins->ipdn_kstat = net_kstat_create(id, "ipd", ins->ipdn_zoneid, in ipd_nin_create()
912 if (ins->ipdn_kstat != NULL) { in ipd_nin_create()
913 if (ins->ipdn_zoneid != GLOBAL_ZONEID) in ipd_nin_create()
914 kstat_zone_add(ins->ipdn_kstat, GLOBAL_ZONEID); in ipd_nin_create()
916 ink = &ins->ipdn_ksdata; in ipd_nin_create()
917 ins->ipdn_kstat->ks_data = ink; in ipd_nin_create()
923 kstat_install(ins->ipdn_kstat); in ipd_nin_create()
927 list_insert_tail(&ipd_nsl, ins); in ipd_nin_create()
930 return (ins); in ipd_nin_create()
936 ipd_netstack_t *ins = arg; in ipd_nin_shutdown() local
938 VERIFY(id == ins->ipdn_netid); in ipd_nin_shutdown()
939 mutex_enter(&ins->ipdn_lock); in ipd_nin_shutdown()
940 ASSERT(ins->ipdn_status == IPDN_STATUS_DISABLED || in ipd_nin_shutdown()
941 ins->ipdn_status == IPDN_STATUS_ENABLED); in ipd_nin_shutdown()
942 ins->ipdn_status |= IPDN_STATUS_CONDEMNED; in ipd_nin_shutdown()
943 if (ins->ipdn_kstat != NULL) in ipd_nin_shutdown()
944 net_kstat_delete(id, ins->ipdn_kstat); in ipd_nin_shutdown()
945 mutex_exit(&ins->ipdn_lock); in ipd_nin_shutdown()
952 ipd_netstack_t *ins = arg; in ipd_nin_destroy() local
962 list_remove(&ipd_nsl, ins); in ipd_nin_destroy()
965 if (ins->ipdn_hooked) in ipd_nin_destroy()
966 ipd_teardown_hooks(ins); in ipd_nin_destroy()
967 mutex_destroy(&ins->ipdn_lock); in ipd_nin_destroy()
968 kmem_free(ins, sizeof (ipd_netstack_t)); in ipd_nin_destroy()