1/* $Header: /tcpdump/master/tcpdump/ntp.h,v 1.8 2004-01-28 14:34:50 hannes Exp $ */
2
3/*
4 * Based on ntp.h from the U of MD implementation
5 *	This file is based on Version 2 of the NTP spec (RFC1119).
6 */
7
8/*
9 *  Definitions for the masses
10 */
11#define	JAN_1970	2208988800U	/* 1970 - 1900 in seconds */
12
13/*
14 * Structure definitions for NTP fixed point values
15 *
16 *    0			  1		      2			  3
17 *    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
18 *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
19 *   |			       Integer Part			     |
20 *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
21 *   |			       Fraction Part			     |
22 *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
23 *
24 *    0			  1		      2			  3
25 *    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
26 *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
27 *   |		  Integer Part	     |	   Fraction Part	     |
28 *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
29*/
30struct l_fixedpt {
31	u_int32_t int_part;
32	u_int32_t fraction;
33};
34
35struct s_fixedpt {
36	u_int16_t int_part;
37	u_int16_t fraction;
38};
39
40/* rfc2030
41 *                      1                   2                   3
42 *  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
43 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
44 * |LI | VN  |Mode |    Stratum    |     Poll      |   Precision   |
45 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
46 * |                          Root Delay                           |
47 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
48 * |                       Root Dispersion                         |
49 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
50 * |                     Reference Identifier                      |
51 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
52 * |                                                               |
53 * |                   Reference Timestamp (64)                    |
54 * |                                                               |
55 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
56 * |                                                               |
57 * |                   Originate Timestamp (64)                    |
58 * |                                                               |
59 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
60 * |                                                               |
61 * |                    Receive Timestamp (64)                     |
62 * |                                                               |
63 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
64 * |                                                               |
65 * |                    Transmit Timestamp (64)                    |
66 * |                                                               |
67 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
68 * |                 Key Identifier (optional) (32)                |
69 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
70 * |                                                               |
71 * |                                                               |
72 * |                 Message Digest (optional) (128)               |
73 * |                                                               |
74 * |                                                               |
75 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
76 */
77
78struct ntpdata {
79	u_char status;		/* status of local clock and leap info */
80	u_char stratum;		/* Stratum level */
81	u_char ppoll;		/* poll value */
82	int precision:8;
83	struct s_fixedpt root_delay;
84	struct s_fixedpt root_dispersion;
85	u_int32_t refid;
86	struct l_fixedpt ref_timestamp;
87	struct l_fixedpt org_timestamp;
88	struct l_fixedpt rec_timestamp;
89	struct l_fixedpt xmt_timestamp;
90        u_int32_t key_id;
91        u_int8_t  message_digest[16];
92};
93/*
94 *	Leap Second Codes (high order two bits)
95 */
96#define	NO_WARNING	0x00	/* no warning */
97#define	PLUS_SEC	0x40	/* add a second (61 seconds) */
98#define	MINUS_SEC	0x80	/* minus a second (59 seconds) */
99#define	ALARM		0xc0	/* alarm condition (clock unsynchronized) */
100
101/*
102 *	Clock Status Bits that Encode Version
103 */
104#define	NTPVERSION_1	0x08
105#define	VERSIONMASK	0x38
106#define LEAPMASK	0xc0
107#define	MODEMASK	0x07
108
109/*
110 *	Code values
111 */
112#define	MODE_UNSPEC	0	/* unspecified */
113#define	MODE_SYM_ACT	1	/* symmetric active */
114#define	MODE_SYM_PAS	2	/* symmetric passive */
115#define	MODE_CLIENT	3	/* client */
116#define	MODE_SERVER	4	/* server */
117#define	MODE_BROADCAST	5	/* broadcast */
118#define	MODE_RES1	6	/* reserved */
119#define	MODE_RES2	7	/* reserved */
120
121/*
122 *	Stratum Definitions
123 */
124#define	UNSPECIFIED	0
125#define	PRIM_REF	1	/* radio clock */
126#define	INFO_QUERY	62	/* **** THIS implementation dependent **** */
127#define	INFO_REPLY	63	/* **** THIS implementation dependent **** */
128