Lines Matching refs:view

66 	dns_view_t *view;
70 * Create a view.
76 view = isc_mem_get(mctx, sizeof(*view));
77 if (view == NULL)
80 view->mctx = NULL;
81 isc_mem_attach(mctx, &view->mctx);
82 view->name = isc_mem_strdup(mctx, name);
83 if (view->name == NULL) {
87 result = isc_mutex_init(&view->lock);
91 view->zonetable = NULL;
92 result = dns_zt_create(mctx, rdclass, &view->zonetable);
100 view->secroots = NULL;
101 result = dns_keytable_create(mctx, &view->secroots);
109 view->trustedkeys = NULL;
110 result = dns_keytable_create(mctx, &view->trustedkeys);
118 view->fwdtable = NULL;
119 result = dns_fwdtable_create(mctx, &view->fwdtable);
128 view->acache = NULL;
129 view->cache = NULL;
130 view->cachedb = NULL;
131 view->dlzdatabase = NULL;
132 view->hints = NULL;
133 view->resolver = NULL;
134 view->adb = NULL;
135 view->requestmgr = NULL;
136 view->rdclass = rdclass;
137 view->frozen = ISC_FALSE;
138 view->task = NULL;
139 result = isc_refcount_init(&view->references, 1);
142 view->weakrefs = 0;
143 view->attributes = (DNS_VIEWATTR_RESSHUTDOWN|DNS_VIEWATTR_ADBSHUTDOWN|
145 view->statickeys = NULL;
146 view->dynamickeys = NULL;
147 view->matchclients = NULL;
148 view->matchdestinations = NULL;
149 view->matchrecursiveonly = ISC_FALSE;
150 result = dns_tsigkeyring_create(view->mctx, &view->dynamickeys);
153 view->peers = NULL;
154 view->order = NULL;
155 view->delonly = NULL;
156 view->rootdelonly = ISC_FALSE;
157 view->rootexclude = NULL;
158 view->resstats = NULL;
159 view->resquerystats = NULL;
164 view->recursion = ISC_TRUE;
165 view->auth_nxdomain = ISC_FALSE; /* Was true in BIND 8 */
166 view->additionalfromcache = ISC_TRUE;
167 view->additionalfromauth = ISC_TRUE;
168 view->enablednssec = ISC_TRUE;
169 view->enablevalidation = ISC_TRUE;
170 view->acceptexpired = ISC_FALSE;
171 view->minimalresponses = ISC_FALSE;
172 view->transfer_format = dns_one_answer;
173 view->cacheacl = NULL;
174 view->cacheonacl = NULL;
175 view->queryacl = NULL;
176 view->queryonacl = NULL;
177 view->recursionacl = NULL;
178 view->recursiononacl = NULL;
179 view->sortlist = NULL;
180 view->transferacl = NULL;
181 view->notifyacl = NULL;
182 view->updateacl = NULL;
183 view->upfwdacl = NULL;
184 view->requestixfr = ISC_TRUE;
185 view->provideixfr = ISC_TRUE;
186 view->maxcachettl = 7 * 24 * 3600;
187 view->maxncachettl = 3 * 3600;
188 view->dstport = 53;
189 view->preferred_glue = 0;
190 view->flush = ISC_FALSE;
191 view->dlv = NULL;
192 view->maxudp = 0;
193 dns_fixedname_init(&view->dlv_fixed);
195 result = dns_order_create(view->mctx, &view->order);
199 result = dns_peerlist_new(view->mctx, &view->peers);
203 result = dns_aclenv_init(view->mctx, &view->aclenv);
207 ISC_LINK_INIT(view, link);
208 ISC_EVENT_INIT(&view->resevent, sizeof(view->resevent), 0, NULL,
210 view, NULL, NULL, NULL);
211 ISC_EVENT_INIT(&view->adbevent, sizeof(view->adbevent), 0, NULL,
213 view, NULL, NULL, NULL);
214 ISC_EVENT_INIT(&view->reqevent, sizeof(view->reqevent), 0, NULL,
216 view, NULL, NULL, NULL);
217 view->magic = DNS_VIEW_MAGIC;
219 *viewp = view;
224 dns_peerlist_detach(&view->peers);
227 dns_order_detach(&view->order);
230 dns_tsigkeyring_destroy(&view->dynamickeys);
233 isc_refcount_destroy(&view->references);
236 dns_fwdtable_destroy(&view->fwdtable);
239 dns_keytable_detach(&view->trustedkeys);
242 dns_keytable_detach(&view->secroots);
245 dns_zt_detach(&view->zonetable);
248 DESTROYLOCK(&view->lock);
251 isc_mem_free(mctx, view->name);
254 isc_mem_putanddetach(&view->mctx, view, sizeof(*view));
260 destroy(dns_view_t *view) {
261 REQUIRE(!ISC_LINK_LINKED(view, link));
262 REQUIRE(isc_refcount_current(&view->references) == 0);
263 REQUIRE(view->weakrefs == 0);
264 REQUIRE(RESSHUTDOWN(view));
265 REQUIRE(ADBSHUTDOWN(view));
266 REQUIRE(REQSHUTDOWN(view));
268 if (view->order != NULL)
269 dns_order_detach(&view->order);
270 if (view->peers != NULL)
271 dns_peerlist_detach(&view->peers);
272 if (view->dynamickeys != NULL)
273 dns_tsigkeyring_destroy(&view->dynamickeys);
274 if (view->statickeys != NULL)
275 dns_tsigkeyring_destroy(&view->statickeys);
276 if (view->adb != NULL)
277 dns_adb_detach(&view->adb);
278 if (view->resolver != NULL)
279 dns_resolver_detach(&view->resolver);
280 if (view->acache != NULL) {
281 if (view->cachedb != NULL)
282 dns_acache_putdb(view->acache, view->cachedb);
283 dns_acache_detach(&view->acache);
285 if (view->requestmgr != NULL)
286 dns_requestmgr_detach(&view->requestmgr);
287 if (view->task != NULL)
288 isc_task_detach(&view->task);
289 if (view->hints != NULL)
290 dns_db_detach(&view->hints);
291 if (view->dlzdatabase != NULL)
292 dns_dlzdestroy(&view->dlzdatabase);
293 if (view->cachedb != NULL)
294 dns_db_detach(&view->cachedb);
295 if (view->cache != NULL)
296 dns_cache_detach(&view->cache);
297 if (view->matchclients != NULL)
298 dns_acl_detach(&view->matchclients);
299 if (view->matchdestinations != NULL)
300 dns_acl_detach(&view->matchdestinations);
301 if (view->cacheacl != NULL)
302 dns_acl_detach(&view->cacheacl);
303 if (view->cacheonacl != NULL)
304 dns_acl_detach(&view->cacheonacl);
305 if (view->queryacl != NULL)
306 dns_acl_detach(&view->queryacl);
307 if (view->queryonacl != NULL)
308 dns_acl_detach(&view->queryonacl);
309 if (view->recursionacl != NULL)
310 dns_acl_detach(&view->recursionacl);
311 if (view->recursiononacl != NULL)
312 dns_acl_detach(&view->recursiononacl);
313 if (view->sortlist != NULL)
314 dns_acl_detach(&view->sortlist);
315 if (view->transferacl != NULL)
316 dns_acl_detach(&view->transferacl);
317 if (view->notifyacl != NULL)
318 dns_acl_detach(&view->notifyacl);
319 if (view->updateacl != NULL)
320 dns_acl_detach(&view->updateacl);
321 if (view->upfwdacl != NULL)
322 dns_acl_detach(&view->upfwdacl);
323 if (view->delonly != NULL) {
328 name = ISC_LIST_HEAD(view->delonly[i]);
330 ISC_LIST_UNLINK(view->delonly[i], name, link);
331 dns_name_free(name, view->mctx);
332 isc_mem_put(view->mctx, name, sizeof(*name));
333 name = ISC_LIST_HEAD(view->delonly[i]);
336 isc_mem_put(view->mctx, view->delonly, sizeof(dns_namelist_t) *
338 view->delonly = NULL;
340 if (view->rootexclude != NULL) {
345 name = ISC_LIST_HEAD(view->rootexclude[i]);
347 ISC_LIST_UNLINK(view->rootexclude[i],
349 dns_name_free(name, view->mctx);
350 isc_mem_put(view->mctx, name, sizeof(*name));
351 name = ISC_LIST_HEAD(view->rootexclude[i]);
354 isc_mem_put(view->mctx, view->rootexclude,
356 view->rootexclude = NULL;
358 if (view->resstats != NULL)
359 isc_stats_detach(&view->resstats);
360 if (view->resquerystats != NULL)
361 dns_stats_detach(&view->resquerystats);
362 dns_keytable_detach(&view->trustedkeys);
363 dns_keytable_detach(&view->secroots);
364 dns_fwdtable_destroy(&view->fwdtable);
365 dns_aclenv_destroy(&view->aclenv);
366 DESTROYLOCK(&view->lock);
367 isc_refcount_destroy(&view->references);
368 isc_mem_free(view->mctx, view->name);
369 isc_mem_putanddetach(&view->mctx, view, sizeof(*view));
373 * Return true iff 'view' may be freed.
374 * The caller must be holding the view lock.
377 all_done(dns_view_t *view) {
379 if (isc_refcount_current(&view->references) == 0 &&
380 view->weakrefs == 0 &&
381 RESSHUTDOWN(view) && ADBSHUTDOWN(view) && REQSHUTDOWN(view))
400 dns_view_t *view;
405 view = *viewp;
406 REQUIRE(DNS_VIEW_VALID(view));
409 view->flush = ISC_TRUE;
410 isc_refcount_decrement(&view->references, &refs);
412 LOCK(&view->lock);
413 if (!RESSHUTDOWN(view))
414 dns_resolver_shutdown(view->resolver);
415 if (!ADBSHUTDOWN(view))
416 dns_adb_shutdown(view->adb);
417 if (!REQSHUTDOWN(view))
418 dns_requestmgr_shutdown(view->requestmgr);
419 if (view->acache != NULL)
420 dns_acache_shutdown(view->acache);
421 if (view->flush)
422 dns_zt_flushanddetach(&view->zonetable);
424 dns_zt_detach(&view->zonetable);
425 done = all_done(view);
426 UNLOCK(&view->lock);
432 destroy(view);
453 dns_view_dialup(dns_view_t *view) {
454 REQUIRE(DNS_VIEW_VALID(view));
455 REQUIRE(view->zonetable != NULL);
457 (void)dns_zt_apply(view->zonetable, ISC_FALSE, dialup, NULL);
475 dns_view_t *view;
479 view = *viewp;
480 REQUIRE(DNS_VIEW_VALID(view));
482 LOCK(&view->lock);
484 INSIST(view->weakrefs > 0);
485 view->weakrefs--;
486 done = all_done(view);
488 UNLOCK(&view->lock);
493 destroy(view);
498 dns_view_t *view = event->ev_arg;
502 REQUIRE(DNS_VIEW_VALID(view));
503 REQUIRE(view->task == task);
507 LOCK(&view->lock);
509 view->attributes |= DNS_VIEWATTR_RESSHUTDOWN;
510 done = all_done(view);
512 UNLOCK(&view->lock);
517 destroy(view);
522 dns_view_t *view = event->ev_arg;
526 REQUIRE(DNS_VIEW_VALID(view));
527 REQUIRE(view->task == task);
531 LOCK(&view->lock);
533 view->attributes |= DNS_VIEWATTR_ADBSHUTDOWN;
534 done = all_done(view);
536 UNLOCK(&view->lock);
541 destroy(view);
546 dns_view_t *view = event->ev_arg;
550 REQUIRE(DNS_VIEW_VALID(view));
551 REQUIRE(view->task == task);
555 LOCK(&view->lock);
557 view->attributes |= DNS_VIEWATTR_REQSHUTDOWN;
558 done = all_done(view);
560 UNLOCK(&view->lock);
565 destroy(view);
569 dns_view_createresolver(dns_view_t *view,
582 REQUIRE(DNS_VIEW_VALID(view));
583 REQUIRE(!view->frozen);
584 REQUIRE(view->resolver == NULL);
586 result = isc_task_create(taskmgr, 0, &view->task);
589 isc_task_setname(view->task, "view", view);
591 result = dns_resolver_create(view, taskmgr, ntasks, socketmgr,
594 &view->resolver);
596 isc_task_detach(&view->task);
599 event = &view->resevent;
600 dns_resolver_whenshutdown(view->resolver, view->task, &event);
601 view->attributes &= ~DNS_VIEWATTR_RESSHUTDOWN;
605 dns_resolver_shutdown(view->resolver);
609 result = dns_adb_create(mctx, view, timermgr, taskmgr, &view->adb);
613 dns_resolver_shutdown(view->resolver);
616 event = &view->adbevent;
617 dns_adb_whenshutdown(view->adb, view->task, &event);
618 view->attributes &= ~DNS_VIEWATTR_ADBSHUTDOWN;
620 result = dns_requestmgr_create(view->mctx, timermgr, socketmgr,
621 dns_resolver_taskmgr(view->resolver),
622 dns_resolver_dispatchmgr(view->resolver),
623 dns_resolver_dispatchv4(view->resolver),
624 dns_resolver_dispatchv6(view->resolver),
625 &view->requestmgr);
627 dns_adb_shutdown(view->adb);
628 dns_resolver_shutdown(view->resolver);
631 event = &view->reqevent;
632 dns_requestmgr_whenshutdown(view->requestmgr, view->task, &event);
633 view->attributes &= ~DNS_VIEWATTR_REQSHUTDOWN;
639 dns_view_setcache(dns_view_t *view, dns_cache_t *cache) {
640 REQUIRE(DNS_VIEW_VALID(view));
641 REQUIRE(!view->frozen);
643 if (view->cache != NULL) {
644 if (view->acache != NULL)
645 dns_acache_putdb(view->acache, view->cachedb);
646 dns_db_detach(&view->cachedb);
647 dns_cache_detach(&view->cache);
649 dns_cache_attach(cache, &view->cache);
650 dns_cache_attachdb(cache, &view->cachedb);
651 INSIST(DNS_DB_VALID(view->cachedb));
653 if (view->acache != NULL)
654 dns_acache_setdb(view->acache, view->cachedb);
658 dns_view_sethints(dns_view_t *view, dns_db_t *hints) {
659 REQUIRE(DNS_VIEW_VALID(view));
660 REQUIRE(!view->frozen);
661 REQUIRE(view->hints == NULL);
664 dns_db_attach(hints, &view->hints);
668 dns_view_setkeyring(dns_view_t *view, dns_tsig_keyring_t *ring) {
669 REQUIRE(DNS_VIEW_VALID(view));
671 if (view->statickeys != NULL)
672 dns_tsigkeyring_destroy(&view->statickeys);
673 view->statickeys = ring;
677 dns_view_setdstport(dns_view_t *view, in_port_t dstport) {
678 REQUIRE(DNS_VIEW_VALID(view));
679 view->dstport = dstport;
683 dns_view_addzone(dns_view_t *view, dns_zone_t *zone) {
686 REQUIRE(DNS_VIEW_VALID(view));
687 REQUIRE(!view->frozen);
689 result = dns_zt_mount(view->zonetable, zone);
695 dns_view_freeze(dns_view_t *view) {
696 REQUIRE(DNS_VIEW_VALID(view));
697 REQUIRE(!view->frozen);
699 if (view->resolver != NULL) {
700 INSIST(view->cachedb != NULL);
701 dns_resolver_freeze(view->resolver);
703 view->frozen = ISC_TRUE;
707 dns_view_findzone(dns_view_t *view, dns_name_t *name, dns_zone_t **zonep) {
710 REQUIRE(DNS_VIEW_VALID(view));
712 LOCK(&view->lock);
713 if (view->zonetable != NULL) {
714 result = dns_zt_find(view->zonetable, name, 0, NULL, zonep);
721 UNLOCK(&view->lock);
727 dns_view_find(dns_view_t *view, dns_name_t *name, dns_rdatatype_t type,
744 REQUIRE(DNS_VIEW_VALID(view));
745 REQUIRE(view->frozen);
764 LOCK(&view->lock);
765 if (view->zonetable != NULL)
766 result = dns_zt_find(view->zonetable, name, 0, NULL, &zone);
769 UNLOCK(&view->lock);
772 if (result != ISC_R_SUCCESS && view->cachedb != NULL)
773 dns_db_attach(view->cachedb, &db);
776 } else if (result == ISC_R_NOTFOUND && view->cachedb != NULL)
777 dns_db_attach(view->cachedb, &db);
801 if (view->cachedb != NULL) {
807 dns_db_attach(view->cachedb, &db);
834 if (view->cachedb != NULL) {
851 dns_db_attach(view->cachedb, &db);
860 if (result == ISC_R_NOTFOUND && use_hints && view->hints != NULL) {
871 result = dns_db_find(view->hints, name, NULL, type, options,
879 dns_resolver_prime(view->resolver);
880 dns_db_attach(view->hints, &db);
883 dns_db_attach(view->hints, &db);
892 dns_db_detachnode(view->hints, &node);
929 dns_view_simplefind(dns_view_t *view, dns_name_t *name, dns_rdatatype_t type,
938 result = dns_view_find(view, name, type, now, options, use_hints,
973 dns_view_findzonecut(dns_view_t *view, dns_name_t *name, dns_name_t *fname,
978 return(dns_view_findzonecut2(view, name, fname, now, options,
984 dns_view_findzonecut2(dns_view_t *view, dns_name_t *name, dns_name_t *fname,
997 REQUIRE(DNS_VIEW_VALID(view));
998 REQUIRE(view->frozen);
1016 LOCK(&view->lock);
1017 if (view->zonetable != NULL)
1018 result = dns_zt_find(view->zonetable, name, 0, NULL, &zone);
1021 UNLOCK(&view->lock);
1030 if (use_cache && view->cachedb != NULL) {
1034 dns_db_attach(view->cachedb, &db);
1061 if (use_cache && view->cachedb != NULL && db != view->hints) {
1077 dns_db_attach(view->cachedb, &db);
1129 } else if (try_hints && use_hints && view->hints != NULL) {
1133 result = dns_db_find(view->hints, dns_rootname, NULL,
1165 dns_view_t *view;
1169 for (view = ISC_LIST_HEAD(*list);
1170 view != NULL;
1171 view = ISC_LIST_NEXT(view, link)) {
1172 if (strcmp(view->name, name) == 0 && view->rdclass == rdclass)
1175 if (view == NULL)
1178 dns_view_attach(view, viewp);
1188 dns_view_t *view;
1194 for (view = ISC_LIST_HEAD(*list);
1195 view != NULL;
1196 view = ISC_LIST_NEXT(view, link)) {
1197 if (allclasses == ISC_FALSE && view->rdclass != rdclass)
1201 * If the zone is defined in more than one view,
1205 LOCK(&view->lock);
1206 if (view->zonetable != NULL)
1207 result = dns_zt_find(view->zonetable, name, 0,
1211 UNLOCK(&view->lock);
1240 dns_view_load(dns_view_t *view, isc_boolean_t stop) {
1242 REQUIRE(DNS_VIEW_VALID(view));
1243 REQUIRE(view->zonetable != NULL);
1245 return (dns_zt_load(view->zonetable, stop));
1249 dns_view_loadnew(dns_view_t *view, isc_boolean_t stop) {
1251 REQUIRE(DNS_VIEW_VALID(view));
1252 REQUIRE(view->zonetable != NULL);
1254 return (dns_zt_loadnew(view->zonetable, stop));
1258 dns_view_gettsig(dns_view_t *view, dns_name_t *keyname, dns_tsigkey_t **keyp)
1264 view->statickeys);
1267 view->dynamickeys);
1272 dns_view_getpeertsig(dns_view_t *view, isc_netaddr_t *peeraddr,
1279 result = dns_peerlist_peerbyaddr(view->peers, peeraddr, &peer);
1287 result = dns_view_gettsig(view, keyname, keyp);
1292 dns_view_checksig(dns_view_t *view, isc_buffer_t *source, dns_message_t *msg) {
1293 REQUIRE(DNS_VIEW_VALID(view));
1296 return (dns_tsig_verify(source, msg, view->statickeys,
1297 view->dynamickeys));
1301 dns_view_dumpdbtostream(dns_view_t *view, FILE *fp) {
1304 REQUIRE(DNS_VIEW_VALID(view));
1306 (void)fprintf(fp, ";\n; Cache dump of view '%s'\n;\n", view->name);
1307 result = dns_master_dumptostream(view->mctx, view->cachedb, NULL,
1311 dns_adb_dump(view->adb, fp);
1312 dns_resolver_printbadcache(view->resolver, fp);
1317 dns_view_flushcache(dns_view_t *view) {
1320 REQUIRE(DNS_VIEW_VALID(view));
1322 if (view->cachedb == NULL)
1324 result = dns_cache_flush(view->cache);
1327 if (view->acache != NULL)
1328 dns_acache_putdb(view->acache, view->cachedb);
1329 dns_db_detach(&view->cachedb);
1330 dns_cache_attachdb(view->cache, &view->cachedb);
1331 if (view->acache != NULL)
1332 dns_acache_setdb(view->acache, view->cachedb);
1333 if (view->resolver != NULL)
1334 dns_resolver_flushbadcache(view->resolver, NULL);
1336 dns_adb_flush(view->adb);
1341 dns_view_flushname(dns_view_t *view, dns_name_t *name) {
1343 REQUIRE(DNS_VIEW_VALID(view));
1345 if (view->adb != NULL)
1346 dns_adb_flushname(view->adb, name);
1347 if (view->cache == NULL)
1349 if (view->resolver != NULL)
1350 dns_resolver_flushbadcache(view->resolver, name);
1351 return (dns_cache_flushname(view->cache, name));
1355 dns_view_adddelegationonly(dns_view_t *view, dns_name_t *name) {
1360 REQUIRE(DNS_VIEW_VALID(view));
1362 if (view->delonly == NULL) {
1363 view->delonly = isc_mem_get(view->mctx,
1366 if (view->delonly == NULL)
1369 ISC_LIST_INIT(view->delonly[hash]);
1372 new = ISC_LIST_HEAD(view->delonly[hash]);
1377 new = isc_mem_get(view->mctx, sizeof(*new));
1381 result = dns_name_dup(name, view->mctx, new);
1383 ISC_LIST_APPEND(view->delonly[hash], new, link);
1385 isc_mem_put(view->mctx, new, sizeof(*new));
1390 dns_view_excludedelegationonly(dns_view_t *view, dns_name_t *name) {
1395 REQUIRE(DNS_VIEW_VALID(view));
1397 if (view->rootexclude == NULL) {
1398 view->rootexclude = isc_mem_get(view->mctx,
1401 if (view->rootexclude == NULL)
1404 ISC_LIST_INIT(view->rootexclude[hash]);
1407 new = ISC_LIST_HEAD(view->rootexclude[hash]);
1412 new = isc_mem_get(view->mctx, sizeof(*new));
1416 result = dns_name_dup(name, view->mctx, new);
1418 ISC_LIST_APPEND(view->rootexclude[hash], new, link);
1420 isc_mem_put(view->mctx, new, sizeof(*new));
1425 dns_view_isdelegationonly(dns_view_t *view, dns_name_t *name) {
1429 REQUIRE(DNS_VIEW_VALID(view));
1431 if (!view->rootdelonly && view->delonly == NULL)
1435 if (view->rootdelonly && dns_name_countlabels(name) <= 2) {
1436 if (view->rootexclude == NULL)
1438 new = ISC_LIST_HEAD(view->rootexclude[hash]);
1445 if (view->delonly == NULL)
1448 new = ISC_LIST_HEAD(view->delonly[hash]);
1457 dns_view_setrootdelonly(dns_view_t *view, isc_boolean_t value) {
1458 REQUIRE(DNS_VIEW_VALID(view));
1459 view->rootdelonly = value;
1463 dns_view_getrootdelonly(dns_view_t *view) {
1464 REQUIRE(DNS_VIEW_VALID(view));
1465 return (view->rootdelonly);
1469 dns_view_freezezones(dns_view_t *view, isc_boolean_t value) {
1471 REQUIRE(DNS_VIEW_VALID(view));
1472 REQUIRE(view->zonetable != NULL);
1474 return (dns_zt_freezezones(view->zonetable, value));
1478 dns_view_setresstats(dns_view_t *view, isc_stats_t *stats) {
1480 REQUIRE(DNS_VIEW_VALID(view));
1481 REQUIRE(!view->frozen);
1482 REQUIRE(view->resstats == NULL);
1484 isc_stats_attach(stats, &view->resstats);
1488 dns_view_getresstats(dns_view_t *view, isc_stats_t **statsp) {
1489 REQUIRE(DNS_VIEW_VALID(view));
1492 if (view->resstats != NULL)
1493 isc_stats_attach(view->resstats, statsp);
1497 dns_view_setresquerystats(dns_view_t *view, dns_stats_t *stats) {
1498 REQUIRE(DNS_VIEW_VALID(view));
1499 REQUIRE(!view->frozen);
1500 REQUIRE(view->resquerystats == NULL);
1502 dns_stats_attach(stats, &view->resquerystats);
1506 dns_view_getresquerystats(dns_view_t *view, dns_stats_t **statsp) {
1507 REQUIRE(DNS_VIEW_VALID(view));
1510 if (view->resquerystats != NULL)
1511 dns_stats_attach(view->resquerystats, statsp);