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