#ifndef _IPXE_NTP_H #define _IPXE_NTP_H /** @file * * Network Time Protocol * */ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); #include #include #include /** NTP port */ #define NTP_PORT 123 /** An NTP short-format timestamp */ struct ntp_short { /** Seconds */ uint16_t seconds; /** Fraction of a second */ uint16_t fraction; } __attribute__ (( packed )); /** An NTP timestamp */ struct ntp_timestamp { /** Seconds */ uint32_t seconds; /** Fraction of a second */ uint32_t fraction; } __attribute__ (( packed )); /** An NTP reference identifier */ union ntp_id { /** Textual identifier */ char text[4]; /** IPv4 address */ struct in_addr in; /** Opaque integer */ uint32_t opaque; }; /** An NTP header */ struct ntp_header { /** Flags */ uint8_t flags; /** Stratum */ uint8_t stratum; /** Polling rate */ int8_t poll; /** Precision */ int8_t precision; /** Root delay */ struct ntp_short delay; /** Root dispersion */ struct ntp_short dispersion; /** Reference clock identifier */ union ntp_id id; /** Reference timestamp */ struct ntp_timestamp reference; /** Originate timestamp */ struct ntp_timestamp originate; /** Receive timestamp */ struct ntp_timestamp receive; /** Transmit timestamp */ struct ntp_timestamp transmit; } __attribute__ (( packed )); /** Leap second indicator: unknown */ #define NTP_FL_LI_UNKNOWN 0xc0 /** NTP version: 1 */ #define NTP_FL_VN_1 0x20 /** NTP mode: client */ #define NTP_FL_MODE_CLIENT 0x03 /** NTP mode: server */ #define NTP_FL_MODE_SERVER 0x04 /** NTP mode mask */ #define NTP_FL_MODE_MASK 0x07 /** NTP timestamp for start of Unix epoch */ #define NTP_EPOCH 2208988800UL /** NTP fraction of a second magic value * * This is a policy decision. */ #define NTP_FRACTION_MAGIC 0x69505845UL /** NTP minimum retransmission timeout * * This is a policy decision. */ #define NTP_MIN_TIMEOUT ( 1 * TICKS_PER_SEC ) /** NTP maximum retransmission timeout * * This is a policy decision. */ #define NTP_MAX_TIMEOUT ( 10 * TICKS_PER_SEC ) extern int start_ntp ( struct interface *job, const char *hostname ); #endif /* _IPXE_NTP_H */