Lines Matching refs:mgr
189 dns_dispatchmgr_t *mgr; /*%< dispatch manager */
207 /*% Locked by mgr->lock. */
249 : (disp)->mgr->qid
258 #define PORTBUFLOCK(mgr) \
259 if ((mgr)->qid != NULL) \
260 LOCK(&((mgr)->qid->lock))
261 #define PORTBUFUNLOCK(mgr) \
262 if ((mgr)->qid != NULL) \
263 UNLOCK((&(mgr)->qid->lock))
308 get_udpsocket(dns_dispatchmgr_t *mgr, dns_dispatch_t *disp,
312 dispatch_createudp(dns_dispatchmgr_t *mgr, isc_socketmgr_t *sockmgr,
317 destroy_mgr_ok(dns_dispatchmgr_t *mgr);
321 qid_allocate(dns_dispatchmgr_t *mgr, unsigned int buckets,
326 open_socket(isc_socketmgr_t *mgr, const isc_sockaddr_t *local,
330 portavailable(dns_dispatchmgr_t *mgr, isc_socket_t *sock,
336 mgr_log(dns_dispatchmgr_t *mgr, int level, const char *fmt, ...)
340 mgr_log(dns_dispatchmgr_t *mgr, int level, const char *fmt, ...) {
353 DNS_LOGMODULE_DISPATCH, level, "dispatchmgr %p: %s", mgr,
358 inc_stats(dns_dispatchmgr_t *mgr, isc_statscounter_t counter) {
359 if (mgr->stats != NULL) {
360 isc_stats_increment(mgr->stats, counter);
365 dec_stats(dns_dispatchmgr_t *mgr, isc_statscounter_t counter) {
366 if (mgr->stats != NULL) {
367 isc_stats_decrement(mgr->stats, counter);
524 dns_dispatchmgr_t *mgr;
534 mgr = disp->mgr;
536 LOCK(&mgr->lock);
537 ISC_LIST_UNLINK(mgr->list, disp, link);
561 killmgr = destroy_mgr_ok(mgr);
562 UNLOCK(&mgr->lock);
564 destroy_mgr(&mgr);
597 portentry = isc_mem_get(disp->mgr->mctx, sizeof(*portentry));
626 isc_mem_put(disp->mgr->mctx, portentry, sizeof(*portentry));
666 dns_dispatchmgr_t *mgr = disp->mgr;
680 nports = disp->mgr->nv4ports;
681 ports = disp->mgr->v4ports;
683 nports = disp->mgr->nv6ports;
684 ports = disp->mgr->v6ports;
696 dispsock = isc_mem_get(mgr->mctx, sizeof(*dispsock));
822 isc_mem_put(disp->mgr->mctx, dispsock, sizeof(*dispsock));
909 isc_mem_put(disp->mgr->mctx, buf, len);
912 LOCK(&disp->mgr->buffer_lock);
913 INSIST(disp->mgr->buffers > 0);
914 INSIST(len == disp->mgr->buffersize);
915 disp->mgr->buffers--;
916 buffersize = disp->mgr->buffersize;
917 UNLOCK(&disp->mgr->buffer_lock);
918 isc_mem_put(disp->mgr->mctx, buf, buffersize);
929 LOCK(&disp->mgr->buffer_lock);
930 if (disp->mgr->buffers >= disp->mgr->maxbuffers) {
931 UNLOCK(&disp->mgr->buffer_lock);
934 buffersize = disp->mgr->buffersize;
935 disp->mgr->buffers++;
936 UNLOCK(&disp->mgr->buffer_lock);
938 return (isc_mem_get(disp->mgr->mctx, buffersize));
977 isc_refcount_decrement(&disp->mgr->irefs);
978 isc_mem_put(disp->mgr->mctx, ev, sizeof(*ev));
985 ev = isc_mem_get(disp->mgr->mctx, sizeof(*ev));
986 isc_refcount_increment0(&disp->mgr->irefs);
1039 dns_dispatchmgr_t *mgr;
1048 mgr = disp->mgr;
1049 qid = mgr->qid;
1051 LOCK(&disp->mgr->buffer_lock);
1054 disp->requests, disp->mgr->buffers, disp->recv_pending);
1055 UNLOCK(&disp->mgr->buffer_lock);
1137 if (disp->mgr->blackhole != NULL &&
1138 dns_acl_match(&netaddr, NULL, disp->mgr->blackhole, NULL, &match,
1199 inc_stats(mgr, dns_resstatscounter_mismatch);
1205 inc_stats(mgr, dns_resstatscounter_mismatch);
1537 region.length = disp->mgr->buffersize;
1600 * Mgr must be locked when calling this function.
1603 destroy_mgr_ok(dns_dispatchmgr_t *mgr) {
1604 mgr_log(mgr, LVL(90),
1606 MGR_IS_SHUTTINGDOWN(mgr), !ISC_LIST_EMPTY(mgr->list));
1607 if (!MGR_IS_SHUTTINGDOWN(mgr)) {
1610 if (!ISC_LIST_EMPTY(mgr->list)) {
1613 if (isc_refcount_current(&mgr->irefs) != 0) {
1621 * Mgr must be unlocked when calling this function.
1625 dns_dispatchmgr_t *mgr;
1627 mgr = *mgrp;
1630 mgr->magic = 0;
1631 isc_mutex_destroy(&mgr->lock);
1632 mgr->state = 0;
1634 if (mgr->qid != NULL) {
1635 qid_destroy(mgr->mctx, &mgr->qid);
1638 isc_mutex_destroy(&mgr->buffer_lock);
1640 if (mgr->blackhole != NULL) {
1641 dns_acl_detach(&mgr->blackhole);
1644 if (mgr->stats != NULL) {
1645 isc_stats_detach(&mgr->stats);
1648 if (mgr->v4ports != NULL) {
1649 isc_mem_put(mgr->mctx, mgr->v4ports,
1650 mgr->nv4ports * sizeof(in_port_t));
1652 if (mgr->v6ports != NULL) {
1653 isc_mem_put(mgr->mctx, mgr->v6ports,
1654 mgr->nv6ports * sizeof(in_port_t));
1656 isc_mem_putanddetach(&mgr->mctx, mgr, sizeof(dns_dispatchmgr_t));
1660 open_socket(isc_socketmgr_t *mgr, const isc_sockaddr_t *local,
1684 result = isc_socket_create(mgr, isc_sockaddr_pf(local),
1735 dns_dispatchmgr_t *mgr;
1743 mgr = isc_mem_get(mctx, sizeof(dns_dispatchmgr_t));
1744 *mgr = (dns_dispatchmgr_t){ 0 };
1746 isc_mem_attach(mctx, &mgr->mctx);
1748 isc_mutex_init(&mgr->lock);
1749 isc_mutex_init(&mgr->buffer_lock);
1751 isc_refcount_init(&mgr->irefs, 0);
1753 ISC_LIST_INIT(mgr->list);
1755 mgr->magic = DNS_DISPATCHMGR_MAGIC;
1761 result = dns_dispatchmgr_setavailports(mgr, v4portset,
1775 *mgrp = mgr;
1779 isc_mutex_destroy(&mgr->buffer_lock);
1780 isc_mutex_destroy(&mgr->lock);
1781 isc_mem_putanddetach(&mctx, mgr, sizeof(dns_dispatchmgr_t));
1787 dns_dispatchmgr_setblackhole(dns_dispatchmgr_t *mgr, dns_acl_t *blackhole) {
1788 REQUIRE(VALID_DISPATCHMGR(mgr));
1789 if (mgr->blackhole != NULL) {
1790 dns_acl_detach(&mgr->blackhole);
1792 dns_acl_attach(blackhole, &mgr->blackhole);
1796 dns_dispatchmgr_getblackhole(dns_dispatchmgr_t *mgr) {
1797 REQUIRE(VALID_DISPATCHMGR(mgr));
1798 return (mgr->blackhole);
1802 dns_dispatchmgr_setblackportlist(dns_dispatchmgr_t *mgr,
1804 REQUIRE(VALID_DISPATCHMGR(mgr));
1812 dns_dispatchmgr_getblackportlist(dns_dispatchmgr_t *mgr) {
1813 REQUIRE(VALID_DISPATCHMGR(mgr));
1818 dns_dispatchmgr_setavailports(dns_dispatchmgr_t *mgr, isc_portset_t *v4portset,
1823 REQUIRE(VALID_DISPATCHMGR(mgr));
1830 v4ports = isc_mem_get(mgr->mctx, sizeof(in_port_t) * nv4ports);
1834 v6ports = isc_mem_get(mgr->mctx, sizeof(in_port_t) * nv6ports);
1852 PORTBUFLOCK(mgr);
1853 if (mgr->v4ports != NULL) {
1854 isc_mem_put(mgr->mctx, mgr->v4ports,
1855 mgr->nv4ports * sizeof(in_port_t));
1857 mgr->v4ports = v4ports;
1858 mgr->nv4ports = nv4ports;
1860 if (mgr->v6ports != NULL) {
1861 isc_mem_put(mgr->mctx, mgr->v6ports,
1862 mgr->nv6ports * sizeof(in_port_t));
1864 mgr->v6ports = v6ports;
1865 mgr->nv6ports = nv6ports;
1866 PORTBUFUNLOCK(mgr);
1872 dns_dispatchmgr_setudp(dns_dispatchmgr_t *mgr, unsigned int buffersize,
1877 REQUIRE(VALID_DISPATCHMGR(mgr));
1901 LOCK(&mgr->buffer_lock);
1903 if (maxbuffers > mgr->maxbuffers) {
1904 mgr->maxbuffers = maxbuffers;
1908 if (mgr->qid != NULL) {
1909 UNLOCK(&mgr->buffer_lock);
1913 result = qid_allocate(mgr, buckets, increment, &mgr->qid, true);
1918 mgr->buffersize = buffersize;
1919 mgr->maxbuffers = maxbuffers;
1920 UNLOCK(&mgr->buffer_lock);
1924 UNLOCK(&mgr->buffer_lock);
1930 dns_dispatchmgr_t *mgr;
1936 mgr = *mgrp;
1939 LOCK(&mgr->lock);
1940 mgr->state |= MGR_SHUTTINGDOWN;
1941 killit = destroy_mgr_ok(mgr);
1942 UNLOCK(&mgr->lock);
1944 mgr_log(mgr, LVL(90), "destroy: killit=%d", killit);
1947 destroy_mgr(&mgr);
1952 dns_dispatchmgr_setstats(dns_dispatchmgr_t *mgr, isc_stats_t *stats) {
1953 REQUIRE(VALID_DISPATCHMGR(mgr));
1954 REQUIRE(ISC_LIST_EMPTY(mgr->list));
1955 REQUIRE(mgr->stats == NULL);
1957 isc_stats_attach(stats, &mgr->stats);
1975 portavailable(dns_dispatchmgr_t *mgr, isc_socket_t *sock,
1985 PORTBUFLOCK(mgr);
1995 ports = mgr->v4ports;
1996 nports = mgr->nv4ports;
1998 ports = mgr->v6ports;
1999 nports = mgr->nv6ports;
2012 PORTBUFUNLOCK(mgr);
2035 !portavailable(disp->mgr, disp->socket, NULL))
2066 * Requires mgr be locked.
2076 dispatch_find(dns_dispatchmgr_t *mgr, const isc_sockaddr_t *local,
2088 disp = ISC_LIST_HEAD(mgr->list);
2114 qid_allocate(dns_dispatchmgr_t *mgr, unsigned int buckets,
2119 REQUIRE(VALID_DISPATCHMGR(mgr));
2124 qid = isc_mem_get(mgr->mctx, sizeof(*qid));
2126 qid->qid_table = isc_mem_get(mgr->mctx,
2132 mgr->mctx, buckets * sizeof(dispsocketlist_t));
2176 dispatch_allocate(dns_dispatchmgr_t *mgr, unsigned int maxrequests,
2181 REQUIRE(VALID_DISPATCHMGR(mgr));
2189 disp = isc_mem_get(mgr->mctx, sizeof(*disp));
2190 isc_refcount_increment0(&mgr->irefs);
2193 disp->mgr = mgr;
2234 isc_refcount_decrement(&mgr->irefs);
2235 isc_mem_put(mgr->mctx, disp, sizeof(*disp));
2246 dns_dispatchmgr_t *mgr;
2252 mgr = disp->mgr;
2253 REQUIRE(VALID_DISPATCHMGR(mgr));
2266 isc_refcount_decrement(&mgr->irefs);
2267 isc_mem_put(mgr->mctx, disp->failsafe_ev, sizeof(*disp->failsafe_ev));
2271 qid_destroy(mgr->mctx, &disp->qid);
2278 isc_mem_put(mgr->mctx, disp->port_table,
2283 disp->mgr = NULL;
2286 isc_refcount_decrement(&mgr->irefs);
2287 isc_mem_put(mgr->mctx, disp, sizeof(*disp));
2291 dns_dispatch_createtcp(dns_dispatchmgr_t *mgr, isc_socket_t *sock,
2303 REQUIRE(VALID_DISPATCHMGR(mgr));
2312 LOCK(&mgr->lock);
2315 * dispatch_allocate() checks mgr for us.
2319 result = dispatch_allocate(mgr, maxrequests, &disp);
2321 UNLOCK(&mgr->lock);
2325 result = qid_allocate(mgr, buckets, increment, &disp->qid, false);
2344 isc_event_allocate(mgr->mctx, disp, DNS_EVENT_DISPATCHCONTROL,
2349 dns_tcpmsg_init(mgr->mctx, disp->socket, &disp->tcpmsg);
2376 ISC_LIST_APPEND(mgr->list, disp, link);
2377 UNLOCK(&mgr->lock);
2379 mgr_log(mgr, LVL(90), "created TCP dispatcher %p", disp);
2390 UNLOCK(&mgr->lock);
2396 dns_dispatch_gettcp(dns_dispatchmgr_t *mgr, const isc_sockaddr_t *destaddr,
2406 REQUIRE(VALID_DISPATCHMGR(mgr));
2415 LOCK(&mgr->lock);
2416 disp = ISC_LIST_HEAD(mgr->list);
2448 UNLOCK(&mgr->lock);
2455 disp = ISC_LIST_HEAD(mgr->list);
2472 UNLOCK(&mgr->lock);
2477 dns_dispatch_getudp_dup(dns_dispatchmgr_t *mgr, isc_socketmgr_t *sockmgr,
2487 REQUIRE(VALID_DISPATCHMGR(mgr));
2498 result = dns_dispatchmgr_setudp(mgr, buffersize, maxbuffers,
2504 LOCK(&mgr->lock);
2515 result = dispatch_find(mgr, localaddr, attributes, mask, &disp);
2536 UNLOCK(&mgr->lock);
2549 mgr, sockmgr, taskmgr, localaddr, maxrequests, attributes,
2553 UNLOCK(&mgr->lock);
2557 UNLOCK(&mgr->lock);
2564 dns_dispatch_getudp(dns_dispatchmgr_t *mgr, isc_socketmgr_t *sockmgr,
2570 return (dns_dispatch_getudp_dup(mgr, sockmgr, taskmgr, localaddr,
2577 * mgr should be locked.
2585 get_udpsocket(dns_dispatchmgr_t *mgr, dns_dispatch_t *disp,
2609 nports = disp->mgr->nv4ports;
2610 ports = disp->mgr->v4ports;
2612 nports = disp->mgr->nv6ports;
2613 ports = disp->mgr->v6ports;
2663 } else if (portavailable(mgr, sock, NULL)) {
2676 mgr_log(mgr, ISC_LOG_ERROR,
2696 dispatch_createudp(dns_dispatchmgr_t *mgr, isc_socketmgr_t *sockmgr,
2709 * dispatch_allocate() checks mgr for us.
2712 result = dispatch_allocate(mgr, maxrequests, &disp);
2720 result = get_udpsocket(mgr, disp, sockmgr, localaddr, &sock,
2731 mgr_log(mgr, LVL(90),
2758 mgr->mctx, sizeof(disp->port_table[0]) *
2786 isc_event_allocate(mgr->mctx, disp, DNS_EVENT_DISPATCHCONTROL,
2800 ISC_LIST_APPEND(mgr->list, disp, link);
2802 mgr_log(mgr, LVL(90), "created UDP dispatcher %p", disp);
2946 inc_stats(disp->mgr,
2969 inc_stats(disp->mgr, dns_resstatscounter_dispsockfail);
3007 res = isc_mem_get(disp->mgr->mctx, sizeof(*res));
3008 isc_refcount_increment0(&disp->mgr->irefs);
3034 inc_stats(disp->mgr, (qid == disp->mgr->qid)
3056 dec_stats(disp->mgr,
3057 (qid == disp->mgr->qid)
3063 isc_refcount_decrement(&disp->mgr->irefs);
3064 isc_mem_put(disp->mgr->mctx, res, sizeof(*res));
3145 dns_dispatchmgr_t *mgr;
3164 mgr = disp->mgr;
3165 REQUIRE(VALID_DISPATCHMGR(mgr));
3181 dec_stats(disp->mgr, (qid == disp->mgr->qid)
3252 isc_refcount_decrement(&disp->mgr->irefs);
3253 isc_mem_put(disp->mgr->mctx, res, sizeof(*res));
3431 INSIST(sevent->n <= disp->mgr->buffersize);
3434 disp->mgr->mctx, NULL, DNS_EVENT_IMPORTRECVDONE, udp_shrecv,
3444 newsevent->region.length = disp->mgr->buffersize;
3481 dns_dispatchmgr_t *mgr;
3488 mgr = source->mgr;
3504 LOCK(&mgr->lock);
3508 mgr, sockmgr, taskmgr, &source->local,
3516 UNLOCK(&mgr->lock);
3522 UNLOCK(&mgr->lock);
3582 dns_dispatchmgr_dump(dns_dispatchmgr_t *mgr) {
3586 disp = ISC_LIST_HEAD(mgr->list);