Lines Matching defs:ips

241 	ipnet_stack_t		*ips;
246 ips = ns->netstack_ipnet;
247 if ((ret = ipnet_populate_if(ips->ips_ndv4, ips, B_FALSE)) == 0)
248 ret = ipnet_populate_if(ips->ips_ndv6, ips, B_TRUE);
325 ipnet_register_netihook(ipnet_stack_t *ips)
331 HOOK_INIT(ips->ips_nicevents, ipnet_nicevent_cb, "ipnet_nicevents",
332 ips);
339 zoneid = netstackid_to_zoneid(ips->ips_netstack->netstack_stackid);
343 if ((ips->ips_ndv4 = net_protocol_lookup(netid, NHF_INET)) != NULL) {
344 if ((ret = net_hook_register(ips->ips_ndv4, NH_NIC_EVENTS,
345 ips->ips_nicevents)) != 0) {
346 VERIFY(net_protocol_release(ips->ips_ndv4) == 0);
347 ips->ips_ndv4 = NULL;
352 if ((ips->ips_ndv6 = net_protocol_lookup(netid, NHF_INET6)) != NULL) {
353 if ((ret = net_hook_register(ips->ips_ndv6, NH_NIC_EVENTS,
354 ips->ips_nicevents)) != 0) {
355 VERIFY(net_protocol_release(ips->ips_ndv6) == 0);
356 ips->ips_ndv6 = NULL;
365 ips->ips_kstatp = net_kstat_create(netid, "ipnet", 0, "ipnet_stats",
368 if (ips->ips_kstatp != NULL) {
369 bcopy(&stats_template, &ips->ips_stats,
370 sizeof (ips->ips_stats));
371 ips->ips_kstatp->ks_data = &ips->ips_stats;
372 ips->ips_kstatp->ks_private =
373 (void *)(uintptr_t)ips->ips_netstack->netstack_stackid;
374 kstat_install(ips->ips_kstatp);
388 ipnet_populate_if(net_handle_t nd, ipnet_stack_t *ips, boolean_t isv6)
414 mutex_enter(&ips->ips_event_lock);
422 if ((ipnetif = ipnetif_getby_index(phyif, ips)) == NULL) {
423 ipnetif = ipnetif_create(name, phyif, ips, ifflags);
452 mutex_exit(&ips->ips_event_lock);
509 ipnet_stack_t *ips;
532 ips = ns->netstack_ipnet;
546 mutex_enter(&ips->ips_event_lock);
552 ipnet->ipnet_if = ipnetif_getby_dev(*dev, ips);
554 !ipnetif_in_zone(ipnet->ipnet_if, zoneid, ips)) {
560 mutex_enter(&ips->ips_walkers_lock);
561 while (ips->ips_walkers_cnt != 0)
562 cv_wait(&ips->ips_walkers_cv, &ips->ips_walkers_lock);
563 list_insert_head(&ips->ips_str_list, ipnet);
571 if (list_head(&ips->ips_str_list) == list_tail(&ips->ips_str_list))
572 ips->ips_hook = ipobs_register_hook(ns, ipnet_input);
573 mutex_exit(&ips->ips_walkers_lock);
576 mutex_exit(&ips->ips_event_lock);
591 ipnet_stack_t *ips = ipnet->ipnet_ns->netstack_ipnet;
594 ipnet_leave_allmulti(ipnet->ipnet_if, ips);
596 ipnet_leave_allmulti(ipnet->ipnet_if, ips);
598 mutex_enter(&ips->ips_walkers_lock);
599 while (ips->ips_walkers_cnt != 0)
600 cv_wait(&ips->ips_walkers_cv, &ips->ips_walkers_lock);
604 list_remove(&ips->ips_str_list, ipnet);
609 if (list_is_empty(&ips->ips_str_list)) {
610 ipobs_unregister_hook(ips->ips_netstack, ips->ips_hook);
611 ips->ips_hook = NULL;
616 mutex_exit(&ips->ips_walkers_lock);
617 netstack_rele(ips->ips_netstack);
914 ipnet_join_allmulti(ipnetif_t *ipnetif, ipnet_stack_t *ips)
917 ip_stack_t *ipst = ips->ips_netstack->netstack_ip;
920 mutex_enter(&ips->ips_event_lock);
944 mutex_exit(&ips->ips_event_lock);
949 ipnet_leave_allmulti(ipnetif_t *ipnetif, ipnet_stack_t *ips)
952 ip_stack_t *ipst = ips->ips_netstack->netstack_ip;
955 mutex_enter(&ips->ips_event_lock);
969 mutex_exit(&ips->ips_event_lock);
1175 ipnet_stack_t *ips;
1179 ips = ((netstack_t *)hdr->hpo_ctx)->netstack_ipnet;
1193 ipnet_walkers_inc(ips);
1195 list = &ips->ips_str_list;
1199 IPSK_BUMP(ips, ik_acceptFail);
1202 IPSK_BUMP(ips, ik_acceptOk);
1210 IPSK_BUMP(ips, ik_duplicationFail);
1217 IPSK_BUMP(ips, ik_dispatchHeaderDrop);
1225 IPSK_BUMP(ips, ik_dispatchDeliver);
1228 IPSK_BUMP(ips, ik_dispatchDeliver);
1231 IPSK_BUMP(ips, ik_dispatchPutDrop);
1235 ipnet_walkers_dec(ips);
1244 ipnet_stack_t *ips;
1246 ips = ((netstack_t *)hdr->hpo_ctx)->netstack_ipnet;
1250 IPSK_BUMP(ips, ik_dispatchFail);
1253 IPSK_BUMP(ips, ik_dispatchOk);
1258 ipnet_alloc_if(ipnet_stack_t *ips)
1272 ipnetif->if_stackp = ips;
1283 ipnetif_create(const char *name, uint64_t index, ipnet_stack_t *ips,
1297 if ((ipnetif = ipnet_alloc_if(ips)) == NULL) {
1304 ipnetif->if_zoneid = netstack_get_zoneid(ips->ips_netstack);
1311 mutex_enter(&ips->ips_avl_lock);
1312 VERIFY(avl_find(&ips->ips_avl_by_index, &index, &where) == NULL);
1313 avl_insert(&ips->ips_avl_by_index, ipnetif, where);
1314 VERIFY(avl_find(&ips->ips_avl_by_name, (void *)name, &where) == NULL);
1315 avl_insert(&ips->ips_avl_by_name, ipnetif, where);
1316 mutex_exit(&ips->ips_avl_lock);
1322 ipnetif_remove(ipnetif_t *ipnetif, ipnet_stack_t *ips)
1326 ipnet_walkers_inc(ips);
1328 for (ipnet = list_head(&ips->ips_str_list); ipnet != NULL;
1329 ipnet = list_next(&ips->ips_str_list, ipnet)) {
1333 ipnet_walkers_dec(ips);
1334 mutex_enter(&ips->ips_avl_lock);
1335 avl_remove(&ips->ips_avl_by_index, ipnetif);
1336 avl_remove(&ips->ips_avl_by_name, ipnetif);
1337 mutex_exit(&ips->ips_avl_lock);
1453 ipnet_plumb_ev(ipnet_nicevent_t *ipne, ipnet_stack_t *ips, boolean_t isv6)
1467 if ((ipnetif = ipnetif_getby_index(ifindex, ips)) == NULL) {
1468 ipnetif = ipnetif_create(ifname, ifindex, ips, ifflags);
1478 ips->ips_netstack->netstack_ip) == 0) {
1489 ipnet_unplumb_ev(uint64_t ifindex, ipnet_stack_t *ips, boolean_t isv6)
1493 if ((ipnetif = ipnetif_getby_index(ifindex, ips)) == NULL)
1508 ipnetif_remove(ipnetif, ips);
1514 ipnet_stack_t *ips, boolean_t isv6)
1519 if ((ipnetif = ipnetif_getby_index(ifindex, ips)) == NULL)
1534 ipnet_lifdown_ev(uint64_t ifindex, uint64_t lifindex, ipnet_stack_t *ips,
1540 if ((ipnetif = ipnetif_getby_index(ifindex, ips)) == NULL)
1549 ipnetif_zonecheck(ipnetif, ips);
1560 ipnet_stack_t *ips = arg;
1568 ipne->ipne_stackid = ips->ips_netstack->netstack_stackid;
1585 ipnet_stack_t *ips;
1590 ips = ns->netstack_ipnet;
1591 isv6 = (ipne->ipne_protocol == ips->ips_ndv6);
1593 mutex_enter(&ips->ips_event_lock);
1596 ipnet_plumb_ev(ipne, ips, isv6);
1599 ipnet_unplumb_ev(ipne->ipne_ifindex, ips, isv6);
1603 ipne->ipne_protocol, ips, isv6);
1606 ipnet_lifdown_ev(ipne->ipne_ifindex, ipne->ipne_lifindex, ips,
1612 mutex_exit(&ips->ips_event_lock);
1623 ipnet_stack_t *ips;
1632 ips = ns->netstack_ipnet;
1633 mutex_enter(&ips->ips_avl_lock);
1634 if ((ipnetif = avl_find(&ips->ips_avl_by_name, name, NULL)) != NULL) {
1635 if (ipnetif_in_zone(ipnetif, zoneid, ips))
1638 mutex_exit(&ips->ips_avl_lock);
1645 ipnetif_getby_index(uint64_t id, ipnet_stack_t *ips)
1649 mutex_enter(&ips->ips_avl_lock);
1650 if ((ipnetif = avl_find(&ips->ips_avl_by_index, &id, NULL)) != NULL)
1652 mutex_exit(&ips->ips_avl_lock);
1657 ipnetif_getby_dev(dev_t dev, ipnet_stack_t *ips)
1662 mutex_enter(&ips->ips_avl_lock);
1663 tree = &ips->ips_avl_by_index;
1671 mutex_exit(&ips->ips_avl_lock);
1696 ipnet_stack_t *ips;
1698 ips = kmem_zalloc(sizeof (*ips), KM_SLEEP);
1699 ips->ips_netstack = ns;
1700 mutex_init(&ips->ips_avl_lock, NULL, MUTEX_DEFAULT, 0);
1701 avl_create(&ips->ips_avl_by_index, ipnetif_compare_index,
1703 avl_create(&ips->ips_avl_by_name, ipnetif_compare_name,
1705 avl_create(&ips->ips_avl_by_shared, ipnetif_compare_name_zone,
1707 mutex_init(&ips->ips_walkers_lock, NULL, MUTEX_DEFAULT, NULL);
1708 cv_init(&ips->ips_walkers_cv, NULL, CV_DRIVER, NULL);
1709 list_create(&ips->ips_str_list, sizeof (ipnet_t),
1711 ipnet_register_netihook(ips);
1712 return (ips);
1719 ipnet_stack_t *ips = arg;
1722 if (ips->ips_kstatp != NULL) {
1726 net_kstat_delete(net_zoneidtonetid(zoneid), ips->ips_kstatp);
1728 if (ips->ips_ndv4 != NULL) {
1729 VERIFY(net_hook_unregister(ips->ips_ndv4, NH_NIC_EVENTS,
1730 ips->ips_nicevents) == 0);
1731 VERIFY(net_protocol_release(ips->ips_ndv4) == 0);
1733 if (ips->ips_ndv6 != NULL) {
1734 VERIFY(net_hook_unregister(ips->ips_ndv6, NH_NIC_EVENTS,
1735 ips->ips_nicevents) == 0);
1736 VERIFY(net_protocol_release(ips->ips_ndv6) == 0);
1738 hook_free(ips->ips_nicevents);
1740 for (ipnetif = avl_first(&ips->ips_avl_by_index); ipnetif != NULL;
1742 nipnetif = AVL_NEXT(&ips->ips_avl_by_index, ipnetif);
1743 ipnetif_remove(ipnetif, ips);
1745 avl_destroy(&ips->ips_avl_by_shared);
1746 avl_destroy(&ips->ips_avl_by_index);
1747 avl_destroy(&ips->ips_avl_by_name);
1748 mutex_destroy(&ips->ips_avl_lock);
1749 mutex_destroy(&ips->ips_walkers_lock);
1750 cv_destroy(&ips->ips_walkers_cv);
1751 list_destroy(&ips->ips_str_list);
1752 kmem_free(ips, sizeof (*ips));
1771 ipnetif_in_zone(ipnetif_t *ipnetif, zoneid_t zoneid, ipnet_stack_t *ips)
1781 ips->ips_netstack->netstack_stackid != GLOBAL_NETSTACKID)
1803 ipnetif_zonecheck(ipnetif_t *ipnetif, ipnet_stack_t *ips)
1805 list_t *strlist = &ips->ips_str_list;
1808 ipnet_walkers_inc(ips);
1813 if (!ipnetif_in_zone(ipnetif, ipnet->ipnet_zoneid, ips))
1816 ipnet_walkers_dec(ips);
1826 ipnet_stack_t *ips;
1838 ips = ns->netstack_ipnet;
1842 mutex_enter(&ips->ips_avl_lock);
1843 for (ipnetif = avl_first(&ips->ips_avl_by_index); ipnetif != NULL;
1844 ipnetif = avl_walk(&ips->ips_avl_by_index, ipnetif, AVL_AFTER)) {
1845 if (!ipnetif_in_zone(ipnetif, zoneid, ips))
1852 mutex_exit(&ips->ips_avl_lock);
1916 ipnet_walkers_inc(ipnet_stack_t *ips)
1918 mutex_enter(&ips->ips_walkers_lock);
1919 ips->ips_walkers_cnt++;
1920 mutex_exit(&ips->ips_walkers_lock);
1924 ipnet_walkers_dec(ipnet_stack_t *ips)
1926 mutex_enter(&ips->ips_walkers_lock);
1927 ASSERT(ips->ips_walkers_cnt != 0);
1928 if (--ips->ips_walkers_cnt == 0)
1929 cv_broadcast(&ips->ips_walkers_cv);
1930 mutex_exit(&ips->ips_walkers_lock);
1949 ipnet_stack_t *ips = ns->netstack_ipnet;
1951 IPSK_BUMP(ips, ik_dispatchDupDrop);
2025 ipnet_rele(ipnet_stack_t *ips)
2027 netstack_rele(ips->ips_netstack);
2046 ipnet_stack_t *ips;
2050 VERIFY((ips = ipnet_find_by_zoneid(zoneid)) != NULL);
2052 mutex_enter(&ips->ips_avl_lock);
2060 ipnetif = avl_find(&ips->ips_avl_by_shared, (void *)key, NULL);
2062 ipnetif = avl_find(&ips->ips_avl_by_name, (void *)name, NULL);
2066 mutex_exit(&ips->ips_avl_lock);
2069 ipnet_rele(ips);
2104 ipnet_stack_t *ips;
2107 VERIFY((ips = ipnet_find_by_zoneid(zoneid)) != NULL);
2108 ASSERT(mutex_owned(&ips->ips_event_lock));
2110 mutex_enter(&ips->ips_avl_lock);
2111 ifp = avl_find(&ips->ips_avl_by_name, (void *)name, NULL);
2121 ifp = avl_find(&ips->ips_avl_by_shared, (void *)key, NULL);
2126 mutex_exit(&ips->ips_avl_lock);
2127 ipnet_rele(ips);
2289 ipnet_stack_t *ips;
2297 ips = ((netstack_t *)hdr->hpo_ctx)->netstack_ipnet;
2312 IPSK_BUMP(ips, ik_acceptFail);
2315 IPSK_BUMP(ips, ik_acceptOk);
2339 ipnet_stack_t *ips = ifp->if_stackp;
2343 mutex_enter(&ips->ips_avl_lock);
2344 newif = avl_find(&ips->ips_avl_by_shared, (void *)key, &where);
2348 mutex_exit(&ips->ips_avl_lock);
2352 newif = ipnet_alloc_if(ips);
2354 mutex_exit(&ips->ips_avl_lock);
2365 avl_insert(&ips->ips_avl_by_shared, newif, where);
2366 mutex_exit(&ips->ips_avl_lock);
2376 ipnet_stack_t *ips = ipnetif->if_stackp;
2387 mutex_enter(&ips->ips_avl_lock);
2388 avl_remove(&ips->ips_avl_by_shared, ipnetif);
2389 mutex_exit(&ips->ips_avl_lock);