RFC Errata
RFC 5905, "Network Time Protocol Version 4: Protocol and Algorithms Specification", June 2010
Source of RFC: ntp (int)
Errata ID: 5601
Status: Reported
Type: Technical
Publication Format(s) : TEXT
Reported By: Takashi Nakamoto
Date Reported: 2019-01-15
Section 11.2.3. says:
| s.rootdisp <-- p.epsilon_r + p.epsilon + | | p.psi + PHI * (s.t - p.t) | | + |THETA| | | s.refid <-- p.refid | | s.reftime <-- p.reftime | | s.t <-- p.t | +-------------------------------------------+ Figure 25: System Variables Update There is an important detail not shown. The dispersion increment (p.epsilon + p.psi + PHI * (s.t - p.t) + |THETA|) is bounded from below by MINDISP.
It should say:
| s.rootdisp <-- p.epsilon_r + p.epsilon + | | p.psi + PHI * (t_s - p.t) | | + |THETA| | | s.refid <-- p.refid | | s.reftime <-- p.reftime | | s.t <-- p.t | +-------------------------------------------+ Figure 25: System Variables Update where t_s is the time when the system variables are updated. There is an important detail not shown. The dispersion increment (p.epsilon + p.psi + PHI * (t_s - p.t) + |THETA|) is bounded from below by MINDISP.
Notes:
In the same section, it is said that "By rule, an update is discarded if its time of arrival p.t is not strictly later than the last update used s.t." This means that p.t > s.t when the system variable is updated. Hence, (s.t - p.t) is negative. It may lead to a negative dispersion, but, by definition, the dispersion cannot be negative. So, the original formula should be wrong.
Because the dispersion is defined as the value that grows at constant rate PHI, s.rootdisp should be
s.rootdisp <-- p.epsilon_r + p.epsilon + p.psi + PHI * (t_s - p.t) + |THETA|
where t_s is the time when the system variables are updated. The symbol t_s is arbitrary because it is not defined in other places.