* can do this number of packets (until those all timeout too) */
#define TIMEOUT_COUNT_MAX 3
-/** Minus 1000 because that is outside of the RTTBAND, so
- * blacklisted servers stay blacklisted if this is chosen.
- * If USEFUL_SERVER_TOP_TIMEOUT is below 1000 (configured via RTT_MAX_TIMEOUT,
- * infra-cache-max-rtt) change it to just above the RTT_BAND. */
-#define STILL_USEFUL_TIMEOUT ( \
- USEFUL_SERVER_TOP_TIMEOUT < 1000 || \
- USEFUL_SERVER_TOP_TIMEOUT - 1000 <= RTT_BAND \
- ?RTT_BAND + 1 \
- :USEFUL_SERVER_TOP_TIMEOUT - 1000)
-
/** ratelimit value for delegation point */
int infra_dp_ratelimit = 0;
* For clients with a valid DNS Cookie. */
int infra_ip_ratelimit_cookie = 0;
+/** Minus 1000 because that is outside of the RTTBAND, so
+ * blacklisted servers stay blacklisted if this is chosen.
+ * If USEFUL_SERVER_TOP_TIMEOUT is below 1000 (configured via RTT_MAX_TIMEOUT,
+ * infra-cache-max-rtt) change it to just above the RTT_BAND. */
+static int still_useful_timeout()
+{
+ return
+ USEFUL_SERVER_TOP_TIMEOUT < 1000 ||
+ USEFUL_SERVER_TOP_TIMEOUT - 1000 <= RTT_BAND
+ ?RTT_BAND + 1
+ :USEFUL_SERVER_TOP_TIMEOUT - 1000;
+}
+
size_t
infra_sizefunc(void* k, void* ATTR_UNUSED(d))
{
if(data->rtt.rto >= RTT_MAX_TIMEOUT)
/* do not disqualify this server altogether, it is better
* than nothing */
- data->rtt.rto = STILL_USEFUL_TIMEOUT;
+ data->rtt.rto = still_useful_timeout();
lock_rw_unlock(&e->lock);
}
&& infra->infra_keep_probing) {
/* single probe, keep probing */
if(*rtt >= USEFUL_SERVER_TOP_TIMEOUT)
- *rtt = STILL_USEFUL_TIMEOUT;
+ *rtt = still_useful_timeout();
} else if(host->rtt.rto >= PROBE_MAXRTO && timenow < host->probedelay
&& rtt_notimeout(&host->rtt)*4 <= host->rtt.rto) {
/* single probe for this domain, and we are not probing */
if(qtype == LDNS_RR_TYPE_A) {
if(host->timeout_A >= TIMEOUT_COUNT_MAX)
*rtt = USEFUL_SERVER_TOP_TIMEOUT;
- else *rtt = STILL_USEFUL_TIMEOUT;
+ else *rtt = still_useful_timeout();
} else if(qtype == LDNS_RR_TYPE_AAAA) {
if(host->timeout_AAAA >= TIMEOUT_COUNT_MAX)
*rtt = USEFUL_SERVER_TOP_TIMEOUT;
- else *rtt = STILL_USEFUL_TIMEOUT;
+ else *rtt = still_useful_timeout();
} else {
if(host->timeout_other >= TIMEOUT_COUNT_MAX)
*rtt = USEFUL_SERVER_TOP_TIMEOUT;
- else *rtt = STILL_USEFUL_TIMEOUT;
+ else *rtt = still_useful_timeout();
}
}
/* expired entry */
/* see if this can be a re-probe of an unresponsive server */
if(host->rtt.rto >= USEFUL_SERVER_TOP_TIMEOUT) {
lock_rw_unlock(&e->lock);
- *rtt = STILL_USEFUL_TIMEOUT;
+ *rtt = still_useful_timeout();
*lame = 0;
*dnsseclame = 0;
*reclame = 0;