apache / apache/nuttx-apps

DNS issues on NTP client

Open
#2,440 2 comments 0 reactions 0 assignees View on GitHub
Dominant language
C
Stars
465
Forks
779
Avg merge
2d 9h
Merged PRs (30d)
36

Description

During NTP server querying through the `ntpclient.c`, different NTP server domain names (e.g., 0.uk.pool.ntp.org, 1.uk.pool.ntp.org) might resolve to the same set of IP addresses due to **DNS caching**. This can lead to **repeated queries to the same non-responsive IP addresses**, resulting in failures to obtain the correct time.

For example, in the following, there are some logs that I added to `ntpclient.c`, in order to understand why the NTP was failing:
```
[ 51.046000] [25] (Info) '0.pool.ntp.org' resolved to: 216.238.113.58
[ 51.046000] [25] (Info) ntpclient.c-447-gethostbyname for 0.pool.ntp.org OK
[ 51.046000] [25] (Info) ntpclient.c-480-Sending a NTP packet
[ 51.055000] [25] (Info) ntpclient.c-509-sendto ret: 68
[ 51.056000] [25] (Info) ntpclient.c-515-Recv a NTP packet
[ 56.055000] [25] (Info) ntpclient.c-521-recvfrom nbytes: -1
[ 56.056000] [25] (Info) '0.pool.ntp.org' resolved to: 216.238.113.58
[ 56.056000] [25] (Info) ntpclient.c-447-gethostbyname for 0.pool.ntp.org OK
[ 56.056000] [25] (Info) ntpclient.c-480-Sending a NTP packet
[ 56.063000] [25] (Info) ntpclient.c-509-sendto ret: 68
[ 56.063000] [25] (Info) ntpclient.c-515-Recv a NTP packet
[ 61.065000] [25] (Info) ntpclient.c-521-recvfrom nbytes: -1
[ 61.066000] [25] (Info) '0.pool.ntp.org' resolved to: 216.238.113.58
[ 61.066000] [25] (Info) ntpclient.c-447-gethostbyname for 0.pool.ntp.org OK
[ 61.066000] [25] (Info) ntpclient.c-480-Sending a NTP packet
[ 61.075000] [25] (Info) ntpclient.c-509-sendto ret: 68
[ 61.075000] [25] (Info) ntpclient.c-515-Recv a NTP packet
[ 66.075000] [25] (Info) ntpclient.c-521-recvfrom nbytes: -1
[ 66.076000] [25] (Info) '0.pool.ntp.org' resolved to: 216.238.113.58
[ 66.076000] [25] (Info) ntpclient.c-447-gethostbyname for 0.pool.ntp.org OK
[ 66.076000] [25] (Info) ntpclient.c-480-Sending a NTP packet
[ 66.085000] [25] (Info) ntpclient.c-509-sendto ret: 68
[ 66.085000] [25] (Info) ntpclient.c-515-Recv a NTP packet
[ 71.085000] [25] (Info) ntpclient.c-521-recvfrom nbytes: -1
[ 71.086000] [25] (Info) '0.pool.ntp.org' resolved to: 216.238.113.58
[ 71.086000] [25] (Info) ntpclient.c-447-gethostbyname for 0.pool.ntp.org OK
[ 71.086000] [25] (Info) ntpclient.c-480-Sending a NTP packet
[ 71.095000] [25] (Info) ntpclient.c-509-sendto ret: 68
[ 71.095000] [25] (Info) ntpclient.c-515-Recv a NTP packet
[ 76.095000] [25] (Info) ntpclient.c-521-recvfrom nbytes: -1
[ 76.095000] [25] (Info) ntpclient.c-563-ERROR: recvfrom() failed: 11
[ 76.095000] [25] (Info) ntpclient.c-589-The NTP client is terminating
```

To mitigate this issue, a possible option is to **flush the DNS cache after cycling through all configured NTP servers**, ensuring that subsequent DNS resolutions provide potentially new and responsive IP addresses, thereby increasing the likelihood of successful time synchronization. However, I cannot manipulate the DNS cache from the user space, unless I create an API for it.

Overall, do you have a workaround or a hack that I can use in order to solve this NTP issue? Or at least to force a new IP resolution for an NTP hostname after some failures?

Contributor guide

No contributing guide indexed for this repository

Research direction

Start by reading ntpclient.c around gethostbyname, the NTP query retry loop, and the configured-server cycle described in the logs. Determine whether the existing client can request a fresh resolution or whether a cache API is needed; done should be a documented, reproducible way to avoid repeatedly querying the same non-responsive address.

Written by the indexing model from the issue text.

Assessment

Tech stack
c
Domain
networking
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.