iter_env
struct iter_env;
struct iter_env;
struct iter_env;
struct iter_env* ie)
struct iter_env* ie, struct module_qstate* qstate)
struct iter_env;
struct iter_env* ie);
struct iter_env* ie = NULL;
ie = (struct iter_env*)env->modinfo[m];
iter_apply_cfg(struct iter_env* iter_env, struct config_file* cfg)
if(!read_fetch_policy(&iter_env->target_fetch_policy,
&iter_env->max_dependency_depth, cfg->target_fetch_policy))
for(i=0; i<iter_env->max_dependency_depth+1; i++)
i, iter_env->target_fetch_policy[i]);
if(!iter_env->donotq)
iter_env->donotq = donotq_create();
if(!iter_env->donotq || !donotq_apply_cfg(iter_env->donotq, cfg)) {
if(!iter_env->priv)
iter_env->priv = priv_create();
if(!iter_env->priv || !priv_apply_cfg(iter_env->priv, cfg)) {
if(!iter_env->caps_white)
iter_env->caps_white = caps_white_create();
if(!iter_env->caps_white || !caps_white_apply_cfg(
iter_env->caps_white, cfg)) {
if(!nat64_apply_cfg(&iter_env->nat64, cfg)) {
iter_env->supports_ipv6 = cfg->do_ip6;
iter_env->supports_ipv4 = cfg->do_ip4;
iter_env->outbound_msg_retry = cfg->outbound_msg_retry;
iter_env->max_sent_count = cfg->max_sent_count;
iter_env->max_query_restarts = cfg->max_query_restarts;
iter_filter_unsuitable(struct iter_env* iter_env, struct module_env* env,
if(donotq_lookup(iter_env->donotq, &a->addr, a->addrlen)) {
if(!iter_env->supports_ipv6 && addr_is_ip6(&a->addr, a->addrlen)) {
if(!iter_env->supports_ipv4 && !iter_env->nat64.use_nat64 &&
iter_fill_rtt(struct iter_env* iter_env, struct module_env* env,
a->sel_rtt = iter_filter_unsuitable(iter_env, env,
iter_filter_order(struct iter_env* iter_env, struct module_env* env,
got_num = iter_fill_rtt(iter_env, env, name, namelen, qtype, now, dp,
iter_server_selection(struct iter_env* iter_env,
int num = iter_filter_order(iter_env, env, name, namelen, qtype,
if(++a->attempts < iter_env->outbound_msg_retry)
if(++a->attempts < iter_env->outbound_msg_retry)
struct delegpt_addr* iter_server_selection(struct iter_env* iter_env,
struct iter_env;
int iter_apply_cfg(struct iter_env* iter_env, struct config_file* cfg);
sizeof(iter_env->num_queries_ratelimited));
if(!iter_apply_cfg(iter_env, env->cfg)) {
struct iter_env* iter_env;
struct iter_env* ie = (struct iter_env*)qstate->env->modinfo[id];
iter_env = (struct iter_env*)env->modinfo[id];
lock_basic_destroy(&iter_env->queries_ratelimit_lock);
free(iter_env->target_fetch_policy);
priv_delete(iter_env->priv);
donotq_delete(iter_env->donotq);
caps_white_delete(iter_env->caps_white);
struct iter_env* ie = (struct iter_env*)qstate->env->modinfo[id];
free(iter_env);
struct iter_env* ie, int id)
struct iter_env* ie, int id, int maxtargets, int* num)
struct iter_env* ie, int id)
struct iter_env* ie = (struct iter_env*)qstate->env->modinfo[id];
struct iter_env* ie, int id)
struct iter_env* ie, int id)
struct iter_env* ie = (struct iter_env*)qstate->env->modinfo[id];
struct iter_env* ie, int id)
struct iter_env* ie, int id)
struct iter_env* ie, int id, struct outbound_entry* outbound,
struct iter_env* ie = (struct iter_env*)qstate->env->modinfo[id];
struct iter_env* ie = (struct iter_env*)env->modinfo[id];
is_caps_whitelisted(struct iter_env* ie, struct iter_qstate* iq)
struct iter_env* iter_env = (struct iter_env*)calloc(1,
sizeof(struct iter_env));
if(!iter_env) {
env->modinfo[id] = (void*)iter_env;
lock_basic_init(&iter_env->queries_ratelimit_lock);
lock_protect(&iter_env->queries_ratelimit_lock,
&iter_env->num_queries_ratelimited,
struct iter_env* iter_env = NULL;
if(m != -1) iter_env = (struct iter_env*)env->modinfo[m];
if(iter_env) {
int* oldtargetfetchpolicy = iter_env->target_fetch_policy;
int oldmaxdependencydepth = iter_env->max_dependency_depth;
struct iter_donotq* olddonotq = iter_env->donotq;
struct iter_priv* oldpriv = iter_env->priv;
struct rbtree_type* oldcapswhite = iter_env->caps_white;
struct iter_nat64 oldnat64 = iter_env->nat64;
iter_env->target_fetch_policy = ct->target_fetch_policy;
iter_env->max_dependency_depth = ct->max_dependency_depth;
iter_env->donotq = ct->donotq;
iter_env->priv = ct->priv;
iter_env->caps_white = ct->caps_white;
iter_env->nat64 = ct->nat64;
iter_env->outbound_msg_retry = env->cfg->outbound_msg_retry;
iter_env->max_sent_count = env->cfg->max_sent_count;
iter_env->max_query_restarts = env->cfg->max_query_restarts;
struct iter_env* ie;
ie = (struct iter_env*)worker->env.modinfo[m];
struct iter_env;
struct iter_env;
struct iter_env;
struct iter_env* ie)
struct iter_env* ie, struct module_qstate* qstate)
struct iter_env;
struct iter_env* ie);
struct iter_env* ie = NULL;
ie = (struct iter_env*)env->modinfo[m];
iter_apply_cfg(struct iter_env* iter_env, struct config_file* cfg)
if(!read_fetch_policy(&iter_env->target_fetch_policy,
&iter_env->max_dependency_depth, cfg->target_fetch_policy))
for(i=0; i<iter_env->max_dependency_depth+1; i++)
i, iter_env->target_fetch_policy[i]);
if(!iter_env->donotq)
iter_env->donotq = donotq_create();
if(!iter_env->donotq || !donotq_apply_cfg(iter_env->donotq, cfg)) {
if(!iter_env->priv)
iter_env->priv = priv_create();
if(!iter_env->priv || !priv_apply_cfg(iter_env->priv, cfg)) {
if(!iter_env->caps_white)
iter_env->caps_white = caps_white_create();
if(!iter_env->caps_white || !caps_white_apply_cfg(
iter_env->caps_white, cfg)) {
if(!nat64_apply_cfg(&iter_env->nat64, cfg)) {
iter_env->supports_ipv6 = cfg->do_ip6;
iter_env->supports_ipv4 = cfg->do_ip4;
iter_env->outbound_msg_retry = cfg->outbound_msg_retry;
iter_env->max_sent_count = cfg->max_sent_count;
iter_env->max_query_restarts = cfg->max_query_restarts;
iter_filter_unsuitable(struct iter_env* iter_env, struct module_env* env,
if(donotq_lookup(iter_env->donotq, &a->addr, a->addrlen)) {
if(!iter_env->supports_ipv6 && addr_is_ip6(&a->addr, a->addrlen)) {
if(!iter_env->supports_ipv4 && !iter_env->nat64.use_nat64 &&
iter_fill_rtt(struct iter_env* iter_env, struct module_env* env,
a->sel_rtt = iter_filter_unsuitable(iter_env, env,
iter_filter_order(struct iter_env* iter_env, struct module_env* env,
got_num = iter_fill_rtt(iter_env, env, name, namelen, qtype, now, dp,
iter_server_selection(struct iter_env* iter_env,
int num = iter_filter_order(iter_env, env, name, namelen, qtype,
if(++a->attempts < iter_env->outbound_msg_retry)
if(++a->attempts < iter_env->outbound_msg_retry)
struct delegpt_addr* iter_server_selection(struct iter_env* iter_env,
struct iter_env;
int iter_apply_cfg(struct iter_env* iter_env, struct config_file* cfg);
sizeof(iter_env->num_queries_ratelimited));
if(!iter_apply_cfg(iter_env, env->cfg)) {
struct iter_env* iter_env;
struct iter_env* ie = (struct iter_env*)qstate->env->modinfo[id];
iter_env = (struct iter_env*)env->modinfo[id];
lock_basic_destroy(&iter_env->queries_ratelimit_lock);
free(iter_env->target_fetch_policy);
priv_delete(iter_env->priv);
donotq_delete(iter_env->donotq);
caps_white_delete(iter_env->caps_white);
struct iter_env* ie = (struct iter_env*)qstate->env->modinfo[id];
free(iter_env);
struct iter_env* ie, int id)
struct iter_env* ie, int id, int maxtargets, int* num)
struct iter_env* ie, int id)
struct iter_env* ie = (struct iter_env*)qstate->env->modinfo[id];
struct iter_env* ie, int id)
struct iter_env* ie, int id)
struct iter_env* ie = (struct iter_env*)qstate->env->modinfo[id];
struct iter_env* ie, int id)
struct iter_env* ie, int id)
struct iter_env* ie, int id, struct outbound_entry* outbound,
struct iter_env* ie = (struct iter_env*)qstate->env->modinfo[id];
struct iter_env* ie = (struct iter_env*)env->modinfo[id];
is_caps_whitelisted(struct iter_env* ie, struct iter_qstate* iq)
struct iter_env* iter_env = (struct iter_env*)calloc(1,
sizeof(struct iter_env));
if(!iter_env) {
env->modinfo[id] = (void*)iter_env;
lock_basic_init(&iter_env->queries_ratelimit_lock);
lock_protect(&iter_env->queries_ratelimit_lock,
&iter_env->num_queries_ratelimited,