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
11 files changed
tree: d7933f41344916e7cdcff1e9700baa753a42dc40
  1. aidl_api/
  2. apex/
  3. binder/
  4. include/
  5. tests/
  6. .editorconfig
  7. Android.bp
  8. Dns64Configuration.cpp
  9. Dns64Configuration.h
  10. DnsProxyListener.cpp
  11. DnsProxyListener.h
  12. DnsQueryLog.cpp
  13. DnsQueryLog.h
  14. DnsQueryLogTest.cpp
  15. DnsResolver.cpp
  16. DnsResolver.h
  17. DnsResolverService.cpp
  18. DnsResolverService.h
  19. DnsStats.cpp
  20. DnsStats.h
  21. DnsStatsTest.cpp
  22. DnsTlsDispatcher.cpp
  23. DnsTlsDispatcher.h
  24. DnsTlsQueryMap.cpp
  25. DnsTlsQueryMap.h
  26. DnsTlsServer.cpp
  27. DnsTlsServer.h
  28. DnsTlsSessionCache.cpp
  29. DnsTlsSessionCache.h
  30. DnsTlsSocket.cpp
  31. DnsTlsSocket.h
  32. DnsTlsSocketFactory.h
  33. DnsTlsTransport.cpp
  34. DnsTlsTransport.h
  35. getaddrinfo.cpp
  36. getaddrinfo.h
  37. gethnamaddr.cpp
  38. gethnamaddr.h
  39. hostent.h
  40. IDnsTlsSocket.h
  41. IDnsTlsSocketFactory.h
  42. IDnsTlsSocketObserver.h
  43. libnetd_resolv.map.txt
  44. LockedQueue.h
  45. NOTICE
  46. OWNERS
  47. params.h
  48. PREUPLOAD.cfg
  49. PrivateDnsConfiguration.cpp
  50. PrivateDnsConfiguration.h
  51. README-DoT.md
  52. README.md
  53. res_cache.cpp
  54. res_comp.cpp
  55. res_debug.cpp
  56. res_debug.h
  57. res_init.cpp
  58. res_init.h
  59. res_mkquery.cpp
  60. res_query.cpp
  61. res_send.cpp
  62. res_send.h
  63. res_stats.cpp
  64. resolv_cache.h
  65. resolv_cache_unit_test.cpp
  66. resolv_callback_unit_test.cpp
  67. resolv_private.h
  68. resolv_tls_unit_test.cpp
  69. resolv_unit_test.cpp
  70. ResolverController.cpp
  71. ResolverController.h
  72. ResolverEventReporter.cpp
  73. ResolverEventReporter.h
  74. ResolverStats.h
  75. sethostent.cpp
  76. stats.h
  77. stats.proto
  78. TEST_MAPPING
  79. util.cpp
  80. util.h
README.md

Logging

This code uses LOG(X) for logging. Log levels are VERBOSE,DEBUG,INFO,WARNING and ERROR. The default setting is WARNING and logs relate to WARNING and ERROR will be shown. If you want to enable the DEBUG level logs, using following command. adb shell service call dnsresolver 10 i32 1 VERBOSE 0 DEBUG 1 INFO 2 WARNING 3 ERROR 4 Verbose resolver logs could contain PII -- do NOT enable in production builds.