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