Lines Matching defs:mgr

215 	dns_dispatchmgr_t      *mgr;		/*%< dispatch manager */
229 /*% Locked by mgr->lock. */
272 (disp)->qid : (disp)->mgr->qid
274 (&(disp)->arc4ctx) : (&(disp)->mgr->arc4ctx)
283 #define PORTBUFLOCK(mgr) if ((mgr)->qid != NULL) LOCK(&((mgr)->qid->lock))
284 #define PORTBUFUNLOCK(mgr) if ((mgr)->qid != NULL) UNLOCK((&(mgr)->qid->lock))
311 static isc_result_t get_udpsocket(dns_dispatchmgr_t *mgr,
316 static isc_result_t dispatch_createudp(dns_dispatchmgr_t *mgr,
323 static isc_boolean_t destroy_mgr_ok(dns_dispatchmgr_t *mgr);
325 static isc_result_t qid_allocate(dns_dispatchmgr_t *mgr, unsigned int buckets,
329 static isc_result_t open_socket(isc_socketmgr_t *mgr, isc_sockaddr_t *local,
331 static isc_boolean_t portavailable(dns_dispatchmgr_t *mgr, isc_socket_t *sock,
337 mgr_log(dns_dispatchmgr_t *mgr, int level, const char *fmt, ...)
341 mgr_log(dns_dispatchmgr_t *mgr, int level, const char *fmt, ...) {
354 level, "dispatchmgr %p: %s", mgr, msgbuf);
358 inc_stats(dns_dispatchmgr_t *mgr, isc_statscounter_t counter) {
359 if (mgr->stats != NULL)
360 isc_stats_increment(mgr->stats, counter);
672 dns_dispatchmgr_t *mgr;
682 mgr = disp->mgr;
684 LOCK(&mgr->lock);
685 ISC_LIST_UNLINK(mgr->list, disp, link);
703 killmgr = destroy_mgr_ok(mgr);
704 UNLOCK(&mgr->lock);
706 destroy_mgr(&mgr);
810 dns_dispatchmgr_t *mgr = disp->mgr;
823 nports = disp->mgr->nv4ports;
824 ports = disp->mgr->v4ports;
826 nports = disp->mgr->nv6ports;
827 ports = disp->mgr->v6ports;
838 dispsock = isc_mempool_get(mgr->spool);
947 isc_mempool_put(disp->mgr->spool, dispsock);
1033 isc_mem_put(disp->mgr->mctx, buf, len);
1036 LOCK(&disp->mgr->buffer_lock);
1037 INSIST(disp->mgr->buffers > 0);
1038 INSIST(len == disp->mgr->buffersize);
1039 disp->mgr->buffers--;
1040 isc_mempool_put(disp->mgr->bpool, buf);
1041 UNLOCK(&disp->mgr->buffer_lock);
1053 LOCK(&disp->mgr->buffer_lock);
1054 temp = isc_mempool_get(disp->mgr->bpool);
1057 disp->mgr->buffers++;
1058 UNLOCK(&disp->mgr->buffer_lock);
1072 isc_mempool_put(disp->mgr->epool, ev);
1079 ev = isc_mempool_get(disp->mgr->epool);
1134 dns_dispatchmgr_t *mgr;
1143 mgr = disp->mgr;
1144 qid = mgr->qid;
1148 disp->requests, disp->mgr->buffers, disp->recv_pending);
1227 if (disp->mgr->blackhole != NULL &&
1228 dns_acl_match(&netaddr, NULL, disp->mgr->blackhole,
1286 inc_stats(mgr, dns_resstatscounter_mismatch);
1294 inc_stats(mgr, dns_resstatscounter_mismatch);
1600 if (disp->mgr->buffers >= disp->mgr->maxbuffers)
1618 region.length = disp->mgr->buffersize;
1669 destroy_mgr_ok(dns_dispatchmgr_t *mgr) {
1670 mgr_log(mgr, LVL(90),
1673 MGR_IS_SHUTTINGDOWN(mgr), !ISC_LIST_EMPTY(mgr->list),
1674 isc_mempool_getallocated(mgr->epool),
1675 isc_mempool_getallocated(mgr->rpool),
1676 isc_mempool_getallocated(mgr->dpool));
1677 if (!MGR_IS_SHUTTINGDOWN(mgr))
1679 if (!ISC_LIST_EMPTY(mgr->list))
1681 if (isc_mempool_getallocated(mgr->epool) != 0)
1683 if (isc_mempool_getallocated(mgr->rpool) != 0)
1685 if (isc_mempool_getallocated(mgr->dpool) != 0)
1697 dns_dispatchmgr_t *mgr;
1699 mgr = *mgrp;
1702 mctx = mgr->mctx;
1704 mgr->magic = 0;
1705 mgr->mctx = NULL;
1706 DESTROYLOCK(&mgr->lock);
1707 mgr->state = 0;
1709 DESTROYLOCK(&mgr->arc4_lock);
1711 isc_mempool_destroy(&mgr->epool);
1712 isc_mempool_destroy(&mgr->rpool);
1713 isc_mempool_destroy(&mgr->dpool);
1714 isc_mempool_destroy(&mgr->bpool);
1715 isc_mempool_destroy(&mgr->spool);
1717 DESTROYLOCK(&mgr->pool_lock);
1719 if (mgr->entropy != NULL)
1720 isc_entropy_detach(&mgr->entropy);
1721 if (mgr->qid != NULL)
1722 qid_destroy(mctx, &mgr->qid);
1724 DESTROYLOCK(&mgr->buffer_lock);
1726 if (mgr->blackhole != NULL)
1727 dns_acl_detach(&mgr->blackhole);
1729 if (mgr->stats != NULL)
1730 isc_stats_detach(&mgr->stats);
1732 if (mgr->v4ports != NULL) {
1733 isc_mem_put(mctx, mgr->v4ports,
1734 mgr->nv4ports * sizeof(in_port_t));
1736 if (mgr->v6ports != NULL) {
1737 isc_mem_put(mctx, mgr->v6ports,
1738 mgr->nv6ports * sizeof(in_port_t));
1740 isc_mem_put(mctx, mgr, sizeof(dns_dispatchmgr_t));
1745 open_socket(isc_socketmgr_t *mgr, isc_sockaddr_t *local,
1753 result = isc_socket_create(mgr, isc_sockaddr_pf(local),
1806 dns_dispatchmgr_t *mgr;
1814 mgr = isc_mem_get(mctx, sizeof(dns_dispatchmgr_t));
1815 if (mgr == NULL)
1818 mgr->mctx = NULL;
1819 isc_mem_attach(mctx, &mgr->mctx);
1821 mgr->blackhole = NULL;
1822 mgr->stats = NULL;
1824 result = isc_mutex_init(&mgr->lock);
1828 result = isc_mutex_init(&mgr->arc4_lock);
1832 result = isc_mutex_init(&mgr->buffer_lock);
1836 result = isc_mutex_init(&mgr->pool_lock);
1840 mgr->epool = NULL;
1841 if (isc_mempool_create(mgr->mctx, sizeof(dns_dispatchevent_t),
1842 &mgr->epool) != ISC_R_SUCCESS) {
1847 mgr->rpool = NULL;
1848 if (isc_mempool_create(mgr->mctx, sizeof(dns_dispentry_t),
1849 &mgr->rpool) != ISC_R_SUCCESS) {
1854 mgr->dpool = NULL;
1855 if (isc_mempool_create(mgr->mctx, sizeof(dns_dispatch_t),
1856 &mgr->dpool) != ISC_R_SUCCESS) {
1861 isc_mempool_setname(mgr->epool, "dispmgr_epool");
1862 isc_mempool_setfreemax(mgr->epool, 1024);
1863 isc_mempool_associatelock(mgr->epool, &mgr->pool_lock);
1865 isc_mempool_setname(mgr->rpool, "dispmgr_rpool");
1866 isc_mempool_setfreemax(mgr->rpool, 1024);
1867 isc_mempool_associatelock(mgr->rpool, &mgr->pool_lock);
1869 isc_mempool_setname(mgr->dpool, "dispmgr_dpool");
1870 isc_mempool_setfreemax(mgr->dpool, 1024);
1871 isc_mempool_associatelock(mgr->dpool, &mgr->pool_lock);
1873 mgr->buffers = 0;
1874 mgr->buffersize = 0;
1875 mgr->maxbuffers = 0;
1876 mgr->bpool = NULL;
1877 mgr->spool = NULL;
1878 mgr->entropy = NULL;
1879 mgr->qid = NULL;
1880 mgr->state = 0;
1881 ISC_LIST_INIT(mgr->list);
1882 mgr->v4ports = NULL;
1883 mgr->v6ports = NULL;
1884 mgr->nv4ports = 0;
1885 mgr->nv6ports = 0;
1886 mgr->magic = DNS_DISPATCHMGR_MAGIC;
1892 result = dns_dispatchmgr_setavailports(mgr,
1905 isc_entropy_attach(entropy, &mgr->entropy);
1907 dispatch_arc4init(&mgr->arc4ctx, mgr->entropy, &mgr->arc4_lock);
1909 *mgrp = mgr;
1913 isc_mempool_destroy(&mgr->dpool);
1915 isc_mempool_destroy(&mgr->rpool);
1917 isc_mempool_destroy(&mgr->epool);
1919 DESTROYLOCK(&mgr->pool_lock);
1921 DESTROYLOCK(&mgr->buffer_lock);
1923 DESTROYLOCK(&mgr->arc4_lock);
1925 DESTROYLOCK(&mgr->lock);
1927 isc_mem_put(mctx, mgr, sizeof(dns_dispatchmgr_t));
1934 dns_dispatchmgr_setblackhole(dns_dispatchmgr_t *mgr, dns_acl_t *blackhole) {
1935 REQUIRE(VALID_DISPATCHMGR(mgr));
1936 if (mgr->blackhole != NULL)
1937 dns_acl_detach(&mgr->blackhole);
1938 dns_acl_attach(blackhole, &mgr->blackhole);
1942 dns_dispatchmgr_getblackhole(dns_dispatchmgr_t *mgr) {
1943 REQUIRE(VALID_DISPATCHMGR(mgr));
1944 return (mgr->blackhole);
1948 dns_dispatchmgr_setblackportlist(dns_dispatchmgr_t *mgr,
1951 REQUIRE(VALID_DISPATCHMGR(mgr));
1959 dns_dispatchmgr_getblackportlist(dns_dispatchmgr_t *mgr) {
1960 REQUIRE(VALID_DISPATCHMGR(mgr));
1965 dns_dispatchmgr_setavailports(dns_dispatchmgr_t *mgr, isc_portset_t *v4portset,
1971 REQUIRE(VALID_DISPATCHMGR(mgr));
1978 v4ports = isc_mem_get(mgr->mctx, sizeof(in_port_t) * nv4ports);
1984 v6ports = isc_mem_get(mgr->mctx, sizeof(in_port_t) * nv6ports);
1987 isc_mem_put(mgr->mctx, v4ports,
2010 PORTBUFLOCK(mgr);
2011 if (mgr->v4ports != NULL) {
2012 isc_mem_put(mgr->mctx, mgr->v4ports,
2013 mgr->nv4ports * sizeof(in_port_t));
2015 mgr->v4ports = v4ports;
2016 mgr->nv4ports = nv4ports;
2018 if (mgr->v6ports != NULL) {
2019 isc_mem_put(mgr->mctx, mgr->v6ports,
2020 mgr->nv6ports * sizeof(in_port_t));
2022 mgr->v6ports = v6ports;
2023 mgr->nv6ports = nv6ports;
2024 PORTBUFUNLOCK(mgr);
2030 dns_dispatchmgr_setudp(dns_dispatchmgr_t *mgr,
2037 REQUIRE(VALID_DISPATCHMGR(mgr));
2059 LOCK(&mgr->buffer_lock);
2062 if (mgr->bpool != NULL) {
2071 if (maxbuffers > mgr->maxbuffers) {
2072 isc_mempool_setmaxalloc(mgr->bpool, maxbuffers);
2073 mgr->maxbuffers = maxbuffers;
2076 result = isc_mempool_create(mgr->mctx, buffersize, &mgr->bpool);
2078 UNLOCK(&mgr->buffer_lock);
2081 isc_mempool_setname(mgr->bpool, "dispmgr_bpool");
2082 isc_mempool_setmaxalloc(mgr->bpool, maxbuffers);
2083 isc_mempool_associatelock(mgr->bpool, &mgr->pool_lock);
2087 if (mgr->spool != NULL) {
2088 isc_mempool_setmaxalloc(mgr->spool, DNS_DISPATCH_POOLSOCKS * 2);
2089 UNLOCK(&mgr->buffer_lock);
2092 result = isc_mempool_create(mgr->mctx, sizeof(dispsocket_t),
2093 &mgr->spool);
2095 UNLOCK(&mgr->buffer_lock);
2098 isc_mempool_setname(mgr->spool, "dispmgr_spool");
2099 isc_mempool_setmaxalloc(mgr->spool, maxrequests);
2100 isc_mempool_associatelock(mgr->spool, &mgr->pool_lock);
2102 result = qid_allocate(mgr, buckets, increment, &mgr->qid, ISC_TRUE);
2106 mgr->buffersize = buffersize;
2107 mgr->maxbuffers = maxbuffers;
2108 UNLOCK(&mgr->buffer_lock);
2112 isc_mempool_destroy(&mgr->bpool);
2113 if (mgr->spool != NULL)
2114 isc_mempool_destroy(&mgr->spool);
2115 UNLOCK(&mgr->buffer_lock);
2121 dns_dispatchmgr_t *mgr;
2127 mgr = *mgrp;
2130 LOCK(&mgr->lock);
2131 mgr->state |= MGR_SHUTTINGDOWN;
2133 killit = destroy_mgr_ok(mgr);
2134 UNLOCK(&mgr->lock);
2136 mgr_log(mgr, LVL(90), "destroy: killit=%d", killit);
2139 destroy_mgr(&mgr);
2143 dns_dispatchmgr_setstats(dns_dispatchmgr_t *mgr, isc_stats_t *stats) {
2144 REQUIRE(VALID_DISPATCHMGR(mgr));
2145 REQUIRE(ISC_LIST_EMPTY(mgr->list));
2146 REQUIRE(mgr->stats == NULL);
2148 isc_stats_attach(stats, &mgr->stats);
2165 portavailable(dns_dispatchmgr_t *mgr, isc_socket_t *sock,
2176 PORTBUFLOCK(mgr);
2185 ports = mgr->v4ports;
2186 nports = mgr->nv4ports;
2188 ports = mgr->v6ports;
2189 nports = mgr->nv6ports;
2199 PORTBUFUNLOCK(mgr);
2221 !portavailable(disp->mgr, disp->socket, NULL)) {
2247 * Requires mgr be locked.
2257 dispatch_find(dns_dispatchmgr_t *mgr, isc_sockaddr_t *local,
2270 disp = ISC_LIST_HEAD(mgr->list);
2294 qid_allocate(dns_dispatchmgr_t *mgr, unsigned int buckets,
2302 REQUIRE(VALID_DISPATCHMGR(mgr));
2307 qid = isc_mem_get(mgr->mctx, sizeof(*qid));
2311 qid->qid_table = isc_mem_get(mgr->mctx,
2314 isc_mem_put(mgr->mctx, qid, sizeof(*qid));
2320 qid->sock_table = isc_mem_get(mgr->mctx, buckets *
2323 isc_mem_put(mgr->mctx, qid->qid_table,
2325 isc_mem_put(mgr->mctx, qid, sizeof(*qid));
2333 isc_mem_put(mgr->mctx, qid->sock_table,
2336 isc_mem_put(mgr->mctx, qid->qid_table,
2338 isc_mem_put(mgr->mctx, qid, sizeof(*qid));
2380 dispatch_allocate(dns_dispatchmgr_t *mgr, unsigned int maxrequests,
2386 REQUIRE(VALID_DISPATCHMGR(mgr));
2394 disp = isc_mempool_get(mgr->dpool);
2399 disp->mgr = mgr;
2418 dispatch_arc4init(&disp->arc4ctx, mgr->entropy, NULL);
2443 isc_mempool_put(mgr->dpool, disp);
2456 dns_dispatchmgr_t *mgr;
2463 mgr = disp->mgr;
2464 REQUIRE(VALID_DISPATCHMGR(mgr));
2477 isc_mempool_put(mgr->epool, disp->failsafe_ev);
2481 qid_destroy(mgr->mctx, &disp->qid);
2486 isc_mem_put(mgr->mctx, disp->port_table,
2494 disp->mgr = NULL;
2497 isc_mempool_put(mgr->dpool, disp);
2501 dns_dispatch_createtcp(dns_dispatchmgr_t *mgr, isc_socket_t *sock,
2513 REQUIRE(VALID_DISPATCHMGR(mgr));
2520 LOCK(&mgr->lock);
2523 * dispatch_allocate() checks mgr for us.
2527 result = dispatch_allocate(mgr, maxrequests, &disp);
2529 UNLOCK(&mgr->lock);
2533 result = qid_allocate(mgr, buckets, increment, &disp->qid, ISC_FALSE);
2547 disp->ctlevent = isc_event_allocate(mgr->mctx, disp,
2558 dns_tcpmsg_init(mgr->mctx, disp->socket, &disp->tcpmsg);
2566 ISC_LIST_APPEND(mgr->list, disp, link);
2567 UNLOCK(&mgr->lock);
2569 mgr_log(mgr, LVL(90), "created TCP dispatcher %p", disp);
2586 UNLOCK(&mgr->lock);
2592 dns_dispatch_getudp(dns_dispatchmgr_t *mgr, isc_socketmgr_t *sockmgr,
2603 REQUIRE(VALID_DISPATCHMGR(mgr));
2614 result = dns_dispatchmgr_setudp(mgr, buffersize, maxbuffers,
2619 LOCK(&mgr->lock);
2629 result = dispatch_find(mgr, localaddr, attributes, mask, &disp);
2646 UNLOCK(&mgr->lock);
2657 result = dispatch_createudp(mgr, sockmgr, taskmgr, localaddr,
2660 UNLOCK(&mgr->lock);
2664 UNLOCK(&mgr->lock);
2670 * mgr should be locked.
2678 get_udpsocket(dns_dispatchmgr_t *mgr, dns_dispatch_t *disp,
2703 nports = disp->mgr->nv4ports;
2704 ports = disp->mgr->v4ports;
2706 nports = disp->mgr->nv6ports;
2707 ports = disp->mgr->v6ports;
2755 else if (portavailable(mgr, sock, NULL))
2765 mgr_log(mgr, ISC_LOG_ERROR,
2784 dispatch_createudp(dns_dispatchmgr_t *mgr, isc_socketmgr_t *sockmgr,
2797 * dispatch_allocate() checks mgr for us.
2800 result = dispatch_allocate(mgr, maxrequests, &disp);
2805 result = get_udpsocket(mgr, disp, sockmgr, localaddr, &sock);
2826 disp->port_table = isc_mem_get(mgr->mctx,
2834 result = isc_mempool_create(mgr->mctx, sizeof(dispportentry_t),
2860 disp->ctlevent = isc_event_allocate(mgr->mctx, disp,
2876 ISC_LIST_APPEND(mgr->list, disp, link);
2878 mgr_log(mgr, LVL(90), "created UDP dispatcher %p", disp);
3018 inc_stats(disp->mgr,
3043 inc_stats(disp->mgr, dns_resstatscounter_dispsockfail);
3072 res = isc_mempool_get(disp->mgr->rpool);
3121 isc_mempool_put(disp->mgr->rpool, res);
3169 dns_dispatchmgr_t *mgr;
3188 mgr = disp->mgr;
3189 REQUIRE(VALID_DISPATCHMGR(mgr));
3270 isc_mempool_put(disp->mgr->rpool, res);
3437 INSIST(sevent->n <= disp->mgr->buffersize);
3439 isc_event_allocate(disp->mgr->mctx, NULL,
3452 newsevent->region.length = disp->mgr->buffersize;
3465 dns_dispatchmgr_dump(dns_dispatchmgr_t *mgr) {
3469 disp = ISC_LIST_HEAD(mgr->list);