Home | History | Annotate | Download | only in dns

Lines Matching refs:nta

1 /*	$NetBSD: nta.c,v 1.15 2026/05/20 16:53:45 christos Exp $	*/
37 #include <dns/nta.h>
74 dns__nta_shutdown(dns__nta_t *nta);
93 dns__nta_destroy(dns__nta_t *nta) {
94 REQUIRE(nta->timer == NULL);
96 nta->magic = 0;
97 if (dns_rdataset_isassociated(&nta->rdataset)) {
98 dns_rdataset_disassociate(&nta->rdataset);
100 if (dns_rdataset_isassociated(&nta->sigrdataset)) {
101 dns_rdataset_disassociate(&nta->sigrdataset);
103 if (nta->fetch != NULL) {
104 dns_resolver_cancelfetch(nta->fetch);
105 dns_resolver_destroyfetch(&nta->fetch);
107 isc_loop_detach(&nta->loop);
108 dns_name_free(&nta->name, nta->mctx);
109 isc_mem_putanddetach(&nta->mctx, nta, sizeof(*nta));
158 dns__nta_update_expiry(dns__nta_t *nta, isc_result_t eresult) {
159 dns_ntatable_t *ntatable = nta->ntatable;
170 if (nta->expiry > now) {
171 nta->expiry = now;
184 if (nta->timer != NULL && nta->expiry - now < view->nta_recheck) {
185 isc_timer_stop(nta->timer);
193 dns__nta_t *nta = resp->arg;
196 if (dns_rdataset_isassociated(&nta->rdataset)) {
197 dns_rdataset_disassociate(&nta->rdataset);
199 if (dns_rdataset_isassociated(&nta->sigrdataset)) {
200 dns_rdataset_disassociate(&nta->sigrdataset);
202 if (nta->fetch == resp->fetch) {
203 nta->fetch = NULL;
216 if (!nta->shuttingdown) {
217 dns__nta_update_expiry(nta, eresult);
220 dns__nta_detach(&nta); /* for dns_resolver_createfetch() */
225 dns__nta_t *nta = arg;
226 dns_ntatable_t *ntatable = nta->ntatable;
230 if (nta->fetch != NULL) {
231 dns_resolver_cancelfetch(nta->fetch);
232 nta->fetch = NULL;
234 if (dns_rdataset_isassociated(&nta->rdataset)) {
235 dns_rdataset_disassociate(&nta->rdataset);
237 if (dns_rdataset_isassociated(&nta->sigrdataset)) {
238 dns_rdataset_disassociate(&nta->sigrdataset);
241 if (nta->shuttingdown || atomic_load_acquire(&ntatable->shuttingdown)) {
242 isc_timer_stop(nta->timer);
251 dns__nta_ref(nta); /* for dns_resolver_createfetch */
253 resolver, &nta->name, dns_rdatatype_nsec, NULL, NULL, NULL,
254 NULL, 0, DNS_FETCHOPT_NONTA, 0, NULL, NULL, NULL, nta->loop,
255 fetch_done, nta, NULL, &nta->rdataset, &nta->sigrdataset,
256 &nta->fetch);
258 dns__nta_detach(&nta); /* for dns_resolver_createfetch() */
264 settimer(dns_ntatable_t *ntatable, dns__nta_t *nta, uint32_t lifetime) {
269 REQUIRE(VALID_NTA(nta));
276 isc_timer_create(nta->loop, checkbogus, nta, &nta->timer);
278 isc_timer_start(nta->timer, isc_timertype_ticker, &interval);
284 dns__nta_t *nta = NULL;
289 nta = isc_mem_get(ntatable->mctx, sizeof(dns__nta_t));
290 *nta = (dns__nta_t){
295 isc_mem_attach(ntatable->mctx, &nta->mctx);
296 isc_loop_attach(isc_loop(), &nta->loop);
298 dns_rdataset_init(&nta->rdataset);
299 dns_rdataset_init(&nta->sigrdataset);
301 isc_refcount_init(&nta->references, 1);
303 dns_name_dupwithoffsets(name, nta->mctx, &nta->name);
305 *target = nta;
312 dns__nta_t *nta = NULL;
324 nta_create(ntatable, name, &nta);
325 nta->forced = force;
327 result = dns_qp_insert(qp, nta, 0);
336 result = dns_qp_insert(qp, nta, 0);
341 nta->expiry = now + lifetime;
343 settimer(ntatable, nta, lifetime);
380 dns__nta_t *nta;
387 dns__nta_t *nta = data->nta;
393 isc_mem_put(nta->mctx, data, sizeof(*data));
395 REQUIRE(VALID_NTA(nta));
400 result = dns_qp_getname(qp, &nta->name, &pval, NULL);
401 if (result == ISC_R_SUCCESS && pval == nta && !nta->shuttingdown) {
403 dns_name_format(&nta->name, nb, sizeof(nb));
406 "deleting expired NTA at %s", nb);
408 dns_qp_deletename(qp, &nta->name, NULL, NULL);
409 dns__nta_shutdown(nta);
410 dns__nta_unref(nta);
415 dns__nta_detach(&nta);
423 dns__nta_t *nta = NULL;
434 nta = pval;
442 * Found a NTA that's an ancestor of 'name'; we
445 if (!dns_name_issubdomain(&nta->name, anchor)) {
455 if (nta->expiry <= now) {
456 /* NTA is expired */
457 dns__nta_async_data_t *data = isc_mem_get(nta->mctx,
460 .nta = dns__nta_ref(nta),
461 .ntatable = dns_ntatable_ref(nta->ntatable),
514 /* Normal NTA entries */
604 dns__nta_t *nta = arg;
606 REQUIRE(VALID_NTA(nta));
610 dns_name_format(&nta->name, nb, sizeof(nb));
613 "shutting down NTA %p at %s", nta, nb);
615 if (nta->timer) {
616 isc_timer_stop(nta->timer);
617 isc_timer_destroy(&nta->timer);
620 dns_ntatable_detach(&nta->ntatable);
621 dns__nta_detach(&nta);
625 dns__nta_shutdown(dns__nta_t *nta) {
626 REQUIRE(VALID_NTA(nta));
628 dns__nta_ref(nta);
629 isc_async_run(nta->loop, dns__nta_shutdown_cb, nta);
630 nta->shuttingdown = true;
660 dns__nta_t *nta = pval;
661 dns__nta_ref(nta);
667 dns__nta_t *nta = pval;
668 dns__nta_detach(&nta);
674 dns__nta_t *nta = pval;
675 return dns_qpkey_fromname(key, &nta->name);