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 OPENSSL 168 #define CS_FLAGS 20 169 #define CS_HOST 21 170 #define CS_PUBLIC 22 171 #define CS_CERTIF 23 172 #define CS_REVTIME 24 173 #define CS_LEAPTAB 25 174 #define CS_TAI 26 175 #define CS_DIGEST 27 176 #define CS_MAXCODE CS_DIGEST 177 #else 178 #define CS_MAXCODE CS_VARLIST 179 #endif /* OPENSSL */ 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_RANK 37 221 #define CP_VARLIST 38 222 #ifdef OPENSSL 223 #define CP_FLAGS 39 224 #define CP_HOST 40 225 #define CP_INITSEQ 41 226 #define CP_INITKEY 42 227 #define CP_INITTSP 43 228 #define CP_DIGEST 44 229 #define CP_IDENT 45 230 #define CP_MAXCODE CP_IDENT 231 #else 232 #define CP_MAXCODE CP_VARLIST 233 #endif /* OPENSSL */ 234 235 /* 236 * Clock variables we understand 237 */ 238 #define CC_TYPE 1 239 #define CC_TIMECODE 2 240 #define CC_POLL 3 241 #define CC_NOREPLY 4 242 #define CC_BADFORMAT 5 243 #define CC_BADDATA 6 244 #define CC_FUDGETIME1 7 245 #define CC_FUDGETIME2 8 246 #define CC_FUDGEVAL1 9 247 #define CC_FUDGEVAL2 10 248 #define CC_FLAGS 11 249 #define CC_DEVICE 12 250 #define CC_VARLIST 13 251 252 #define CC_MAXCODE CC_VARLIST 253 254 /* 255 * Definition of the structure used internally to hold trap information. 256 * ntp_request.c wants to see this. 257 */ 258 struct ctl_trap { 259 struct sockaddr_storage tr_addr;/* address of trap recipient */ 260 struct interface *tr_localaddr; /* interface to send this through */ 261 u_long tr_settime; /* time trap was set */ 262 u_long tr_count; /* async messages sent to this guy */ 263 u_long tr_origtime; /* time trap was originally set */ 264 u_long tr_resets; /* count of resets for this trap */ 265 u_short tr_sequence; /* trap sequence id */ 266 u_char tr_flags; /* trap flags */ 267 u_char tr_version; /* version number of trapper */ 268 }; 269 270 /* 271 * Flag bits 272 */ 273 #define TRAP_INUSE 0x1 /* this trap is active */ 274 #define TRAP_NONPRIO 0x2 /* this trap is non-priority */ 275 #define TRAP_CONFIGURED 0x4 /* this trap was configured */ 276 277 /* 278 * Types of things we may deal with 279 * shared between ntpq and library 280 */ 281 #define TYPE_SYS 1 282 #define TYPE_PEER 2 283 #define TYPE_CLOCK 3 284