Loading...
Searching...
No Matches
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
22#ifndef NET_NTP_PACKET_H
23#define NET_NTP_PACKET_H
24
25#include <stdint.h>
26#include "byteorder.h"
27
28#ifdef __cplusplus
29extern "C" {
30#endif
31
39#define NTP_PACKET_LI_POS (6U)
40#define NTP_PACKET_LI_MASK (0xc0)
41#define NTP_PACKET_VN_POS (3U)
42#define NTP_PACKET_VN_MASK (0x38)
43#define NTP_PACKET_MODE_MASK (0x07)
46#define NTP_VERSION (4U)
47#define NTP_PORT (123U)
53#define NTP_UNIX_OFFSET (2208988800)
54
67
73typedef struct __attribute__((packed)) {
77
96
103static inline void ntp_packet_set_li(ntp_packet_t *packet, uint8_t li)
104{
105 packet->li_vn_mode &= ~NTP_PACKET_LI_MASK;
106 packet->li_vn_mode |= li << NTP_PACKET_LI_POS;
107}
108
114static inline void ntp_packet_set_vn(ntp_packet_t *packet)
115{
116 packet->li_vn_mode &= ~NTP_PACKET_VN_MASK;
118}
119
126static inline void ntp_packet_set_mode(ntp_packet_t *packet, ntp_mode_t mode)
127{
128 packet->li_vn_mode &= ~NTP_PACKET_MODE_MASK;
129 packet->li_vn_mode |= mode & NTP_PACKET_MODE_MASK;
130}
131
139static inline uint8_t ntp_packet_get_li(ntp_packet_t *packet)
140{
141 return (packet->li_vn_mode & NTP_PACKET_LI_MASK) >> NTP_PACKET_LI_POS;
142}
143
151static inline uint8_t ntp_packet_get_vn(ntp_packet_t *packet)
152{
153 return (packet->li_vn_mode & NTP_PACKET_VN_MASK) >> NTP_PACKET_VN_POS;
154}
155
164{
165 return (packet->li_vn_mode & NTP_PACKET_MODE_MASK);
166}
167
168#ifdef __cplusplus
169}
170#endif
171
172#endif /* NET_NTP_PACKET_H */
Functions to work with different byte orders.
#define NTP_VERSION
NTP version.
Definition ntp_packet.h:46
static uint8_t ntp_packet_get_li(ntp_packet_t *packet)
Get leap indicator from a NTP packet.
Definition ntp_packet.h:139
ntp_mode_t
NTP modes.
Definition ntp_packet.h:58
static void ntp_packet_set_mode(ntp_packet_t *packet, ntp_mode_t mode)
Set mode in a NTP packet.
Definition ntp_packet.h:126
static void ntp_packet_set_li(ntp_packet_t *packet, uint8_t li)
Set leap indicator in a NTP packet.
Definition ntp_packet.h:103
#define NTP_PACKET_VN_POS
version position
Definition ntp_packet.h:41
static ntp_mode_t ntp_packet_get_mode(ntp_packet_t *packet)
Get mode from a NTP packet.
Definition ntp_packet.h:163
#define NTP_PACKET_LI_POS
Bit positions and masks for ntp_packet_t::li_vn_mode.
Definition ntp_packet.h:39
#define NTP_PACKET_VN_MASK
version mask
Definition ntp_packet.h:42
static void ntp_packet_set_vn(ntp_packet_t *packet)
Set version in a NTP packet.
Definition ntp_packet.h:114
#define NTP_PACKET_MODE_MASK
mode mask
Definition ntp_packet.h:43
#define NTP_PACKET_LI_MASK
leap indicator mask
Definition ntp_packet.h:40
static uint8_t ntp_packet_get_vn(ntp_packet_t *packet)
Get version from a NTP packet.
Definition ntp_packet.h:151
@ NTP_MODE_CLIENT
client
Definition ntp_packet.h:62
@ NTP_MODE_RESERVED
reserved
Definition ntp_packet.h:59
@ NTP_MODE_SERVER
server
Definition ntp_packet.h:63
@ NTP_MODE_SYM_ACTIVE
symmetric active
Definition ntp_packet.h:60
@ NTP_MODE_SYM_PASSIVE
symmetric passive
Definition ntp_packet.h:61
@ NTP_MODE_PRIV
reserved for private use
Definition ntp_packet.h:65
@ NTP_MODE_BROADCAST
broadcast
Definition ntp_packet.h:64
NTP packet.
Definition ntp_packet.h:83
ntp_timestamp_t receive
receive timestamp
Definition ntp_packet.h:93
uint8_t li_vn_mode
leap indicator, version and mode
Definition ntp_packet.h:84
ntp_timestamp_t reference
reference timestamp
Definition ntp_packet.h:91
uint8_t precision
precision in log2 seconds
Definition ntp_packet.h:87
uint8_t poll
poll in log2 seconds
Definition ntp_packet.h:86
uint8_t stratum
stratum
Definition ntp_packet.h:85
ntp_timestamp_t transmit
transmit timestamp
Definition ntp_packet.h:94
network_uint32_t root_dispersion
root dispersion in NTP short format
Definition ntp_packet.h:89
ntp_timestamp_t origin
origin timesptamp
Definition ntp_packet.h:92
network_uint32_t reference_id
reference ID
Definition ntp_packet.h:90
network_uint32_t root_delay
root delay in NTP short format
Definition ntp_packet.h:88
NTP timestamp.
Definition ntp_packet.h:73
network_uint32_t seconds
seconds since 1 January 1900 00:00 UTC
Definition ntp_packet.h:74
network_uint32_t fraction
fraction of seconds in 232 picoseconds
Definition ntp_packet.h:75
A 32 bit integer in big endian aka network byte order.
Definition byteorder.h:84