Support alternative handling on truncated DNS response
The default behavior of UDP truncated DNS response is that the DNS
resolver fallback on TCP on the same server. If the fallback retry is
failed, do TCP retry on the rest of servers. However, OEM reported
that the rest of servers may respond a valid answer on UDP connection,
but support no TCP connection. Thus, an alternative truncated response
handling mode is added for OEMs. With the alternative mode, the DNS
resolver fallback retries on TCP on the same server. If the TCP retry
is failed, do UDP retry on the next server, then TCP, and so on.
Set mode by ResolverExperimentalOptionsParcel in ResolverParamsParcel.
tcMode=0 or absent, run default behavior (TCP-only on each DNS server).
tcMode=1, run alternative mode (UDP first on each DNS server).
other values are invalid input, take no effect.
Bug: 139646101
Change-Id: I724cc54bd9fad95954de84c281dd6f1d0b764caa
diff --git a/ResolverController.cpp b/ResolverController.cpp
index f25a8d9..c59676a 100644
--- a/ResolverController.cpp
+++ b/ResolverController.cpp
@@ -232,7 +232,8 @@
res_params.retry_count = resolverParams.retryCount;
return resolv_set_nameservers(resolverParams.netId, resolverParams.servers,
- resolverParams.domains, res_params, resolverParams.hosts);
+ resolverParams.domains, res_params,
+ resolverParams.experimentalOptions);
}
int ResolverController::getResolverInfo(int32_t netId, std::vector<std::string>* servers,
@@ -362,6 +363,7 @@
}
dw.println("Concurrent DNS query timeout: %d", wait_for_pending_req_timeout_count[0]);
resolv_stats_dump(dw, netId);
+ resolv_oem_options_dump(dw, netId);
}
dw.decIndent();
}