xref: /freebsd/contrib/ntp/include/ntp_control.h (revision 39beb93c3f8bdbf72a61fda42300b5ebed7390c8)
1 /*
2  * ntp_control.h - definitions related to NTP mode 6 control messages
3  */
4 
5 #include "ntp_types.h"
6 
7 struct ntp_control {
8 	u_char li_vn_mode;		/* leap, version, mode */
9 	u_char r_m_e_op;		/* response, more, error, opcode */
10 	u_short sequence;		/* sequence number of request */
11 	u_short status;			/* status word for association */
12 	associd_t associd;		/* association ID */
13 	u_short offset;			/* offset of this batch of data */
14 	u_short count;			/* count of data in this packet */
15 	u_char data[(480 + MAX_MAC_LEN)]; /* data + auth */
16 };
17 
18 /*
19  * Length of the control header, in octets
20  */
21 #define	CTL_HEADER_LEN		12
22 #define	CTL_MAX_DATA_LEN	468
23 
24 
25 /*
26  * Limits and things
27  */
28 #define	CTL_MAXTRAPS	3		/* maximum number of traps we allow */
29 #define	CTL_TRAPTIME	(60*60)		/* time out traps in 1 hour */
30 #define	CTL_MAXAUTHSIZE	64		/* maximum size of an authen'ed req */
31 
32 /*
33  * Decoding for the r_m_e_op field
34  */
35 #define	CTL_RESPONSE	0x80
36 #define	CTL_ERROR	0x40
37 #define	CTL_MORE	0x20
38 #define	CTL_OP_MASK	0x1f
39 
40 #define	CTL_ISRESPONSE(r_m_e_op)	(((r_m_e_op) & 0x80) != 0)
41 #define	CTL_ISMORE(r_m_e_op)	(((r_m_e_op) & 0x20) != 0)
42 #define	CTL_ISERROR(r_m_e_op)	(((r_m_e_op) & 0x40) != 0)
43 #define	CTL_OP(r_m_e_op)	((r_m_e_op) & CTL_OP_MASK)
44 
45 /*
46  * Opcodes
47  */
48 #define	CTL_OP_UNSPEC		0
49 #define	CTL_OP_READSTAT		1
50 #define	CTL_OP_READVAR		2
51 #define	CTL_OP_WRITEVAR		3
52 #define	CTL_OP_READCLOCK	4
53 #define	CTL_OP_WRITECLOCK	5
54 #define	CTL_OP_SETTRAP		6
55 #define	CTL_OP_ASYNCMSG		7
56 #define	CTL_OP_UNSETTRAP	31
57 
58 /*
59  * {En,De}coding of the system status word
60  */
61 #define	CTL_SST_TS_UNSPEC	0	/* time source unspecified */
62 #define	CTL_SST_TS_ATOM		1	/* time source calibrated atomic */
63 #define	CTL_SST_TS_LF		2	/* time source VLF or LF radio */
64 #define	CTL_SST_TS_HF		3	/* time source HF radio */
65 #define	CTL_SST_TS_UHF		4	/* time source UHF radio */
66 #define	CTL_SST_TS_LOCAL	5	/* time source LOCAL */
67 #define	CTL_SST_TS_NTP		6	/* time source NTP */
68 #define	CTL_SST_TS_UDPTIME	7	/* time source UDP/TIME */
69 #define	CTL_SST_TS_WRSTWTCH	8	/* time source is wristwatch */
70 #define	CTL_SST_TS_TELEPHONE	9	/* time source is telephone modem */
71 #define CTL_SST_TS_PPS		0x20	/* time source is PPS signal */
72 
73 #define	CTL_SYS_MAXEVENTS	15
74 
75 #define	CTL_SYS_STATUS(li, source, nevnt, evnt) \
76 		(((((unsigned short)(li))<< 14)&0xc000) | \
77 		(((source)<<8)&0x3f00) | \
78 		(((nevnt)<<4)&0x00f0) | \
79 		((evnt)&0x000f))
80 
81 #define	CTL_SYS_LI(status)	(((status)>>14) & 0x3)
82 #define	CTL_SYS_SOURCE(status)	(((status)>>8) & 0x3f)
83 #define	CTL_SYS_NEVNT(status)	(((status)>>4) & 0xf)
84 #define	CTL_SYS_EVENT(status)	((status) & 0xf)
85 
86 /*
87  * {En,De}coding of the peer status word
88  */
89 #define	CTL_PST_CONFIG		0x80
90 #define	CTL_PST_AUTHENABLE	0x40
91 #define	CTL_PST_AUTHENTIC	0x20
92 #define	CTL_PST_REACH		0x10
93 #define	CTL_PST_UNSPEC		0x08
94 
95 #define	CTL_PST_SEL_REJECT	0	/*   reject */
96 #define	CTL_PST_SEL_SANE	1	/* x falsetick */
97 #define	CTL_PST_SEL_CORRECT	2	/* . excess */
98 #define	CTL_PST_SEL_SELCAND	3	/* - outlyer */
99 #define	CTL_PST_SEL_SYNCCAND	4	/* + candidat */
100 #define	CTL_PST_SEL_DISTSYSPEER	5	/* # selected */
101 #define	CTL_PST_SEL_SYSPEER	6	/* * sys.peer */
102 #define	CTL_PST_SEL_PPS		7	/* o pps.peer */
103 
104 #define	CTL_PEER_MAXEVENTS	15
105 
106 #define	CTL_PEER_STATUS(status, nevnt, evnt) \
107 		((((status)<<8) & 0xff00) | \
108 		(((nevnt)<<4) & 0x00f0) | \
109 		((evnt) & 0x000f))
110 
111 #define	CTL_PEER_STATVAL(status)(((status)>>8) & 0xff)
112 #define	CTL_PEER_NEVNT(status)	(((status)>>4) & 0xf)
113 #define	CTL_PEER_EVENT(status)	((status) & 0xf)
114 
115 /*
116  * {En,De}coding of the clock status word
117  */
118 #define	CTL_CLK_OKAY		0
119 #define	CTL_CLK_NOREPLY		1
120 #define	CTL_CLK_BADFORMAT	2
121 #define	CTL_CLK_FAULT		3
122 #define	CTL_CLK_PROPAGATION	4
123 #define	CTL_CLK_BADDATE		5
124 #define	CTL_CLK_BADTIME		6
125 
126 #define	CTL_CLK_STATUS(status, event) \
127 		((((status)<<8) & 0xff00) | \
128 		((event) & 0x00ff))
129 
130 /*
131  * Error code responses returned when the E bit is set.
132  */
133 #define	CERR_UNSPEC	0
134 #define	CERR_PERMISSION	1
135 #define	CERR_BADFMT	2
136 #define	CERR_BADOP	3
137 #define	CERR_BADASSOC	4
138 #define	CERR_UNKNOWNVAR	5
139 #define	CERR_BADVALUE	6
140 #define	CERR_RESTRICT	7
141 
142 #define	CERR_NORESOURCE	CERR_PERMISSION	/* wish there was a different code */
143 
144 
145 /*
146  * System variables we understand
147  */
148 #define	CS_LEAP		1
149 #define	CS_STRATUM	2
150 #define	CS_PRECISION	3
151 #define	CS_ROOTDELAY	4
152 #define	CS_ROOTDISPERSION	5
153 #define	CS_REFID	6
154 #define	CS_REFTIME	7
155 #define	CS_POLL		8
156 #define	CS_PEERID	9
157 #define CS_STATE	10
158 #define	CS_OFFSET	11
159 #define	CS_DRIFT	12
160 #define CS_JITTER	13
161 #define CS_ERROR	14
162 #define	CS_CLOCK	15
163 #define	CS_PROCESSOR	16
164 #define	CS_SYSTEM	17
165 #define CS_VERSION	18
166 #define	CS_STABIL	19
167 #define CS_VARLIST	20
168 #ifdef OPENSSL
169 #define CS_FLAGS	21
170 #define CS_HOST		22
171 #define CS_PUBLIC	23
172 #define	CS_CERTIF	24
173 #define	CS_REVTIME	25
174 #define CS_LEAPTAB	26
175 #define CS_TAI		27
176 #define	CS_DIGEST	28
177 #define CS_IDENT	29
178 #define	CS_REVOKE	30
179 #define	CS_MAXCODE	CS_REVOKE
180 #else
181 #define	CS_MAXCODE	CS_VARLIST
182 #endif /* OPENSSL */
183 
184 /*
185  * Peer variables we understand
186  */
187 #define	CP_CONFIG	1
188 #define	CP_AUTHENABLE	2
189 #define	CP_AUTHENTIC	3
190 #define	CP_SRCADR	4
191 #define	CP_SRCPORT	5
192 #define	CP_DSTADR	6
193 #define	CP_DSTPORT	7
194 #define	CP_LEAP		8
195 #define	CP_HMODE	9
196 #define	CP_STRATUM	10
197 #define	CP_PPOLL	11
198 #define	CP_HPOLL	12
199 #define	CP_PRECISION	13
200 #define	CP_ROOTDELAY	14
201 #define	CP_ROOTDISPERSION	15
202 #define	CP_REFID	16
203 #define	CP_REFTIME	17
204 #define	CP_ORG		18
205 #define	CP_REC		19
206 #define	CP_XMT		20
207 #define	CP_REACH	21
208 #define	CP_UNREACH	22
209 #define	CP_TIMER	23
210 #define	CP_DELAY	24
211 #define	CP_OFFSET	25
212 #define CP_JITTER	26
213 #define	CP_DISPERSION	27
214 #define	CP_KEYID	28
215 #define	CP_FILTDELAY	29
216 #define	CP_FILTOFFSET	30
217 #define	CP_PMODE	31
218 #define	CP_RECEIVED	32
219 #define	CP_SENT		33
220 #define	CP_FILTERROR	34
221 #define	CP_FLASH	35
222 #define CP_TTL		36
223 #define CP_VARLIST	37
224 #ifdef OPENSSL
225 #define CP_FLAGS	38
226 #define CP_HOST		39
227 #define CP_VALID	40
228 #define	CP_INITSEQ	41
229 #define	CP_INITKEY	42
230 #define	CP_INITTSP	43
231 #define	CP_DIGEST	44
232 #define CP_IDENT	45
233 #define	CP_MAXCODE	CP_IDENT
234 #else
235 #define	CP_MAXCODE	CP_VARLIST
236 #endif /* OPENSSL */
237 
238 /*
239  * Clock variables we understand
240  */
241 #define	CC_TYPE		1
242 #define	CC_TIMECODE	2
243 #define	CC_POLL		3
244 #define	CC_NOREPLY	4
245 #define	CC_BADFORMAT	5
246 #define	CC_BADDATA	6
247 #define	CC_FUDGETIME1	7
248 #define	CC_FUDGETIME2	8
249 #define	CC_FUDGEVAL1	9
250 #define	CC_FUDGEVAL2	10
251 #define	CC_FLAGS	11
252 #define	CC_DEVICE	12
253 #define CC_VARLIST	13
254 
255 #define	CC_MAXCODE	CC_VARLIST
256 
257 /*
258  * Definition of the structure used internally to hold trap information.
259  * ntp_request.c wants to see this.
260  */
261 struct ctl_trap {
262 	struct sockaddr_storage tr_addr;/* address of trap recipient */
263 	struct interface *tr_localaddr;	/* interface to send this through */
264 	u_long tr_settime;		/* time trap was set */
265 	u_long tr_count;		/* async messages sent to this guy */
266 	u_long tr_origtime;		/* time trap was originally set */
267 	u_long tr_resets;		/* count of resets for this trap */
268 	u_short tr_sequence;		/* trap sequence id */
269 	u_char tr_flags;		/* trap flags */
270 	u_char tr_version;		/* version number of trapper */
271 };
272 extern struct ctl_trap ctl_trap[];
273 
274 /*
275  * Flag bits
276  */
277 #define	TRAP_INUSE	0x1		/* this trap is active */
278 #define	TRAP_NONPRIO	0x2		/* this trap is non-priority */
279 #define	TRAP_CONFIGURED	0x4		/* this trap was configured */
280 
281 /*
282  * Types of things we may deal with
283  * shared between ntpq and library
284  */
285 #define	TYPE_SYS	1
286 #define	TYPE_PEER	2
287 #define	TYPE_CLOCK	3
288