The SNTP client listens for NTP IPv4 broadcasts from any NTP servers,
or IPv6 multicasts using the address fe0x:0X::101, where X can be
2 (Link Local), 5 (Site-Local) or 0xe (Global). Such
packets contain a timestamp indicating the current time. The packet
also contains information about where the server is in the hierarchy
of time servers. A server at the root of the time server tree normally
has an atomic clock. Such a server is said to be at stratum 0. A time
server which is synchronised to a stratum 0 server is said to be at
stratum 1 etc. The client will accept any NTP packets from
servers using version 3 or 4 of the protocol. When receiving packets
from multiple servers, it will use the packets from the server with
the lowest stratum. However, if there are no packets from this server
for 10 minutes and another server is sending packets, the client will
change servers.
If SNTP unicast mode is enabled via the CYGPKG_NET_SNTP_UNICAST
option, the SNTP client can additionally be configured with a list
of specific NTP servers to query. The general algorithm is as follows: if
the system clock has not yet been set via an NTP time update, then
the client will send out NTP requests every 30 seconds to all
configured NTP servers. Once an NTP time update has been received,
the client will send out additional NTP requests every 30 minutes
in order to update the system clock. These requests are resent
every 30 seconds until a response is received.
The system clock in eCos is accurate to 1 second. The SNTP client will
change the system clock when the time difference with the received
timestamp is greater than 2 seconds. The change is made as a step.