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