ntp_packet.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2016 Luminița Lăzărescu <cluminita.lazarescu@gmail.com>
3  *
4  * This file is subject to the terms and conditions of the GNU Lesser
5  * General Public License v2.1. See the file LICENSE in the top level
6  * directory for more details.
7  */
8 
9 #pragma once
10 
26 #include <stdint.h>
27 #include "byteorder.h"
28 
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
32 
40 #define NTP_PACKET_LI_POS (6U)
41 #define NTP_PACKET_LI_MASK (0xc0)
42 #define NTP_PACKET_VN_POS (3U)
43 #define NTP_PACKET_VN_MASK (0x38)
44 #define NTP_PACKET_MODE_MASK (0x07)
47 #define NTP_VERSION (4U)
48 #define NTP_PORT (123U)
54 #define NTP_UNIX_OFFSET (2208988800)
55 
59 typedef enum {
68 
74 typedef struct __attribute__((packed)) {
78 
84 typedef struct __attribute__((packed)) {
85  uint8_t li_vn_mode;
86  uint8_t stratum;
87  uint8_t poll;
88  uint8_t precision;
96 } ntp_packet_t;
97 
104 static inline void ntp_packet_set_li(ntp_packet_t *packet, uint8_t li)
105 {
106  packet->li_vn_mode &= ~NTP_PACKET_LI_MASK;
107  packet->li_vn_mode |= li << NTP_PACKET_LI_POS;
108 }
109 
115 static inline void ntp_packet_set_vn(ntp_packet_t *packet)
116 {
117  packet->li_vn_mode &= ~NTP_PACKET_VN_MASK;
119 }
120 
127 static inline void ntp_packet_set_mode(ntp_packet_t *packet, ntp_mode_t mode)
128 {
129  packet->li_vn_mode &= ~NTP_PACKET_MODE_MASK;
130  packet->li_vn_mode |= mode & NTP_PACKET_MODE_MASK;
131 }
132 
140 static inline uint8_t ntp_packet_get_li(ntp_packet_t *packet)
141 {
142  return (packet->li_vn_mode & NTP_PACKET_LI_MASK) >> NTP_PACKET_LI_POS;
143 }
144 
152 static inline uint8_t ntp_packet_get_vn(ntp_packet_t *packet)
153 {
154  return (packet->li_vn_mode & NTP_PACKET_VN_MASK) >> NTP_PACKET_VN_POS;
155 }
156 
165 {
166  return (packet->li_vn_mode & NTP_PACKET_MODE_MASK);
167 }
168 
169 #ifdef __cplusplus
170 }
171 #endif
172 
Functions to work with different byte orders.
#define NTP_VERSION
NTP version.
Definition: ntp_packet.h:47
static uint8_t ntp_packet_get_li(ntp_packet_t *packet)
Get leap indicator from a NTP packet.
Definition: ntp_packet.h:140
ntp_mode_t
NTP modes.
Definition: ntp_packet.h:59
static void ntp_packet_set_mode(ntp_packet_t *packet, ntp_mode_t mode)
Set mode in a NTP packet.
Definition: ntp_packet.h:127
static void ntp_packet_set_li(ntp_packet_t *packet, uint8_t li)
Set leap indicator in a NTP packet.
Definition: ntp_packet.h:104
#define NTP_PACKET_VN_POS
version position
Definition: ntp_packet.h:42
static ntp_mode_t ntp_packet_get_mode(ntp_packet_t *packet)
Get mode from a NTP packet.
Definition: ntp_packet.h:164
#define NTP_PACKET_LI_POS
Bit positions and masks for ntp_packet_t::li_vn_mode.
Definition: ntp_packet.h:40
#define NTP_PACKET_VN_MASK
version mask
Definition: ntp_packet.h:43
static void ntp_packet_set_vn(ntp_packet_t *packet)
Set version in a NTP packet.
Definition: ntp_packet.h:115
#define NTP_PACKET_MODE_MASK
mode mask
Definition: ntp_packet.h:44
#define NTP_PACKET_LI_MASK
leap indicator mask
Definition: ntp_packet.h:41
static uint8_t ntp_packet_get_vn(ntp_packet_t *packet)
Get version from a NTP packet.
Definition: ntp_packet.h:152
@ NTP_MODE_CLIENT
client
Definition: ntp_packet.h:63
@ NTP_MODE_RESERVED
reserved
Definition: ntp_packet.h:60
@ NTP_MODE_SERVER
server
Definition: ntp_packet.h:64
@ NTP_MODE_SYM_ACTIVE
symmetric active
Definition: ntp_packet.h:61
@ NTP_MODE_SYM_PASSIVE
symmetric passive
Definition: ntp_packet.h:62
@ NTP_MODE_PRIV
reserved for private use
Definition: ntp_packet.h:66
@ NTP_MODE_BROADCAST
broadcast
Definition: ntp_packet.h:65
NTP packet.
Definition: ntp_packet.h:84
ntp_timestamp_t receive
receive timestamp
Definition: ntp_packet.h:94
uint8_t li_vn_mode
leap indicator, version and mode
Definition: ntp_packet.h:85
ntp_timestamp_t reference
reference timestamp
Definition: ntp_packet.h:92
uint8_t precision
precision in log2 seconds
Definition: ntp_packet.h:88
uint8_t poll
poll in log2 seconds
Definition: ntp_packet.h:87
uint8_t stratum
stratum
Definition: ntp_packet.h:86
ntp_timestamp_t transmit
transmit timestamp
Definition: ntp_packet.h:95
network_uint32_t root_dispersion
root dispersion in NTP short format
Definition: ntp_packet.h:90
ntp_timestamp_t origin
origin timesptamp
Definition: ntp_packet.h:93
network_uint32_t reference_id
reference ID
Definition: ntp_packet.h:91
network_uint32_t root_delay
root delay in NTP short format
Definition: ntp_packet.h:89
NTP timestamp.
Definition: ntp_packet.h:74
network_uint32_t seconds
seconds since 1 January 1900 00:00 UTC
Definition: ntp_packet.h:75
network_uint32_t fraction
fraction of seconds in 232 picoseconds
Definition: ntp_packet.h:76
A 32 bit integer in big endian aka network byte order.
Definition: byteorder.h:83