/* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once #include "sparse-endian.h" /* NTP protocol, packet header */ #define NTP_LEAP_PLUSSEC 1 #define NTP_LEAP_MINUSSEC 2 #define NTP_LEAP_NOTINSYNC 3 #define NTP_MODE_CLIENT 3 #define NTP_MODE_SERVER 4 #define NTP_FIELD_LEAP(f) (((f) >> 6) & 3) #define NTP_FIELD_VERSION(f) (((f) >> 3) & 7) #define NTP_FIELD_MODE(f) ((f) & 7) #define NTP_FIELD(l, v, m) (((l) << 6) | ((v) << 3) | (m)) /* * "NTP timestamps are represented as a 64-bit unsigned fixed-point number, * in seconds relative to 0h on 1 January 1900." */ #define OFFSET_1900_1970 UINT64_C(2208988800) struct ntp_ts { be32_t sec; be32_t frac; } _packed_; struct ntp_ts_short { be16_t sec; be16_t frac; } _packed_; struct ntp_msg { uint8_t field; uint8_t stratum; int8_t poll; int8_t precision; struct ntp_ts_short root_delay; struct ntp_ts_short root_dispersion; char refid[4]; struct ntp_ts reference_time; struct ntp_ts origin_time; struct ntp_ts recv_time; struct ntp_ts trans_time; } _packed_;