dns_view_t *primaryview;
isc_boolean_t needflush;
isc_boolean_t adbsizeadjusted;
+ dns_rdataclass_t rdclass;
ISC_LINK(ns_cache_t) link;
};
}
static ns_cache_t *
-cachelist_find(ns_cachelist_t *cachelist, const char *cachename) {
+cachelist_find(ns_cachelist_t *cachelist, const char *cachename,
+ dns_rdataclass_t rdclass)
+{
ns_cache_t *nsc;
for (nsc = ISC_LIST_HEAD(*cachelist);
nsc != NULL;
nsc = ISC_LIST_NEXT(nsc, link)) {
- if (strcmp(dns_cache_getname(nsc->cache), cachename) == 0)
+ if (nsc->rdclass == rdclass &&
+ strcmp(dns_cache_getname(nsc->cache), cachename) == 0)
return (nsc);
}
cache_reusable(dns_view_t *originview, dns_view_t *view,
isc_boolean_t new_zero_no_soattl)
{
- if (originview->checknames != view->checknames ||
+ if (originview->rdclass != view->rdclass ||
+ originview->checknames != view->checknames ||
dns_resolver_getzeronosoattl(originview->resolver) !=
new_zero_no_soattl ||
originview->acceptexpired != view->acceptexpired ||
else
cachename = view->name;
cache = NULL;
- nsc = cachelist_find(cachelist, cachename);
+ nsc = cachelist_find(cachelist, cachename, view->rdclass);
if (nsc != NULL) {
if (!cache_sharable(nsc->primaryview, view, zero_no_soattl,
cleaning_interval, max_cache_size)) {
nsc->primaryview = view;
nsc->needflush = ISC_FALSE;
nsc->adbsizeadjusted = ISC_FALSE;
+ nsc->rdclass = view->rdclass;
ISC_LINK_INIT(nsc, link);
ISC_LIST_APPEND(*cachelist, nsc, link);
}
"gooddname.example.net"; };
allow-query {!10.53.0.8; any; };
max-zone-ttl unlimited;
+ attach-cache "globalcache";
};
server 10.42.23.3/32 {
transfer-source-v6 fd92:7065:b8e:ffff::1001;
};
-zone "." {
- type hint;
- file "root.hint";
+/*
+ * Must be first view so that there is a CH cache with name
+ * "globalcache" before the recursive "default"/IN view is configured.
+ */
+view "class" chaos {
+ match-clients { none; };
};
+/*
+ * Must be second view so that so that we can check we don't attach to the
+ * "globalcache"/CH cache.
+ */
+view "default" {
+ zone "." {
+ type hint;
+ file "root.hint";
+ };
+};