| /**************************************************************************** |
| * apps/netutils/ntpclient/ntpv3.h |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. The |
| * ASF licenses this file to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance with the |
| * License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| * License for the specific language governing permissions and limitations |
| * under the License. |
| * |
| ****************************************************************************/ |
| |
| #ifndef __APPS_NETUTILS_NTPCLIENT_NTPV3_H |
| #define __APPS_NETUTILS_NTPCLIENT_NTPV3_H |
| |
| /**************************************************************************** |
| * Included Files |
| ****************************************************************************/ |
| |
| /**************************************************************************** |
| * Pre-processor Definitions |
| ****************************************************************************/ |
| |
| /* The NTP version is described in RFC 1305 (NTP version 3), Appendix A: |
| * |
| * 0 1 2 3 |
| * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 |
| * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| * |LI | VN |Mode | Stratum | Poll | Precision | |
| * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| * | Root Delay | |
| * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| * | Root Dispersion | |
| * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| * | Reference Identifier | |
| * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| * | | |
| * | Reference Timestamp (64) | |
| * | | |
| * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| * | | |
| * | Originate Timestamp (64) | |
| * | | |
| * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| * | | |
| * | Receive Timestamp (64) | |
| * | | |
| * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| * | | |
| * | Transmit Timestamp (64) | |
| * | | |
| * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| * | Key Identifier (optional) (32) | |
| * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| * | | |
| * | | |
| * | Message Digest (optional) (128) | |
| * | | |
| * | | |
| * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| */ |
| |
| #define NTP_DATAGRAM_MINSIZE (12 * sizeof(uint32_t)) |
| #define NTP_DATAGRAM_MAXSIZE (17 * sizeof(uint32_t)) |
| |
| /* Leap Indicator (LI): 2-bit code warning of impending leap-second to be |
| * inserted at the end of the last day of the current month. Bits are coded |
| * as follows: |
| * |
| * 00 no warning |
| * 01 last minute has 61 seconds |
| * 10 last minute has 59 seconds |
| * 11 alarm condition (clock not synchronized) |
| * |
| * Version Number (VN): This is a three-bit integer indicating the NTP |
| * version number. In this case, three (3). |
| * |
| * Mode: This is a three-bit integer indicating the mode, with values |
| * defined as follows: |
| * |
| * 0 reserved |
| * 1 symmetric active |
| * 2 symmetric passive |
| * 3 client |
| * 4 server |
| * 5 broadcast |
| * 6 reserved for NTP control message (see Appendix B) |
| * 7 reserved for private use |
| * |
| * Stratum: This is a eight-bit integer indicating the stratum level of the |
| * local clock, with values defined as follows: |
| * |
| * 0 unspecified |
| * 1 primary reference (e.g., radio clock) |
| * 2-255 secondary reference (via NTP) |
| * |
| * Poll Interval: This is an eight-bit signed integer indicating the maximum |
| * interval between successive messages, in seconds to the nearest power of |
| * two. |
| * |
| * Precision: This is an eight-bit signed integer indicating the precision |
| * of the local clock, in seconds to the nearest power of two. |
| * |
| * Root Delay: This is a 32-bit signed fixed-point number indicating the |
| * total roundtrip delay to the primary reference source, in seconds with |
| * fraction point between bits 15 and 16. Note that this variable can take |
| * on both positive and negative values, depending on clock precision and |
| * skew. |
| * |
| * Root Dispersion: This is a 32-bit signed fixed-point number indicating |
| * the maximum error relative to the primary reference source, in seconds |
| * with fraction point between bits 15 and 16. Only positive values greater |
| * than zero are possible. |
| * |
| * Reference Clock Identifier: This is a 32-bit code identifying the |
| * particular reference clock. In the case of stratum 0 (unspecified) or |
| * stratum 1 (primary reference), this is a four-octet, left-justified, |
| * zero-padded ASCII string. |
| * |
| * While not enumerated as part of the NTP specification, the following are |
| * suggested ASCII identifiers: |
| * |
| * Stratum Code Meaning |
| * 0 DCN DCN routing protocol |
| * 0 NIST NIST public modem |
| * 0 TSP TSP time protocol |
| * 0 DTS Digital Time Service |
| * 1 ATOM Atomic clock (calibrated) |
| * 1 VLF VLF radio (OMEGA, etc.) |
| * 1 callsign Generic radio |
| * 1 LORC LORAN-C radionavigation |
| * 1 GOES GOES UHF environment satellite |
| * 1 GPS GPS UHF satellite positioning |
| * |
| * In the case of stratum 2 and greater (secondary reference) this is the |
| * four-octet Internet address of the primary reference host. |
| * |
| * Reference Timestamp: This is the local time at which the local clock was |
| * last set or corrected, in 64-bit timestamp format. |
| * |
| * Originate Timestamp: This is the local time at which the request departed |
| * the client host for the service host, in 64-bit timestamp format. |
| * |
| * Receive Timestamp: This is the local time at which the request arrived at |
| * the service host, in 64-bit timestamp format. |
| * |
| * Transmit Timestamp: This is the local time at which the reply departed |
| * the service host for the client host, in 64-bit timestamp format. |
| * |
| * Authenticator (optional): When the NTP authentication mechanism is |
| * implemented, this contains the authenticator information defined in |
| * Appendix C. |
| */ |
| |
| #define MKLVM(l,v,m) ((uint8_t)(l) << 6 | (uint8_t)(v) << 3 | (uint8_t)(m)) |
| #define GETLI(lvm) ((uint8_t)(lvm) >> 6) |
| #define GETVN(lvm) (((uint8_t)(lvm) >> 3) & 7) |
| #define GETMODE(lvm) ((uint8_t)(lvm) & 7) |
| |
| /**************************************************************************** |
| * Public Types |
| ****************************************************************************/ |
| |
| struct ntp_datagram_s |
| { |
| uint8_t lvm; /* LI | VN | Mode */ |
| uint8_t stratum; /* Stratum */ |
| uint8_t poll; /* Poll interval */ |
| uint8_t precision; /* Precision */ |
| uint8_t rootdelay[4]; /* Root Delay */ |
| uint8_t rootdispersion[4]; /* Root dispersion */ |
| uint8_t refid[4]; /* Reference Clock Identifier */ |
| uint8_t reftimestamp[8]; /* Rererence Timestamp */ |
| uint8_t origtimestamp[8]; /* Originate Timestamp */ |
| uint8_t recvtimestamp[8]; /* Receive Timestamp */ |
| uint8_t xmittimestamp[8]; /* Transmit Timestamp */ |
| }; |
| |
| #ifdef CONFIG_NETUTILS_NTPCLIENT_WITH_AUTH |
| struct ntp_datagram_with_key_s |
| { |
| struct ntp_datagram_s header; |
| uint8_t keyid[4]; /* Authenticator data */ |
| uint8_t digest1[4]; |
| uint8_t digest2[4]; |
| uint8_t digest3[4]; |
| uint8_t digest4[4]; |
| }; |
| #endif |
| |
| #endif /* __APPS_NETUTILS_NTPCLIENT_NTPV3_H */ |