Electroneum
iterator.h File Reference
Include dependency graph for iterator.h:

Go to the source code of this file.

Classes

struct  iter_env
 
struct  iter_qstate
 
struct  iter_prep_list
 

Macros

#define MAX_TARGET_COUNT   64
 
#define MAX_RESTART_COUNT   8
 
#define MAX_REFERRAL_COUNT   130
 
#define MAX_SENT_COUNT   32
 
#define DNSSEC_LAME_DETECT_COUNT   4
 
#define MAX_MINIMISE_COUNT   10
 
#define MAX_MINIMISE_TIMEOUT_COUNT   3
 
#define MINIMISE_ONE_LAB   4
 
#define MINIMISE_MULTIPLE_LABS   (MAX_MINIMISE_COUNT - MINIMISE_ONE_LAB)
 
#define TARGET_FETCH_STOP   3
 
#define UNKNOWN_SERVER_NICENESS   376
 
#define USEFUL_SERVER_TOP_TIMEOUT   120000
 
#define OUTBOUND_MSG_RETRY   5
 
#define RTT_BAND   400
 
#define INFRA_BACKOFF_INITIAL   240
 

Enumerations

enum  minimisation_state { INIT_MINIMISE_STATE = 0, MINIMISE_STATE, SKIP_MINIMISE_STATE, DONOT_MINIMISE_STATE }
 
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
}
 

Functions

struct module_func_blockiter_get_funcblock (void)
 
const char * iter_state_to_string (enum iter_state state)
 
int iter_state_is_responsestate (enum iter_state s)
 
int iter_init (struct module_env *env, int id)
 
void iter_deinit (struct module_env *env, int id)
 
void iter_operate (struct module_qstate *qstate, enum module_ev event, int id, struct outbound_entry *outbound)
 
void iter_inform_super (struct module_qstate *qstate, int id, struct module_qstate *super)
 
void iter_clear (struct module_qstate *qstate, int id)
 
size_t iter_get_mem (struct module_env *env, int id)
 

Detailed Description

This file contains a module that performs recursive iterative DNS query processing.

Definition in file iterator.h.

Macro Definition Documentation

◆ DNSSEC_LAME_DETECT_COUNT

#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

Definition at line 66 of file iterator.h.

◆ INFRA_BACKOFF_INITIAL

#define INFRA_BACKOFF_INITIAL   240

Start value for blacklisting a host, 2*USEFUL_SERVER_TOP_TIMEOUT in sec

Definition at line 99 of file iterator.h.

◆ MAX_MINIMISE_COUNT

#define MAX_MINIMISE_COUNT   10

max number of QNAME minimisation iterations. Limits number of queries for QNAMEs with a lot of labels.

Definition at line 71 of file iterator.h.

◆ MAX_MINIMISE_TIMEOUT_COUNT

#define MAX_MINIMISE_TIMEOUT_COUNT   3

Definition at line 74 of file iterator.h.

◆ MAX_REFERRAL_COUNT

#define MAX_REFERRAL_COUNT   130

max number of referrals. Makes sure resolver does not run away

Definition at line 61 of file iterator.h.

◆ MAX_RESTART_COUNT

#define MAX_RESTART_COUNT   8

max number of query restarts. Determines max number of CNAME chain.

Definition at line 59 of file iterator.h.

◆ MAX_SENT_COUNT

#define MAX_SENT_COUNT   32

max number of queries-sent-out. Make sure large NS set does not loop

Definition at line 63 of file iterator.h.

◆ MAX_TARGET_COUNT

#define MAX_TARGET_COUNT   64

max number of targets spawned for a query and its subqueries

Definition at line 57 of file iterator.h.

◆ MINIMISE_MULTIPLE_LABS

#define MINIMISE_MULTIPLE_LABS   (MAX_MINIMISE_COUNT - MINIMISE_ONE_LAB)

Definition at line 80 of file iterator.h.

◆ MINIMISE_ONE_LAB

#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 tham MAX_MINIMISE_COUNT

Definition at line 79 of file iterator.h.

◆ OUTBOUND_MSG_RETRY

#define OUTBOUND_MSG_RETRY   5

number of retries on outgoing queries

Definition at line 93 of file iterator.h.

◆ RTT_BAND

#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.

Definition at line 97 of file iterator.h.

◆ TARGET_FETCH_STOP

#define TARGET_FETCH_STOP   3

at what query-sent-count to stop target fetch policy

Definition at line 82 of file iterator.h.

◆ UNKNOWN_SERVER_NICENESS

#define UNKNOWN_SERVER_NICENESS   376

how nice is a server without further information, in msec Equals rtt initial timeout value.

Definition at line 86 of file iterator.h.

◆ USEFUL_SERVER_TOP_TIMEOUT

#define USEFUL_SERVER_TOP_TIMEOUT   120000

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

Definition at line 91 of file iterator.h.

Enumeration Type Documentation

◆ iter_state

enum iter_state

State of the iterator for a query.

Enumerator
INIT_REQUEST_STATE 

Externally generated queries start at this state. Query restarts are reset to this state.

INIT_REQUEST_2_STATE 

Root priming events reactivate here, most other events pass through this naturally as the 2nd part of the INIT_REQUEST_STATE.

INIT_REQUEST_3_STATE 

Stub priming events reactivate here, most other events pass through this naturally as the 3rd part of the INIT_REQUEST_STATE.

QUERYTARGETS_STATE 

Each time a delegation point changes for a given query or a query times out and/or wakes up, this state is (re)visited. This state is responsible for iterating through a list of nameserver targets.

QUERY_RESP_STATE 

Responses to queries start at this state. This state handles the decision tree associated with handling responses.

PRIME_RESP_STATE 

Responses to priming queries finish at this state.

COLLECT_CLASS_STATE 

Collecting query class information, for qclass=ANY, when it spawns off queries for every class, it returns here.

DSNS_FIND_STATE 

Find NS record to resolve DS record from, walking to the right NS spot until we find it

FINISHED_STATE 

Responses that are to be returned upstream end at this state. As well as responses to target queries.

Definition at line 165 of file iterator.h.

◆ minimisation_state

QNAME minimisation state

Enumerator
INIT_MINIMISE_STATE 

(Re)start minimisation. Outgoing QNAME should be set to dp->name. State entered on new query or after following referral or CNAME.

MINIMISE_STATE 

QNAME minimisation ongoing. Increase QNAME on every iteration.

SKIP_MINIMISE_STATE 

Don't increment QNAME this iteration

DONOT_MINIMISE_STATE 

Send out full QNAME + original QTYPE

Definition at line 142 of file iterator.h.

Function Documentation

◆ iter_clear()

void iter_clear ( struct module_qstate qstate,
int  id 
)

iterator cleanup query state

◆ iter_deinit()

void iter_deinit ( struct module_env env,
int  id 
)

iterator deinit

◆ iter_get_funcblock()

struct module_func_block* iter_get_funcblock ( void  )

Get the iterator function block.

Returns
: function block with function pointers to iterator methods.

◆ iter_get_mem()

size_t iter_get_mem ( struct module_env env,
int  id 
)

iterator alloc size routine

◆ iter_inform_super()

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.

Parameters
qstatequery state that finished.
idmodule id.
superthe qstate to inform.

◆ iter_init()

int iter_init ( struct module_env env,
int  id 
)

iterator init

◆ iter_operate()

void iter_operate ( struct module_qstate qstate,
enum module_ev  event,
int  id,
struct outbound_entry outbound 
)

iterator operate on a query

◆ iter_state_is_responsestate()

int iter_state_is_responsestate ( enum iter_state  s)

See if iterator state is a response state

Parameters
sto inspect
Returns
true if response state.

◆ iter_state_to_string()

const char* iter_state_to_string ( enum iter_state  state)

Get iterator state as a string

Parameters
stateto convert
Returns
constant string that is printable.