Make resolver timeout configurable via setResolverConfiguration()
This is infrastructure for tests simulating unresponsive nameservers.
With the default timeout of 5 seconds, with 4 retries per lookup, makes
this sort of tests impractical.
Change-Id: I2a2315507a4725744de6caa46121d83af13b59d1
Test: netd_unit_test --gtest_filter='ResolverTest.*'
diff --git a/server/ResolverController.cpp b/server/ResolverController.cpp
index c6ac659..4eafcec 100644
--- a/server/ResolverController.cpp
+++ b/server/ResolverController.cpp
@@ -497,7 +497,10 @@
const std::vector<std::string>& tlsServers,
const std::set<std::vector<uint8_t>>& tlsFingerprints) {
using android::net::INetd;
- if (params.size() != INetd::RESOLVER_PARAMS_COUNT) {
+ // TODO: make RESOLVER_PARAMS_BASE_TIMEOUT_MSEC a mandatory parameter once all callers
+ // have been updated to specify it.
+ if (params.size() < INetd::RESOLVER_PARAMS_BASE_TIMEOUT_MSEC ||
+ params.size() > INetd::RESOLVER_PARAMS_COUNT) {
ALOGE("%s: params.size()=%zu", __FUNCTION__, params.size());
return -EINVAL;
}
@@ -522,12 +525,14 @@
}
}
- __res_params res_params;
+ __res_params res_params = {};
res_params.sample_validity = params[INetd::RESOLVER_PARAMS_SAMPLE_VALIDITY];
res_params.success_threshold = params[INetd::RESOLVER_PARAMS_SUCCESS_THRESHOLD];
res_params.min_samples = params[INetd::RESOLVER_PARAMS_MIN_SAMPLES];
res_params.max_samples = params[INetd::RESOLVER_PARAMS_MAX_SAMPLES];
-
+ if (params.size() > INetd::RESOLVER_PARAMS_BASE_TIMEOUT_MSEC) {
+ res_params.base_timeout_msec = params[INetd::RESOLVER_PARAMS_BASE_TIMEOUT_MSEC];
+ }
return setDnsServers(netId, domains_str.c_str(), server_ptrs.data(), server_ptrs.size(),
&res_params);
}
@@ -552,6 +557,7 @@
(*params)[INetd::RESOLVER_PARAMS_SUCCESS_THRESHOLD] = res_params.success_threshold;
(*params)[INetd::RESOLVER_PARAMS_MIN_SAMPLES] = res_params.min_samples;
(*params)[INetd::RESOLVER_PARAMS_MAX_SAMPLES] = res_params.max_samples;
+ (*params)[INetd::RESOLVER_PARAMS_BASE_TIMEOUT_MSEC] = res_params.base_timeout_msec;
return 0;
}
@@ -560,7 +566,7 @@
using android::net::ResolverStats;
std::vector<std::string> servers;
std::vector<std::string> domains;
- __res_params params;
+ __res_params params = {};
std::vector<ResolverStats> stats;
time_t now = time(nullptr);
int rv = getDnsInfo(netId, &servers, &domains, ¶ms, &stats);
@@ -599,11 +605,12 @@
dw.println("search domains: %s", domains_str.c_str());
}
if (params.sample_validity != 0) {
- dw.println("DNS parameters: sample validity = %us, success threshold = %u%%, "
- "samples (min, max) = (%u, %u)", params.sample_validity,
- static_cast<unsigned>(params.success_threshold),
+ dw.println(
+ "DNS parameters: sample validity = %us, success threshold = %u%%, "
+ "samples (min, max) = (%u, %u), base_timeout = %dmsec",
+ params.sample_validity, static_cast<unsigned>(params.success_threshold),
static_cast<unsigned>(params.min_samples),
- static_cast<unsigned>(params.max_samples));
+ static_cast<unsigned>(params.max_samples), params.base_timeout_msec);
}
sPrivateDnsConfiguration.dump(dw, netId);