Electroneum
Toggle main menu visibility
Loading...
Searching...
No Matches
iterator.h
Go to the documentation of this file.
1
/*
2
* iterator/iterator.h - iterative resolver DNS query response module
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
42
43
#ifndef ITERATOR_ITERATOR_H
44
#define ITERATOR_ITERATOR_H
45
#include "
services/outbound_list.h
"
46
#include "
util/data/msgreply.h
"
47
#include "
util/module.h
"
48
struct
delegpt
;
49
struct
iter_hints
;
50
struct
iter_forwards
;
51
struct
iter_donotq
;
52
struct
iter_prep_list
;
53
struct
iter_priv
;
54
struct
rbtree_type
;
55
57
#define MAX_TARGET_COUNT 64
59
#define MAX_RESTART_COUNT 8
61
#define MAX_REFERRAL_COUNT 130
63
#define MAX_SENT_COUNT 32
66
#define DNSSEC_LAME_DETECT_COUNT 4
71
#define MAX_MINIMISE_COUNT 10
72
/* max number of time-outs for minimised query. Prevents resolving failures
73
* when the QNAME minimisation QTYPE is blocked. */
74
#define MAX_MINIMISE_TIMEOUT_COUNT 3
79
#define MINIMISE_ONE_LAB 4
80
#define MINIMISE_MULTIPLE_LABS (MAX_MINIMISE_COUNT - MINIMISE_ONE_LAB)
82
#define TARGET_FETCH_STOP 3
86
#define UNKNOWN_SERVER_NICENESS 376
91
#define USEFUL_SERVER_TOP_TIMEOUT 120000
93
#define OUTBOUND_MSG_RETRY 5
97
#define RTT_BAND 400
99
#define INFRA_BACKOFF_INITIAL 240
100
104
struct
iter_env
{
106
int
supports_ipv6
;
107
109
int
supports_ipv4
;
110
112
struct
iter_donotq
*
donotq
;
113
115
struct
iter_priv
*
priv
;
116
118
struct
rbtree_type
*
caps_white
;
119
121
int
max_dependency_depth
;
122
131
int
*
target_fetch_policy
;
132
134
lock_basic_type
queries_ratelimit_lock
;
136
size_t
num_queries_ratelimited
;
137
};
138
142
enum
minimisation_state
{
147
INIT_MINIMISE_STATE
= 0,
151
MINIMISE_STATE
,
155
SKIP_MINIMISE_STATE
,
159
DONOT_MINIMISE_STATE
,
160
};
161
165
enum
iter_state
{
170
INIT_REQUEST_STATE
= 0,
171
176
INIT_REQUEST_2_STATE
,
177
182
INIT_REQUEST_3_STATE
,
183
190
QUERYTARGETS_STATE
,
191
196
QUERY_RESP_STATE
,
197
199
PRIME_RESP_STATE
,
200
203
COLLECT_CLASS_STATE
,
204
207
DSNS_FIND_STATE
,
208
211
FINISHED_STATE
212
};
213
217
struct
iter_qstate
{
225
enum
iter_state
state
;
226
234
enum
iter_state
final_state
;
235
241
int
depth
;
242
246
struct
dns_msg
*
response
;
247
252
struct
iter_prep_list
*
an_prepend_list
;
254
struct
iter_prep_list
*
an_prepend_last
;
255
260
struct
iter_prep_list
*
ns_prepend_list
;
262
struct
iter_prep_list
*
ns_prepend_last
;
263
267
struct
query_info
qchase
;
269
uint16_t
chase_flags
;
271
int
chase_to_rd
;
272
278
struct
delegpt
*
dp
;
279
281
int
caps_fallback
;
283
size_t
caps_server
;
286
struct
reply_info
*
caps_reply
;
287
struct
dns_msg
*
caps_response
;
288
290
struct
dns_msg
*
deleg_msg
;
291
293
int
num_target_queries
;
294
296
int
num_current_queries
;
297
299
int
query_restart_count
;
300
302
int
referral_count
;
303
305
int
sent_count
;
306
309
int
*
target_count
;
310
312
int
ratelimit_ok
;
313
320
struct
delegpt
*
store_parent_NS
;
321
330
int
query_for_pside_glue
;
332
struct
ub_packed_rrset_key
*
pside_glue
;
333
335
uint8_t
*
dsns_point
;
337
size_t
dsns_point_len
;
338
344
int
dnssec_expected
;
345
350
int
dnssec_lame_query
;
351
356
int
wait_priming_stub
;
357
366
int
refetch_glue
;
367
369
struct
outbound_list
outlist
;
370
372
enum
minimisation_state
minimisation_state
;
373
378
struct
query_info
qinfo_out
;
379
384
int
minimise_count
;
385
389
int
minimise_timeout_count
;
390
392
int
auth_zone_response
;
394
int
auth_zone_avoid
;
395
};
396
400
struct
iter_prep_list
{
402
struct
iter_prep_list
*
next
;
404
struct
ub_packed_rrset_key
*
rrset
;
405
};
406
411
struct
module_func_block
*
iter_get_funcblock
(
void
);
412
418
const
char
*
iter_state_to_string
(
enum
iter_state
state
);
419
425
int
iter_state_is_responsestate
(
enum
iter_state
s);
426
428
int
iter_init
(
struct
module_env
* env,
int
id
);
429
431
void
iter_deinit
(
struct
module_env
* env,
int
id
);
432
434
void
iter_operate
(
struct
module_qstate
* qstate,
enum
module_ev
event,
int
id
,
435
struct
outbound_entry
* outbound);
436
447
void
iter_inform_super
(
struct
module_qstate
* qstate,
int
id
,
448
struct
module_qstate
* super);
449
451
void
iter_clear
(
struct
module_qstate
* qstate,
int
id
);
452
454
size_t
iter_get_mem
(
struct
module_env
* env,
int
id
);
455
456
#endif
/* ITERATOR_ITERATOR_H */
iter_state_to_string
const char * iter_state_to_string(enum iter_state state)
iter_get_funcblock
struct module_func_block * iter_get_funcblock(void)
iter_get_mem
size_t iter_get_mem(struct module_env *env, int id)
iter_state
iter_state
Definition
iterator.h:165
INIT_REQUEST_3_STATE
@ INIT_REQUEST_3_STATE
Definition
iterator.h:182
DSNS_FIND_STATE
@ DSNS_FIND_STATE
Definition
iterator.h:207
FINISHED_STATE
@ FINISHED_STATE
Definition
iterator.h:211
PRIME_RESP_STATE
@ PRIME_RESP_STATE
Definition
iterator.h:199
INIT_REQUEST_STATE
@ INIT_REQUEST_STATE
Definition
iterator.h:170
COLLECT_CLASS_STATE
@ COLLECT_CLASS_STATE
Definition
iterator.h:203
QUERY_RESP_STATE
@ QUERY_RESP_STATE
Definition
iterator.h:196
INIT_REQUEST_2_STATE
@ INIT_REQUEST_2_STATE
Definition
iterator.h:176
QUERYTARGETS_STATE
@ QUERYTARGETS_STATE
Definition
iterator.h:190
iter_state_is_responsestate
int iter_state_is_responsestate(enum iter_state s)
iter_init
int iter_init(struct module_env *env, int id)
iter_inform_super
void iter_inform_super(struct module_qstate *qstate, int id, struct module_qstate *super)
iter_clear
void iter_clear(struct module_qstate *qstate, int id)
iter_deinit
void iter_deinit(struct module_env *env, int id)
iter_operate
void iter_operate(struct module_qstate *qstate, enum module_ev event, int id, struct outbound_entry *outbound)
minimisation_state
minimisation_state
Definition
iterator.h:142
MINIMISE_STATE
@ MINIMISE_STATE
Definition
iterator.h:151
DONOT_MINIMISE_STATE
@ DONOT_MINIMISE_STATE
Definition
iterator.h:159
INIT_MINIMISE_STATE
@ INIT_MINIMISE_STATE
Definition
iterator.h:147
SKIP_MINIMISE_STATE
@ SKIP_MINIMISE_STATE
Definition
iterator.h:155
lock_basic_type
int lock_basic_type
Definition
locks.h:269
module.h
module_ev
module_ev
Definition
module.h:536
msgreply.h
outbound_list.h
uint16_t
unsigned short uint16_t
Definition
stdint.h:125
uint8_t
unsigned char uint8_t
Definition
stdint.h:124
delegpt
Definition
iter_delegpt.h:57
dns_msg
Definition
dns.h:61
iter_donotq
Definition
iter_donotq.h:53
iter_env
Definition
iterator.h:104
iter_env::supports_ipv4
int supports_ipv4
Definition
iterator.h:109
iter_env::max_dependency_depth
int max_dependency_depth
Definition
iterator.h:121
iter_env::num_queries_ratelimited
size_t num_queries_ratelimited
Definition
iterator.h:136
iter_env::target_fetch_policy
int * target_fetch_policy
Definition
iterator.h:131
iter_env::donotq
struct iter_donotq * donotq
Definition
iterator.h:112
iter_env::queries_ratelimit_lock
lock_basic_type queries_ratelimit_lock
Definition
iterator.h:134
iter_env::supports_ipv6
int supports_ipv6
Definition
iterator.h:106
iter_env::caps_white
struct rbtree_type * caps_white
Definition
iterator.h:118
iter_env::priv
struct iter_priv * priv
Definition
iterator.h:115
iter_forwards
Definition
iter_fwd.h:52
iter_hints
Definition
iter_hints.h:53
iter_prep_list
Definition
iterator.h:400
iter_prep_list::rrset
struct ub_packed_rrset_key * rrset
Definition
iterator.h:404
iter_prep_list::next
struct iter_prep_list * next
Definition
iterator.h:402
iter_priv
Definition
iter_priv.h:55
iter_qstate
Definition
iterator.h:217
iter_qstate::outlist
struct outbound_list outlist
Definition
iterator.h:369
iter_qstate::minimisation_state
enum minimisation_state minimisation_state
Definition
iterator.h:372
iter_qstate::qchase
struct query_info qchase
Definition
iterator.h:267
iter_qstate::minimise_timeout_count
int minimise_timeout_count
Definition
iterator.h:389
iter_qstate::dsns_point_len
size_t dsns_point_len
Definition
iterator.h:337
iter_qstate::target_count
int * target_count
Definition
iterator.h:309
iter_qstate::referral_count
int referral_count
Definition
iterator.h:302
iter_qstate::store_parent_NS
struct delegpt * store_parent_NS
Definition
iterator.h:320
iter_qstate::an_prepend_last
struct iter_prep_list * an_prepend_last
Definition
iterator.h:254
iter_qstate::depth
int depth
Definition
iterator.h:241
iter_qstate::auth_zone_avoid
int auth_zone_avoid
Definition
iterator.h:394
iter_qstate::dnssec_expected
int dnssec_expected
Definition
iterator.h:344
iter_qstate::num_target_queries
int num_target_queries
Definition
iterator.h:293
iter_qstate::chase_flags
uint16_t chase_flags
Definition
iterator.h:269
iter_qstate::response
struct dns_msg * response
Definition
iterator.h:246
iter_qstate::caps_fallback
int caps_fallback
Definition
iterator.h:281
iter_qstate::wait_priming_stub
int wait_priming_stub
Definition
iterator.h:356
iter_qstate::auth_zone_response
int auth_zone_response
Definition
iterator.h:392
iter_qstate::query_restart_count
int query_restart_count
Definition
iterator.h:299
iter_qstate::state
enum iter_state state
Definition
iterator.h:225
iter_qstate::minimise_count
int minimise_count
Definition
iterator.h:384
iter_qstate::ns_prepend_list
struct iter_prep_list * ns_prepend_list
Definition
iterator.h:260
iter_qstate::refetch_glue
int refetch_glue
Definition
iterator.h:366
iter_qstate::ns_prepend_last
struct iter_prep_list * ns_prepend_last
Definition
iterator.h:262
iter_qstate::ratelimit_ok
int ratelimit_ok
Definition
iterator.h:312
iter_qstate::caps_reply
struct reply_info * caps_reply
Definition
iterator.h:286
iter_qstate::final_state
enum iter_state final_state
Definition
iterator.h:234
iter_qstate::deleg_msg
struct dns_msg * deleg_msg
Definition
iterator.h:290
iter_qstate::num_current_queries
int num_current_queries
Definition
iterator.h:296
iter_qstate::caps_response
struct dns_msg * caps_response
Definition
iterator.h:287
iter_qstate::pside_glue
struct ub_packed_rrset_key * pside_glue
Definition
iterator.h:332
iter_qstate::dp
struct delegpt * dp
Definition
iterator.h:278
iter_qstate::query_for_pside_glue
int query_for_pside_glue
Definition
iterator.h:330
iter_qstate::dsns_point
uint8_t * dsns_point
Definition
iterator.h:335
iter_qstate::an_prepend_list
struct iter_prep_list * an_prepend_list
Definition
iterator.h:252
iter_qstate::caps_server
size_t caps_server
Definition
iterator.h:283
iter_qstate::qinfo_out
struct query_info qinfo_out
Definition
iterator.h:378
iter_qstate::dnssec_lame_query
int dnssec_lame_query
Definition
iterator.h:350
iter_qstate::chase_to_rd
int chase_to_rd
Definition
iterator.h:271
iter_qstate::sent_count
int sent_count
Definition
iterator.h:305
module_env
Definition
module.h:307
module_func_block
Definition
module.h:642
module_qstate
Definition
module.h:571
outbound_entry
Definition
outbound_list.h:61
outbound_list
Definition
outbound_list.h:52
query_info
Definition
msgreply.h:69
rbtree_type
Definition
rbtree.h:76
reply_info
Definition
msgreply.h:125
state
Definition
blake256.h:37
ub_packed_rrset_key
Definition
packed_rrset.h:107
external
unbound
iterator
iterator.h
Generated on
for Electroneum by
1.17.0