Electroneum
iter_delegpt.h
Go to the documentation of this file.
1 /*
2  * iterator/iter_delegpt.h - delegation point with NS and address information.
3  *
4  * Copyright (c) 2007, 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
25  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
26  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
27  * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
28  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
29  * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
30  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
31  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
32  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
33  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34  */
35 
43 #ifndef ITERATOR_ITER_DELEGPT_H
44 #define ITERATOR_ITER_DELEGPT_H
45 #include "util/log.h"
46 struct regional;
47 struct delegpt_ns;
48 struct delegpt_addr;
49 struct dns_msg;
50 struct ub_packed_rrset_key;
51 struct msgreply_entry;
52 
57 struct delegpt {
61  size_t namelen;
63  int namelabs;
64 
66  struct delegpt_ns* nslist;
74 
76  int bogus;
88 };
89 
93 struct delegpt_ns {
95  struct delegpt_ns* next;
99  size_t namelen;
106  int resolved;
124 };
125 
129 struct delegpt_addr {
136 
140  socklen_t addrlen;
142  int attempts;
144  int sel_rtt;
156 };
157 
163 struct delegpt* delegpt_create(struct regional* regional);
164 
171 struct delegpt* delegpt_copy(struct delegpt* dp, struct regional* regional);
172 
180 int delegpt_set_name(struct delegpt* dp, struct regional* regional,
181  uint8_t* name);
182 
191 int delegpt_add_ns(struct delegpt* dp, struct regional* regional,
192  uint8_t* name, uint8_t lame);
193 
202 int delegpt_rrset_add_ns(struct delegpt* dp, struct regional* regional,
203  struct ub_packed_rrset_key* ns_rrset, uint8_t lame);
204 
218 int delegpt_add_target(struct delegpt* dp, struct regional* regional,
219  uint8_t* name, size_t namelen, struct sockaddr_storage* addr,
220  socklen_t addrlen, uint8_t bogus, uint8_t lame);
221 
230 int delegpt_add_rrset_A(struct delegpt* dp, struct regional* regional,
231  struct ub_packed_rrset_key* rrset, uint8_t lame);
232 
241 int delegpt_add_rrset_AAAA(struct delegpt* dp, struct regional* regional,
242  struct ub_packed_rrset_key* rrset, uint8_t lame);
243 
253 int delegpt_add_rrset(struct delegpt* dp, struct regional* regional,
254  struct ub_packed_rrset_key* rrset, uint8_t lame);
255 
267 int delegpt_add_addr(struct delegpt* dp, struct regional* regional,
268  struct sockaddr_storage* addr, socklen_t addrlen,
269  uint8_t bogus, uint8_t lame, char* tls_auth_name);
270 
278 struct delegpt_ns* delegpt_find_ns(struct delegpt* dp, uint8_t* name,
279  size_t namelen);
280 
288 struct delegpt_addr* delegpt_find_addr(struct delegpt* dp,
289  struct sockaddr_storage* addr, socklen_t addrlen);
290 
296 void delegpt_log(enum verbosity_value v, struct delegpt* dp);
297 
299 void delegpt_count_ns(struct delegpt* dp, size_t* numns, size_t* missing);
300 
302 void delegpt_count_addr(struct delegpt* dp, size_t* numaddr, size_t* numres,
303  size_t* numavail);
304 
310 
317 
319 size_t delegpt_count_targets(struct delegpt* dp);
320 
339 struct delegpt* delegpt_from_message(struct dns_msg* msg,
340  struct regional* regional);
341 
347 void delegpt_add_neg_msg(struct delegpt* dp, struct msgreply_entry* msg);
348 
354 void delegpt_no_ipv6(struct delegpt* dp);
355 
361 void delegpt_no_ipv4(struct delegpt* dp);
362 
369 
374 void delegpt_free_mlc(struct delegpt* dp);
375 
383 
391 int delegpt_add_ns_mlc(struct delegpt* dp, uint8_t* name, uint8_t lame);
392 
403 int delegpt_add_addr_mlc(struct delegpt* dp, struct sockaddr_storage* addr,
404  socklen_t addrlen, uint8_t bogus, uint8_t lame, char* tls_auth_name);
405 
418 int delegpt_add_target_mlc(struct delegpt* dp, uint8_t* name, size_t namelen,
419  struct sockaddr_storage* addr, socklen_t addrlen, uint8_t bogus,
420  uint8_t lame);
421 
423 size_t delegpt_get_mem(struct delegpt* dp);
424 
425 #endif /* ITERATOR_ITER_DELEGPT_H */
uint8_t done_pside6
Definition: iter_delegpt.h:123
int delegpt_add_target(struct delegpt *dp, struct regional *regional, uint8_t *name, size_t namelen, struct sockaddr_storage *addr, socklen_t addrlen, uint8_t bogus, uint8_t lame)
size_t namelen
Definition: iter_delegpt.h:61
uint8_t got4
Definition: iter_delegpt.h:108
Definition: dns.h:61
Definition: msgreply.h:211
int delegpt_rrset_add_ns(struct delegpt *dp, struct regional *regional, struct ub_packed_rrset_key *ns_rrset, uint8_t lame)
void dp(key a)
Definition: rctTypes.cpp:46
size_t delegpt_count_missing_targets(struct delegpt *dp)
uint8_t got6
Definition: iter_delegpt.h:110
void delegpt_no_ipv4(struct delegpt *dp)
struct delegpt_ns * nslist
Definition: iter_delegpt.h:66
void delegpt_add_unused_targets(struct delegpt *dp)
int delegpt_add_ns(struct delegpt *dp, struct regional *regional, uint8_t *name, uint8_t lame)
int namelabs
Definition: iter_delegpt.h:63
struct delegpt * delegpt_from_message(struct dns_msg *msg, struct regional *regional)
void delegpt_free_mlc(struct delegpt *dp)
unsigned char uint8_t
Definition: stdint.h:124
int delegpt_add_rrset_A(struct delegpt *dp, struct regional *regional, struct ub_packed_rrset_key *rrset, uint8_t lame)
const char * name
int delegpt_set_name(struct delegpt *dp, struct regional *regional, uint8_t *name)
int delegpt_add_addr(struct delegpt *dp, struct regional *regional, struct sockaddr_storage *addr, socklen_t addrlen, uint8_t bogus, uint8_t lame, char *tls_auth_name)
struct sockaddr_storage addr
Definition: iter_delegpt.h:138
struct delegpt * delegpt_copy(struct delegpt *dp, struct regional *regional)
void delegpt_count_ns(struct delegpt *dp, size_t *numns, size_t *missing)
struct delegpt_addr * next_target
Definition: iter_delegpt.h:135
void delegpt_count_addr(struct delegpt *dp, size_t *numaddr, size_t *numres, size_t *numavail)
uint8_t lame
Definition: iter_delegpt.h:115
size_t delegpt_get_mem(struct delegpt *dp)
int delegpt_add_rrset(struct delegpt *dp, struct regional *regional, struct ub_packed_rrset_key *rrset, uint8_t lame)
uint8_t done_pside4
Definition: iter_delegpt.h:119
int delegpt_add_rrset_AAAA(struct delegpt *dp, struct regional *regional, struct ub_packed_rrset_key *rrset, uint8_t lame)
void delegpt_no_ipv6(struct delegpt *dp)
verbosity_value
Definition: log.h:49
struct delegpt_ns * delegpt_find_ns(struct delegpt *dp, uint8_t *name, size_t namelen)
int bogus
Definition: iter_delegpt.h:76
uint8_t dnsseclame
Definition: iter_delegpt.h:153
uint8_t * name
Definition: iter_delegpt.h:97
socklen_t addrlen
Definition: iter_delegpt.h:140
int delegpt_add_target_mlc(struct delegpt *dp, uint8_t *name, size_t namelen, struct sockaddr_storage *addr, socklen_t addrlen, uint8_t bogus, uint8_t lame)
uint8_t dp_type_mlc
Definition: iter_delegpt.h:83
uint8_t * name
Definition: iter_delegpt.h:59
int delegpt_add_addr_mlc(struct delegpt *dp, struct sockaddr_storage *addr, socklen_t addrlen, uint8_t bogus, uint8_t lame, char *tls_auth_name)
struct delegpt_ns * next
Definition: iter_delegpt.h:95
struct delegpt_addr * result_list
Definition: iter_delegpt.h:73
uint8_t ssl_upstream
Definition: iter_delegpt.h:85
struct delegpt_addr * next_usable
Definition: iter_delegpt.h:133
struct delegpt_addr * target_list
Definition: iter_delegpt.h:68
struct delegpt_addr * usable_list
Definition: iter_delegpt.h:71
struct delegpt * delegpt_create_mlc(uint8_t *name)
struct delegpt_addr * delegpt_find_addr(struct delegpt *dp, struct sockaddr_storage *addr, socklen_t addrlen)
struct delegpt * delegpt_create(struct regional *regional)
struct delegpt_addr * next_result
Definition: iter_delegpt.h:131
uint8_t has_parent_side_NS
Definition: iter_delegpt.h:81
uint8_t bogus
Definition: iter_delegpt.h:147
size_t namelen
Definition: iter_delegpt.h:99
char * tls_auth_name
Definition: iter_delegpt.h:155
int delegpt_set_name_mlc(struct delegpt *dp, uint8_t *name)
void delegpt_add_neg_msg(struct delegpt *dp, struct msgreply_entry *msg)
size_t delegpt_count_targets(struct delegpt *dp)
void delegpt_log(enum verbosity_value v, struct delegpt *dp)
int delegpt_add_ns_mlc(struct delegpt *dp, uint8_t *name, uint8_t lame)
uint8_t lame
Definition: iter_delegpt.h:149
uint8_t auth_dp
Definition: iter_delegpt.h:87