Lines Matching full:neg

88 	struct val_neg_cache* neg = (struct val_neg_cache*)calloc(1, 
89 sizeof(*neg));
90 if(!neg) {
91 log_err("Could not create neg cache: out of memory");
94 neg->nsec3_max_iter = maxiter;
95 neg->max = 1024*1024; /* 1 M is thousands of entries */
96 if(cfg) neg->max = cfg->neg_cache_size;
97 rbtree_init(&neg->tree, &val_neg_zone_compare);
98 lock_basic_init(&neg->lock);
99 lock_protect(&neg->lock, neg, sizeof(*neg));
100 return neg;
103 size_t val_neg_get_mem(struct val_neg_cache* neg)
106 lock_basic_lock(&neg->lock);
107 result = sizeof(*neg) + neg->use;
108 lock_basic_unlock(&neg->lock);
133 void neg_cache_delete(struct val_neg_cache* neg)
135 if(!neg) return;
136 lock_basic_destroy(&neg->lock);
138 traverse_postorder(&neg->tree, &neg_clear_zones, NULL);
139 free(neg);
144 * @param neg: negative cache with LRU start and end.
147 static void neg_lru_front(struct val_neg_cache* neg,
151 data->next = neg->first;
152 if(!neg->first)
153 neg->last = data;
154 else neg->first->prev = data;
155 neg->first = data;
160 * @param neg: negative cache with LRU start and end.
163 static void neg_lru_remove(struct val_neg_cache* neg,
168 else neg->first = data->next;
171 else neg->last = data->prev;
176 * @param neg: negative cache with LRU start and end.
179 static void neg_lru_touch(struct val_neg_cache* neg,
182 if(data == neg->first)
185 neg_lru_remove(neg, data);
187 neg_lru_front(neg, data);
194 * @param neg: negative cache.
197 static void neg_delete_zone(struct val_neg_cache* neg, struct val_neg_zone* z)
217 (void)rbtree_delete(&neg->tree, &p->node);
218 neg->use -= p->len + sizeof(*p);
226 void neg_delete_data(struct val_neg_cache* neg, struct val_neg_data* el)
237 neg_lru_remove(neg, el);
238 log_assert(neg->first != el && neg->last != el);
253 neg->use -= p->len + sizeof(*p);
261 neg_delete_zone(neg, z);
269 * @param neg: negative cache.
272 static void neg_make_space(struct val_neg_cache* neg, size_t need)
275 while(neg->last && neg->max < neg->use + need) {
276 neg_delete_data(neg, neg->last);
280 struct val_neg_zone* neg_find_zone(struct val_neg_cache* neg,
292 rbtree_search(&neg->tree, lookfor.node.key);
363 * @param neg: negative cache.
370 static struct val_neg_zone* neg_closest_zone_parent(struct val_neg_cache* neg,
381 if(rbtree_find_less_equal(&neg->tree, &key, &res)) {
530 struct val_neg_zone* neg_create_zone(struct val_neg_cache* neg,
539 parent = neg_closest_zone_parent(neg, nm, nm_len, labs, dclass);
554 neg->use += sizeof(struct val_neg_zone) + p->len;
556 (void)rbtree_insert(&neg->tree, &p->node);
668 * @param neg: negative cache.
673 static void wipeout(struct val_neg_cache* neg, struct val_neg_zone* zone,
743 neg_delete_data(neg, cur);
748 void neg_insert_data(struct val_neg_cache* neg,
791 neg->use += sizeof(struct val_neg_data) + p->len;
811 neg_lru_front(neg, el);
814 neg_lru_touch(neg, el);
823 it <= neg->nsec3_max_iter &&
849 wipeout(neg, zone, el, nsec);
879 void val_neg_addreply(struct val_neg_cache* neg, struct reply_info* rep)
909 lock_basic_lock(&neg->lock);
910 neg_make_space(neg, need);
913 zone = neg_find_zone(neg, dname, dname_len, rrset_class);
915 if(!(zone = neg_create_zone(neg, dname, dname_len,
917 lock_basic_unlock(&neg->lock);
931 neg_insert_data(neg, zone, rep->rrsets[i]);
935 neg_delete_zone(neg, zone);
937 lock_basic_unlock(&neg->lock);
969 void val_neg_addreferral(struct val_neg_cache* neg, struct reply_info* rep,
992 lock_basic_lock(&neg->lock);
993 neg_make_space(neg, need);
996 zone = neg_find_zone(neg, signer, signer_len, dclass);
998 if(!(zone = neg_create_zone(neg, signer, signer_len,
1000 lock_basic_unlock(&neg->lock);
1015 neg_insert_data(neg, zone, rep->rrsets[i]);
1019 neg_delete_zone(neg, zone);
1021 lock_basic_unlock(&neg->lock);
1099 * @param neg_cache: neg cache
1163 /** find nsec3 closest encloser in neg cache */
1247 /** neg cache nsec3 proof procedure*/
1379 val_neg_getmsg(struct val_neg_cache* neg, struct query_info* qinfo,
1406 nsec = neg_find_nsec(neg, qinfo->qname, qinfo->qname_len, qinfo->qclass,
1425 lock_basic_lock(&neg->lock);
1426 neg->num_neg_cache_noerror++;
1427 lock_basic_unlock(&neg->lock);
1481 if(!(wcrr = neg_find_nsec(neg, wc_qinfo.qname,
1509 lock_basic_lock(&neg->lock);
1511 neg->num_neg_cache_noerror++;
1513 neg->num_neg_cache_nxdomain++;
1514 lock_basic_unlock(&neg->lock);
1524 /* check NSEC3 neg cache for type DS */
1532 lock_basic_lock(&neg->lock);
1533 zone = neg_closest_zone_parent(neg, zname, zname_len, zname_labs,
1544 lock_basic_unlock(&neg->lock);
1551 lock_basic_unlock(&neg->lock);
1554 lock_basic_unlock(&neg->lock);
1559 val_neg_adjust_size(struct val_neg_cache* neg, size_t max)
1561 lock_basic_lock(&neg->lock);
1562 neg->max = max;
1563 neg_make_space(neg, 0);
1564 lock_basic_unlock(&neg->lock);