Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a74195e7 authored by waynema's avatar waynema
Browse files

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
parent 3b8f5902
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -54,6 +54,7 @@ cc_library {
        "libsysutils",
        "netd_event_listener_interface-ndk_platform",
        "dnsresolver_aidl_interface-ndk_platform",
        "server_configurable_flags",
    ],
    shared_libs: [
        "libbinder_ndk",
@@ -131,5 +132,6 @@ cc_test {
        "libnetd_resolv",
        "libnetd_test_dnsresponder",
        "libnetdutils",
        "server_configurable_flags",
    ],
}
+5 −5
Original line number Diff line number Diff line
@@ -38,7 +38,7 @@ inline const std::vector<int> kDefaultParams = {
        300,      // sample validity in seconds
        25,       // success threshod in percent
        8,    8,  // {MIN,MAX}_SAMPLES
        100,     // BASE_TIMEOUT_MSEC
        1000,     // BASE_TIMEOUT_MSEC
        2,        // retry count
};

+2 −1
Original line number Diff line number Diff line
@@ -84,7 +84,8 @@ class TestBase : public ::testing::Test {
            .success_threshold = 25,
            .min_samples = 8,
            .max_samples = 8,
            .base_timeout_msec = 100,
            .base_timeout_msec = 1000,
            .retry_count = 2,
    };
    const android_net_context mNetcontext = {
            .app_netid = TEST_NETID,
+20 −1
Original line number Diff line number Diff line
@@ -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 @@ static void resolv_set_default_params(res_params* params) {
    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", ""), &params->retry_count);
    }

    if (params->base_timeout_msec == 0) {
        params->base_timeout_msec = RES_TIMEOUT;
        ParseInt(GetServerConfigurableFlag("netd_native", "retransmission_time_interval", ""),
                 &params->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 @@ int resolv_set_nameservers_for_net(unsigned netid, const char** servers, const i
        } 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);
+0 −21
Original line number Diff line number Diff line
@@ -140,8 +140,6 @@ int res_vinit(res_state statp, int preinit) {

    if (!preinit) {
        statp->netid = NETID_UNSET;
        statp->retrans = RES_TIMEOUT;
        statp->retry = RES_DFLRETRY;
        statp->options = RES_DEFAULT;
        statp->id = arc4random_uniform(65536);
        statp->_mark = MARK_UNSET;
@@ -218,27 +216,8 @@ static void res_setoptions(res_state statp, const char* options, const char* sou
                statp->ndots = i;
            else
                statp->ndots = RES_MAXNDOTS;

            LOG(DEBUG) << ";;\tndots=" << statp->ndots;

        } else if (!strncmp(cp, "timeout:", sizeof("timeout:") - 1)) {
            i = atoi(cp + sizeof("timeout:") - 1);
            if (i <= RES_MAXRETRANS)
                statp->retrans = i;
            else
                statp->retrans = RES_MAXRETRANS;

            LOG(DEBUG) << ";;\ttimeout=" << statp->retrans;

        } else if (!strncmp(cp, "attempts:", sizeof("attempts:") - 1)) {
            i = atoi(cp + sizeof("attempts:") - 1);
            if (i <= RES_MAXRETRY)
                statp->retry = i;
            else
                statp->retry = RES_MAXRETRY;

            LOG(DEBUG) << ";;\tattempts=" << statp->retry;

        } else if (!strncmp(cp, "debug", sizeof("debug") - 1)) {
            if (!(statp->options & RES_DEBUG)) {
                LOG(DEBUG) << ";; res_setoptions(\"" << options << "\", \"" << source << "\")..";
Loading