Patrick Welche <prlw1@cam.ac.uk>
[netbsd-mini2440.git] / external / bsd / ntp / dist / include / ntp_control.h
blob8e8f9d9b41bdf2dbbe7c3ba7f04cc02c256d1806
1 /* $NetBSD$ */
3 /*
4 * ntp_control.h - definitions related to NTP mode 6 control messages
5 */
7 #include "ntp_types.h"
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 */
21 * Length of the control header, in octets
23 #define CTL_HEADER_LEN 12
24 #define CTL_MAX_DATA_LEN 468
28 * Limits and things
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 */
35 * Decoding for the r_m_e_op field
37 #define CTL_RESPONSE 0x80
38 #define CTL_ERROR 0x40
39 #define CTL_MORE 0x20
40 #define CTL_OP_MASK 0x1f
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)
48 * Opcodes
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 */
63 * {En,De}coding of the system status word
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 */
76 #define CTL_SYS_MAXEVENTS 15
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))
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)
90 * {En,De}coding of the peer status word
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
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 */
107 #define CTL_PEER_MAXEVENTS 15
109 #define CTL_PEER_STATUS(status, nevnt, evnt) \
110 ((((status)<<8) & 0xff00) | \
111 (((nevnt)<<4) & 0x00f0) | \
112 ((evnt) & 0x000f))
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)
119 * {En,De}coding of the clock status word
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
129 #define CTL_CLK_STATUS(status, event) \
130 ((((status)<<8) & 0xff00) | \
131 ((event) & 0x00ff))
134 * Error code responses returned when the E bit is set.
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
145 #define CERR_NORESOURCE CERR_PERMISSION /* wish there was a different code */
149 * System variables we understand
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 */
189 * Peer variables we understand
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 */
246 * Clock variables we understand
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
264 * Definition of the structure used internally to hold trap information.
265 * ntp_request.c wants to see this.
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 */
278 extern struct ctl_trap ctl_trap[];
281 * Flag bits
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 */
288 * Types of things we may deal with
289 * shared between ntpq and library
291 #define TYPE_SYS 1
292 #define TYPE_PEER 2
293 #define TYPE_CLOCK 3