Lines Matching refs:rrset
2 * services/cache/dns.c - Cache services for DNS using msg and rrset caches.
47 #include "services/cache/rrset.h"
58 /** store rrsets in the rrset cache.
84 /* see if rrset already exists in cache, if not insert it. */
98 /* if deleted rrset, do not copy it */
171 * unnecessary, because the cache gets locked per rrset. */
206 /** find closest NS or DNAME and returns the rrset (locked) */
212 struct ub_packed_rrset_key *rrset;
224 if((rrset = rrset_cache_lookup(env->rrset_cache, qname,
229 return rrset;
235 return rrset;
236 /* check for expiry, but we have to let go of the rrset
238 lock_rw_unlock(&rrset->entry.lock);
246 /* we want to return rrset, but it may be
250 if((rrset = rrset_cache_lookup(env->
253 return rrset;
256 log_nametypeclass(VERB_ALGO, "ignoring rrset because expired rrsets exist above it", origqname, searchtype, qclass);
270 addr_to_additional(struct ub_packed_rrset_key* rrset, struct regional* region,
274 packed_rrset_copy_region(rrset, region, now))) {
438 struct ub_packed_rrset_key* rrset = rrset_cache_lookup(
441 if(!rrset) {
444 rrset = rrset_cache_lookup(env->rrset_cache, dp->name,
450 if(rrset && nsec_has_type(rrset, LDNS_RR_TYPE_DS)) {
451 lock_rw_unlock(&rrset->entry.lock);
452 rrset = NULL; /* discard wrong NSEC */
455 if(rrset) {
456 /* add it to auth section. This is the second rrset. */
458 packed_rrset_copy_region(rrset, region, now))) {
462 lock_rw_unlock(&rrset->entry.lock);
501 struct ub_packed_rrset_key* rrset, time_t now)
504 packed_rrset_copy_region(rrset, region, now)))
512 struct ub_packed_rrset_key* rrset, time_t now)
515 packed_rrset_copy_region(rrset, region, now)))
527 /* try to find closest NS rrset */
547 * NS rrset + DS/NSEC rrset +
548 * A rrset for every NS RR
549 * AAAA rrset for every NS RR
583 /* allocate replyinfo struct and rrset key array separately */
698 rrset_msg(struct ub_packed_rrset_key* rrset, struct regional* region,
703 rrset->entry.data;
722 msg->rep->rrsets[0] = packed_rrset_copy_region(rrset, region, now);
730 synth_dname_msg(struct ub_packed_rrset_key* rrset, struct regional* region,
736 rrset->entry.data;
762 msg->rep->rrsets[0] = packed_rrset_copy_region(rrset, region, now);
765 /* synth CNAME rrset */
766 get_cname_target(rrset, &dtarg, &dtarglen);
769 newlen = q->qname_len + dtarglen - rrset->rk.dname_len;
779 memcpy(newname, q->qname, q->qname_len-rrset->rk.dname_len);
780 memmove(newname+(q->qname_len-rrset->rk.dname_len), dtarg, dtarglen);
781 /* create rest of CNAME rrset */
790 ck->rk.rrset_class = rrset->rk.rrset_class;
852 struct ub_packed_rrset_key* rrset = rrset_cache_lookup(
856 if(!rrset)
859 /* only if rrset from answer section */
860 d = (struct packed_rrset_data*)rrset->entry.data;
865 lock_rw_unlock(&rrset->entry.lock);
874 lock_rw_unlock(&rrset->entry.lock);
880 if(!dns_msg_ansadd(msg, region, rrset, now)) {
881 lock_rw_unlock(&rrset->entry.lock);
884 lock_rw_unlock(&rrset->entry.lock);
899 struct ub_packed_rrset_key* rrset;
926 (rrset=find_closest_of_type(env, qname, qnamelen, qclass, now,
930 struct dns_msg* msg = synth_dname_msg(rrset, region, now, &k,
934 lock_rw_unlock(&rrset->entry.lock);
935 /* now, after unlocking the DNAME rrset lock,
958 lock_rw_unlock(&rrset->entry.lock);
965 (rrset=rrset_cache_lookup(env->rrset_cache, qname, qnamelen,
969 /* if the rrset is not a wildcard expansion, with wcname */
970 /* because, if we return that CNAME rrset on its own, it is
972 if(!(val_rrset_wildcard(rrset, &wc, &wl) && wc != NULL)) {
973 struct dns_msg* msg = rrset_msg(rrset, region, now, &k);
975 lock_rw_unlock(&rrset->entry.lock);
979 lock_rw_unlock(&rrset->entry.lock);
982 /* construct DS, DNSKEY messages from rrset cache. */
984 (rrset=rrset_cache_lookup(env->rrset_cache, qname, qnamelen,
986 /* if the rrset is from the additional section, and the
989 * Forego all rrset data from additional section, because
994 rrset->entry.data;
1000 struct dns_msg* msg = rrset_msg(rrset, region, now, &k);
1002 lock_rw_unlock(&rrset->entry.lock);
1006 lock_rw_unlock(&rrset->entry.lock);