@@ -83,3 +83,69 @@ impl core::ops::Sub for Ktime {
8383 }
8484 }
8585}
86+
87+ /// An identifier for a clock. Used when specifying clock sources.
88+ ///
89+ ///
90+ /// Selection of the clock depends on the use case. In some cases the usage of a
91+ /// particular clock is mandatory, e.g. in network protocols, filesystems.In other
92+ /// cases the user of the clock has to decide which clock is best suited for the
93+ /// purpose. In most scenarios clock [`ClockId::Monotonic`] is the best choice as it
94+ /// provides a accurate monotonic notion of time (leap second smearing ignored).
95+ #[ derive( Clone , Copy , PartialEq , Eq , Debug ) ]
96+ #[ repr( u32 ) ]
97+ pub enum ClockId {
98+ /// A settable system-wide clock that measures real (i.e., wall-clock) time.
99+ ///
100+ /// Setting this clock requires appropriate privileges. This clock is
101+ /// affected by discontinuous jumps in the system time (e.g., if the system
102+ /// administrator manually changes the clock), and by frequency adjustments
103+ /// performed by NTP and similar applications via adjtime(3), adjtimex(2),
104+ /// clock_adjtime(2), and ntp_adjtime(3). This clock normally counts the
105+ /// number of seconds since 1970-01-01 00:00:00 Coordinated Universal Time
106+ /// (UTC) except that it ignores leap seconds; near a leap second it may be
107+ /// adjusted by leap second smearing to stay roughly in sync with UTC. Leap
108+ /// second smearing applies frequency adjustments to the clock to speed up
109+ /// or slow down the clock to account for the leap second without
110+ /// discontinuities in the clock. If leap second smearing is not applied,
111+ /// the clock will experience discontinuity around leap second adjustment.
112+ RealTime = bindings:: CLOCK_REALTIME ,
113+ /// A monotonically increasing clock.
114+ ///
115+ /// A nonsettable system-wide clock that represents monotonic time since—as
116+ /// described by POSIX—"some unspecified point in the past". On Linux, that
117+ /// point corresponds to the number of seconds that the system has been
118+ /// running since it was booted.
119+ ///
120+ /// The CLOCK_MONOTONIC clock is not affected by discontinuous jumps in the
121+ /// CLOCK_REAL (e.g., if the system administrator manually changes the
122+ /// clock), but is affected by frequency adjustments. This clock does not
123+ /// count time that the system is suspended.
124+ Monotonic = bindings:: CLOCK_MONOTONIC ,
125+ /// A monotonic that ticks while system is suspended.
126+ ///
127+ /// A nonsettable system-wide clock that is identical to CLOCK_MONOTONIC,
128+ /// except that it also includes any time that the system is suspended. This
129+ /// allows applications to get a suspend-aware monotonic clock without
130+ /// having to deal with the complications of CLOCK_REALTIME, which may have
131+ /// discontinuities if the time is changed using settimeofday(2) or similar.
132+ BootTime = bindings:: CLOCK_BOOTTIME ,
133+ /// International Atomic Time.
134+ ///
135+ /// A system-wide clock derived from wall-clock time but counting leap seconds.
136+ ///
137+ /// This clock is coupled to CLOCK_REALTIME and will be set when CLOCK_REALTIME is
138+ /// set, or when the offset to CLOCK_REALTIME is changed via adjtimex(2). This
139+ /// usually happens during boot and **should** not happen during normal operations.
140+ /// However, if NTP or another application adjusts CLOCK_REALTIME by leap second
141+ /// smearing, this clock will not be precise during leap second smearing.
142+ ///
143+ /// The acronym TAI refers to International Atomic Time.
144+ TAI = bindings:: CLOCK_TAI ,
145+ }
146+
147+ impl ClockId {
148+ fn into_c ( self ) -> bindings:: clockid_t {
149+ self as bindings:: clockid_t
150+ }
151+ }
0 commit comments