This file contains a module that performs recursive iterative DNS query processing. More...
Data Structures | |
struct | iter_env |
Global state for the iterator. More... | |
struct | iter_qstate |
Per query state for the iterator module. More... | |
struct | iter_prep_list |
List of prepend items. More... | |
Macros | |
#define | MAX_TARGET_COUNT 64 |
max number of targets spawned for a query and its subqueries | |
#define | MAX_DP_TARGET_COUNT 16 |
max number of target lookups per qstate, per delegation point | |
#define | MAX_TARGET_NX 5 |
max number of nxdomains allowed for target lookups for a query and its subqueries | |
#define | MAX_TARGET_NX_FALLBACK (MAX_TARGET_NX*2) |
max number of nxdomains allowed for target lookups for a query and its subqueries when fallback has kicked in | |
#define | MAX_REFERRAL_COUNT 130 |
max number of referrals. More... | |
#define | DNSSEC_LAME_DETECT_COUNT 4 |
max number of queries for which to perform dnsseclameness detection, (rrsigs missing detection) after that, just pick up that response | |
#define | MAX_MINIMISE_COUNT 10 |
max number of QNAME minimisation iterations. More... | |
#define | MAX_MINIMISE_TIMEOUT_COUNT 3 |
#define | MINIMISE_ONE_LAB 4 |
number of labels from QNAME that are always send individually when using QNAME minimisation, even when the number of labels of the QNAME is bigger than MAX_MINIMISE_COUNT | |
#define | MINIMISE_MULTIPLE_LABS (MAX_MINIMISE_COUNT - MINIMISE_ONE_LAB) |
#define | TARGET_FETCH_STOP 3 |
at what query-sent-count to stop target fetch policy | |
#define | RTT_BAND 400 |
RTT band, within this amount from the best, servers are chosen randomly. More... | |
#define | EMPTY_NODATA_RETRY_COUNT 2 |
Number of retries for empty nodata packets before it is accepted. | |
Enumerations | |
enum | minimisation_state { INIT_MINIMISE_STATE = 0 , MINIMISE_STATE , SKIP_MINIMISE_STATE , DONOT_MINIMISE_STATE } |
QNAME minimisation state. More... | |
enum | iter_state { INIT_REQUEST_STATE = 0 , INIT_REQUEST_2_STATE , INIT_REQUEST_3_STATE , QUERYTARGETS_STATE , QUERY_RESP_STATE , PRIME_RESP_STATE , COLLECT_CLASS_STATE , DSNS_FIND_STATE , FINISHED_STATE } |
State of the iterator for a query. More... | |
enum | target_count_variables { TARGET_COUNT_REF = 0 , TARGET_COUNT_QUERIES , TARGET_COUNT_NX , TARGET_COUNT_GLOBAL_QUOTA , TARGET_COUNT_MAX } |
Shared counters for queries. More... | |
Functions | |
struct module_func_block * | iter_get_funcblock (void) |
Get the iterator function block. More... | |
const char * | iter_state_to_string (enum iter_state state) |
Get iterator state as a string. More... | |
int | iter_state_is_responsestate (enum iter_state s) |
See if iterator state is a response state. More... | |
int | iter_init (struct module_env *env, int id) |
iterator init | |
void | iter_deinit (struct module_env *env, int id) |
iterator deinit | |
void | iter_operate (struct module_qstate *qstate, enum module_ev event, int id, struct outbound_entry *outbound) |
iterator operate on a query | |
void | iter_inform_super (struct module_qstate *qstate, int id, struct module_qstate *super) |
Return priming query results to interested super querystates. More... | |
void | iter_clear (struct module_qstate *qstate, int id) |
iterator cleanup query state | |
size_t | iter_get_mem (struct module_env *env, int id) |
iterator alloc size routine | |
Variables | |
int | MAX_GLOBAL_QUOTA |
max number of upstream queries for a query and its subqueries, it is never reset. | |
int | UNKNOWN_SERVER_NICENESS |
how nice is a server without further information, in msec Equals rtt initial timeout value. | |
int | USEFUL_SERVER_TOP_TIMEOUT |
maximum timeout before a host is deemed unsuitable, in msec. More... | |
int | BLACKLIST_PENALTY |
penalty to validation failed blacklisted IPs Equals USEFUL_SERVER_TOP_TIMEOUT*4, and thus when RTT_MAX_TIMEOUT is overwritten by config infra_cache_max_rtt, it will be overwritten as well. | |
This file contains a module that performs recursive iterative DNS query processing.
#define MAX_REFERRAL_COUNT 130 |
max number of referrals.
Makes sure resolver does not run away
#define MAX_MINIMISE_COUNT 10 |
max number of QNAME minimisation iterations.
Limits number of queries for QNAMEs with a lot of labels.
#define RTT_BAND 400 |
RTT band, within this amount from the best, servers are chosen randomly.
Chosen so that the UNKNOWN_SERVER_NICENESS falls within the band of a fast server, this causes server exploration as a side benefit. msec.
enum minimisation_state |
QNAME minimisation state.
enum iter_state |
State of the iterator for a query.
Shared counters for queries.
struct module_func_block* iter_get_funcblock | ( | void | ) |
Get the iterator function block.
References iter_block.
Referenced by module_funcs_avail().
const char* iter_state_to_string | ( | enum iter_state | state | ) |
Get iterator state as a string.
state | to convert |
References COLLECT_CLASS_STATE, DSNS_FIND_STATE, FINISHED_STATE, INIT_REQUEST_2_STATE, INIT_REQUEST_3_STATE, INIT_REQUEST_STATE, PRIME_RESP_STATE, QUERY_RESP_STATE, and QUERYTARGETS_STATE.
Referenced by iter_handle().
int iter_state_is_responsestate | ( | enum iter_state | s | ) |
See if iterator state is a response state.
s | to inspect |
References COLLECT_CLASS_STATE, INIT_REQUEST_2_STATE, INIT_REQUEST_3_STATE, INIT_REQUEST_STATE, and QUERYTARGETS_STATE.
Referenced by next_state().
void iter_inform_super | ( | struct module_qstate * | qstate, |
int | id, | ||
struct module_qstate * | super | ||
) |
Return priming query results to interested super querystates.
Sets the delegation point and delegation message (not nonRD queries). This is a callback from walk_supers.
qstate | query state that finished. |
id | module id. |
super | the qstate to inform. |
References DSNS_FIND_STATE, module_qstate::is_priming, LDNS_RR_CLASS_ANY, LDNS_RR_TYPE_DS, module_qstate::minfo, processClassResponse(), processDSNSResponse(), query_info::qclass, module_qstate::qinfo, query_info::qtype, and module_qstate::return_rcode.
Referenced by fptr_whitelist_mod_inform_super().
|
extern |
maximum timeout before a host is deemed unsuitable, in msec.
After host_ttl this will be timed out and the host will be tried again. Equals RTT_MAX_TIMEOUT, and thus when RTT_MAX_TIMEOUT is overwritten by config infra_cache_max_rtt, it will be overwritten as well.
Referenced by config_apply(), config_set_option(), dump_infra_host(), infra_get_lame_rtt(), infra_host(), infra_rtt_update(), iter_filter_order(), iter_filter_unsuitable(), iter_server_selection(), and print_dp_details().