ntp_control.h revision 54359
11541Srgrimes/*
21541Srgrimes * ntp_control.h - definitions related to NTP mode 6 control messages
31541Srgrimes */
41541Srgrimes
51541Srgrimes#include "ntp_types.h"
61541Srgrimes
71541Srgrimesstruct ntp_control {
81541Srgrimes	u_char li_vn_mode;		/* leap, version, mode */
91541Srgrimes	u_char r_m_e_op;		/* response, more, error, opcode */
101541Srgrimes	u_short sequence;		/* sequence number of request */
111541Srgrimes	u_short status;			/* status word for association */
121541Srgrimes	u_short associd;		/* association ID */
131541Srgrimes	u_short offset;			/* offset of this batch of data */
141541Srgrimes	u_short count;			/* count of data in this packet */
151541Srgrimes	u_char data[(480 + MAX_MAC_LEN)]; /* data + auth */
161541Srgrimes};
171541Srgrimes
181541Srgrimes/*
191541Srgrimes * Length of the control header, in octets
201541Srgrimes */
211541Srgrimes#define	CTL_HEADER_LEN		12
221541Srgrimes#define	CTL_MAX_DATA_LEN	468
231541Srgrimes
241541Srgrimes
251541Srgrimes/*
261541Srgrimes * Limits and things
271541Srgrimes */
281541Srgrimes#define	CTL_MAXTRAPS	3		/* maximum number of traps we allow */
291541Srgrimes#define	CTL_TRAPTIME	(60*60)		/* time out traps in 1 hour */
301541Srgrimes#define	CTL_MAXAUTHSIZE	64		/* maximum size of an authen'ed req */
311541Srgrimes
321541Srgrimes/*
3314497Shsu * Decoding for the r_m_e_op field
3450477Speter */
351541Srgrimes#define	CTL_RESPONSE	0x80
361541Srgrimes#define	CTL_ERROR	0x40
372165Spaul#define	CTL_MORE	0x20
3818020Sbde#define	CTL_OP_MASK	0x1f
392165Spaul
4055205Speter#define	CTL_ISRESPONSE(r_m_e_op)	(((r_m_e_op) & 0x80) != 0)
41103458Smike#define	CTL_ISMORE(r_m_e_op)	(((r_m_e_op) & 0x20) != 0)
421541Srgrimes#define	CTL_ISERROR(r_m_e_op)	(((r_m_e_op) & 0x40) != 0)
431541Srgrimes#define	CTL_OP(r_m_e_op)	((r_m_e_op) & CTL_OP_MASK)
44101038Sdes
4589335Salfred/*
4689316Salfred * Opcodes
4789316Salfred */
4814497Shsu#define	CTL_OP_UNSPEC		0
4952981Speter#define	CTL_OP_READSTAT		1
5083366Sjulian#define	CTL_OP_READVAR		2
511541Srgrimes#define	CTL_OP_WRITEVAR		3
5272521Sjlemon#define	CTL_OP_READCLOCK	4
5386341Sdillon#define	CTL_OP_WRITECLOCK	5
5486487Sdillon#define	CTL_OP_SETTRAP		6
551541Srgrimes#define	CTL_OP_ASYNCMSG		7
56109123Sdillon#define	CTL_OP_UNSETTRAP	31
57101038Sdes
58101038Sdes/*
59101038Sdes * {En,De}coding of the system status word
60101038Sdes */
61101038Sdes#define	CTL_SST_TS_UNSPEC	0	/* time source unspecified */
62101038Sdes#define	CTL_SST_TS_ATOM		1	/* time source calibrated atomic */
63101038Sdes#define	CTL_SST_TS_LF		2	/* time source VLF or LF radio */
64104480Ssam#define	CTL_SST_TS_HF		3	/* time source HF radio */
65101038Sdes#define	CTL_SST_TS_UHF		4	/* time source UHF radio */
66101038Sdes#define	CTL_SST_TS_LOCAL	5	/* time source LOCAL */
67101038Sdes#define	CTL_SST_TS_NTP		6	/* time source NTP */
68108238Sphk#define	CTL_SST_TS_UDPTIME	7	/* time source UDP/TIME */
69108238Sphk#define	CTL_SST_TS_WRSTWTCH	8	/* time source is wristwatch */
70108238Sphk#define	CTL_SST_TS_TELEPHONE	9	/* time source is telephone modem */
71108238Sphk#define CTL_SST_TS_PPS		0x20	/* time source is PPS signal */
72108238Sphk
73108238Sphk#define	CTL_SYS_MAXEVENTS	15
74108238Sphk
75108238Sphk#define	CTL_SYS_STATUS(li, source, nevnt, evnt) \
76108238Sphk		(((((unsigned short)(li))<< 14)&0xc000) | \
77108238Sphk		(((source)<<8)&0x3f00) | \
78108238Sphk		(((nevnt)<<4)&0x00f0) | \
79108238Sphk		((evnt)&0x000f))
80108238Sphk
81108238Sphk#define	CTL_SYS_LI(status)	(((status)>>14) & 0x3)
82108238Sphk#define	CTL_SYS_SOURCE(status)	(((status)>>8) & 0x3f)
83110908Salfred#define	CTL_SYS_NEVNT(status)	(((status)>>4) & 0xf)
84108238Sphk#define	CTL_SYS_EVENT(status)	((status) & 0xf)
85108238Sphk
86108238Sphk/*
87108238Sphk * {En,De}coding of the peer status word
88108238Sphk */
89108238Sphk#define	CTL_PST_CONFIG		0x80
90108238Sphk#define	CTL_PST_AUTHENABLE	0x40
91108238Sphk#define	CTL_PST_AUTHENTIC	0x20
92108238Sphk#define	CTL_PST_REACH		0x10
93110908Salfred#define	CTL_PST_UNSPEC		0x08
94108238Sphk
95108238Sphk#define	CTL_PST_SEL_REJECT	0	/*   reject */
96110908Salfred#define	CTL_PST_SEL_SANE	1	/* x falsetick */
97116550Sphk#define	CTL_PST_SEL_CORRECT	2	/* . excess */
98110908Salfred#define	CTL_PST_SEL_SELCAND	3	/* - outlyer */
991541Srgrimes#define	CTL_PST_SEL_SYNCCAND	4	/* + candidat */
1001541Srgrimes#define	CTL_PST_SEL_DISTSYSPEER	5	/* # selected */
1011541Srgrimes#define	CTL_PST_SEL_SYSPEER	6	/* * sys.peer */
10289306Salfred#define	CTL_PST_SEL_PPS		7	/* o pps.peer */
10389306Salfred
10489306Salfred#define	CTL_PEER_MAXEVENTS	15
10589306Salfred
10689306Salfred#define	CTL_PEER_STATUS(status, nevnt, evnt) \
10789306Salfred		((((status)<<8) & 0xff00) | \
1081541Srgrimes		(((nevnt)<<4) & 0x00f0) | \
109109123Sdillon		((evnt) & 0x000f))
1101541Srgrimes
11189306Salfred#define	CTL_PEER_STATVAL(status)(((status)>>8) & 0xff)
1121541Srgrimes#define	CTL_PEER_NEVNT(status)	(((status)>>4) & 0xf)
113116600Sphk#define	CTL_PEER_EVENT(status)	((status) & 0xf)
114116600Sphk
115116600Sphk/*
116116600Sphk * {En,De}coding of the clock status word
117116600Sphk */
11889306Salfred#define	CTL_CLK_OKAY		0
119116600Sphk#define	CTL_CLK_NOREPLY		1
120116600Sphk#define	CTL_CLK_BADFORMAT	2
121116600Sphk#define	CTL_CLK_FAULT		3
122116600Sphk#define	CTL_CLK_PROPAGATION	4
123116600Sphk#define	CTL_CLK_BADDATE		5
124116600Sphk#define	CTL_CLK_BADTIME		6
125116600Sphk
126116600Sphk#define	CTL_CLK_STATUS(status, event) \
12789306Salfred		((((status)<<8) & 0xff00) | \
128116600Sphk		((event) & 0x00ff))
129116600Sphk
13021002Sdyson/*
13121002Sdyson * Error code responses returned when the E bit is set.
13221002Sdyson */
13321002Sdyson#define	CERR_UNSPEC	0
13458909Sdillon#define	CERR_PERMISSION	1
13558909Sdillon#define	CERR_BADFMT	2
13621002Sdyson#define	CERR_BADOP	3
1371541Srgrimes#define	CERR_BADASSOC	4
1381541Srgrimes#define	CERR_UNKNOWNVAR	5
139101038Sdes#define	CERR_BADVALUE	6
140101038Sdes#define	CERR_RESTRICT	7
141101038Sdes
142101038Sdes#define	CERR_NORESOURCE	CERR_PERMISSION	/* wish there was a different code */
143101038Sdes
144101038Sdes
145101038Sdes/*
146101038Sdes * System variables we understand
147101038Sdes */
148101038Sdes#define	CS_LEAP		1
149101038Sdes#define	CS_STRATUM	2
150101038Sdes#define	CS_PRECISION	3
151101038Sdes#define	CS_ROOTDELAY	4
152101038Sdes#define	CS_ROOTDISPERSION	5
153101038Sdes#define	CS_REFID	6
154109153Sdillon#define	CS_REFTIME	7
155101038Sdes#define	CS_POLL		8
156101038Sdes#define	CS_PEERID	9
157101038Sdes#define CS_STATE	10
158101038Sdes#define	CS_OFFSET	11
159101038Sdes#define	CS_DRIFT	12
16031365Sbde#define	CS_COMPLIANCE	13
16131365Sbde#define	CS_CLOCK	14
16231365Sbde#define	CS_PROCESSOR	15
16331365Sbde#define	CS_SYSTEM	16
16460938Sjake#define	CS_STABIL	17
16589306Salfred#define CS_VARLIST	18
1667090Sbde
16749413Sgreen#define	CS_MAXCODE	CS_VARLIST
168108255Sphk
1691541Srgrimes/*
1706577Sguido * Peer variables we understand
17189306Salfred */
17289306Salfred#define	CP_CONFIG	1
1731541Srgrimes#define	CP_AUTHENABLE	2
17492719Salfred#define	CP_AUTHENTIC	3
17592719Salfred#define	CP_SRCADR	4
17692719Salfred#define	CP_SRCPORT	5
17792719Salfred#define	CP_DSTADR	6
17892719Salfred#define	CP_DSTPORT	7
17951418Sgreen#define	CP_LEAP		8
180108242Sphk#define	CP_HMODE	9
181108242Sphk#define	CP_STRATUM	10
182108242Sphk#define	CP_PPOLL	11
183108242Sphk#define	CP_HPOLL	12
184108242Sphk#define	CP_PRECISION	13
185108255Sphk#define	CP_ROOTDELAY	14
186108255Sphk#define	CP_ROOTDISPERSION	15
187108255Sphk#define	CP_REFID	16
188108255Sphk#define	CP_REFTIME	17
189108255Sphk#define	CP_ORG		18
190108255Sphk#define	CP_REC		19
191108255Sphk#define	CP_XMT		20
192108242Sphk#define	CP_REACH	21
19389306Salfred#define	CP_VALID	22
19489595Salfred#define	CP_TIMER	23
19589595Salfred#define	CP_DELAY	24
19689595Salfred#define	CP_OFFSET	25
19789595Salfred#define CP_JITTER	26
19889306Salfred#define	CP_DISPERSION	27
19992719Salfred#define	CP_KEYID	28
20092719Salfred#define	CP_FILTDELAY	29
20192719Salfred#define	CP_FILTOFFSET	30
20286341Sdillon#define	CP_PMODE	31
20392719Salfred#define	CP_RECEIVED	32
20492719Salfred#define	CP_SENT		33
20586487Sdillon#define	CP_FILTERROR	34
20689316Salfred#define	CP_FLASH	35
20789316Salfred#define CP_DISP		36
20889316Salfred#define CP_VARLIST	37
20989316Salfred
21089316Salfred#define	CP_MAXCODE	CP_VARLIST
21151418Sgreen
21289316Salfred/*
21389316Salfred * Clock variables we understand
21489316Salfred */
21589316Salfred#define	CC_TYPE		1
21689316Salfred#define	CC_TIMECODE	2
21789316Salfred#define	CC_POLL		3
21851418Sgreen#define	CC_NOREPLY	4
219108255Sphk#define	CC_BADFORMAT	5
220108255Sphk#define	CC_BADDATA	6
221108255Sphk#define	CC_FUDGETIME1	7
222108255Sphk#define	CC_FUDGETIME2	8
223108255Sphk#define	CC_FUDGEVAL1	9
224108255Sphk#define	CC_FUDGEVAL2	10
225108255Sphk#define	CC_FLAGS	11
22651418Sgreen#define	CC_DEVICE	12
22751418Sgreen#define CC_VARLIST	13
228101941Srwatson
22951418Sgreen#define	CC_MAXCODE	CC_VARLIST
23051418Sgreen
231101941Srwatson/*
232101949Srwatson * Definition of the structure used internally to hold trap information.
23383366Sjulian * ntp_request.c wants to see this.
23451418Sgreen */
23551418Sgreenstruct ctl_trap {
236101941Srwatson	struct sockaddr_in tr_addr;	/* address of trap recipient */
23751418Sgreen	struct interface *tr_localaddr;	/* interface to send this through */
23851418Sgreen	u_long tr_settime;		/* time trap was set */
23951418Sgreen	u_long tr_count;		/* async messages sent to this guy */
240101941Srwatson	u_long tr_origtime;		/* time trap was originally set */
24151418Sgreen	u_long tr_resets;		/* count of resets for this trap */
24251418Sgreen	u_short tr_sequence;		/* trap sequence id */
243101941Srwatson	u_char tr_flags;		/* trap flags */
244108238Sphk	u_char tr_version;		/* version number of trapper */
24583366Sjulian};
24651418Sgreen
24798335Salfred/*
248101941Srwatson * Flag bits
24951418Sgreen */
25051418Sgreen#define	TRAP_INUSE	0x1		/* this trap is active */
25151418Sgreen#define	TRAP_NONPRIO	0x2		/* this trap is non-priority */
252102003Srwatson#define	TRAP_CONFIGURED	0x4		/* this trap was configured */
25351418Sgreen
25451418Sgreen/*
25599009Salfred * Types of things we may deal with
256102003Srwatson * shared between ntpq and library
25783366Sjulian */
25851418Sgreen#define	TYPE_SYS	1
25998335Salfred#define	TYPE_PEER	2
260102003Srwatson#define	TYPE_CLOCK	3
26151418Sgreen