summaryrefslogtreecommitdiffstats
path: root/ntp.h
diff options
context:
space:
mode:
Diffstat (limited to 'ntp.h')
-rw-r--r--ntp.h150
1 files changed, 150 insertions, 0 deletions
diff --git a/ntp.h b/ntp.h
new file mode 100644
index 0000000..bfca553
--- /dev/null
+++ b/ntp.h
@@ -0,0 +1,150 @@
+/* $OpenBSD: ntp.h,v 1.12 2007/05/26 21:20:35 henning Exp $ */
+
+/*
+ * Copyright (c) 2004 Henning Brauer <henning@openbsd.org>
+ * Copyright (c) 2004 Alexander Guy <alexander.guy@andern.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef _NTP_H_
+#define _NTP_H_
+
+#include <sys/types.h>
+
+/* Style borrowed from NTP ref/tcpdump and updated for SNTPv4 (RFC2030). */
+
+/*
+ * RFC Section 3
+ *
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Integer Part |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Fraction Part |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *
+ * 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
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Integer Part | Fraction Part |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+*/
+struct l_fixedpt {
+ u_int32_t int_partl;
+ u_int32_t fractionl;
+};
+
+struct s_fixedpt {
+ u_int16_t int_parts;
+ u_int16_t fractions;
+};
+
+/* RFC Section 4
+ *
+ * 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 |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Synchronizing Distance |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Synchronizing Dispersion |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Reference Clock Identifier |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | |
+ * | Reference Timestamp (64 bits) |
+ * | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | |
+ * | Originate Timestamp (64 bits) |
+ * | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | |
+ * | Receive Timestamp (64 bits) |
+ * | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | |
+ * | Transmit Timestamp (64 bits) |
+ * | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | Key Identifier (optional) (32) |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | |
+ * | |
+ * | Message Digest (optional) (128) |
+ * | |
+ * | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *
+ */
+
+#define NTP_DIGESTSIZE 16
+#define NTP_MSGSIZE_NOAUTH 48
+#define NTP_MSGSIZE (NTP_MSGSIZE_NOAUTH + 4 + NTP_DIGESTSIZE)
+
+struct ntp_msg {
+ u_int8_t status; /* status of local clock and leap info */
+ u_int8_t stratum; /* Stratum level */
+ u_int8_t ppoll; /* poll value */
+ int8_t precision;
+ struct s_fixedpt rootdelay;
+ struct s_fixedpt dispersion;
+ u_int32_t refid;
+ struct l_fixedpt reftime;
+ struct l_fixedpt orgtime;
+ struct l_fixedpt rectime;
+ struct l_fixedpt xmttime;
+} __packed;
+
+struct ntp_query {
+ int fd;
+ struct ntp_msg msg;
+ double xmttime;
+};
+
+/*
+ * Leap Second Codes (high order two bits)
+ */
+#define LI_NOWARNING (0 << 6) /* no warning */
+#define LI_PLUSSEC (1 << 6) /* add a second (61 seconds) */
+#define LI_MINUSSEC (2 << 6) /* minus a second (59 seconds) */
+#define LI_ALARM (3 << 6) /* alarm condition */
+
+/*
+ * Status Masks
+ */
+#define MODEMASK (7 << 0)
+#define VERSIONMASK (7 << 3)
+#define LIMASK (3 << 6)
+
+/*
+ * Mode values
+ */
+#define MODE_RES0 0 /* reserved */
+#define MODE_SYM_ACT 1 /* symmetric active */
+#define MODE_SYM_PAS 2 /* symmetric passive */
+#define MODE_CLIENT 3 /* client */
+#define MODE_SERVER 4 /* server */
+#define MODE_BROADCAST 5 /* broadcast */
+#define MODE_RES1 6 /* reserved for NTP control message */
+#define MODE_RES2 7 /* reserved for private use */
+
+#define JAN_1970 2208988800UL /* 1970 - 1900 in seconds */
+
+#define NTP_VERSION 4
+#define NTP_MAXSTRATUM 15
+
+#endif /* _NTP_H_ */