Merge branch 'feature/configure-outbound_msg_retry' of git://github.com/countsudoku/unbound into countsudoku-feature/configure-outbound_msg_retry

This commit is contained in:
W.C.A. Wijngaards 2021-09-08 14:38:36 +02:00
commit 204edd229e
16 changed files with 5489 additions and 5389 deletions

View file

@ -1,3 +1,7 @@
8 September 2021: Wouter
- Merged #41 from Moritz Schneider: made outbound-msg-retry
configurable.
3 September 2021: Wouter
- Fix #538: Fix subnetcache statistics.

View file

@ -1704,6 +1704,11 @@ This can make ordinary queries complete (if repeatedly queried for),
and enter the cache, whilst also mitigating the traffic flow by the
factor given.
.TP 5
.B outbound\-msg\-retry: \fI<number>
The number of retries unbound will do in case of a non positive response is
received. If a forward nameserver is used, this is the number of retries per
forward nameserver in case of throwaway response.
.TP 5
.B fast\-server\-permil: \fI<number>
Specify how many times out of 1000 to pick from the set of fastest servers.
0 turns the feature off. A value of 900 would pick from the fastest

View file

@ -176,6 +176,7 @@ iter_apply_cfg(struct iter_env* iter_env, struct config_file* cfg)
}
iter_env->supports_ipv6 = cfg->do_ip6;
iter_env->supports_ipv4 = cfg->do_ip4;
iter_env->outbound_msg_retry = cfg->outbound_msg_retry;
return 1;
}
@ -592,7 +593,7 @@ iter_server_selection(struct iter_env* iter_env,
if(num == 1) {
a = dp->result_list;
if(++a->attempts < OUTBOUND_MSG_RETRY)
if(++a->attempts < iter_env->outbound_msg_retry)
return a;
dp->result_list = a->next_result;
return a;
@ -612,7 +613,7 @@ iter_server_selection(struct iter_env* iter_env,
}
if(!a) /* robustness */
return NULL;
if(++a->attempts < OUTBOUND_MSG_RETRY)
if(++a->attempts < iter_env->outbound_msg_retry)
return a;
/* remove it from the delegation point result list */
if(prev)
@ -1284,11 +1285,11 @@ iter_scrub_nxdomain(struct dns_msg* msg)
msg->rep->an_numrrsets = 0;
}
void iter_dec_attempts(struct delegpt* dp, int d)
void iter_dec_attempts(struct delegpt* dp, int d, size_t outbound_msg_retry)
{
struct delegpt_addr* a;
for(a=dp->target_list; a; a = a->next_target) {
if(a->attempts >= OUTBOUND_MSG_RETRY) {
if(a->attempts >= outbound_msg_retry) {
/* add back to result list */
a->next_result = dp->result_list;
dp->result_list = a;
@ -1299,7 +1300,7 @@ void iter_dec_attempts(struct delegpt* dp, int d)
}
}
void iter_merge_retry_counts(struct delegpt* dp, struct delegpt* old)
void iter_merge_retry_counts(struct delegpt* dp, struct delegpt* old, size_t outbound_msg_retry)
{
struct delegpt_addr* a, *o, *prev;
for(a=dp->target_list; a; a = a->next_target) {
@ -1313,7 +1314,7 @@ void iter_merge_retry_counts(struct delegpt* dp, struct delegpt* old)
prev = NULL;
a = dp->usable_list;
while(a) {
if(a->attempts >= OUTBOUND_MSG_RETRY) {
if(a->attempts >= outbound_msg_retry) {
log_addr(VERB_ALGO, "remove from usable list dp",
&a->addr, a->addrlen);
/* remove from result list */

View file

@ -347,16 +347,19 @@ void iter_scrub_nxdomain(struct dns_msg* msg);
* Remove query attempts from all available ips. For 0x20.
* @param dp: delegpt.
* @param d: decrease.
* @param outbound_msg_retry: number of retries of outgoing queries
*/
void iter_dec_attempts(struct delegpt* dp, int d);
void iter_dec_attempts(struct delegpt* dp, int d, size_t outbound_msg_retry);
/**
* Add retry counts from older delegpt to newer delegpt.
* Does not waste time on timeout'd (or other failing) addresses.
* @param dp: new delegationpoint.
* @param old: old delegationpoint.
* @param outbound_msg_retry: number of retries of outgoing queries
*/
void iter_merge_retry_counts(struct delegpt* dp, struct delegpt* old);
void iter_merge_retry_counts(struct delegpt* dp, struct delegpt* old,
size_t outbound_msg_retry);
/**
* See if a DS response (type ANSWER) is too low: a nodata answer with

View file

@ -2298,7 +2298,7 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq,
iq->minimise_count++;
iq->timeout_count = 0;
iter_dec_attempts(iq->dp, 1);
iter_dec_attempts(iq->dp, 1, ie->outbound_msg_retry);
/* Limit number of iterations for QNAMEs with more
* than MAX_MINIMISE_COUNT labels. Send first MINIMISE_ONE_LAB
@ -2500,7 +2500,7 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq,
(int)iq->caps_server+1, (int)naddr*3);
iq->response = iq->caps_response;
iq->caps_fallback = 0;
iter_dec_attempts(iq->dp, 3); /* space for fallback */
iter_dec_attempts(iq->dp, 3, ie->outbound_msg_retry); /* space for fallback */
iq->num_current_queries++; /* RespState decrements it*/
iq->referral_count++; /* make sure we don't loop */
iq->sent_count = 0;
@ -2605,7 +2605,7 @@ processQueryTargets(struct module_qstate* qstate, struct iter_qstate* iq,
(int)iq->caps_server+1);
iq->response = iq->caps_response;
iq->caps_fallback = 0;
iter_dec_attempts(iq->dp, 3); /* space for fallback */
iter_dec_attempts(iq->dp, 3, ie->outbound_msg_retry); /* space for fallback */
iq->num_current_queries++; /* RespState decrements it*/
iq->referral_count++; /* make sure we don't loop */
iq->sent_count = 0;
@ -2732,7 +2732,7 @@ find_NS(struct reply_info* rep, size_t from, size_t to)
*/
static int
processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq,
int id)
int id, size_t outbound_msg_retry)
{
int dnsseclame = 0;
enum response_type type;
@ -3002,7 +3002,7 @@ processQueryResponse(struct module_qstate* qstate, struct iter_qstate* iq,
}
if(iq->store_parent_NS && query_dname_compare(iq->dp->name,
iq->store_parent_NS->name) == 0)
iter_merge_retry_counts(iq->dp, iq->store_parent_NS);
iter_merge_retry_counts(iq->dp, iq->store_parent_NS, outbound_msg_retry);
delegpt_log(VERB_ALGO, iq->dp);
/* Count this as a referral. */
iq->referral_count++;
@ -3746,7 +3746,8 @@ iter_handle(struct module_qstate* qstate, struct iter_qstate* iq,
cont = processQueryTargets(qstate, iq, ie, id);
break;
case QUERY_RESP_STATE:
cont = processQueryResponse(qstate, iq, id);
cont = processQueryResponse(
qstate, iq, id, ie->outbound_msg_retry);
break;
case PRIME_RESP_STATE:
cont = processPrimeResponse(qstate, id);
@ -3816,7 +3817,7 @@ process_response(struct module_qstate* qstate, struct iter_qstate* iq,
iq->num_current_queries--;
/* need fresh attempts for the 0x20 fallback, if
* that was the cause for the failure */
iter_dec_attempts(iq->dp, 3);
iter_dec_attempts(iq->dp, 3, ie->outbound_msg_retry);
verbose(VERB_DETAIL, "Capsforid: timeouts, starting fallback");
goto handle_it;
}

View file

@ -94,8 +94,6 @@ extern int UNKNOWN_SERVER_NICENESS;
* Equals RTT_MAX_TIMEOUT
*/
#define USEFUL_SERVER_TOP_TIMEOUT 120000
/** number of retries on outgoing queries */
#define OUTBOUND_MSG_RETRY 5
/** 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. */
@ -139,6 +137,9 @@ struct iter_env {
lock_basic_type queries_ratelimit_lock;
/** number of queries that have been ratelimited */
size_t num_queries_ratelimited;
/** number of retries on outgoing queries */
size_t outbound_msg_retry;
};
/**

View file

@ -9,7 +9,7 @@ SECTION QUESTION
www.example.com. IN A
ENTRY_END
; But the pending query fails due to error (say TCP failure or malloc or ...)
; This is iterator/iterator.h OUTBOUND_MSG_RETRY number of errors.
; This is util/config_file.c outbound-msg-retry number of errors.
STEP 2 ERROR
STEP 3 ERROR
STEP 4 ERROR

27
testdata/fwd_error_retries.rpl vendored Normal file
View file

@ -0,0 +1,27 @@
; config options
server:
outbound-msg-retry: 1
forward-zone:
name: "."
forward-addr: 216.0.0.1
CONFIG_END
SCENARIO_BEGIN Test basic forwarding with servfail and retry of 1
STEP 1 QUERY
ENTRY_BEGIN
REPLY RD
SECTION QUESTION
www.example.com. IN A
ENTRY_END
; query fails with servfail, now we make only outgoing-msg-retry=1 retries
STEP 2 ERROR
; returns servfail
STEP 14 CHECK_ANSWER
ENTRY_BEGIN
MATCH opcode qname qtype
SECTION QUESTION
REPLY SERVFAIL QR RD RA
MATCH all
www.example.com. IN A
ENTRY_END
SCENARIO_END

View file

@ -9,7 +9,7 @@ SECTION QUESTION
www.example.com. IN A
ENTRY_END
; But the pending query times out!
; OUTBOUND_MSG_RETRY times timeout.
; outbound-msg-retry times timeout.
STEP 2 TIMEOUT
STEP 3 TIMEOUT
STEP 4 TIMEOUT

View file

@ -328,6 +328,7 @@ config_create(void)
cfg->ratelimit_size = 4*1024*1024;
cfg->ratelimit_for_domain = NULL;
cfg->ratelimit_below_domain = NULL;
cfg->outbound_msg_retry = 5;
cfg->ip_ratelimit_factor = 10;
cfg->ratelimit_factor = 10;
cfg->qname_minimisation = 1;
@ -752,6 +753,7 @@ int config_set_option(struct config_file* cfg, const char* opt,
else S_POW2("ratelimit-slabs:", ratelimit_slabs)
else S_NUMBER_OR_ZERO("ip-ratelimit-factor:", ip_ratelimit_factor)
else S_NUMBER_OR_ZERO("ratelimit-factor:", ratelimit_factor)
else S_SIZET_NONZERO("outbound-msg-retry", outbound_msg_retry)
else S_SIZET_NONZERO("fast-server-num:", fast_server_num)
else S_NUMBER_OR_ZERO("fast-server-permil:", fast_server_permil)
else S_YNO("qname-minimisation:", qname_minimisation)
@ -1195,6 +1197,7 @@ config_get_option(struct config_file* cfg, const char* opt,
else O_LS2(opt, "ratelimit-below-domain", ratelimit_below_domain)
else O_DEC(opt, "ip-ratelimit-factor", ip_ratelimit_factor)
else O_DEC(opt, "ratelimit-factor", ratelimit_factor)
else O_UNS(opt, "outbound-msg-retry", outbound_msg_retry)
else O_DEC(opt, "fast-server-num", fast_server_num)
else O_DEC(opt, "fast-server-permil", fast_server_permil)
else O_DEC(opt, "val-sig-skew-min", val_sig_skew_min)

View file

@ -578,6 +578,8 @@ struct config_file {
struct config_str2list* ratelimit_below_domain;
/** ratelimit factor, 0 blocks all, 10 allows 1/10 of traffic */
int ratelimit_factor;
/** number of retries on outgoing queries */
size_t outbound_msg_retry;
/** minimise outgoing QNAME and hide original QTYPE if possible */
int qname_minimisation;
/** minimise QNAME in strict mode, minimise according to RFC.

File diff suppressed because it is too large Load diff

View file

@ -501,6 +501,7 @@ ratelimit-for-domain{COLON} { YDVAR(2, VAR_RATELIMIT_FOR_DOMAIN) }
ratelimit-below-domain{COLON} { YDVAR(2, VAR_RATELIMIT_BELOW_DOMAIN) }
ip-ratelimit-factor{COLON} { YDVAR(1, VAR_IP_RATELIMIT_FACTOR) }
ratelimit-factor{COLON} { YDVAR(1, VAR_RATELIMIT_FACTOR) }
outbound-msg-retry{COLON} { YDVAR(1, VAR_OUTBOUND_MSG_RETRY) }
low-rtt{COLON} { YDVAR(1, VAR_LOW_RTT) }
fast-server-num{COLON} { YDVAR(1, VAR_FAST_SERVER_NUM) }
low-rtt-pct{COLON} { YDVAR(1, VAR_FAST_SERVER_PERMIL) }

File diff suppressed because it is too large Load diff

View file

@ -252,125 +252,126 @@ extern int yydebug;
VAR_RATELIMIT = 453, /* VAR_RATELIMIT */
VAR_RATELIMIT_SLABS = 454, /* VAR_RATELIMIT_SLABS */
VAR_RATELIMIT_SIZE = 455, /* VAR_RATELIMIT_SIZE */
VAR_RATELIMIT_FOR_DOMAIN = 456, /* VAR_RATELIMIT_FOR_DOMAIN */
VAR_RATELIMIT_BELOW_DOMAIN = 457, /* VAR_RATELIMIT_BELOW_DOMAIN */
VAR_IP_RATELIMIT_FACTOR = 458, /* VAR_IP_RATELIMIT_FACTOR */
VAR_RATELIMIT_FACTOR = 459, /* VAR_RATELIMIT_FACTOR */
VAR_SEND_CLIENT_SUBNET = 460, /* VAR_SEND_CLIENT_SUBNET */
VAR_CLIENT_SUBNET_ZONE = 461, /* VAR_CLIENT_SUBNET_ZONE */
VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 462, /* VAR_CLIENT_SUBNET_ALWAYS_FORWARD */
VAR_CLIENT_SUBNET_OPCODE = 463, /* VAR_CLIENT_SUBNET_OPCODE */
VAR_MAX_CLIENT_SUBNET_IPV4 = 464, /* VAR_MAX_CLIENT_SUBNET_IPV4 */
VAR_MAX_CLIENT_SUBNET_IPV6 = 465, /* VAR_MAX_CLIENT_SUBNET_IPV6 */
VAR_MIN_CLIENT_SUBNET_IPV4 = 466, /* VAR_MIN_CLIENT_SUBNET_IPV4 */
VAR_MIN_CLIENT_SUBNET_IPV6 = 467, /* VAR_MIN_CLIENT_SUBNET_IPV6 */
VAR_MAX_ECS_TREE_SIZE_IPV4 = 468, /* VAR_MAX_ECS_TREE_SIZE_IPV4 */
VAR_MAX_ECS_TREE_SIZE_IPV6 = 469, /* VAR_MAX_ECS_TREE_SIZE_IPV6 */
VAR_CAPS_WHITELIST = 470, /* VAR_CAPS_WHITELIST */
VAR_CACHE_MAX_NEGATIVE_TTL = 471, /* VAR_CACHE_MAX_NEGATIVE_TTL */
VAR_PERMIT_SMALL_HOLDDOWN = 472, /* VAR_PERMIT_SMALL_HOLDDOWN */
VAR_QNAME_MINIMISATION = 473, /* VAR_QNAME_MINIMISATION */
VAR_QNAME_MINIMISATION_STRICT = 474, /* VAR_QNAME_MINIMISATION_STRICT */
VAR_IP_FREEBIND = 475, /* VAR_IP_FREEBIND */
VAR_DEFINE_TAG = 476, /* VAR_DEFINE_TAG */
VAR_LOCAL_ZONE_TAG = 477, /* VAR_LOCAL_ZONE_TAG */
VAR_ACCESS_CONTROL_TAG = 478, /* VAR_ACCESS_CONTROL_TAG */
VAR_LOCAL_ZONE_OVERRIDE = 479, /* VAR_LOCAL_ZONE_OVERRIDE */
VAR_ACCESS_CONTROL_TAG_ACTION = 480, /* VAR_ACCESS_CONTROL_TAG_ACTION */
VAR_ACCESS_CONTROL_TAG_DATA = 481, /* VAR_ACCESS_CONTROL_TAG_DATA */
VAR_VIEW = 482, /* VAR_VIEW */
VAR_ACCESS_CONTROL_VIEW = 483, /* VAR_ACCESS_CONTROL_VIEW */
VAR_VIEW_FIRST = 484, /* VAR_VIEW_FIRST */
VAR_SERVE_EXPIRED = 485, /* VAR_SERVE_EXPIRED */
VAR_SERVE_EXPIRED_TTL = 486, /* VAR_SERVE_EXPIRED_TTL */
VAR_SERVE_EXPIRED_TTL_RESET = 487, /* VAR_SERVE_EXPIRED_TTL_RESET */
VAR_SERVE_EXPIRED_REPLY_TTL = 488, /* VAR_SERVE_EXPIRED_REPLY_TTL */
VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 489, /* VAR_SERVE_EXPIRED_CLIENT_TIMEOUT */
VAR_SERVE_ORIGINAL_TTL = 490, /* VAR_SERVE_ORIGINAL_TTL */
VAR_FAKE_DSA = 491, /* VAR_FAKE_DSA */
VAR_FAKE_SHA1 = 492, /* VAR_FAKE_SHA1 */
VAR_LOG_IDENTITY = 493, /* VAR_LOG_IDENTITY */
VAR_HIDE_TRUSTANCHOR = 494, /* VAR_HIDE_TRUSTANCHOR */
VAR_HIDE_HTTP_USER_AGENT = 495, /* VAR_HIDE_HTTP_USER_AGENT */
VAR_HTTP_USER_AGENT = 496, /* VAR_HTTP_USER_AGENT */
VAR_TRUST_ANCHOR_SIGNALING = 497, /* VAR_TRUST_ANCHOR_SIGNALING */
VAR_AGGRESSIVE_NSEC = 498, /* VAR_AGGRESSIVE_NSEC */
VAR_USE_SYSTEMD = 499, /* VAR_USE_SYSTEMD */
VAR_SHM_ENABLE = 500, /* VAR_SHM_ENABLE */
VAR_SHM_KEY = 501, /* VAR_SHM_KEY */
VAR_ROOT_KEY_SENTINEL = 502, /* VAR_ROOT_KEY_SENTINEL */
VAR_DNSCRYPT = 503, /* VAR_DNSCRYPT */
VAR_DNSCRYPT_ENABLE = 504, /* VAR_DNSCRYPT_ENABLE */
VAR_DNSCRYPT_PORT = 505, /* VAR_DNSCRYPT_PORT */
VAR_DNSCRYPT_PROVIDER = 506, /* VAR_DNSCRYPT_PROVIDER */
VAR_DNSCRYPT_SECRET_KEY = 507, /* VAR_DNSCRYPT_SECRET_KEY */
VAR_DNSCRYPT_PROVIDER_CERT = 508, /* VAR_DNSCRYPT_PROVIDER_CERT */
VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 509, /* VAR_DNSCRYPT_PROVIDER_CERT_ROTATED */
VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 510, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE */
VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 511, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS */
VAR_DNSCRYPT_NONCE_CACHE_SIZE = 512, /* VAR_DNSCRYPT_NONCE_CACHE_SIZE */
VAR_DNSCRYPT_NONCE_CACHE_SLABS = 513, /* VAR_DNSCRYPT_NONCE_CACHE_SLABS */
VAR_PAD_RESPONSES = 514, /* VAR_PAD_RESPONSES */
VAR_PAD_RESPONSES_BLOCK_SIZE = 515, /* VAR_PAD_RESPONSES_BLOCK_SIZE */
VAR_PAD_QUERIES = 516, /* VAR_PAD_QUERIES */
VAR_PAD_QUERIES_BLOCK_SIZE = 517, /* VAR_PAD_QUERIES_BLOCK_SIZE */
VAR_IPSECMOD_ENABLED = 518, /* VAR_IPSECMOD_ENABLED */
VAR_IPSECMOD_HOOK = 519, /* VAR_IPSECMOD_HOOK */
VAR_IPSECMOD_IGNORE_BOGUS = 520, /* VAR_IPSECMOD_IGNORE_BOGUS */
VAR_IPSECMOD_MAX_TTL = 521, /* VAR_IPSECMOD_MAX_TTL */
VAR_IPSECMOD_WHITELIST = 522, /* VAR_IPSECMOD_WHITELIST */
VAR_IPSECMOD_STRICT = 523, /* VAR_IPSECMOD_STRICT */
VAR_CACHEDB = 524, /* VAR_CACHEDB */
VAR_CACHEDB_BACKEND = 525, /* VAR_CACHEDB_BACKEND */
VAR_CACHEDB_SECRETSEED = 526, /* VAR_CACHEDB_SECRETSEED */
VAR_CACHEDB_REDISHOST = 527, /* VAR_CACHEDB_REDISHOST */
VAR_CACHEDB_REDISPORT = 528, /* VAR_CACHEDB_REDISPORT */
VAR_CACHEDB_REDISTIMEOUT = 529, /* VAR_CACHEDB_REDISTIMEOUT */
VAR_CACHEDB_REDISEXPIRERECORDS = 530, /* VAR_CACHEDB_REDISEXPIRERECORDS */
VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 531, /* VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM */
VAR_FOR_UPSTREAM = 532, /* VAR_FOR_UPSTREAM */
VAR_AUTH_ZONE = 533, /* VAR_AUTH_ZONE */
VAR_ZONEFILE = 534, /* VAR_ZONEFILE */
VAR_MASTER = 535, /* VAR_MASTER */
VAR_URL = 536, /* VAR_URL */
VAR_FOR_DOWNSTREAM = 537, /* VAR_FOR_DOWNSTREAM */
VAR_FALLBACK_ENABLED = 538, /* VAR_FALLBACK_ENABLED */
VAR_TLS_ADDITIONAL_PORT = 539, /* VAR_TLS_ADDITIONAL_PORT */
VAR_LOW_RTT = 540, /* VAR_LOW_RTT */
VAR_LOW_RTT_PERMIL = 541, /* VAR_LOW_RTT_PERMIL */
VAR_FAST_SERVER_PERMIL = 542, /* VAR_FAST_SERVER_PERMIL */
VAR_FAST_SERVER_NUM = 543, /* VAR_FAST_SERVER_NUM */
VAR_ALLOW_NOTIFY = 544, /* VAR_ALLOW_NOTIFY */
VAR_TLS_WIN_CERT = 545, /* VAR_TLS_WIN_CERT */
VAR_TCP_CONNECTION_LIMIT = 546, /* VAR_TCP_CONNECTION_LIMIT */
VAR_FORWARD_NO_CACHE = 547, /* VAR_FORWARD_NO_CACHE */
VAR_STUB_NO_CACHE = 548, /* VAR_STUB_NO_CACHE */
VAR_LOG_SERVFAIL = 549, /* VAR_LOG_SERVFAIL */
VAR_DENY_ANY = 550, /* VAR_DENY_ANY */
VAR_UNKNOWN_SERVER_TIME_LIMIT = 551, /* VAR_UNKNOWN_SERVER_TIME_LIMIT */
VAR_LOG_TAG_QUERYREPLY = 552, /* VAR_LOG_TAG_QUERYREPLY */
VAR_STREAM_WAIT_SIZE = 553, /* VAR_STREAM_WAIT_SIZE */
VAR_TLS_CIPHERS = 554, /* VAR_TLS_CIPHERS */
VAR_TLS_CIPHERSUITES = 555, /* VAR_TLS_CIPHERSUITES */
VAR_TLS_USE_SNI = 556, /* VAR_TLS_USE_SNI */
VAR_IPSET = 557, /* VAR_IPSET */
VAR_IPSET_NAME_V4 = 558, /* VAR_IPSET_NAME_V4 */
VAR_IPSET_NAME_V6 = 559, /* VAR_IPSET_NAME_V6 */
VAR_TLS_SESSION_TICKET_KEYS = 560, /* VAR_TLS_SESSION_TICKET_KEYS */
VAR_RPZ = 561, /* VAR_RPZ */
VAR_TAGS = 562, /* VAR_TAGS */
VAR_RPZ_ACTION_OVERRIDE = 563, /* VAR_RPZ_ACTION_OVERRIDE */
VAR_RPZ_CNAME_OVERRIDE = 564, /* VAR_RPZ_CNAME_OVERRIDE */
VAR_RPZ_LOG = 565, /* VAR_RPZ_LOG */
VAR_RPZ_LOG_NAME = 566, /* VAR_RPZ_LOG_NAME */
VAR_DYNLIB = 567, /* VAR_DYNLIB */
VAR_DYNLIB_FILE = 568, /* VAR_DYNLIB_FILE */
VAR_EDNS_CLIENT_STRING = 569, /* VAR_EDNS_CLIENT_STRING */
VAR_EDNS_CLIENT_STRING_OPCODE = 570, /* VAR_EDNS_CLIENT_STRING_OPCODE */
VAR_NSID = 571, /* VAR_NSID */
VAR_ZONEMD_PERMISSIVE_MODE = 572, /* VAR_ZONEMD_PERMISSIVE_MODE */
VAR_ZONEMD_CHECK = 573, /* VAR_ZONEMD_CHECK */
VAR_ZONEMD_REJECT_ABSENCE = 574 /* VAR_ZONEMD_REJECT_ABSENCE */
VAR_OUTBOUND_MSG_RETRY = 456, /* VAR_OUTBOUND_MSG_RETRY */
VAR_RATELIMIT_FOR_DOMAIN = 457, /* VAR_RATELIMIT_FOR_DOMAIN */
VAR_RATELIMIT_BELOW_DOMAIN = 458, /* VAR_RATELIMIT_BELOW_DOMAIN */
VAR_IP_RATELIMIT_FACTOR = 459, /* VAR_IP_RATELIMIT_FACTOR */
VAR_RATELIMIT_FACTOR = 460, /* VAR_RATELIMIT_FACTOR */
VAR_SEND_CLIENT_SUBNET = 461, /* VAR_SEND_CLIENT_SUBNET */
VAR_CLIENT_SUBNET_ZONE = 462, /* VAR_CLIENT_SUBNET_ZONE */
VAR_CLIENT_SUBNET_ALWAYS_FORWARD = 463, /* VAR_CLIENT_SUBNET_ALWAYS_FORWARD */
VAR_CLIENT_SUBNET_OPCODE = 464, /* VAR_CLIENT_SUBNET_OPCODE */
VAR_MAX_CLIENT_SUBNET_IPV4 = 465, /* VAR_MAX_CLIENT_SUBNET_IPV4 */
VAR_MAX_CLIENT_SUBNET_IPV6 = 466, /* VAR_MAX_CLIENT_SUBNET_IPV6 */
VAR_MIN_CLIENT_SUBNET_IPV4 = 467, /* VAR_MIN_CLIENT_SUBNET_IPV4 */
VAR_MIN_CLIENT_SUBNET_IPV6 = 468, /* VAR_MIN_CLIENT_SUBNET_IPV6 */
VAR_MAX_ECS_TREE_SIZE_IPV4 = 469, /* VAR_MAX_ECS_TREE_SIZE_IPV4 */
VAR_MAX_ECS_TREE_SIZE_IPV6 = 470, /* VAR_MAX_ECS_TREE_SIZE_IPV6 */
VAR_CAPS_WHITELIST = 471, /* VAR_CAPS_WHITELIST */
VAR_CACHE_MAX_NEGATIVE_TTL = 472, /* VAR_CACHE_MAX_NEGATIVE_TTL */
VAR_PERMIT_SMALL_HOLDDOWN = 473, /* VAR_PERMIT_SMALL_HOLDDOWN */
VAR_QNAME_MINIMISATION = 474, /* VAR_QNAME_MINIMISATION */
VAR_QNAME_MINIMISATION_STRICT = 475, /* VAR_QNAME_MINIMISATION_STRICT */
VAR_IP_FREEBIND = 476, /* VAR_IP_FREEBIND */
VAR_DEFINE_TAG = 477, /* VAR_DEFINE_TAG */
VAR_LOCAL_ZONE_TAG = 478, /* VAR_LOCAL_ZONE_TAG */
VAR_ACCESS_CONTROL_TAG = 479, /* VAR_ACCESS_CONTROL_TAG */
VAR_LOCAL_ZONE_OVERRIDE = 480, /* VAR_LOCAL_ZONE_OVERRIDE */
VAR_ACCESS_CONTROL_TAG_ACTION = 481, /* VAR_ACCESS_CONTROL_TAG_ACTION */
VAR_ACCESS_CONTROL_TAG_DATA = 482, /* VAR_ACCESS_CONTROL_TAG_DATA */
VAR_VIEW = 483, /* VAR_VIEW */
VAR_ACCESS_CONTROL_VIEW = 484, /* VAR_ACCESS_CONTROL_VIEW */
VAR_VIEW_FIRST = 485, /* VAR_VIEW_FIRST */
VAR_SERVE_EXPIRED = 486, /* VAR_SERVE_EXPIRED */
VAR_SERVE_EXPIRED_TTL = 487, /* VAR_SERVE_EXPIRED_TTL */
VAR_SERVE_EXPIRED_TTL_RESET = 488, /* VAR_SERVE_EXPIRED_TTL_RESET */
VAR_SERVE_EXPIRED_REPLY_TTL = 489, /* VAR_SERVE_EXPIRED_REPLY_TTL */
VAR_SERVE_EXPIRED_CLIENT_TIMEOUT = 490, /* VAR_SERVE_EXPIRED_CLIENT_TIMEOUT */
VAR_SERVE_ORIGINAL_TTL = 491, /* VAR_SERVE_ORIGINAL_TTL */
VAR_FAKE_DSA = 492, /* VAR_FAKE_DSA */
VAR_FAKE_SHA1 = 493, /* VAR_FAKE_SHA1 */
VAR_LOG_IDENTITY = 494, /* VAR_LOG_IDENTITY */
VAR_HIDE_TRUSTANCHOR = 495, /* VAR_HIDE_TRUSTANCHOR */
VAR_HIDE_HTTP_USER_AGENT = 496, /* VAR_HIDE_HTTP_USER_AGENT */
VAR_HTTP_USER_AGENT = 497, /* VAR_HTTP_USER_AGENT */
VAR_TRUST_ANCHOR_SIGNALING = 498, /* VAR_TRUST_ANCHOR_SIGNALING */
VAR_AGGRESSIVE_NSEC = 499, /* VAR_AGGRESSIVE_NSEC */
VAR_USE_SYSTEMD = 500, /* VAR_USE_SYSTEMD */
VAR_SHM_ENABLE = 501, /* VAR_SHM_ENABLE */
VAR_SHM_KEY = 502, /* VAR_SHM_KEY */
VAR_ROOT_KEY_SENTINEL = 503, /* VAR_ROOT_KEY_SENTINEL */
VAR_DNSCRYPT = 504, /* VAR_DNSCRYPT */
VAR_DNSCRYPT_ENABLE = 505, /* VAR_DNSCRYPT_ENABLE */
VAR_DNSCRYPT_PORT = 506, /* VAR_DNSCRYPT_PORT */
VAR_DNSCRYPT_PROVIDER = 507, /* VAR_DNSCRYPT_PROVIDER */
VAR_DNSCRYPT_SECRET_KEY = 508, /* VAR_DNSCRYPT_SECRET_KEY */
VAR_DNSCRYPT_PROVIDER_CERT = 509, /* VAR_DNSCRYPT_PROVIDER_CERT */
VAR_DNSCRYPT_PROVIDER_CERT_ROTATED = 510, /* VAR_DNSCRYPT_PROVIDER_CERT_ROTATED */
VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE = 511, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE */
VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS = 512, /* VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS */
VAR_DNSCRYPT_NONCE_CACHE_SIZE = 513, /* VAR_DNSCRYPT_NONCE_CACHE_SIZE */
VAR_DNSCRYPT_NONCE_CACHE_SLABS = 514, /* VAR_DNSCRYPT_NONCE_CACHE_SLABS */
VAR_PAD_RESPONSES = 515, /* VAR_PAD_RESPONSES */
VAR_PAD_RESPONSES_BLOCK_SIZE = 516, /* VAR_PAD_RESPONSES_BLOCK_SIZE */
VAR_PAD_QUERIES = 517, /* VAR_PAD_QUERIES */
VAR_PAD_QUERIES_BLOCK_SIZE = 518, /* VAR_PAD_QUERIES_BLOCK_SIZE */
VAR_IPSECMOD_ENABLED = 519, /* VAR_IPSECMOD_ENABLED */
VAR_IPSECMOD_HOOK = 520, /* VAR_IPSECMOD_HOOK */
VAR_IPSECMOD_IGNORE_BOGUS = 521, /* VAR_IPSECMOD_IGNORE_BOGUS */
VAR_IPSECMOD_MAX_TTL = 522, /* VAR_IPSECMOD_MAX_TTL */
VAR_IPSECMOD_WHITELIST = 523, /* VAR_IPSECMOD_WHITELIST */
VAR_IPSECMOD_STRICT = 524, /* VAR_IPSECMOD_STRICT */
VAR_CACHEDB = 525, /* VAR_CACHEDB */
VAR_CACHEDB_BACKEND = 526, /* VAR_CACHEDB_BACKEND */
VAR_CACHEDB_SECRETSEED = 527, /* VAR_CACHEDB_SECRETSEED */
VAR_CACHEDB_REDISHOST = 528, /* VAR_CACHEDB_REDISHOST */
VAR_CACHEDB_REDISPORT = 529, /* VAR_CACHEDB_REDISPORT */
VAR_CACHEDB_REDISTIMEOUT = 530, /* VAR_CACHEDB_REDISTIMEOUT */
VAR_CACHEDB_REDISEXPIRERECORDS = 531, /* VAR_CACHEDB_REDISEXPIRERECORDS */
VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM = 532, /* VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM */
VAR_FOR_UPSTREAM = 533, /* VAR_FOR_UPSTREAM */
VAR_AUTH_ZONE = 534, /* VAR_AUTH_ZONE */
VAR_ZONEFILE = 535, /* VAR_ZONEFILE */
VAR_MASTER = 536, /* VAR_MASTER */
VAR_URL = 537, /* VAR_URL */
VAR_FOR_DOWNSTREAM = 538, /* VAR_FOR_DOWNSTREAM */
VAR_FALLBACK_ENABLED = 539, /* VAR_FALLBACK_ENABLED */
VAR_TLS_ADDITIONAL_PORT = 540, /* VAR_TLS_ADDITIONAL_PORT */
VAR_LOW_RTT = 541, /* VAR_LOW_RTT */
VAR_LOW_RTT_PERMIL = 542, /* VAR_LOW_RTT_PERMIL */
VAR_FAST_SERVER_PERMIL = 543, /* VAR_FAST_SERVER_PERMIL */
VAR_FAST_SERVER_NUM = 544, /* VAR_FAST_SERVER_NUM */
VAR_ALLOW_NOTIFY = 545, /* VAR_ALLOW_NOTIFY */
VAR_TLS_WIN_CERT = 546, /* VAR_TLS_WIN_CERT */
VAR_TCP_CONNECTION_LIMIT = 547, /* VAR_TCP_CONNECTION_LIMIT */
VAR_FORWARD_NO_CACHE = 548, /* VAR_FORWARD_NO_CACHE */
VAR_STUB_NO_CACHE = 549, /* VAR_STUB_NO_CACHE */
VAR_LOG_SERVFAIL = 550, /* VAR_LOG_SERVFAIL */
VAR_DENY_ANY = 551, /* VAR_DENY_ANY */
VAR_UNKNOWN_SERVER_TIME_LIMIT = 552, /* VAR_UNKNOWN_SERVER_TIME_LIMIT */
VAR_LOG_TAG_QUERYREPLY = 553, /* VAR_LOG_TAG_QUERYREPLY */
VAR_STREAM_WAIT_SIZE = 554, /* VAR_STREAM_WAIT_SIZE */
VAR_TLS_CIPHERS = 555, /* VAR_TLS_CIPHERS */
VAR_TLS_CIPHERSUITES = 556, /* VAR_TLS_CIPHERSUITES */
VAR_TLS_USE_SNI = 557, /* VAR_TLS_USE_SNI */
VAR_IPSET = 558, /* VAR_IPSET */
VAR_IPSET_NAME_V4 = 559, /* VAR_IPSET_NAME_V4 */
VAR_IPSET_NAME_V6 = 560, /* VAR_IPSET_NAME_V6 */
VAR_TLS_SESSION_TICKET_KEYS = 561, /* VAR_TLS_SESSION_TICKET_KEYS */
VAR_RPZ = 562, /* VAR_RPZ */
VAR_TAGS = 563, /* VAR_TAGS */
VAR_RPZ_ACTION_OVERRIDE = 564, /* VAR_RPZ_ACTION_OVERRIDE */
VAR_RPZ_CNAME_OVERRIDE = 565, /* VAR_RPZ_CNAME_OVERRIDE */
VAR_RPZ_LOG = 566, /* VAR_RPZ_LOG */
VAR_RPZ_LOG_NAME = 567, /* VAR_RPZ_LOG_NAME */
VAR_DYNLIB = 568, /* VAR_DYNLIB */
VAR_DYNLIB_FILE = 569, /* VAR_DYNLIB_FILE */
VAR_EDNS_CLIENT_STRING = 570, /* VAR_EDNS_CLIENT_STRING */
VAR_EDNS_CLIENT_STRING_OPCODE = 571, /* VAR_EDNS_CLIENT_STRING_OPCODE */
VAR_NSID = 572, /* VAR_NSID */
VAR_ZONEMD_PERMISSIVE_MODE = 573, /* VAR_ZONEMD_PERMISSIVE_MODE */
VAR_ZONEMD_CHECK = 574, /* VAR_ZONEMD_CHECK */
VAR_ZONEMD_REJECT_ABSENCE = 575 /* VAR_ZONEMD_REJECT_ABSENCE */
};
typedef enum yytokentype yytoken_kind_t;
#endif
@ -576,125 +577,126 @@ extern int yydebug;
#define VAR_RATELIMIT 453
#define VAR_RATELIMIT_SLABS 454
#define VAR_RATELIMIT_SIZE 455
#define VAR_RATELIMIT_FOR_DOMAIN 456
#define VAR_RATELIMIT_BELOW_DOMAIN 457
#define VAR_IP_RATELIMIT_FACTOR 458
#define VAR_RATELIMIT_FACTOR 459
#define VAR_SEND_CLIENT_SUBNET 460
#define VAR_CLIENT_SUBNET_ZONE 461
#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 462
#define VAR_CLIENT_SUBNET_OPCODE 463
#define VAR_MAX_CLIENT_SUBNET_IPV4 464
#define VAR_MAX_CLIENT_SUBNET_IPV6 465
#define VAR_MIN_CLIENT_SUBNET_IPV4 466
#define VAR_MIN_CLIENT_SUBNET_IPV6 467
#define VAR_MAX_ECS_TREE_SIZE_IPV4 468
#define VAR_MAX_ECS_TREE_SIZE_IPV6 469
#define VAR_CAPS_WHITELIST 470
#define VAR_CACHE_MAX_NEGATIVE_TTL 471
#define VAR_PERMIT_SMALL_HOLDDOWN 472
#define VAR_QNAME_MINIMISATION 473
#define VAR_QNAME_MINIMISATION_STRICT 474
#define VAR_IP_FREEBIND 475
#define VAR_DEFINE_TAG 476
#define VAR_LOCAL_ZONE_TAG 477
#define VAR_ACCESS_CONTROL_TAG 478
#define VAR_LOCAL_ZONE_OVERRIDE 479
#define VAR_ACCESS_CONTROL_TAG_ACTION 480
#define VAR_ACCESS_CONTROL_TAG_DATA 481
#define VAR_VIEW 482
#define VAR_ACCESS_CONTROL_VIEW 483
#define VAR_VIEW_FIRST 484
#define VAR_SERVE_EXPIRED 485
#define VAR_SERVE_EXPIRED_TTL 486
#define VAR_SERVE_EXPIRED_TTL_RESET 487
#define VAR_SERVE_EXPIRED_REPLY_TTL 488
#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 489
#define VAR_SERVE_ORIGINAL_TTL 490
#define VAR_FAKE_DSA 491
#define VAR_FAKE_SHA1 492
#define VAR_LOG_IDENTITY 493
#define VAR_HIDE_TRUSTANCHOR 494
#define VAR_HIDE_HTTP_USER_AGENT 495
#define VAR_HTTP_USER_AGENT 496
#define VAR_TRUST_ANCHOR_SIGNALING 497
#define VAR_AGGRESSIVE_NSEC 498
#define VAR_USE_SYSTEMD 499
#define VAR_SHM_ENABLE 500
#define VAR_SHM_KEY 501
#define VAR_ROOT_KEY_SENTINEL 502
#define VAR_DNSCRYPT 503
#define VAR_DNSCRYPT_ENABLE 504
#define VAR_DNSCRYPT_PORT 505
#define VAR_DNSCRYPT_PROVIDER 506
#define VAR_DNSCRYPT_SECRET_KEY 507
#define VAR_DNSCRYPT_PROVIDER_CERT 508
#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 509
#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 510
#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 511
#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 512
#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 513
#define VAR_PAD_RESPONSES 514
#define VAR_PAD_RESPONSES_BLOCK_SIZE 515
#define VAR_PAD_QUERIES 516
#define VAR_PAD_QUERIES_BLOCK_SIZE 517
#define VAR_IPSECMOD_ENABLED 518
#define VAR_IPSECMOD_HOOK 519
#define VAR_IPSECMOD_IGNORE_BOGUS 520
#define VAR_IPSECMOD_MAX_TTL 521
#define VAR_IPSECMOD_WHITELIST 522
#define VAR_IPSECMOD_STRICT 523
#define VAR_CACHEDB 524
#define VAR_CACHEDB_BACKEND 525
#define VAR_CACHEDB_SECRETSEED 526
#define VAR_CACHEDB_REDISHOST 527
#define VAR_CACHEDB_REDISPORT 528
#define VAR_CACHEDB_REDISTIMEOUT 529
#define VAR_CACHEDB_REDISEXPIRERECORDS 530
#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 531
#define VAR_FOR_UPSTREAM 532
#define VAR_AUTH_ZONE 533
#define VAR_ZONEFILE 534
#define VAR_MASTER 535
#define VAR_URL 536
#define VAR_FOR_DOWNSTREAM 537
#define VAR_FALLBACK_ENABLED 538
#define VAR_TLS_ADDITIONAL_PORT 539
#define VAR_LOW_RTT 540
#define VAR_LOW_RTT_PERMIL 541
#define VAR_FAST_SERVER_PERMIL 542
#define VAR_FAST_SERVER_NUM 543
#define VAR_ALLOW_NOTIFY 544
#define VAR_TLS_WIN_CERT 545
#define VAR_TCP_CONNECTION_LIMIT 546
#define VAR_FORWARD_NO_CACHE 547
#define VAR_STUB_NO_CACHE 548
#define VAR_LOG_SERVFAIL 549
#define VAR_DENY_ANY 550
#define VAR_UNKNOWN_SERVER_TIME_LIMIT 551
#define VAR_LOG_TAG_QUERYREPLY 552
#define VAR_STREAM_WAIT_SIZE 553
#define VAR_TLS_CIPHERS 554
#define VAR_TLS_CIPHERSUITES 555
#define VAR_TLS_USE_SNI 556
#define VAR_IPSET 557
#define VAR_IPSET_NAME_V4 558
#define VAR_IPSET_NAME_V6 559
#define VAR_TLS_SESSION_TICKET_KEYS 560
#define VAR_RPZ 561
#define VAR_TAGS 562
#define VAR_RPZ_ACTION_OVERRIDE 563
#define VAR_RPZ_CNAME_OVERRIDE 564
#define VAR_RPZ_LOG 565
#define VAR_RPZ_LOG_NAME 566
#define VAR_DYNLIB 567
#define VAR_DYNLIB_FILE 568
#define VAR_EDNS_CLIENT_STRING 569
#define VAR_EDNS_CLIENT_STRING_OPCODE 570
#define VAR_NSID 571
#define VAR_ZONEMD_PERMISSIVE_MODE 572
#define VAR_ZONEMD_CHECK 573
#define VAR_ZONEMD_REJECT_ABSENCE 574
#define VAR_OUTBOUND_MSG_RETRY 456
#define VAR_RATELIMIT_FOR_DOMAIN 457
#define VAR_RATELIMIT_BELOW_DOMAIN 458
#define VAR_IP_RATELIMIT_FACTOR 459
#define VAR_RATELIMIT_FACTOR 460
#define VAR_SEND_CLIENT_SUBNET 461
#define VAR_CLIENT_SUBNET_ZONE 462
#define VAR_CLIENT_SUBNET_ALWAYS_FORWARD 463
#define VAR_CLIENT_SUBNET_OPCODE 464
#define VAR_MAX_CLIENT_SUBNET_IPV4 465
#define VAR_MAX_CLIENT_SUBNET_IPV6 466
#define VAR_MIN_CLIENT_SUBNET_IPV4 467
#define VAR_MIN_CLIENT_SUBNET_IPV6 468
#define VAR_MAX_ECS_TREE_SIZE_IPV4 469
#define VAR_MAX_ECS_TREE_SIZE_IPV6 470
#define VAR_CAPS_WHITELIST 471
#define VAR_CACHE_MAX_NEGATIVE_TTL 472
#define VAR_PERMIT_SMALL_HOLDDOWN 473
#define VAR_QNAME_MINIMISATION 474
#define VAR_QNAME_MINIMISATION_STRICT 475
#define VAR_IP_FREEBIND 476
#define VAR_DEFINE_TAG 477
#define VAR_LOCAL_ZONE_TAG 478
#define VAR_ACCESS_CONTROL_TAG 479
#define VAR_LOCAL_ZONE_OVERRIDE 480
#define VAR_ACCESS_CONTROL_TAG_ACTION 481
#define VAR_ACCESS_CONTROL_TAG_DATA 482
#define VAR_VIEW 483
#define VAR_ACCESS_CONTROL_VIEW 484
#define VAR_VIEW_FIRST 485
#define VAR_SERVE_EXPIRED 486
#define VAR_SERVE_EXPIRED_TTL 487
#define VAR_SERVE_EXPIRED_TTL_RESET 488
#define VAR_SERVE_EXPIRED_REPLY_TTL 489
#define VAR_SERVE_EXPIRED_CLIENT_TIMEOUT 490
#define VAR_SERVE_ORIGINAL_TTL 491
#define VAR_FAKE_DSA 492
#define VAR_FAKE_SHA1 493
#define VAR_LOG_IDENTITY 494
#define VAR_HIDE_TRUSTANCHOR 495
#define VAR_HIDE_HTTP_USER_AGENT 496
#define VAR_HTTP_USER_AGENT 497
#define VAR_TRUST_ANCHOR_SIGNALING 498
#define VAR_AGGRESSIVE_NSEC 499
#define VAR_USE_SYSTEMD 500
#define VAR_SHM_ENABLE 501
#define VAR_SHM_KEY 502
#define VAR_ROOT_KEY_SENTINEL 503
#define VAR_DNSCRYPT 504
#define VAR_DNSCRYPT_ENABLE 505
#define VAR_DNSCRYPT_PORT 506
#define VAR_DNSCRYPT_PROVIDER 507
#define VAR_DNSCRYPT_SECRET_KEY 508
#define VAR_DNSCRYPT_PROVIDER_CERT 509
#define VAR_DNSCRYPT_PROVIDER_CERT_ROTATED 510
#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE 511
#define VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS 512
#define VAR_DNSCRYPT_NONCE_CACHE_SIZE 513
#define VAR_DNSCRYPT_NONCE_CACHE_SLABS 514
#define VAR_PAD_RESPONSES 515
#define VAR_PAD_RESPONSES_BLOCK_SIZE 516
#define VAR_PAD_QUERIES 517
#define VAR_PAD_QUERIES_BLOCK_SIZE 518
#define VAR_IPSECMOD_ENABLED 519
#define VAR_IPSECMOD_HOOK 520
#define VAR_IPSECMOD_IGNORE_BOGUS 521
#define VAR_IPSECMOD_MAX_TTL 522
#define VAR_IPSECMOD_WHITELIST 523
#define VAR_IPSECMOD_STRICT 524
#define VAR_CACHEDB 525
#define VAR_CACHEDB_BACKEND 526
#define VAR_CACHEDB_SECRETSEED 527
#define VAR_CACHEDB_REDISHOST 528
#define VAR_CACHEDB_REDISPORT 529
#define VAR_CACHEDB_REDISTIMEOUT 530
#define VAR_CACHEDB_REDISEXPIRERECORDS 531
#define VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM 532
#define VAR_FOR_UPSTREAM 533
#define VAR_AUTH_ZONE 534
#define VAR_ZONEFILE 535
#define VAR_MASTER 536
#define VAR_URL 537
#define VAR_FOR_DOWNSTREAM 538
#define VAR_FALLBACK_ENABLED 539
#define VAR_TLS_ADDITIONAL_PORT 540
#define VAR_LOW_RTT 541
#define VAR_LOW_RTT_PERMIL 542
#define VAR_FAST_SERVER_PERMIL 543
#define VAR_FAST_SERVER_NUM 544
#define VAR_ALLOW_NOTIFY 545
#define VAR_TLS_WIN_CERT 546
#define VAR_TCP_CONNECTION_LIMIT 547
#define VAR_FORWARD_NO_CACHE 548
#define VAR_STUB_NO_CACHE 549
#define VAR_LOG_SERVFAIL 550
#define VAR_DENY_ANY 551
#define VAR_UNKNOWN_SERVER_TIME_LIMIT 552
#define VAR_LOG_TAG_QUERYREPLY 553
#define VAR_STREAM_WAIT_SIZE 554
#define VAR_TLS_CIPHERS 555
#define VAR_TLS_CIPHERSUITES 556
#define VAR_TLS_USE_SNI 557
#define VAR_IPSET 558
#define VAR_IPSET_NAME_V4 559
#define VAR_IPSET_NAME_V6 560
#define VAR_TLS_SESSION_TICKET_KEYS 561
#define VAR_RPZ 562
#define VAR_TAGS 563
#define VAR_RPZ_ACTION_OVERRIDE 564
#define VAR_RPZ_CNAME_OVERRIDE 565
#define VAR_RPZ_LOG 566
#define VAR_RPZ_LOG_NAME 567
#define VAR_DYNLIB 568
#define VAR_DYNLIB_FILE 569
#define VAR_EDNS_CLIENT_STRING 570
#define VAR_EDNS_CLIENT_STRING_OPCODE 571
#define VAR_NSID 572
#define VAR_ZONEMD_PERMISSIVE_MODE 573
#define VAR_ZONEMD_CHECK 574
#define VAR_ZONEMD_REJECT_ABSENCE 575
/* Value type. */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
@ -704,7 +706,7 @@ union YYSTYPE
char* str;
#line 708 "util/configparser.h"
#line 710 "util/configparser.h"
};
typedef union YYSTYPE YYSTYPE;

View file

@ -139,6 +139,7 @@ extern struct config_parser_state* cfg_parser;
%token VAR_DISABLE_DNSSEC_LAME_CHECK
%token VAR_IP_RATELIMIT VAR_IP_RATELIMIT_SLABS VAR_IP_RATELIMIT_SIZE
%token VAR_RATELIMIT VAR_RATELIMIT_SLABS VAR_RATELIMIT_SIZE
%token VAR_OUTBOUND_MSG_RETRY
%token VAR_RATELIMIT_FOR_DOMAIN VAR_RATELIMIT_BELOW_DOMAIN
%token VAR_IP_RATELIMIT_FACTOR VAR_RATELIMIT_FACTOR
%token VAR_SEND_CLIENT_SUBNET VAR_CLIENT_SUBNET_ZONE
@ -270,9 +271,9 @@ content_server: server_num_threads | server_verbosity | server_port |
server_ip_ratelimit_size | server_ratelimit_size |
server_ratelimit_for_domain |
server_ratelimit_below_domain | server_ratelimit_factor |
server_ip_ratelimit_factor | server_send_client_subnet |
server_client_subnet_zone | server_client_subnet_always_forward |
server_client_subnet_opcode |
server_ip_ratelimit_factor | server_outbound_msg_retry |
server_send_client_subnet | server_client_subnet_zone |
server_client_subnet_always_forward | server_client_subnet_opcode |
server_max_client_subnet_ipv4 | server_max_client_subnet_ipv6 |
server_min_client_subnet_ipv4 | server_min_client_subnet_ipv6 |
server_max_ecs_tree_size_ipv4 | server_max_ecs_tree_size_ipv6 |
@ -705,7 +706,7 @@ server_interface: VAR_INTERFACE STRING_ARG
OUTYY(("P(server_interface:%s)\n", $2));
if(cfg_parser->cfg->num_ifs == 0)
cfg_parser->cfg->ifs = calloc(1, sizeof(char*));
else cfg_parser->cfg->ifs = realloc(cfg_parser->cfg->ifs,
else cfg_parser->cfg->ifs = realloc(cfg_parser->cfg->ifs,
(cfg_parser->cfg->num_ifs+1)*sizeof(char*));
if(!cfg_parser->cfg->ifs)
yyerror("out of memory");
@ -718,7 +719,7 @@ server_outgoing_interface: VAR_OUTGOING_INTERFACE STRING_ARG
OUTYY(("P(server_outgoing_interface:%s)\n", $2));
if(cfg_parser->cfg->num_out_ifs == 0)
cfg_parser->cfg->out_ifs = calloc(1, sizeof(char*));
else cfg_parser->cfg->out_ifs = realloc(
else cfg_parser->cfg->out_ifs = realloc(
cfg_parser->cfg->out_ifs,
(cfg_parser->cfg->num_out_ifs+1)*sizeof(char*));
if(!cfg_parser->cfg->out_ifs)
@ -839,10 +840,10 @@ server_prefer_ip6: VAR_PREFER_IP6 STRING_ARG
server_tcp_mss: VAR_TCP_MSS STRING_ARG
{
OUTYY(("P(server_tcp_mss:%s)\n", $2));
if(atoi($2) == 0 && strcmp($2, "0") != 0)
yyerror("number expected");
else cfg_parser->cfg->tcp_mss = atoi($2);
free($2);
if(atoi($2) == 0 && strcmp($2, "0") != 0)
yyerror("number expected");
else cfg_parser->cfg->tcp_mss = atoi($2);
free($2);
}
;
server_outgoing_tcp_mss: VAR_OUTGOING_TCP_MSS STRING_ARG
@ -1142,23 +1143,23 @@ server_log_queries: VAR_LOG_QUERIES STRING_ARG
}
;
server_log_replies: VAR_LOG_REPLIES STRING_ARG
{
OUTYY(("P(server_log_replies:%s)\n", $2));
if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
yyerror("expected yes or no.");
else cfg_parser->cfg->log_replies = (strcmp($2, "yes")==0);
free($2);
}
;
{
OUTYY(("P(server_log_replies:%s)\n", $2));
if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
yyerror("expected yes or no.");
else cfg_parser->cfg->log_replies = (strcmp($2, "yes")==0);
free($2);
}
;
server_log_tag_queryreply: VAR_LOG_TAG_QUERYREPLY STRING_ARG
{
OUTYY(("P(server_log_tag_queryreply:%s)\n", $2));
if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
yyerror("expected yes or no.");
else cfg_parser->cfg->log_tag_queryreply = (strcmp($2, "yes")==0);
free($2);
}
;
{
OUTYY(("P(server_log_tag_queryreply:%s)\n", $2));
if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
yyerror("expected yes or no.");
else cfg_parser->cfg->log_tag_queryreply = (strcmp($2, "yes")==0);
free($2);
}
;
server_log_servfail: VAR_LOG_SERVFAIL STRING_ARG
{
OUTYY(("P(server_log_servfail:%s)\n", $2));
@ -1169,14 +1170,14 @@ server_log_servfail: VAR_LOG_SERVFAIL STRING_ARG
}
;
server_log_local_actions: VAR_LOG_LOCAL_ACTIONS STRING_ARG
{
OUTYY(("P(server_log_local_actions:%s)\n", $2));
if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
yyerror("expected yes or no.");
else cfg_parser->cfg->log_local_actions = (strcmp($2, "yes")==0);
free($2);
}
;
{
OUTYY(("P(server_log_local_actions:%s)\n", $2));
if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
yyerror("expected yes or no.");
else cfg_parser->cfg->log_local_actions = (strcmp($2, "yes")==0);
free($2);
}
;
server_chroot: VAR_CHROOT STRING_ARG
{
OUTYY(("P(server_chroot:%s)\n", $2));
@ -1210,7 +1211,7 @@ server_directory: VAR_DIRECTORY STRING_ARG
cfg_parser->chroot)) == 0)
d += strlen(cfg_parser->chroot);
if(d[0]) {
if(chdir(d))
if(chdir(d))
log_err("cannot chdir to directory: %s (%s)",
d, strerror(errno));
}
@ -1403,35 +1404,35 @@ server_so_sndbuf: VAR_SO_SNDBUF STRING_ARG
}
;
server_so_reuseport: VAR_SO_REUSEPORT STRING_ARG
{
OUTYY(("P(server_so_reuseport:%s)\n", $2));
if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
yyerror("expected yes or no.");
else cfg_parser->cfg->so_reuseport =
(strcmp($2, "yes")==0);
free($2);
}
;
{
OUTYY(("P(server_so_reuseport:%s)\n", $2));
if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
yyerror("expected yes or no.");
else cfg_parser->cfg->so_reuseport =
(strcmp($2, "yes")==0);
free($2);
}
;
server_ip_transparent: VAR_IP_TRANSPARENT STRING_ARG
{
OUTYY(("P(server_ip_transparent:%s)\n", $2));
if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
yyerror("expected yes or no.");
else cfg_parser->cfg->ip_transparent =
(strcmp($2, "yes")==0);
free($2);
}
;
{
OUTYY(("P(server_ip_transparent:%s)\n", $2));
if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
yyerror("expected yes or no.");
else cfg_parser->cfg->ip_transparent =
(strcmp($2, "yes")==0);
free($2);
}
;
server_ip_freebind: VAR_IP_FREEBIND STRING_ARG
{
OUTYY(("P(server_ip_freebind:%s)\n", $2));
if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
yyerror("expected yes or no.");
else cfg_parser->cfg->ip_freebind =
(strcmp($2, "yes")==0);
free($2);
}
;
{
OUTYY(("P(server_ip_freebind:%s)\n", $2));
if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
yyerror("expected yes or no.");
else cfg_parser->cfg->ip_freebind =
(strcmp($2, "yes")==0);
free($2);
}
;
server_ip_dscp: VAR_IP_DSCP STRING_ARG
{
OUTYY(("P(server_ip_dscp:%s)\n", $2));
@ -2400,13 +2401,13 @@ server_ratelimit: VAR_RATELIMIT STRING_ARG
}
;
server_ip_ratelimit_size: VAR_IP_RATELIMIT_SIZE STRING_ARG
{
OUTYY(("P(server_ip_ratelimit_size:%s)\n", $2));
if(!cfg_parse_memsize($2, &cfg_parser->cfg->ip_ratelimit_size))
yyerror("memory size expected");
free($2);
}
;
{
OUTYY(("P(server_ip_ratelimit_size:%s)\n", $2));
if(!cfg_parse_memsize($2, &cfg_parser->cfg->ip_ratelimit_size))
yyerror("memory size expected");
free($2);
}
;
server_ratelimit_size: VAR_RATELIMIT_SIZE STRING_ARG
{
OUTYY(("P(server_ratelimit_size:%s)\n", $2));
@ -2416,18 +2417,18 @@ server_ratelimit_size: VAR_RATELIMIT_SIZE STRING_ARG
}
;
server_ip_ratelimit_slabs: VAR_IP_RATELIMIT_SLABS STRING_ARG
{
OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", $2));
if(atoi($2) == 0)
yyerror("number expected");
else {
cfg_parser->cfg->ip_ratelimit_slabs = atoi($2);
if(!is_pow2(cfg_parser->cfg->ip_ratelimit_slabs))
yyerror("must be a power of 2");
}
free($2);
}
;
{
OUTYY(("P(server_ip_ratelimit_slabs:%s)\n", $2));
if(atoi($2) == 0)
yyerror("number expected");
else {
cfg_parser->cfg->ip_ratelimit_slabs = atoi($2);
if(!is_pow2(cfg_parser->cfg->ip_ratelimit_slabs))
yyerror("must be a power of 2");
}
free($2);
}
;
server_ratelimit_slabs: VAR_RATELIMIT_SLABS STRING_ARG
{
OUTYY(("P(server_ratelimit_slabs:%s)\n", $2));
@ -2472,12 +2473,12 @@ server_ratelimit_below_domain: VAR_RATELIMIT_BELOW_DOMAIN STRING_ARG STRING_ARG
}
;
server_ip_ratelimit_factor: VAR_IP_RATELIMIT_FACTOR STRING_ARG
{
OUTYY(("P(server_ip_ratelimit_factor:%s)\n", $2));
if(atoi($2) == 0 && strcmp($2, "0") != 0)
yyerror("number expected");
else cfg_parser->cfg->ip_ratelimit_factor = atoi($2);
free($2);
{
OUTYY(("P(server_ip_ratelimit_factor:%s)\n", $2));
if(atoi($2) == 0 && strcmp($2, "0") != 0)
yyerror("number expected");
else cfg_parser->cfg->ip_ratelimit_factor = atoi($2);
free($2);
}
;
server_ratelimit_factor: VAR_RATELIMIT_FACTOR STRING_ARG
@ -2489,6 +2490,15 @@ server_ratelimit_factor: VAR_RATELIMIT_FACTOR STRING_ARG
free($2);
}
;
server_outbound_msg_retry: VAR_OUTBOUND_MSG_RETRY STRING_ARG
{
OUTYY(("P(server_outbound_msg_retry:%s)\n", $2));
if(atoi($2) == 0 && strcmp($2, "0") != 0)
yyerror("number expected");
else cfg_parser->cfg->outbound_msg_retry = atoi($2);
free($2);
}
;
server_low_rtt: VAR_LOW_RTT STRING_ARG
{
OUTYY(("P(low-rtt option is deprecated, use fast-server-num instead)\n"));
@ -3386,44 +3396,44 @@ dnsc_dnscrypt_secret_key: VAR_DNSCRYPT_SECRET_KEY STRING_ARG
;
dnsc_dnscrypt_shared_secret_cache_size: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SIZE STRING_ARG
{
OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", $2));
if(!cfg_parse_memsize($2, &cfg_parser->cfg->dnscrypt_shared_secret_cache_size))
yyerror("memory size expected");
free($2);
OUTYY(("P(dnscrypt_shared_secret_cache_size:%s)\n", $2));
if(!cfg_parse_memsize($2, &cfg_parser->cfg->dnscrypt_shared_secret_cache_size))
yyerror("memory size expected");
free($2);
}
;
dnsc_dnscrypt_shared_secret_cache_slabs: VAR_DNSCRYPT_SHARED_SECRET_CACHE_SLABS STRING_ARG
{
OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", $2));
if(atoi($2) == 0)
yyerror("number expected");
else {
cfg_parser->cfg->dnscrypt_shared_secret_cache_slabs = atoi($2);
if(!is_pow2(cfg_parser->cfg->dnscrypt_shared_secret_cache_slabs))
yyerror("must be a power of 2");
}
free($2);
OUTYY(("P(dnscrypt_shared_secret_cache_slabs:%s)\n", $2));
if(atoi($2) == 0)
yyerror("number expected");
else {
cfg_parser->cfg->dnscrypt_shared_secret_cache_slabs = atoi($2);
if(!is_pow2(cfg_parser->cfg->dnscrypt_shared_secret_cache_slabs))
yyerror("must be a power of 2");
}
free($2);
}
;
dnsc_dnscrypt_nonce_cache_size: VAR_DNSCRYPT_NONCE_CACHE_SIZE STRING_ARG
{
OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", $2));
if(!cfg_parse_memsize($2, &cfg_parser->cfg->dnscrypt_nonce_cache_size))
yyerror("memory size expected");
free($2);
OUTYY(("P(dnscrypt_nonce_cache_size:%s)\n", $2));
if(!cfg_parse_memsize($2, &cfg_parser->cfg->dnscrypt_nonce_cache_size))
yyerror("memory size expected");
free($2);
}
;
dnsc_dnscrypt_nonce_cache_slabs: VAR_DNSCRYPT_NONCE_CACHE_SLABS STRING_ARG
{
OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", $2));
if(atoi($2) == 0)
yyerror("number expected");
else {
cfg_parser->cfg->dnscrypt_nonce_cache_slabs = atoi($2);
if(!is_pow2(cfg_parser->cfg->dnscrypt_nonce_cache_slabs))
yyerror("must be a power of 2");
}
free($2);
OUTYY(("P(dnscrypt_nonce_cache_slabs:%s)\n", $2));
if(atoi($2) == 0)
yyerror("number expected");
else {
cfg_parser->cfg->dnscrypt_nonce_cache_slabs = atoi($2);
if(!is_pow2(cfg_parser->cfg->dnscrypt_nonce_cache_slabs))
yyerror("must be a power of 2");
}
free($2);
}
;
cachedbstart: VAR_CACHEDB