Linux uses David L. Mills' clock adjustment algorithm (see
       RFC 5905).  The system call adjtimex() reads and optionally sets
       adjustment parameters for this algorithm.  It takes a pointer to
       a timex structure, updates kernel parameters from (selected)
       field values, and returns the same structure updated with the
       current kernel values.  This structure is declared as follows:
           struct timex {
               int  modes;      /* Mode selector */
               long offset;     /* Time offset; nanoseconds, if STA_NANO
                                   status flag is set, otherwise
                                   microseconds */
               long freq;       /* Frequency offset; see NOTES for units */
               long maxerror;   /* Maximum error (microseconds) */
               long esterror;   /* Estimated error (microseconds) */
               int  status;     /* Clock command/status */
               long constant;   /* PLL (phase-locked loop) time constant */
               long precision;  /* Clock precision
                                   (microseconds, read-only) */
               long tolerance;  /* Clock frequency tolerance (read-only);
                                   see NOTES for units */
               struct timeval time;
                                /* Current time (read-only, except for
                                   ADJ_SETOFFSET); upon return, time.tv_usec
                                   contains nanoseconds, if STA_NANO status
                                   flag is set, otherwise microseconds */
               long tick;       /* Microseconds between clock ticks */
               long ppsfreq;    /* PPS (pulse per second) frequency
                                   (read-only); see NOTES for units */
               long jitter;     /* PPS jitter (read-only); nanoseconds, if
                                   STA_NANO status flag is set, otherwise
                                   microseconds */
               int  shift;      /* PPS interval duration
                                   (seconds, read-only) */
               long stabil;     /* PPS stability (read-only);
                                   see NOTES for units */
               long jitcnt;     /* PPS count of jitter limit exceeded
                                   events (read-only) */
               long calcnt;     /* PPS count of calibration intervals
                                   (read-only) */
               long errcnt;     /* PPS count of calibration errors
                                   (read-only) */
               long stbcnt;     /* PPS count of stability limit exceeded
                                   events (read-only) */
               int tai;         /* TAI offset, as set by previous ADJ_TAI
                                   operation (seconds, read-only,
                                   since Linux 2.6.26) */
               /* Further padding bytes to allow for future expansion */
           };
       The modes field determines which parameters, if any, to set.  (As
       described later in this page, the constants used for
       ntp_adjtime() are equivalent but differently named.)  It is a bit
       mask containing a bitwise-or combination of zero or more of the
       following bits:
       ADJ_OFFSET
              Set time offset from buf.offset.  Since Linux 2.6.26, the
              supplied value is clamped to the range (-0.5s, +0.5s).  In
              older kernels, an EINVAL error occurs if the supplied
              value is out of range.
       ADJ_FREQUENCY
              Set frequency offset from buf.freq.  Since Linux 2.6.26,
              the supplied value is clamped to the range (-32768000,
              +32768000).  In older kernels, an EINVAL error occurs if
              the supplied value is out of range.
       ADJ_MAXERROR
              Set maximum time error from buf.maxerror.
       ADJ_ESTERROR
              Set estimated time error from buf.esterror.
       ADJ_STATUS
              Set clock status bits from buf.status.  A description of
              these bits is provided below.
       ADJ_TIMECONST
              Set PLL time constant from buf.constant.  If the STA_NANO
              status flag (see below) is clear, the kernel adds 4 to
              this value.
       ADJ_SETOFFSET (since Linux 2.6.39)
              Add buf.time to the current time.  If buf.status includes
              the ADJ_NANO flag, then buf.time.tv_usec is interpreted as
              a nanosecond value; otherwise it is interpreted as
              microseconds.
              The value of buf.time is the sum of its two fields, but
              the field buf.time.tv_usec must always be nonnegative.
              The following example shows how to normalize a timeval
              with nanosecond resolution.
                  while (buf.time.tv_usec < 0) {
                      buf.time.tv_sec  -= 1;
                      buf.time.tv_usec += 1000000000;
                  }
       ADJ_MICRO (since Linux 2.6.26)
              Select microsecond resolution.
       ADJ_NANO (since Linux 2.6.26)
              Select nanosecond resolution.  Only one of ADJ_MICRO and
              ADJ_NANO should be specified.
       ADJ_TAI (since Linux 2.6.26)
              Set TAI (Atomic International Time) offset from
              buf.constant.
              ADJ_TAI should not be used in conjunction with
              ADJ_TIMECONST, since the latter mode also employs the
              buf.constant field.
              For a complete explanation of TAI and the difference
              between TAI and UTC, see BIPM 
              ⟨http://www.bipm.org/en/bipm/tai/tai.html⟩
       ADJ_TICK
              Set tick value from buf.tick.
       Alternatively, modes can be specified as either of the following
       (multibit mask) values, in which case other bits should not be
       specified in modes:
       ADJ_OFFSET_SINGLESHOT
              Old-fashioned adjtime(3): (gradually) adjust time by value
              specified in buf.offset, which specifies an adjustment in
              microseconds.
       ADJ_OFFSET_SS_READ (functional since Linux 2.6.28)
              Return (in buf.offset) the remaining amount of time to be
              adjusted after an earlier ADJ_OFFSET_SINGLESHOT operation.
              This feature was added in Linux 2.6.24, but did not work
              correctly until Linux 2.6.28.
       Ordinary users are restricted to a value of either 0 or
       ADJ_OFFSET_SS_READ for modes.  Only the superuser may set any
       parameters.
       The buf.status field is a bit mask that is used to set and/or
       retrieve status bits associated with the NTP implementation.
       Some bits in the mask are both readable and settable, while
       others are read-only.
       STA_PLL (read-write)
              Enable phase-locked loop (PLL) updates via ADJ_OFFSET.
       STA_PPSFREQ (read-write)
              Enable PPS (pulse-per-second) frequency discipline.
       STA_PPSTIME (read-write)
              Enable PPS time discipline.
       STA_FLL (read-write)
              Select frequency-locked loop (FLL) mode.
       STA_INS (read-write)
              Insert a leap second after the last second of the UTC day,
              thus extending the last minute of the day by one second.
              Leap-second insertion will occur each day, so long as this
              flag remains set.
       STA_DEL (read-write)
              Delete a leap second at the last second of the UTC day.
              Leap second deletion will occur each day, so long as this
              flag remains set.
       STA_UNSYNC (read-write)
              Clock unsynchronized.
       STA_FREQHOLD (read-write)
              Hold frequency.  Normally adjustments made via ADJ_OFFSET
              result in dampened frequency adjustments also being made.
              So a single call corrects the current offset, but as
              offsets in the same direction are made repeatedly, the
              small frequency adjustments will accumulate to fix the
              long-term skew.
              This flag prevents the small frequency adjustment from
              being made when correcting for an ADJ_OFFSET value.
       STA_PPSSIGNAL (read-only)
              A valid PPS (pulse-per-second) signal is present.
       STA_PPSJITTER (read-only)
              PPS signal jitter exceeded.
       STA_PPSWANDER (read-only)
              PPS signal wander exceeded.
       STA_PPSERROR (read-only)
              PPS signal calibration error.
       STA_CLOCKERR (read-only)
              Clock hardware fault.
       STA_NANO (read-only; since Linux 2.6.26)
              Resolution (0 = microsecond, 1 = nanoseconds).  Set via
              ADJ_NANO, cleared via ADJ_MICRO.
       STA_MODE (since Linux 2.6.26)
              Mode (0 = Phase Locked Loop, 1 = Frequency Locked Loop).
       STA_CLK (read-only; since Linux 2.6.26)
              Clock source (0 = A, 1 = B); currently unused.
       Attempts to set read-only status bits are silently ignored.
   clock_adjtime ()
       The clock_adjtime() system call (added in Linux 2.6.39) behaves
       like adjtimex() but takes an additional clk_id argument to
       specify the particular clock on which to act.
   ntp_adjtime ()
       The ntp_adjtime() library function (described in the NTP "Kernel
       Application Program API", KAPI) is a more portable interface for
       performing the same task as adjtimex().  Other than the following
       points, it is identical to adjtimex():
       *  The constants used in modes are prefixed with "MOD_" rather
          than "ADJ_", and have the same suffixes (thus, MOD_OFFSET,
          MOD_FREQUENCY, and so on), other than the exceptions noted in
          the following points.
       *  MOD_CLKA is the synonym for ADJ_OFFSET_SINGLESHOT.
       *  MOD_CLKB is the synonym for ADJ_TICK.
       *  The is no synonym for ADJ_OFFSET_SS_READ, which is not
          described in the KAPI.