Allow changing retry limit and timeout via experiment flags.
Test: built / flashed / booted
netd_unit_test, netd_integration_test, libnetd_resolv_test
Change-Id: Ica8f2ccddc60f2b8e006ac6923064b6171a13821
diff --git a/resolv/res_cache.cpp b/resolv/res_cache.cpp
index ad5a2c5..53122f6 100644
--- a/resolv/res_cache.cpp
+++ b/resolv/res_cache.cpp
@@ -46,9 +46,12 @@
#include <netdb.h>
#include <android-base/logging.h>
+#include <android-base/parseint.h>
#include <android-base/thread_annotations.h>
#include <android/multinetwork.h> // ResNsendFlags
+#include <server_configurable_flags/get_flags.h>
+
#include "res_state_ext.h"
#include "resolv_private.h"
@@ -1674,6 +1677,22 @@
params->retry_count = 0;
}
+static void resolv_set_experiment_params(res_params* params) {
+ using android::base::ParseInt;
+ using server_configurable_flags::GetServerConfigurableFlag;
+
+ if (params->retry_count == 0) {
+ params->retry_count = RES_DFLRETRY;
+ ParseInt(GetServerConfigurableFlag("netd_native", "retry_count", ""), ¶ms->retry_count);
+ }
+
+ if (params->base_timeout_msec == 0) {
+ params->base_timeout_msec = RES_TIMEOUT;
+ ParseInt(GetServerConfigurableFlag("netd_native", "retransmission_time_interval", ""),
+ ¶ms->base_timeout_msec);
+ }
+}
+
int resolv_set_nameservers_for_net(unsigned netid, const char** servers, const int numservers,
const char* domains, const res_params* params) {
char* cp;
@@ -1717,7 +1736,7 @@
} else {
resolv_set_default_params(&cache_info->params);
}
-
+ resolv_set_experiment_params(&cache_info->params);
if (!resolv_is_nameservers_equal_locked(cache_info, servers, numservers)) {
// free current before adding new
free_nameservers_locked(cache_info);