diff options
Diffstat (limited to 'apps/netutils/ntpclient/ntpv3.h')
-rwxr-xr-x | apps/netutils/ntpclient/ntpv3.h | 207 |
1 files changed, 207 insertions, 0 deletions
diff --git a/apps/netutils/ntpclient/ntpv3.h b/apps/netutils/ntpclient/ntpv3.h new file mode 100755 index 000000000..c96883f82 --- /dev/null +++ b/apps/netutils/ntpclient/ntpv3.h @@ -0,0 +1,207 @@ +/**************************************************************************** + * apps/netutils/ntpclient/ntpv3.h + * + * Copyright (C) 2014 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt <gnutt@nuttx.org> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name NuttX nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +#ifndef __APPS_NETUTILS_NTPCLIENT_NTPV3_H +#define __APPS_NETUTILS_NTPCLIENT_NTPV3_H 1 + +/**************************************************************************** + * 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 */ + uint8_t keyid[4]; /* Authenticator data */ + uint8_t digest1[4]; + uint8_t digest2[4]; + uint8_t digest3[4]; + uint8_t digest4[4]; +}; + +#endif /* __APPS_NETUTILS_NTPCLIENT_NTPV3_H */ |