From cbc8c5912520cab4018ced0c79fc09b515d6f780 Mon Sep 17 00:00:00 2001 From: Nick Peng Date: Sat, 18 Jun 2022 14:11:39 +0800 Subject: [PATCH] dns_conf: add expired domain prefetch time --- src/dns_conf.c | 2 ++ src/dns_conf.h | 1 + src/dns_server.c | 10 +++++++--- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/dns_conf.c b/src/dns_conf.c index 34765d5..80d7359 100644 --- a/src/dns_conf.c +++ b/src/dns_conf.c @@ -64,6 +64,7 @@ int dns_conf_cachesize = DEFAULT_DNS_CACHE_SIZE; int dns_conf_prefetch = 0; int dns_conf_serve_expired = 1; int dns_conf_serve_expired_ttl = 24 * 3600; /* 1 day */ +int dns_conf_serve_expired_prefetch_time; int dns_conf_serve_expired_reply_ttl = 3; /* upstream servers */ @@ -1860,6 +1861,7 @@ static struct config_item _config_item[] = { CONF_YESNO("serve-expired", &dns_conf_serve_expired), CONF_INT("serve-expired-ttl", &dns_conf_serve_expired_ttl, 0, CONF_INT_MAX), CONF_INT("serve-expired-reply-ttl", &dns_conf_serve_expired_reply_ttl, 0, CONF_INT_MAX), + CONF_INT("serve-expired-prefetch-time", &dns_conf_serve_expired_prefetch_time, 0, CONF_INT_MAX), CONF_YESNO("dualstack-ip-selection", &dns_conf_dualstack_ip_selection), CONF_INT("dualstack-ip-selection-threshold", &dns_conf_dualstack_ip_selection_threshold, 0, 1000), CONF_CUSTOM("log-level", _config_log_level, NULL), diff --git a/src/dns_conf.h b/src/dns_conf.h index c490f22..729eb11 100644 --- a/src/dns_conf.h +++ b/src/dns_conf.h @@ -261,6 +261,7 @@ extern int dns_conf_cachesize; extern int dns_conf_prefetch; extern int dns_conf_serve_expired; extern int dns_conf_serve_expired_ttl; +extern int dns_conf_serve_expired_prefetch_time; extern int dns_conf_serve_expired_reply_ttl; extern struct dns_servers dns_conf_servers[DNS_MAX_SERVERS]; extern int dns_conf_server_num; diff --git a/src/dns_server.c b/src/dns_server.c index af6aced..7d85af6 100644 --- a/src/dns_server.c +++ b/src/dns_server.c @@ -4562,9 +4562,13 @@ static void _dns_server_period_run_second(void) if (dns_conf_prefetch) { /* do pre-fetching */ if (dns_conf_serve_expired) { - int prefetch_time = dns_conf_serve_expired_ttl / 2; - if (prefetch_time == 0 || prefetch_time > EXPIRED_DOMAIN_PREFTCH_TIME) { - prefetch_time = EXPIRED_DOMAIN_PREFTCH_TIME; + int prefetch_time = dns_conf_serve_expired_prefetch_time; + + if (prefetch_time == 0) { + prefetch_time = dns_conf_serve_expired_ttl / 2; + if (prefetch_time == 0 || prefetch_time > EXPIRED_DOMAIN_PREFTCH_TIME) { + prefetch_time = EXPIRED_DOMAIN_PREFTCH_TIME; + } } dns_cache_invalidate(NULL, 0, _dns_server_prefetch_expired_domain, prefetch_time); } else {