Customized hostname/address table for DNS query

- Some Android OEMs would like to create their own customized table
  (hostname/address mapping lists) that the resolver looks up before
  querying dns servers and gets the result directly.
- About DNS query, resolver checks system/etc/hosts first. If no data is
  found, resolver will query dns from the server. We add a new parameter to
  ResolverParamsParcel for OEMs to customize the table and OEMs can use
  setDnsConfigurationForNetwork to create the hostname/address lists. After
  OEMs create their own lists,the dns query will be following sequence.
  system/ect/hosts -> customized table -> dns server
- Add test cases: GetAddrInfoFromCustTable,
                  GetAddrInfoFromCustTable_InvalidInput,
                  GetAddrInfoFromCustTable_Modify

Bug: 122998288
Test: cd packages/modules/DnsResolver && atest
Change-Id: I7a2d689de74f0076f0115e0cb20fdc028903ae86
8 files changed
tree: 73db0e98e13d48aae3922dda04f5adf0fc440e3f
  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.