154359Sroberto/* 254359Sroberto * ntp_control.h - definitions related to NTP mode 6 control messages 354359Sroberto */ 454359Sroberto 554359Sroberto#include "ntp_types.h" 654359Sroberto 754359Srobertostruct ntp_control { 854359Sroberto u_char li_vn_mode; /* leap, version, mode */ 954359Sroberto u_char r_m_e_op; /* response, more, error, opcode */ 1054359Sroberto u_short sequence; /* sequence number of request */ 1154359Sroberto u_short status; /* status word for association */ 1282498Sroberto associd_t associd; /* association ID */ 1354359Sroberto u_short offset; /* offset of this batch of data */ 1454359Sroberto u_short count; /* count of data in this packet */ 1554359Sroberto u_char data[(480 + MAX_MAC_LEN)]; /* data + auth */ 1654359Sroberto}; 1754359Sroberto 1854359Sroberto/* 1954359Sroberto * Length of the control header, in octets 2054359Sroberto */ 2154359Sroberto#define CTL_HEADER_LEN 12 2254359Sroberto#define CTL_MAX_DATA_LEN 468 2354359Sroberto 2454359Sroberto 2554359Sroberto/* 2654359Sroberto * Limits and things 2754359Sroberto */ 2854359Sroberto#define CTL_MAXTRAPS 3 /* maximum number of traps we allow */ 2954359Sroberto#define CTL_TRAPTIME (60*60) /* time out traps in 1 hour */ 3054359Sroberto#define CTL_MAXAUTHSIZE 64 /* maximum size of an authen'ed req */ 3154359Sroberto 3254359Sroberto/* 3354359Sroberto * Decoding for the r_m_e_op field 3454359Sroberto */ 3554359Sroberto#define CTL_RESPONSE 0x80 3654359Sroberto#define CTL_ERROR 0x40 3754359Sroberto#define CTL_MORE 0x20 3854359Sroberto#define CTL_OP_MASK 0x1f 3954359Sroberto 4054359Sroberto#define CTL_ISRESPONSE(r_m_e_op) (((r_m_e_op) & 0x80) != 0) 4154359Sroberto#define CTL_ISMORE(r_m_e_op) (((r_m_e_op) & 0x20) != 0) 4254359Sroberto#define CTL_ISERROR(r_m_e_op) (((r_m_e_op) & 0x40) != 0) 4354359Sroberto#define CTL_OP(r_m_e_op) ((r_m_e_op) & CTL_OP_MASK) 4454359Sroberto 4554359Sroberto/* 4654359Sroberto * Opcodes 4754359Sroberto */ 4854359Sroberto#define CTL_OP_UNSPEC 0 4954359Sroberto#define CTL_OP_READSTAT 1 5054359Sroberto#define CTL_OP_READVAR 2 5154359Sroberto#define CTL_OP_WRITEVAR 3 5254359Sroberto#define CTL_OP_READCLOCK 4 5354359Sroberto#define CTL_OP_WRITECLOCK 5 5454359Sroberto#define CTL_OP_SETTRAP 6 5554359Sroberto#define CTL_OP_ASYNCMSG 7 5654359Sroberto#define CTL_OP_UNSETTRAP 31 5754359Sroberto 5854359Sroberto/* 5954359Sroberto * {En,De}coding of the system status word 6054359Sroberto */ 6154359Sroberto#define CTL_SST_TS_UNSPEC 0 /* time source unspecified */ 6254359Sroberto#define CTL_SST_TS_ATOM 1 /* time source calibrated atomic */ 6354359Sroberto#define CTL_SST_TS_LF 2 /* time source VLF or LF radio */ 6454359Sroberto#define CTL_SST_TS_HF 3 /* time source HF radio */ 6554359Sroberto#define CTL_SST_TS_UHF 4 /* time source UHF radio */ 6654359Sroberto#define CTL_SST_TS_LOCAL 5 /* time source LOCAL */ 6754359Sroberto#define CTL_SST_TS_NTP 6 /* time source NTP */ 6854359Sroberto#define CTL_SST_TS_UDPTIME 7 /* time source UDP/TIME */ 6954359Sroberto#define CTL_SST_TS_WRSTWTCH 8 /* time source is wristwatch */ 7054359Sroberto#define CTL_SST_TS_TELEPHONE 9 /* time source is telephone modem */ 7154359Sroberto#define CTL_SST_TS_PPS 0x20 /* time source is PPS signal */ 7254359Sroberto 7354359Sroberto#define CTL_SYS_MAXEVENTS 15 7454359Sroberto 7554359Sroberto#define CTL_SYS_STATUS(li, source, nevnt, evnt) \ 7654359Sroberto (((((unsigned short)(li))<< 14)&0xc000) | \ 7754359Sroberto (((source)<<8)&0x3f00) | \ 7854359Sroberto (((nevnt)<<4)&0x00f0) | \ 7954359Sroberto ((evnt)&0x000f)) 8054359Sroberto 8154359Sroberto#define CTL_SYS_LI(status) (((status)>>14) & 0x3) 8254359Sroberto#define CTL_SYS_SOURCE(status) (((status)>>8) & 0x3f) 8354359Sroberto#define CTL_SYS_NEVNT(status) (((status)>>4) & 0xf) 8454359Sroberto#define CTL_SYS_EVENT(status) ((status) & 0xf) 8554359Sroberto 8654359Sroberto/* 8754359Sroberto * {En,De}coding of the peer status word 8854359Sroberto */ 8954359Sroberto#define CTL_PST_CONFIG 0x80 9054359Sroberto#define CTL_PST_AUTHENABLE 0x40 9154359Sroberto#define CTL_PST_AUTHENTIC 0x20 9254359Sroberto#define CTL_PST_REACH 0x10 9354359Sroberto#define CTL_PST_UNSPEC 0x08 9454359Sroberto 9554359Sroberto#define CTL_PST_SEL_REJECT 0 /* reject */ 9654359Sroberto#define CTL_PST_SEL_SANE 1 /* x falsetick */ 9754359Sroberto#define CTL_PST_SEL_CORRECT 2 /* . excess */ 9854359Sroberto#define CTL_PST_SEL_SELCAND 3 /* - outlyer */ 9954359Sroberto#define CTL_PST_SEL_SYNCCAND 4 /* + candidat */ 10054359Sroberto#define CTL_PST_SEL_DISTSYSPEER 5 /* # selected */ 10154359Sroberto#define CTL_PST_SEL_SYSPEER 6 /* * sys.peer */ 10254359Sroberto#define CTL_PST_SEL_PPS 7 /* o pps.peer */ 10354359Sroberto 10454359Sroberto#define CTL_PEER_MAXEVENTS 15 10554359Sroberto 10654359Sroberto#define CTL_PEER_STATUS(status, nevnt, evnt) \ 10754359Sroberto ((((status)<<8) & 0xff00) | \ 10854359Sroberto (((nevnt)<<4) & 0x00f0) | \ 10954359Sroberto ((evnt) & 0x000f)) 11054359Sroberto 11154359Sroberto#define CTL_PEER_STATVAL(status)(((status)>>8) & 0xff) 11254359Sroberto#define CTL_PEER_NEVNT(status) (((status)>>4) & 0xf) 11354359Sroberto#define CTL_PEER_EVENT(status) ((status) & 0xf) 11454359Sroberto 11554359Sroberto/* 11654359Sroberto * {En,De}coding of the clock status word 11754359Sroberto */ 11854359Sroberto#define CTL_CLK_OKAY 0 11954359Sroberto#define CTL_CLK_NOREPLY 1 12054359Sroberto#define CTL_CLK_BADFORMAT 2 12154359Sroberto#define CTL_CLK_FAULT 3 12254359Sroberto#define CTL_CLK_PROPAGATION 4 12354359Sroberto#define CTL_CLK_BADDATE 5 12454359Sroberto#define CTL_CLK_BADTIME 6 12554359Sroberto 12654359Sroberto#define CTL_CLK_STATUS(status, event) \ 12754359Sroberto ((((status)<<8) & 0xff00) | \ 12854359Sroberto ((event) & 0x00ff)) 12954359Sroberto 13054359Sroberto/* 13154359Sroberto * Error code responses returned when the E bit is set. 13254359Sroberto */ 13354359Sroberto#define CERR_UNSPEC 0 13454359Sroberto#define CERR_PERMISSION 1 13554359Sroberto#define CERR_BADFMT 2 13654359Sroberto#define CERR_BADOP 3 13754359Sroberto#define CERR_BADASSOC 4 13854359Sroberto#define CERR_UNKNOWNVAR 5 13954359Sroberto#define CERR_BADVALUE 6 14054359Sroberto#define CERR_RESTRICT 7 14154359Sroberto 14254359Sroberto#define CERR_NORESOURCE CERR_PERMISSION /* wish there was a different code */ 14354359Sroberto 14454359Sroberto 14554359Sroberto/* 14654359Sroberto * System variables we understand 14754359Sroberto */ 14854359Sroberto#define CS_LEAP 1 14954359Sroberto#define CS_STRATUM 2 15054359Sroberto#define CS_PRECISION 3 15154359Sroberto#define CS_ROOTDELAY 4 15254359Sroberto#define CS_ROOTDISPERSION 5 15354359Sroberto#define CS_REFID 6 15454359Sroberto#define CS_REFTIME 7 15554359Sroberto#define CS_POLL 8 15654359Sroberto#define CS_PEERID 9 15754359Sroberto#define CS_STATE 10 15854359Sroberto#define CS_OFFSET 11 15954359Sroberto#define CS_DRIFT 12 16082498Sroberto#define CS_JITTER 13 161182007Sroberto#define CS_ERROR 14 162182007Sroberto#define CS_CLOCK 15 163182007Sroberto#define CS_PROCESSOR 16 164182007Sroberto#define CS_SYSTEM 17 165182007Sroberto#define CS_VERSION 18 166182007Sroberto#define CS_STABIL 19 167182007Sroberto#define CS_VARLIST 20 168132451Sroberto#ifdef OPENSSL 169182007Sroberto#define CS_FLAGS 21 170182007Sroberto#define CS_HOST 22 171182007Sroberto#define CS_PUBLIC 23 172182007Sroberto#define CS_CERTIF 24 173182007Sroberto#define CS_REVTIME 25 174182007Sroberto#define CS_LEAPTAB 26 175182007Sroberto#define CS_TAI 27 176182007Sroberto#define CS_DIGEST 28 177182007Sroberto#define CS_IDENT 29 178182007Sroberto#define CS_REVOKE 30 179182007Sroberto#define CS_MAXCODE CS_REVOKE 18082498Sroberto#else 18154359Sroberto#define CS_MAXCODE CS_VARLIST 182132451Sroberto#endif /* OPENSSL */ 18354359Sroberto 18454359Sroberto/* 18554359Sroberto * Peer variables we understand 18654359Sroberto */ 18754359Sroberto#define CP_CONFIG 1 18854359Sroberto#define CP_AUTHENABLE 2 18954359Sroberto#define CP_AUTHENTIC 3 19054359Sroberto#define CP_SRCADR 4 19154359Sroberto#define CP_SRCPORT 5 19254359Sroberto#define CP_DSTADR 6 19354359Sroberto#define CP_DSTPORT 7 19454359Sroberto#define CP_LEAP 8 19554359Sroberto#define CP_HMODE 9 19654359Sroberto#define CP_STRATUM 10 19754359Sroberto#define CP_PPOLL 11 19854359Sroberto#define CP_HPOLL 12 19954359Sroberto#define CP_PRECISION 13 20054359Sroberto#define CP_ROOTDELAY 14 20154359Sroberto#define CP_ROOTDISPERSION 15 20254359Sroberto#define CP_REFID 16 20354359Sroberto#define CP_REFTIME 17 20454359Sroberto#define CP_ORG 18 20554359Sroberto#define CP_REC 19 20654359Sroberto#define CP_XMT 20 20754359Sroberto#define CP_REACH 21 208182007Sroberto#define CP_UNREACH 22 20954359Sroberto#define CP_TIMER 23 21054359Sroberto#define CP_DELAY 24 21154359Sroberto#define CP_OFFSET 25 21254359Sroberto#define CP_JITTER 26 21354359Sroberto#define CP_DISPERSION 27 21454359Sroberto#define CP_KEYID 28 21554359Sroberto#define CP_FILTDELAY 29 21654359Sroberto#define CP_FILTOFFSET 30 21754359Sroberto#define CP_PMODE 31 21854359Sroberto#define CP_RECEIVED 32 21954359Sroberto#define CP_SENT 33 22054359Sroberto#define CP_FILTERROR 34 22154359Sroberto#define CP_FLASH 35 22282498Sroberto#define CP_TTL 36 223182007Sroberto#define CP_VARLIST 37 224132451Sroberto#ifdef OPENSSL 225182007Sroberto#define CP_FLAGS 38 226182007Sroberto#define CP_HOST 39 227182007Sroberto#define CP_VALID 40 228132451Sroberto#define CP_INITSEQ 41 229132451Sroberto#define CP_INITKEY 42 230132451Sroberto#define CP_INITTSP 43 231132451Sroberto#define CP_DIGEST 44 232132451Sroberto#define CP_IDENT 45 233132451Sroberto#define CP_MAXCODE CP_IDENT 23482498Sroberto#else 23554359Sroberto#define CP_MAXCODE CP_VARLIST 236132451Sroberto#endif /* OPENSSL */ 23754359Sroberto 23854359Sroberto/* 23954359Sroberto * Clock variables we understand 24054359Sroberto */ 24154359Sroberto#define CC_TYPE 1 24254359Sroberto#define CC_TIMECODE 2 24354359Sroberto#define CC_POLL 3 24454359Sroberto#define CC_NOREPLY 4 24554359Sroberto#define CC_BADFORMAT 5 24654359Sroberto#define CC_BADDATA 6 24754359Sroberto#define CC_FUDGETIME1 7 24854359Sroberto#define CC_FUDGETIME2 8 24954359Sroberto#define CC_FUDGEVAL1 9 25054359Sroberto#define CC_FUDGEVAL2 10 25154359Sroberto#define CC_FLAGS 11 25254359Sroberto#define CC_DEVICE 12 25354359Sroberto#define CC_VARLIST 13 25454359Sroberto 25554359Sroberto#define CC_MAXCODE CC_VARLIST 25654359Sroberto 25754359Sroberto/* 25854359Sroberto * Definition of the structure used internally to hold trap information. 25954359Sroberto * ntp_request.c wants to see this. 26054359Sroberto */ 26154359Srobertostruct ctl_trap { 262132451Sroberto struct sockaddr_storage tr_addr;/* address of trap recipient */ 26354359Sroberto struct interface *tr_localaddr; /* interface to send this through */ 26454359Sroberto u_long tr_settime; /* time trap was set */ 26554359Sroberto u_long tr_count; /* async messages sent to this guy */ 26654359Sroberto u_long tr_origtime; /* time trap was originally set */ 26754359Sroberto u_long tr_resets; /* count of resets for this trap */ 26854359Sroberto u_short tr_sequence; /* trap sequence id */ 26954359Sroberto u_char tr_flags; /* trap flags */ 27054359Sroberto u_char tr_version; /* version number of trapper */ 27154359Sroberto}; 272182007Srobertoextern struct ctl_trap ctl_trap[]; 27354359Sroberto 27454359Sroberto/* 27554359Sroberto * Flag bits 27654359Sroberto */ 27754359Sroberto#define TRAP_INUSE 0x1 /* this trap is active */ 27854359Sroberto#define TRAP_NONPRIO 0x2 /* this trap is non-priority */ 27954359Sroberto#define TRAP_CONFIGURED 0x4 /* this trap was configured */ 28054359Sroberto 28154359Sroberto/* 28254359Sroberto * Types of things we may deal with 28354359Sroberto * shared between ntpq and library 28454359Sroberto */ 28554359Sroberto#define TYPE_SYS 1 28654359Sroberto#define TYPE_PEER 2 28754359Sroberto#define TYPE_CLOCK 3 288