1 /* 2 * iterator/iter_priv.h - iterative resolver private address and domain store 3 * 4 * Copyright (c) 2008, NLnet Labs. All rights reserved. 5 * 6 * This software is open source. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 12 * Redistributions of source code must retain the above copyright notice, 13 * this list of conditions and the following disclaimer. 14 * 15 * Redistributions in binary form must reproduce the above copyright notice, 16 * this list of conditions and the following disclaimer in the documentation 17 * and/or other materials provided with the distribution. 18 * 19 * Neither the name of the NLNET LABS nor the names of its contributors may 20 * be used to endorse or promote products derived from this software without 21 * specific prior written permission. 22 * 23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 24 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 25 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 26 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE 27 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 28 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 29 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 30 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 31 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 32 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 33 * POSSIBILITY OF SUCH DAMAGE. 34 */ 35 36 /** 37 * \file 38 * 39 * This file contains functions to assist the iterator module. 40 * Keep track of the private addresses and lookup fast. 41 */ 42 43 #ifndef ITERATOR_ITER_PRIV_H 44 #define ITERATOR_ITER_PRIV_H 45 #include "util/rbtree.h" 46 #include <ldns/buffer.h> 47 struct iter_env; 48 struct config_file; 49 struct regional; 50 struct rrset_parse; 51 52 /** 53 * Iterator priv structure 54 */ 55 struct iter_priv { 56 /** regional for allocation */ 57 struct regional* region; 58 /** 59 * Tree of the address spans that are blocked. 60 * contents of type addr_tree_node. 61 * No further data need, only presence or absence. 62 */ 63 rbtree_t a; 64 /** 65 * Tree of the domains spans that are allowed to contain 66 * the blocked address spans. 67 * contents of type name_tree_node. 68 * No further data need, only presence or absence. 69 */ 70 rbtree_t n; 71 }; 72 73 /** 74 * Create priv structure 75 * @return new structure or NULL on error. 76 */ 77 struct iter_priv* priv_create(void); 78 79 /** 80 * Delete priv structure. 81 * @param priv: to delete. 82 */ 83 void priv_delete(struct iter_priv* priv); 84 85 /** 86 * Process priv config. 87 * @param priv: where to store. 88 * @param cfg: config options. 89 * @return 0 on error. 90 */ 91 int priv_apply_cfg(struct iter_priv* priv, struct config_file* cfg); 92 93 /** 94 * See if rrset is bad. 95 * @param priv: structure for private address storage. 96 * @param pkt: packet to decompress rrset name in. 97 * @param rrset: the rrset to examine, A or AAAA. 98 * @return true if the rrset is bad and should be removed. 99 */ 100 int priv_rrset_bad(struct iter_priv* priv, ldns_buffer* pkt, 101 struct rrset_parse* rrset); 102 103 /** 104 * Get memory used by priv structure. 105 * @param priv: structure for address storage. 106 * @return bytes in use. 107 */ 108 size_t priv_get_mem(struct iter_priv* priv); 109 110 #endif /* ITERATOR_ITER_PRIV_H */ 111