diff options
Diffstat (limited to 'include/ntp_control.h')
-rw-r--r-- | include/ntp_control.h | 283 |
1 files changed, 283 insertions, 0 deletions
diff --git a/include/ntp_control.h b/include/ntp_control.h new file mode 100644 index 0000000..c75d38b --- /dev/null +++ b/include/ntp_control.h @@ -0,0 +1,283 @@ +/* + * ntp_control.h - definitions related to NTP mode 6 control messages + */ + +#include "ntp_types.h" + +struct ntp_control { + u_char li_vn_mode; /* leap, version, mode */ + u_char r_m_e_op; /* response, more, error, opcode */ + u_short sequence; /* sequence number of request */ + u_short status; /* status word for association */ + associd_t associd; /* association ID */ + u_short offset; /* offset of this batch of data */ + u_short count; /* count of data in this packet */ + u_char data[(480 + MAX_MAC_LEN)]; /* data + auth */ +}; + +/* + * Length of the control header, in octets + */ +#define CTL_HEADER_LEN 12 +#define CTL_MAX_DATA_LEN 468 + + +/* + * Limits and things + */ +#define CTL_MAXTRAPS 3 /* maximum number of traps we allow */ +#define CTL_TRAPTIME (60*60) /* time out traps in 1 hour */ +#define CTL_MAXAUTHSIZE 64 /* maximum size of an authen'ed req */ + +/* + * Decoding for the r_m_e_op field + */ +#define CTL_RESPONSE 0x80 +#define CTL_ERROR 0x40 +#define CTL_MORE 0x20 +#define CTL_OP_MASK 0x1f + +#define CTL_ISRESPONSE(r_m_e_op) (((r_m_e_op) & 0x80) != 0) +#define CTL_ISMORE(r_m_e_op) (((r_m_e_op) & 0x20) != 0) +#define CTL_ISERROR(r_m_e_op) (((r_m_e_op) & 0x40) != 0) +#define CTL_OP(r_m_e_op) ((r_m_e_op) & CTL_OP_MASK) + +/* + * Opcodes + */ +#define CTL_OP_UNSPEC 0 +#define CTL_OP_READSTAT 1 +#define CTL_OP_READVAR 2 +#define CTL_OP_WRITEVAR 3 +#define CTL_OP_READCLOCK 4 +#define CTL_OP_WRITECLOCK 5 +#define CTL_OP_SETTRAP 6 +#define CTL_OP_ASYNCMSG 7 +#define CTL_OP_UNSETTRAP 31 + +/* + * {En,De}coding of the system status word + */ +#define CTL_SST_TS_UNSPEC 0 /* time source unspecified */ +#define CTL_SST_TS_ATOM 1 /* time source calibrated atomic */ +#define CTL_SST_TS_LF 2 /* time source VLF or LF radio */ +#define CTL_SST_TS_HF 3 /* time source HF radio */ +#define CTL_SST_TS_UHF 4 /* time source UHF radio */ +#define CTL_SST_TS_LOCAL 5 /* time source LOCAL */ +#define CTL_SST_TS_NTP 6 /* time source NTP */ +#define CTL_SST_TS_UDPTIME 7 /* time source UDP/TIME */ +#define CTL_SST_TS_WRSTWTCH 8 /* time source is wristwatch */ +#define CTL_SST_TS_TELEPHONE 9 /* time source is telephone modem */ +#define CTL_SST_TS_PPS 0x20 /* time source is PPS signal */ + +#define CTL_SYS_MAXEVENTS 15 + +#define CTL_SYS_STATUS(li, source, nevnt, evnt) \ + (((((unsigned short)(li))<< 14)&0xc000) | \ + (((source)<<8)&0x3f00) | \ + (((nevnt)<<4)&0x00f0) | \ + ((evnt)&0x000f)) + +#define CTL_SYS_LI(status) (((status)>>14) & 0x3) +#define CTL_SYS_SOURCE(status) (((status)>>8) & 0x3f) +#define CTL_SYS_NEVNT(status) (((status)>>4) & 0xf) +#define CTL_SYS_EVENT(status) ((status) & 0xf) + +/* + * {En,De}coding of the peer status word + */ +#define CTL_PST_CONFIG 0x80 +#define CTL_PST_AUTHENABLE 0x40 +#define CTL_PST_AUTHENTIC 0x20 +#define CTL_PST_REACH 0x10 +#define CTL_PST_UNSPEC 0x08 + +#define CTL_PST_SEL_REJECT 0 /* reject */ +#define CTL_PST_SEL_SANE 1 /* x falsetick */ +#define CTL_PST_SEL_CORRECT 2 /* . excess */ +#define CTL_PST_SEL_SELCAND 3 /* - outlyer */ +#define CTL_PST_SEL_SYNCCAND 4 /* + candidat */ +#define CTL_PST_SEL_DISTSYSPEER 5 /* # selected */ +#define CTL_PST_SEL_SYSPEER 6 /* * sys.peer */ +#define CTL_PST_SEL_PPS 7 /* o pps.peer */ + +#define CTL_PEER_MAXEVENTS 15 + +#define CTL_PEER_STATUS(status, nevnt, evnt) \ + ((((status)<<8) & 0xff00) | \ + (((nevnt)<<4) & 0x00f0) | \ + ((evnt) & 0x000f)) + +#define CTL_PEER_STATVAL(status)(((status)>>8) & 0xff) +#define CTL_PEER_NEVNT(status) (((status)>>4) & 0xf) +#define CTL_PEER_EVENT(status) ((status) & 0xf) + +/* + * {En,De}coding of the clock status word + */ +#define CTL_CLK_OKAY 0 +#define CTL_CLK_NOREPLY 1 +#define CTL_CLK_BADFORMAT 2 +#define CTL_CLK_FAULT 3 +#define CTL_CLK_PROPAGATION 4 +#define CTL_CLK_BADDATE 5 +#define CTL_CLK_BADTIME 6 + +#define CTL_CLK_STATUS(status, event) \ + ((((status)<<8) & 0xff00) | \ + ((event) & 0x00ff)) + +/* + * Error code responses returned when the E bit is set. + */ +#define CERR_UNSPEC 0 +#define CERR_PERMISSION 1 +#define CERR_BADFMT 2 +#define CERR_BADOP 3 +#define CERR_BADASSOC 4 +#define CERR_UNKNOWNVAR 5 +#define CERR_BADVALUE 6 +#define CERR_RESTRICT 7 + +#define CERR_NORESOURCE CERR_PERMISSION /* wish there was a different code */ + + +/* + * System variables we understand + */ +#define CS_LEAP 1 +#define CS_STRATUM 2 +#define CS_PRECISION 3 +#define CS_ROOTDELAY 4 +#define CS_ROOTDISPERSION 5 +#define CS_REFID 6 +#define CS_REFTIME 7 +#define CS_POLL 8 +#define CS_PEERID 9 +#define CS_STATE 10 +#define CS_OFFSET 11 +#define CS_DRIFT 12 +#define CS_JITTER 13 +#define CS_CLOCK 14 +#define CS_PROCESSOR 15 +#define CS_SYSTEM 16 +#define CS_VERSION 17 +#define CS_STABIL 18 +#define CS_VARLIST 19 +#ifdef OPENSSL +#define CS_FLAGS 20 +#define CS_HOST 21 +#define CS_PUBLIC 22 +#define CS_CERTIF 23 +#define CS_REVTIME 24 +#define CS_LEAPTAB 25 +#define CS_TAI 26 +#define CS_DIGEST 27 +#define CS_MAXCODE CS_DIGEST +#else +#define CS_MAXCODE CS_VARLIST +#endif /* OPENSSL */ + +/* + * Peer variables we understand + */ +#define CP_CONFIG 1 +#define CP_AUTHENABLE 2 +#define CP_AUTHENTIC 3 +#define CP_SRCADR 4 +#define CP_SRCPORT 5 +#define CP_DSTADR 6 +#define CP_DSTPORT 7 +#define CP_LEAP 8 +#define CP_HMODE 9 +#define CP_STRATUM 10 +#define CP_PPOLL 11 +#define CP_HPOLL 12 +#define CP_PRECISION 13 +#define CP_ROOTDELAY 14 +#define CP_ROOTDISPERSION 15 +#define CP_REFID 16 +#define CP_REFTIME 17 +#define CP_ORG 18 +#define CP_REC 19 +#define CP_XMT 20 +#define CP_REACH 21 +#define CP_VALID 22 +#define CP_TIMER 23 +#define CP_DELAY 24 +#define CP_OFFSET 25 +#define CP_JITTER 26 +#define CP_DISPERSION 27 +#define CP_KEYID 28 +#define CP_FILTDELAY 29 +#define CP_FILTOFFSET 30 +#define CP_PMODE 31 +#define CP_RECEIVED 32 +#define CP_SENT 33 +#define CP_FILTERROR 34 +#define CP_FLASH 35 +#define CP_TTL 36 +#define CP_RANK 37 +#define CP_VARLIST 38 +#ifdef OPENSSL +#define CP_FLAGS 39 +#define CP_HOST 40 +#define CP_INITSEQ 41 +#define CP_INITKEY 42 +#define CP_INITTSP 43 +#define CP_DIGEST 44 +#define CP_IDENT 45 +#define CP_MAXCODE CP_IDENT +#else +#define CP_MAXCODE CP_VARLIST +#endif /* OPENSSL */ + +/* + * Clock variables we understand + */ +#define CC_TYPE 1 +#define CC_TIMECODE 2 +#define CC_POLL 3 +#define CC_NOREPLY 4 +#define CC_BADFORMAT 5 +#define CC_BADDATA 6 +#define CC_FUDGETIME1 7 +#define CC_FUDGETIME2 8 +#define CC_FUDGEVAL1 9 +#define CC_FUDGEVAL2 10 +#define CC_FLAGS 11 +#define CC_DEVICE 12 +#define CC_VARLIST 13 + +#define CC_MAXCODE CC_VARLIST + +/* + * Definition of the structure used internally to hold trap information. + * ntp_request.c wants to see this. + */ +struct ctl_trap { + struct sockaddr_storage tr_addr;/* address of trap recipient */ + struct interface *tr_localaddr; /* interface to send this through */ + u_long tr_settime; /* time trap was set */ + u_long tr_count; /* async messages sent to this guy */ + u_long tr_origtime; /* time trap was originally set */ + u_long tr_resets; /* count of resets for this trap */ + u_short tr_sequence; /* trap sequence id */ + u_char tr_flags; /* trap flags */ + u_char tr_version; /* version number of trapper */ +}; + +/* + * Flag bits + */ +#define TRAP_INUSE 0x1 /* this trap is active */ +#define TRAP_NONPRIO 0x2 /* this trap is non-priority */ +#define TRAP_CONFIGURED 0x4 /* this trap was configured */ + +/* + * Types of things we may deal with + * shared between ntpq and library + */ +#define TYPE_SYS 1 +#define TYPE_PEER 2 +#define TYPE_CLOCK 3 |