Lines Matching defs:ips

244 	ipnet_stack_t		*ips;
249 ips = ns->netstack_ipnet;
250 if ((ret = ipnet_populate_if(ips->ips_ndv4, ips, B_FALSE)) == 0)
251 ret = ipnet_populate_if(ips->ips_ndv6, ips, B_TRUE);
328 ipnet_register_netihook(ipnet_stack_t *ips)
334 HOOK_INIT(ips->ips_nicevents, ipnet_nicevent_cb, "ipnet_nicevents",
335 ips);
342 zoneid = netstackid_to_zoneid(ips->ips_netstack->netstack_stackid);
346 if ((ips->ips_ndv4 = net_protocol_lookup(netid, NHF_INET)) != NULL) {
347 if ((ret = net_hook_register(ips->ips_ndv4, NH_NIC_EVENTS,
348 ips->ips_nicevents)) != 0) {
349 VERIFY(net_protocol_release(ips->ips_ndv4) == 0);
350 ips->ips_ndv4 = NULL;
355 if ((ips->ips_ndv6 = net_protocol_lookup(netid, NHF_INET6)) != NULL) {
356 if ((ret = net_hook_register(ips->ips_ndv6, NH_NIC_EVENTS,
357 ips->ips_nicevents)) != 0) {
358 VERIFY(net_protocol_release(ips->ips_ndv6) == 0);
359 ips->ips_ndv6 = NULL;
368 ips->ips_kstatp = net_kstat_create(netid, "ipnet", 0, "ipnet_stats",
371 if (ips->ips_kstatp != NULL) {
372 bcopy(&stats_template, &ips->ips_stats,
373 sizeof (ips->ips_stats));
374 ips->ips_kstatp->ks_data = &ips->ips_stats;
375 ips->ips_kstatp->ks_private =
376 (void *)(uintptr_t)ips->ips_netstack->netstack_stackid;
377 kstat_install(ips->ips_kstatp);
391 ipnet_populate_if(net_handle_t nd, ipnet_stack_t *ips, boolean_t isv6)
417 mutex_enter(&ips->ips_event_lock);
425 if ((ipnetif = ipnetif_getby_index(phyif, ips)) == NULL) {
426 ipnetif = ipnetif_create(name, phyif, ips, ifflags);
455 mutex_exit(&ips->ips_event_lock);
512 ipnet_stack_t *ips;
535 ips = ns->netstack_ipnet;
549 mutex_enter(&ips->ips_event_lock);
555 ipnet->ipnet_if = ipnetif_getby_dev(*dev, ips);
557 !ipnetif_in_zone(ipnet->ipnet_if, zoneid, ips)) {
563 mutex_enter(&ips->ips_walkers_lock);
564 while (ips->ips_walkers_cnt != 0)
565 cv_wait(&ips->ips_walkers_cv, &ips->ips_walkers_lock);
566 list_insert_head(&ips->ips_str_list, ipnet);
574 if (list_head(&ips->ips_str_list) == list_tail(&ips->ips_str_list))
575 ips->ips_hook = ipobs_register_hook(ns, ipnet_input);
576 mutex_exit(&ips->ips_walkers_lock);
579 mutex_exit(&ips->ips_event_lock);
594 ipnet_stack_t *ips = ipnet->ipnet_ns->netstack_ipnet;
597 ipnet_leave_allmulti(ipnet->ipnet_if, ips);
599 ipnet_leave_allmulti(ipnet->ipnet_if, ips);
601 mutex_enter(&ips->ips_walkers_lock);
602 while (ips->ips_walkers_cnt != 0)
603 cv_wait(&ips->ips_walkers_cv, &ips->ips_walkers_lock);
607 list_remove(&ips->ips_str_list, ipnet);
612 if (list_is_empty(&ips->ips_str_list)) {
613 ipobs_unregister_hook(ips->ips_netstack, ips->ips_hook);
614 ips->ips_hook = NULL;
619 mutex_exit(&ips->ips_walkers_lock);
620 netstack_rele(ips->ips_netstack);
917 ipnet_join_allmulti(ipnetif_t *ipnetif, ipnet_stack_t *ips)
920 ip_stack_t *ipst = ips->ips_netstack->netstack_ip;
923 mutex_enter(&ips->ips_event_lock);
947 mutex_exit(&ips->ips_event_lock);
952 ipnet_leave_allmulti(ipnetif_t *ipnetif, ipnet_stack_t *ips)
955 ip_stack_t *ipst = ips->ips_netstack->netstack_ip;
958 mutex_enter(&ips->ips_event_lock);
972 mutex_exit(&ips->ips_event_lock);
1178 ipnet_stack_t *ips;
1182 ips = ((netstack_t *)hdr->hpo_ctx)->netstack_ipnet;
1196 ipnet_walkers_inc(ips);
1198 list = &ips->ips_str_list;
1202 IPSK_BUMP(ips, ik_acceptFail);
1205 IPSK_BUMP(ips, ik_acceptOk);
1213 IPSK_BUMP(ips, ik_duplicationFail);
1220 IPSK_BUMP(ips, ik_dispatchHeaderDrop);
1228 IPSK_BUMP(ips, ik_dispatchDeliver);
1231 IPSK_BUMP(ips, ik_dispatchDeliver);
1234 IPSK_BUMP(ips, ik_dispatchPutDrop);
1238 ipnet_walkers_dec(ips);
1247 ipnet_stack_t *ips;
1249 ips = ((netstack_t *)hdr->hpo_ctx)->netstack_ipnet;
1253 IPSK_BUMP(ips, ik_dispatchFail);
1256 IPSK_BUMP(ips, ik_dispatchOk);
1261 ipnet_alloc_if(ipnet_stack_t *ips)
1275 ipnetif->if_stackp = ips;
1286 ipnetif_create(const char *name, uint64_t index, ipnet_stack_t *ips,
1300 if ((ipnetif = ipnet_alloc_if(ips)) == NULL) {
1307 ipnetif->if_zoneid = netstack_get_zoneid(ips->ips_netstack);
1314 mutex_enter(&ips->ips_avl_lock);
1315 VERIFY(avl_find(&ips->ips_avl_by_index, &index, &where) == NULL);
1316 avl_insert(&ips->ips_avl_by_index, ipnetif, where);
1317 VERIFY(avl_find(&ips->ips_avl_by_name, (void *)name, &where) == NULL);
1318 avl_insert(&ips->ips_avl_by_name, ipnetif, where);
1319 mutex_exit(&ips->ips_avl_lock);
1325 ipnetif_remove(ipnetif_t *ipnetif, ipnet_stack_t *ips)
1329 ipnet_walkers_inc(ips);
1331 for (ipnet = list_head(&ips->ips_str_list); ipnet != NULL;
1332 ipnet = list_next(&ips->ips_str_list, ipnet)) {
1336 ipnet_walkers_dec(ips);
1337 mutex_enter(&ips->ips_avl_lock);
1338 avl_remove(&ips->ips_avl_by_index, ipnetif);
1339 avl_remove(&ips->ips_avl_by_name, ipnetif);
1340 mutex_exit(&ips->ips_avl_lock);
1456 ipnet_plumb_ev(ipnet_nicevent_t *ipne, ipnet_stack_t *ips, boolean_t isv6)
1470 if ((ipnetif = ipnetif_getby_index(ifindex, ips)) == NULL) {
1471 ipnetif = ipnetif_create(ifname, ifindex, ips, ifflags);
1481 ips->ips_netstack->netstack_ip) == 0) {
1492 ipnet_unplumb_ev(uint64_t ifindex, ipnet_stack_t *ips, boolean_t isv6)
1496 if ((ipnetif = ipnetif_getby_index(ifindex, ips)) == NULL)
1511 ipnetif_remove(ipnetif, ips);
1517 ipnet_stack_t *ips, boolean_t isv6)
1522 if ((ipnetif = ipnetif_getby_index(ifindex, ips)) == NULL)
1537 ipnet_lifdown_ev(uint64_t ifindex, uint64_t lifindex, ipnet_stack_t *ips,
1543 if ((ipnetif = ipnetif_getby_index(ifindex, ips)) == NULL)
1552 ipnetif_zonecheck(ipnetif, ips);
1563 ipnet_stack_t *ips = arg;
1571 ipne->ipne_stackid = ips->ips_netstack->netstack_stackid;
1588 ipnet_stack_t *ips;
1593 ips = ns->netstack_ipnet;
1594 isv6 = (ipne->ipne_protocol == ips->ips_ndv6);
1596 mutex_enter(&ips->ips_event_lock);
1599 ipnet_plumb_ev(ipne, ips, isv6);
1602 ipnet_unplumb_ev(ipne->ipne_ifindex, ips, isv6);
1606 ipne->ipne_protocol, ips, isv6);
1609 ipnet_lifdown_ev(ipne->ipne_ifindex, ipne->ipne_lifindex, ips,
1615 mutex_exit(&ips->ips_event_lock);
1626 ipnet_stack_t *ips;
1635 ips = ns->netstack_ipnet;
1636 mutex_enter(&ips->ips_avl_lock);
1637 if ((ipnetif = avl_find(&ips->ips_avl_by_name, name, NULL)) != NULL) {
1638 if (ipnetif_in_zone(ipnetif, zoneid, ips))
1641 mutex_exit(&ips->ips_avl_lock);
1648 ipnetif_getby_index(uint64_t id, ipnet_stack_t *ips)
1652 mutex_enter(&ips->ips_avl_lock);
1653 if ((ipnetif = avl_find(&ips->ips_avl_by_index, &id, NULL)) != NULL)
1655 mutex_exit(&ips->ips_avl_lock);
1660 ipnetif_getby_dev(dev_t dev, ipnet_stack_t *ips)
1665 mutex_enter(&ips->ips_avl_lock);
1666 tree = &ips->ips_avl_by_index;
1674 mutex_exit(&ips->ips_avl_lock);
1699 ipnet_stack_t *ips;
1701 ips = kmem_zalloc(sizeof (*ips), KM_SLEEP);
1702 ips->ips_netstack = ns;
1703 mutex_init(&ips->ips_avl_lock, NULL, MUTEX_DEFAULT, 0);
1704 avl_create(&ips->ips_avl_by_index, ipnetif_compare_index,
1706 avl_create(&ips->ips_avl_by_name, ipnetif_compare_name,
1708 avl_create(&ips->ips_avl_by_shared, ipnetif_compare_name_zone,
1710 mutex_init(&ips->ips_walkers_lock, NULL, MUTEX_DEFAULT, NULL);
1711 cv_init(&ips->ips_walkers_cv, NULL, CV_DRIVER, NULL);
1712 list_create(&ips->ips_str_list, sizeof (ipnet_t),
1714 ipnet_register_netihook(ips);
1715 return (ips);
1722 ipnet_stack_t *ips = arg;
1725 if (ips->ips_kstatp != NULL) {
1729 net_kstat_delete(net_zoneidtonetid(zoneid), ips->ips_kstatp);
1731 if (ips->ips_ndv4 != NULL) {
1732 VERIFY(net_hook_unregister(ips->ips_ndv4, NH_NIC_EVENTS,
1733 ips->ips_nicevents) == 0);
1734 VERIFY(net_protocol_release(ips->ips_ndv4) == 0);
1736 if (ips->ips_ndv6 != NULL) {
1737 VERIFY(net_hook_unregister(ips->ips_ndv6, NH_NIC_EVENTS,
1738 ips->ips_nicevents) == 0);
1739 VERIFY(net_protocol_release(ips->ips_ndv6) == 0);
1741 hook_free(ips->ips_nicevents);
1743 for (ipnetif = avl_first(&ips->ips_avl_by_index); ipnetif != NULL;
1745 nipnetif = AVL_NEXT(&ips->ips_avl_by_index, ipnetif);
1746 ipnetif_remove(ipnetif, ips);
1748 avl_destroy(&ips->ips_avl_by_shared);
1749 avl_destroy(&ips->ips_avl_by_index);
1750 avl_destroy(&ips->ips_avl_by_name);
1751 mutex_destroy(&ips->ips_avl_lock);
1752 mutex_destroy(&ips->ips_walkers_lock);
1753 cv_destroy(&ips->ips_walkers_cv);
1754 list_destroy(&ips->ips_str_list);
1755 kmem_free(ips, sizeof (*ips));
1774 ipnetif_in_zone(ipnetif_t *ipnetif, zoneid_t zoneid, ipnet_stack_t *ips)
1784 ips->ips_netstack->netstack_stackid != GLOBAL_NETSTACKID)
1806 ipnetif_zonecheck(ipnetif_t *ipnetif, ipnet_stack_t *ips)
1808 list_t *strlist = &ips->ips_str_list;
1811 ipnet_walkers_inc(ips);
1816 if (!ipnetif_in_zone(ipnetif, ipnet->ipnet_zoneid, ips))
1819 ipnet_walkers_dec(ips);
1829 ipnet_stack_t *ips;
1841 ips = ns->netstack_ipnet;
1845 mutex_enter(&ips->ips_avl_lock);
1846 for (ipnetif = avl_first(&ips->ips_avl_by_index); ipnetif != NULL;
1847 ipnetif = avl_walk(&ips->ips_avl_by_index, ipnetif, AVL_AFTER)) {
1848 if (!ipnetif_in_zone(ipnetif, zoneid, ips))
1855 mutex_exit(&ips->ips_avl_lock);
1919 ipnet_walkers_inc(ipnet_stack_t *ips)
1921 mutex_enter(&ips->ips_walkers_lock);
1922 ips->ips_walkers_cnt++;
1923 mutex_exit(&ips->ips_walkers_lock);
1927 ipnet_walkers_dec(ipnet_stack_t *ips)
1929 mutex_enter(&ips->ips_walkers_lock);
1930 ASSERT(ips->ips_walkers_cnt != 0);
1931 if (--ips->ips_walkers_cnt == 0)
1932 cv_broadcast(&ips->ips_walkers_cv);
1933 mutex_exit(&ips->ips_walkers_lock);
1952 ipnet_stack_t *ips = ns->netstack_ipnet;
1954 IPSK_BUMP(ips, ik_dispatchDupDrop);
2028 ipnet_rele(ipnet_stack_t *ips)
2030 netstack_rele(ips->ips_netstack);
2049 ipnet_stack_t *ips;
2053 VERIFY((ips = ipnet_find_by_zoneid(zoneid)) != NULL);
2055 mutex_enter(&ips->ips_avl_lock);
2063 ipnetif = avl_find(&ips->ips_avl_by_shared, (void *)key, NULL);
2065 ipnetif = avl_find(&ips->ips_avl_by_name, (void *)name, NULL);
2069 mutex_exit(&ips->ips_avl_lock);
2072 ipnet_rele(ips);
2107 ipnet_stack_t *ips;
2110 VERIFY((ips = ipnet_find_by_zoneid(zoneid)) != NULL);
2111 ASSERT(mutex_owned(&ips->ips_event_lock));
2113 mutex_enter(&ips->ips_avl_lock);
2114 ifp = avl_find(&ips->ips_avl_by_name, (void *)name, NULL);
2124 ifp = avl_find(&ips->ips_avl_by_shared, (void *)key, NULL);
2129 mutex_exit(&ips->ips_avl_lock);
2130 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);