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