Fix a serious bug in the NTPD loopfilter. Basically what happens is that
[dragonfly.git] / contrib / ntp / include / ntp_control.h
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_CLOCK        14
162 #define CS_PROCESSOR    15
163 #define CS_SYSTEM       16
164 #define CS_VERSION      17
165 #define CS_STABIL       18
166 #define CS_VARLIST      19
167 #ifdef PUBKEY
168 #define CS_FLAGS        20
169 #define CS_HOST         21
170 #define CS_PUBLIC       22
171 #define CS_CERTIF       23
172 #define CS_DHPARAMS     24
173 #define CS_REVTIME      25
174 #define CS_LEAPTAB      26
175 #define CS_TAI          27
176 #define CS_MAXCODE      CS_TAI
177 #else
178 #define CS_MAXCODE      CS_VARLIST
179 #endif /* PUBKEY */
180
181 /*
182  * Peer variables we understand
183  */
184 #define CP_CONFIG       1
185 #define CP_AUTHENABLE   2
186 #define CP_AUTHENTIC    3
187 #define CP_SRCADR       4
188 #define CP_SRCPORT      5
189 #define CP_DSTADR       6
190 #define CP_DSTPORT      7
191 #define CP_LEAP         8
192 #define CP_HMODE        9
193 #define CP_STRATUM      10
194 #define CP_PPOLL        11
195 #define CP_HPOLL        12
196 #define CP_PRECISION    13
197 #define CP_ROOTDELAY    14
198 #define CP_ROOTDISPERSION       15
199 #define CP_REFID        16
200 #define CP_REFTIME      17
201 #define CP_ORG          18
202 #define CP_REC          19
203 #define CP_XMT          20
204 #define CP_REACH        21
205 #define CP_VALID        22
206 #define CP_TIMER        23
207 #define CP_DELAY        24
208 #define CP_OFFSET       25
209 #define CP_JITTER       26
210 #define CP_DISPERSION   27
211 #define CP_KEYID        28
212 #define CP_FILTDELAY    29
213 #define CP_FILTOFFSET   30
214 #define CP_PMODE        31
215 #define CP_RECEIVED     32
216 #define CP_SENT         33
217 #define CP_FILTERROR    34
218 #define CP_FLASH        35
219 #define CP_TTL          36
220 #define CP_TTLMAX       37
221 #define CP_VARLIST      38
222 #ifdef PUBKEY
223 #define CP_FLAGS        39
224 #define CP_HOST         40
225 #define CP_PUBLIC       41
226 #define CP_CERTIF       42
227 #define CP_SESKEY       43
228 #define CP_SASKEY       44
229 #define CP_INITSEQ      45
230 #define CP_INITKEY      46
231 #define CP_INITTSP      47
232 #define CP_MAXCODE      CP_INITTSP
233 #else
234 #define CP_MAXCODE      CP_VARLIST
235 #endif /* PUBKEY */
236
237 /*
238  * Clock variables we understand
239  */
240 #define CC_TYPE         1
241 #define CC_TIMECODE     2
242 #define CC_POLL         3
243 #define CC_NOREPLY      4
244 #define CC_BADFORMAT    5
245 #define CC_BADDATA      6
246 #define CC_FUDGETIME1   7
247 #define CC_FUDGETIME2   8
248 #define CC_FUDGEVAL1    9
249 #define CC_FUDGEVAL2    10
250 #define CC_FLAGS        11
251 #define CC_DEVICE       12
252 #define CC_VARLIST      13
253
254 #define CC_MAXCODE      CC_VARLIST
255
256 /*
257  * Definition of the structure used internally to hold trap information.
258  * ntp_request.c wants to see this.
259  */
260 struct ctl_trap {
261         struct sockaddr_in tr_addr;     /* address of trap recipient */
262         struct interface *tr_localaddr; /* interface to send this through */
263         u_long tr_settime;              /* time trap was set */
264         u_long tr_count;                /* async messages sent to this guy */
265         u_long tr_origtime;             /* time trap was originally set */
266         u_long tr_resets;               /* count of resets for this trap */
267         u_short tr_sequence;            /* trap sequence id */
268         u_char tr_flags;                /* trap flags */
269         u_char tr_version;              /* version number of trapper */
270 };
271
272 /*
273  * Flag bits
274  */
275 #define TRAP_INUSE      0x1             /* this trap is active */
276 #define TRAP_NONPRIO    0x2             /* this trap is non-priority */
277 #define TRAP_CONFIGURED 0x4             /* this trap was configured */
278
279 /*
280  * Types of things we may deal with
281  * shared between ntpq and library
282  */
283 #define TYPE_SYS        1
284 #define TYPE_PEER       2
285 #define TYPE_CLOCK      3