Lines Matching defs:resolver

58 #include <dns/resolver.h>
465 * Increment resolver-related statistics counters.
563 * the delegation-only assumption. Once the resolver learns the
882 * them and let the event handlers finish the cleanup. The resolver
1359 * a dispatch for it here. Otherwise we use the resolver's
2625 * resolver's forwarders (if any).
3558 * resolver to ensure that this task doesn't go away while we are
3934 * true if the resolver is exiting and this is the last fctx in the bucket.
7226 * Caller must be holding the resolver lock.
7306 * Create a resolver.
7562 * no resolver locks. No one else will try to start it
7601 * Freeze resolver.
8064 dns_resolver_dispatchmgr(dns_resolver_t *resolver) {
8065 REQUIRE(VALID_RESOLVER(resolver));
8066 return (resolver->dispatchmgr);
8070 dns_resolver_dispatchv4(dns_resolver_t *resolver) {
8071 REQUIRE(VALID_RESOLVER(resolver));
8072 return (resolver->dispatchv4);
8076 dns_resolver_dispatchv6(dns_resolver_t *resolver) {
8077 REQUIRE(VALID_RESOLVER(resolver));
8078 return (resolver->dispatchv6);
8082 dns_resolver_socketmgr(dns_resolver_t *resolver) {
8083 REQUIRE(VALID_RESOLVER(resolver));
8084 return (resolver->socketmgr);
8088 dns_resolver_taskmgr(dns_resolver_t *resolver) {
8089 REQUIRE(VALID_RESOLVER(resolver));
8090 return (resolver->taskmgr);
8094 dns_resolver_getlamettl(dns_resolver_t *resolver) {
8095 REQUIRE(VALID_RESOLVER(resolver));
8096 return (resolver->lame_ttl);
8100 dns_resolver_setlamettl(dns_resolver_t *resolver, isc_uint32_t lame_ttl) {
8101 REQUIRE(VALID_RESOLVER(resolver));
8102 resolver->lame_ttl = lame_ttl;
8106 dns_resolver_nrunning(dns_resolver_t *resolver) {
8108 LOCK(&resolver->nlock);
8109 n = resolver->nfctx;
8110 UNLOCK(&resolver->nlock);
8115 dns_resolver_addalternate(dns_resolver_t *resolver, isc_sockaddr_t *alt,
8120 REQUIRE(VALID_RESOLVER(resolver));
8121 REQUIRE(!resolver->frozen);
8124 a = isc_mem_get(resolver->mctx, sizeof(*a));
8134 result = dns_name_dup(name, resolver->mctx, &a->_u._n.name);
8136 isc_mem_put(resolver->mctx, a, sizeof(*a));
8141 ISC_LIST_APPEND(resolver->alternates, a, link);
8147 dns_resolver_setudpsize(dns_resolver_t *resolver, isc_uint16_t udpsize) {
8148 REQUIRE(VALID_RESOLVER(resolver));
8149 resolver->udpsize = udpsize;
8153 dns_resolver_getudpsize(dns_resolver_t *resolver) {
8154 REQUIRE(VALID_RESOLVER(resolver));
8155 return (resolver->udpsize);
8159 dns_resolver_flushbadcache(dns_resolver_t *resolver, dns_name_t *name) {
8163 REQUIRE(VALID_RESOLVER(resolver));
8165 LOCK(&resolver->lock);
8166 if (resolver->badcache == NULL)
8175 i = dns_name_hash(name, ISC_FALSE) % resolver->badhash;
8177 for (bad = resolver->badcache[i]; bad != NULL; bad = next) {
8183 resolver->badcache[i] = bad->next;
8186 isc_mem_put(resolver->mctx, bad, sizeof(*bad) +
8188 resolver->badcount--;
8193 destroy_badcache(resolver);
8196 UNLOCK(&resolver->lock);
8201 resizehash(dns_resolver_t *resolver, isc_time_t *now, isc_boolean_t grow) {
8207 newsize = resolver->badhash * 2 + 1;
8209 newsize = (resolver->badhash - 1) / 2;
8211 new = isc_mem_get(resolver->mctx,
8212 sizeof(*resolver->badcache) * newsize);
8215 memset(new, 0, sizeof(*resolver->badcache) * newsize);
8216 for (i = 0; i < resolver->badhash; i++) {
8217 for (bad = resolver->badcache[i]; bad != NULL; bad = next) {
8220 isc_mem_put(resolver->mctx, bad, sizeof(*bad) +
8222 resolver->badcount--;
8229 isc_mem_put(resolver->mctx, resolver->badcache,
8230 sizeof(*resolver->badcache) * resolver->badhash);
8231 resolver->badhash = newsize;
8232 resolver->badcache = new;
8236 dns_resolver_addbadcache(dns_resolver_t *resolver, dns_name_t *name,
8244 REQUIRE(VALID_RESOLVER(resolver));
8246 LOCK(&resolver->lock);
8247 if (resolver->badcache == NULL) {
8248 resolver->badcache = isc_mem_get(resolver->mctx,
8249 sizeof(*resolver->badcache) *
8251 if (resolver->badcache == NULL)
8253 resolver->badhash = DNS_BADCACHE_SIZE;
8254 memset(resolver->badcache, 0, sizeof(*resolver->badcache) *
8255 resolver->badhash);
8262 i = hashval % resolver->badhash;
8264 for (bad = resolver->badcache[i]; bad != NULL; bad = next) {
8270 resolver->badcache[i] = bad->next;
8273 isc_mem_put(resolver->mctx, bad, sizeof(*bad) +
8275 resolver->badcount--;
8281 bad = isc_mem_get(resolver->mctx, sizeof(*bad) + name->length);
8290 bad->next = resolver->badcache[i];
8291 resolver->badcache[i] = bad;
8292 resolver->badcount++;
8293 if (resolver->badcount > resolver->badhash * 8)
8294 resizehash(resolver, &now, ISC_TRUE);
8295 if (resolver->badcount < resolver->badhash * 2 &&
8296 resolver->badhash > DNS_BADCACHE_SIZE)
8297 resizehash(resolver, &now, ISC_FALSE);
8301 UNLOCK(&resolver->lock);
8305 dns_resolver_getbadcache(dns_resolver_t *resolver, dns_name_t *name,
8312 REQUIRE(VALID_RESOLVER(resolver));
8314 LOCK(&resolver->lock);
8315 if (resolver->badcache == NULL)
8318 i = dns_name_hash(name, ISC_FALSE) % resolver->badhash;
8320 for (bad = resolver->badcache[i]; bad != NULL; bad = next) {
8329 resolver->badcache[i] = bad->next;
8330 isc_mem_put(resolver->mctx, bad, sizeof(*bad) +
8332 resolver->badcount--;
8345 i = resolver->badsweep++ % resolver->badhash;
8346 bad = resolver->badcache[i];
8348 resolver->badcache[i] = bad->next;
8349 isc_mem_put(resolver->mctx, bad, sizeof(*bad) +
8351 resolver->badcount--;
8355 UNLOCK(&resolver->lock);
8360 dns_resolver_printbadcache(dns_resolver_t *resolver, FILE *fp) {
8368 LOCK(&resolver->lock);
8371 if (resolver->badcache == NULL)
8375 for (i = 0; i < resolver->badhash; i++) {
8377 for (bad = resolver->badcache[i]; bad != NULL; bad = next) {
8383 resolver->badcache[i] = bad->next;
8384 isc_mem_put(resolver->mctx, bad, sizeof(*bad) +
8386 resolver->badcount--;
8402 UNLOCK(&resolver->lock);
8414 dns_resolver_reset_algorithms(dns_resolver_t *resolver) {
8416 REQUIRE(VALID_RESOLVER(resolver));
8419 RWLOCK(&resolver->alglock, isc_rwlocktype_write);
8421 if (resolver->algorithms != NULL)
8422 dns_rbt_destroy(&resolver->algorithms);
8424 RWUNLOCK(&resolver->alglock, isc_rwlocktype_write);
8429 dns_resolver_disable_algorithm(dns_resolver_t *resolver, dns_name_t *name,
8438 REQUIRE(VALID_RESOLVER(resolver));
8443 RWLOCK(&resolver->alglock, isc_rwlocktype_write);
8445 if (resolver->algorithms == NULL) {
8446 result = dns_rbt_create(resolver->mctx, free_algorithm,
8447 resolver->mctx, &resolver->algorithms);
8455 result = dns_rbt_addnode(resolver->algorithms, name, &node);
8460 new = isc_mem_get(resolver->mctx, len);
8472 isc_mem_put(resolver->mctx, algorithms,
8480 RWUNLOCK(&resolver->alglock, isc_rwlocktype_write);
8486 dns_resolver_algorithm_supported(dns_resolver_t *resolver, dns_name_t *name,
8495 REQUIRE(VALID_RESOLVER(resolver));
8498 RWLOCK(&resolver->alglock, isc_rwlocktype_read);
8500 if (resolver->algorithms == NULL)
8502 result = dns_rbt_findname(resolver->algorithms, name, 0, NULL, &data);
8512 RWUNLOCK(&resolver->alglock, isc_rwlocktype_read);
8520 dns_resolver_digest_supported(dns_resolver_t *resolver, unsigned int digest) {
8522 UNUSED(resolver);
8527 dns_resolver_resetmustbesecure(dns_resolver_t *resolver) {
8529 REQUIRE(VALID_RESOLVER(resolver));
8532 RWLOCK(&resolver->mbslock, isc_rwlocktype_write);
8534 if (resolver->mustbesecure != NULL)
8535 dns_rbt_destroy(&resolver->mustbesecure);
8537 RWUNLOCK(&resolver->mbslock, isc_rwlocktype_write);
8544 dns_resolver_setmustbesecure(dns_resolver_t *resolver, dns_name_t *name,
8549 REQUIRE(VALID_RESOLVER(resolver));
8552 RWLOCK(&resolver->mbslock, isc_rwlocktype_write);
8554 if (resolver->mustbesecure == NULL) {
8555 result = dns_rbt_create(resolver->mctx, NULL, NULL,
8556 &resolver->mustbesecure);
8560 result = dns_rbt_addname(resolver->mustbesecure, name,
8564 RWUNLOCK(&resolver->mbslock, isc_rwlocktype_write);
8570 dns_resolver_getmustbesecure(dns_resolver_t *resolver, dns_name_t *name) {
8575 REQUIRE(VALID_RESOLVER(resolver));
8578 RWLOCK(&resolver->mbslock, isc_rwlocktype_read);
8580 if (resolver->mustbesecure == NULL)
8582 result = dns_rbt_findname(resolver->mustbesecure, name, 0, NULL, &data);
8587 RWUNLOCK(&resolver->mbslock, isc_rwlocktype_read);
8593 dns_resolver_getclientsperquery(dns_resolver_t *resolver, isc_uint32_t *cur,
8596 REQUIRE(VALID_RESOLVER(resolver));
8598 LOCK(&resolver->lock);
8600 *cur = resolver->spillat;
8602 *min = resolver->spillatmin;
8604 *max = resolver->spillatmax;
8605 UNLOCK(&resolver->lock);
8609 dns_resolver_setclientsperquery(dns_resolver_t *resolver, isc_uint32_t min,
8612 REQUIRE(VALID_RESOLVER(resolver));
8614 LOCK(&resolver->lock);
8615 resolver->spillatmin = resolver->spillat = min;
8616 resolver->spillatmax = max;
8617 UNLOCK(&resolver->lock);
8621 dns_resolver_getzeronosoattl(dns_resolver_t *resolver) {
8622 REQUIRE(VALID_RESOLVER(resolver));
8624 return (resolver->zero_no_soa_ttl);
8628 dns_resolver_setzeronosoattl(dns_resolver_t *resolver, isc_boolean_t state) {
8629 REQUIRE(VALID_RESOLVER(resolver));
8631 resolver->zero_no_soa_ttl = state;
8635 dns_resolver_getoptions(dns_resolver_t *resolver) {
8636 REQUIRE(VALID_RESOLVER(resolver));
8638 return (resolver->options);