Lines Matching refs:fwd
70 struct iter_forwards* fwd = (struct iter_forwards*)calloc(1, in forwards_create() local
72 if(!fwd) in forwards_create()
74 lock_rw_init(&fwd->lock); in forwards_create()
75 return fwd; in forwards_create()
92 static void fwd_del_tree(struct iter_forwards* fwd) in fwd_del_tree() argument
94 if(fwd->tree) in fwd_del_tree()
95 traverse_postorder(fwd->tree, &delfwdnode, NULL); in fwd_del_tree()
96 free(fwd->tree); in fwd_del_tree()
100 forwards_delete(struct iter_forwards* fwd) in forwards_delete() argument
102 if(!fwd) in forwards_delete()
104 lock_rw_destroy(&fwd->lock); in forwards_delete()
105 fwd_del_tree(fwd); in forwards_delete()
106 free(fwd); in forwards_delete()
111 forwards_insert_data(struct iter_forwards* fwd, uint16_t c, uint8_t* nm, in forwards_insert_data() argument
131 if(!rbtree_insert(fwd->tree, &node->node)) { in forwards_insert_data()
144 forwards_insert(struct iter_forwards* fwd, uint16_t c, struct delegpt* dp) in forwards_insert() argument
146 return forwards_insert_data(fwd, c, dp->name, dp->namelen, in forwards_insert()
152 fwd_init_parents(struct iter_forwards* fwd) in fwd_init_parents() argument
156 RBTREE_FOR(node, struct iter_forward_zone*, fwd->tree) { in fwd_init_parents()
266 read_forwards(struct iter_forwards* fwd, struct config_file* cfg) in read_forwards() argument
291 if(!forwards_insert(fwd, LDNS_RR_CLASS_IN, dp)) in read_forwards()
299 fwd_add_stub_hole(struct iter_forwards* fwd, uint16_t c, uint8_t* nm) in fwd_add_stub_hole() argument
306 return forwards_insert_data(fwd, key.dclass, key.name, in fwd_add_stub_hole()
312 make_stub_holes(struct iter_forwards* fwd, struct config_file* cfg) in make_stub_holes() argument
324 if(!fwd_add_stub_hole(fwd, LDNS_RR_CLASS_IN, dname)) { in make_stub_holes()
336 make_auth_holes(struct iter_forwards* fwd, struct config_file* cfg) in make_auth_holes() argument
348 if(!fwd_add_stub_hole(fwd, LDNS_RR_CLASS_IN, dname)) { in make_auth_holes()
359 forwards_apply_cfg(struct iter_forwards* fwd, struct config_file* cfg) in forwards_apply_cfg() argument
361 if(fwd->tree) { in forwards_apply_cfg()
362 lock_unprotect(&fwd->lock, fwd->tree); in forwards_apply_cfg()
364 fwd_del_tree(fwd); in forwards_apply_cfg()
365 fwd->tree = rbtree_create(fwd_cmp); in forwards_apply_cfg()
366 if(!fwd->tree) in forwards_apply_cfg()
368 lock_protect(&fwd->lock, fwd->tree, sizeof(*fwd->tree)); in forwards_apply_cfg()
370 lock_rw_wrlock(&fwd->lock); in forwards_apply_cfg()
372 if(!read_forwards(fwd, cfg)) { in forwards_apply_cfg()
373 lock_rw_unlock(&fwd->lock); in forwards_apply_cfg()
376 if(!make_stub_holes(fwd, cfg)) { in forwards_apply_cfg()
377 lock_rw_unlock(&fwd->lock); in forwards_apply_cfg()
386 if(!make_auth_holes(fwd, cfg)) { in forwards_apply_cfg()
387 lock_rw_unlock(&fwd->lock); in forwards_apply_cfg()
390 fwd_init_parents(fwd); in forwards_apply_cfg()
391 lock_rw_unlock(&fwd->lock); in forwards_apply_cfg()
396 forwards_find(struct iter_forwards* fwd, uint8_t* qname, uint16_t qclass, in forwards_find() argument
407 if(!nolock) { lock_rw_rdlock(&fwd->lock); } in forwards_find()
408 res = (struct iter_forward_zone*)rbtree_search(fwd->tree, &key); in forwards_find()
410 if(!has_dp && !nolock) { lock_rw_unlock(&fwd->lock); } in forwards_find()
415 forwards_lookup(struct iter_forwards* fwd, uint8_t* qname, uint16_t qclass, in forwards_lookup() argument
428 if(!nolock) { lock_rw_rdlock(&fwd->lock); } in forwards_lookup()
429 if(rbtree_find_less_equal(fwd->tree, &key, &res)) { in forwards_lookup()
437 if(!nolock) { lock_rw_unlock(&fwd->lock); } in forwards_lookup()
450 if(!has_dp && !nolock) { lock_rw_unlock(&fwd->lock); } in forwards_lookup()
455 forwards_lookup_root(struct iter_forwards* fwd, uint16_t qclass, int nolock) in forwards_lookup_root() argument
458 return forwards_lookup(fwd, &root, qclass, nolock); in forwards_lookup_root()
464 next_root_locked(struct iter_forwards* fwd, uint16_t* dclass) in next_root_locked() argument
471 n = rbtree_first(fwd->tree); in next_root_locked()
481 return next_root_locked(fwd, dclass); in next_root_locked()
492 if(rbtree_find_less_equal(fwd->tree, &key, &n)) { in next_root_locked()
509 return next_root_locked(fwd, dclass); in next_root_locked()
514 forwards_next_root(struct iter_forwards* fwd, uint16_t* dclass, int nolock) in forwards_next_root() argument
518 if(!nolock) { lock_rw_rdlock(&fwd->lock); } in forwards_next_root()
519 ret = next_root_locked(fwd, dclass); in forwards_next_root()
520 if(!nolock) { lock_rw_unlock(&fwd->lock); } in forwards_next_root()
525 forwards_get_mem(struct iter_forwards* fwd) in forwards_get_mem() argument
529 if(!fwd) in forwards_get_mem()
531 lock_rw_rdlock(&fwd->lock); in forwards_get_mem()
532 s = sizeof(*fwd) + sizeof(*fwd->tree); in forwards_get_mem()
533 RBTREE_FOR(p, struct iter_forward_zone*, fwd->tree) { in forwards_get_mem()
536 lock_rw_unlock(&fwd->lock); in forwards_get_mem()
541 fwd_zone_find(struct iter_forwards* fwd, uint16_t c, uint8_t* nm) in fwd_zone_find() argument
548 return (struct iter_forward_zone*)rbtree_search(fwd->tree, &key); in fwd_zone_find()
552 forwards_add_zone(struct iter_forwards* fwd, uint16_t c, struct delegpt* dp, in forwards_add_zone() argument
557 if(!nolock) { lock_rw_wrlock(&fwd->lock); } in forwards_add_zone()
558 if((z=fwd_zone_find(fwd, c, dp->name)) != NULL) { in forwards_add_zone()
559 (void)rbtree_delete(fwd->tree, &z->node); in forwards_add_zone()
562 if(!forwards_insert(fwd, c, dp)) { in forwards_add_zone()
563 if(!nolock) { lock_rw_unlock(&fwd->lock); } in forwards_add_zone()
566 fwd_init_parents(fwd); in forwards_add_zone()
567 if(!nolock) { lock_rw_unlock(&fwd->lock); } in forwards_add_zone()
572 forwards_delete_zone(struct iter_forwards* fwd, uint16_t c, uint8_t* nm, in forwards_delete_zone() argument
577 if(!nolock) { lock_rw_wrlock(&fwd->lock); } in forwards_delete_zone()
578 if(!(z=fwd_zone_find(fwd, c, nm))) { in forwards_delete_zone()
579 if(!nolock) { lock_rw_unlock(&fwd->lock); } in forwards_delete_zone()
582 (void)rbtree_delete(fwd->tree, &z->node); in forwards_delete_zone()
584 fwd_init_parents(fwd); in forwards_delete_zone()
585 if(!nolock) { lock_rw_unlock(&fwd->lock); } in forwards_delete_zone()
589 forwards_add_stub_hole(struct iter_forwards* fwd, uint16_t c, uint8_t* nm, in forwards_add_stub_hole() argument
593 if(!nolock) { lock_rw_wrlock(&fwd->lock); } in forwards_add_stub_hole()
594 if(fwd_zone_find(fwd, c, nm) != NULL) { in forwards_add_stub_hole()
595 if(!nolock) { lock_rw_unlock(&fwd->lock); } in forwards_add_stub_hole()
598 if(!fwd_add_stub_hole(fwd, c, nm)) { in forwards_add_stub_hole()
599 if(!nolock) { lock_rw_unlock(&fwd->lock); } in forwards_add_stub_hole()
602 fwd_init_parents(fwd); in forwards_add_stub_hole()
603 if(!nolock) { lock_rw_unlock(&fwd->lock); } in forwards_add_stub_hole()
608 forwards_delete_stub_hole(struct iter_forwards* fwd, uint16_t c, in forwards_delete_stub_hole() argument
613 if(!nolock) { lock_rw_wrlock(&fwd->lock); } in forwards_delete_stub_hole()
614 if(!(z=fwd_zone_find(fwd, c, nm))) { in forwards_delete_stub_hole()
615 if(!nolock) { lock_rw_unlock(&fwd->lock); } in forwards_delete_stub_hole()
619 if(!nolock) { lock_rw_unlock(&fwd->lock); } in forwards_delete_stub_hole()
622 (void)rbtree_delete(fwd->tree, &z->node); in forwards_delete_stub_hole()
624 fwd_init_parents(fwd); in forwards_delete_stub_hole()
625 if(!nolock) { lock_rw_unlock(&fwd->lock); } in forwards_delete_stub_hole()
629 forwards_swap_tree(struct iter_forwards* fwd, struct iter_forwards* data) in forwards_swap_tree() argument
631 rbtree_type* oldtree = fwd->tree; in forwards_swap_tree()
633 lock_unprotect(&fwd->lock, oldtree); in forwards_swap_tree()
638 fwd->tree = data->tree; in forwards_swap_tree()
640 lock_protect(&fwd->lock, fwd->tree, sizeof(*fwd->tree)); in forwards_swap_tree()