1#ifndef NTP_CONTROL_H 2#define NTP_CONTROL_H 3/* 4 * ntp_control.h - definitions related to NTP mode 6 control messages 5 */ 6 7#include "ntp_types.h" 8 9typedef union ctl_pkt_u_tag { 10 u_char data[480 + MAX_MAC_LEN]; /* data + auth */ 11 u_int32 u32[(480 + MAX_MAC_LEN) / sizeof(u_int32)]; 12} ctl_pkt_u; 13 14struct ntp_control { 15 u_char li_vn_mode; /* leap, version, mode */ 16 u_char r_m_e_op; /* response, more, error, opcode */ 17 u_short sequence; /* sequence number of request */ 18 u_short status; /* status word for association */ 19 associd_t associd; /* association ID */ 20 u_short offset; /* offset of this batch of data */ 21 u_short count; /* count of data in this packet */ 22 ctl_pkt_u u; 23}; 24 25/* 26 * Length of the control header, in octets 27 */ 28#define CTL_HEADER_LEN (offsetof(struct ntp_control, u)) 29#define CTL_MAX_DATA_LEN 468 30 31 32/* 33 * Limits and things 34 */ 35#define CTL_MAXTRAPS 3 /* maximum number of traps we allow */ 36#define CTL_TRAPTIME (60*60) /* time out traps in 1 hour */ 37#define CTL_MAXAUTHSIZE 64 /* maximum size of an authen'ed req */ 38 39/* 40 * Decoding for the r_m_e_op field 41 */ 42#define CTL_RESPONSE 0x80 43#define CTL_ERROR 0x40 44#define CTL_MORE 0x20 45#define CTL_OP_MASK 0x1f 46 47#define CTL_ISRESPONSE(r_m_e_op) ((CTL_RESPONSE & (r_m_e_op)) != 0) 48#define CTL_ISMORE(r_m_e_op) ((CTL_MORE & (r_m_e_op)) != 0) 49#define CTL_ISERROR(r_m_e_op) ((CTL_ERROR & (r_m_e_op)) != 0) 50#define CTL_OP(r_m_e_op) (CTL_OP_MASK & (r_m_e_op)) 51 52/* 53 * Opcodes 54 */ 55#define CTL_OP_UNSPEC 0 /* unspeciffied */ 56#define CTL_OP_READSTAT 1 /* read status */ 57#define CTL_OP_READVAR 2 /* read variables */ 58#define CTL_OP_WRITEVAR 3 /* write variables */ 59#define CTL_OP_READCLOCK 4 /* read clock variables */ 60#define CTL_OP_WRITECLOCK 5 /* write clock variables */ 61#define CTL_OP_SETTRAP 6 /* set trap address */ 62#define CTL_OP_ASYNCMSG 7 /* asynchronous message */ 63#define CTL_OP_CONFIGURE 8 /* runtime configuration */ 64#define CTL_OP_SAVECONFIG 9 /* save config to file */ 65#define CTL_OP_READ_MRU 10 /* retrieve MRU (mrulist) */ 66#define CTL_OP_READ_ORDLIST_A 11 /* ordered list req. auth. */ 67#define CTL_OP_REQ_NONCE 12 /* request a client nonce */ 68#define CTL_OP_UNSETTRAP 31 /* unset trap */ 69 70/* 71 * {En,De}coding of the system status word 72 */ 73#define CTL_SST_TS_UNSPEC 0 /* unspec */ 74#define CTL_SST_TS_ATOM 1 /* pps */ 75#define CTL_SST_TS_LF 2 /* lf radio */ 76#define CTL_SST_TS_HF 3 /* hf radio */ 77#define CTL_SST_TS_UHF 4 /* uhf radio */ 78#define CTL_SST_TS_LOCAL 5 /* local */ 79#define CTL_SST_TS_NTP 6 /* ntp */ 80#define CTL_SST_TS_UDPTIME 7 /* other */ 81#define CTL_SST_TS_WRSTWTCH 8 /* wristwatch */ 82#define CTL_SST_TS_TELEPHONE 9 /* telephone */ 83 84#define CTL_SYS_MAXEVENTS 15 85 86#define CTL_SYS_STATUS(li, source, nevnt, evnt) \ 87 (((((unsigned short)(li))<< 14)&0xc000) | \ 88 (((source)<<8)&0x3f00) | \ 89 (((nevnt)<<4)&0x00f0) | \ 90 ((evnt)&0x000f)) 91 92#define CTL_SYS_LI(status) (((status)>>14) & 0x3) 93#define CTL_SYS_SOURCE(status) (((status)>>8) & 0x3f) 94#define CTL_SYS_NEVNT(status) (((status)>>4) & 0xf) 95#define CTL_SYS_EVENT(status) ((status) & 0xf) 96 97/* 98 * {En,De}coding of the peer status word 99 */ 100#define CTL_PST_CONFIG 0x80 101#define CTL_PST_AUTHENABLE 0x40 102#define CTL_PST_AUTHENTIC 0x20 103#define CTL_PST_REACH 0x10 104#define CTL_PST_BCAST 0x08 105 106#define CTL_PST_SEL_REJECT 0 /* reject */ 107#define CTL_PST_SEL_SANE 1 /* x falsetick */ 108#define CTL_PST_SEL_CORRECT 2 /* . excess */ 109#define CTL_PST_SEL_SELCAND 3 /* - outlier */ 110#define CTL_PST_SEL_SYNCCAND 4 /* + candidate */ 111#define CTL_PST_SEL_EXCESS 5 /* # backup */ 112#define CTL_PST_SEL_SYSPEER 6 /* * sys.peer */ 113#define CTL_PST_SEL_PPS 7 /* o pps.peer */ 114 115#define CTL_PEER_MAXEVENTS 15 116 117#define CTL_PEER_STATUS(status, nevnt, evnt) \ 118 ((((status)<<8) & 0xff00) | \ 119 (((nevnt)<<4) & 0x00f0) | \ 120 ((evnt) & 0x000f)) 121 122#define CTL_PEER_STATVAL(status)(((status)>>8) & 0xff) 123#define CTL_PEER_NEVNT(status) (((status)>>4) & 0xf) 124#define CTL_PEER_EVENT(status) ((status) & 0xf) 125 126/* 127 * {En,De}coding of the clock status word 128 */ 129#define CTL_CLK_OKAY 0 130#define CTL_CLK_NOREPLY 1 131#define CTL_CLK_BADFORMAT 2 132#define CTL_CLK_FAULT 3 133#define CTL_CLK_PROPAGATION 4 134#define CTL_CLK_BADDATE 5 135#define CTL_CLK_BADTIME 6 136 137#define CTL_CLK_STATUS(status, event) \ 138 ((((status)<<8) & 0xff00) | \ 139 ((event) & 0x00ff)) 140 141/* 142 * Error code responses returned when the E bit is set. 143 */ 144#define CERR_UNSPEC 0 145#define CERR_PERMISSION 1 146#define CERR_BADFMT 2 147#define CERR_BADOP 3 148#define CERR_BADASSOC 4 149#define CERR_UNKNOWNVAR 5 150#define CERR_BADVALUE 6 151#define CERR_RESTRICT 7 152 153#define CERR_NORESOURCE CERR_PERMISSION /* wish there was a different code */ 154 155 156/* 157 * Definition of the structure used internally to hold trap information. 158 * ntp_request.c wants to see this. 159 */ 160struct ctl_trap { 161 sockaddr_u tr_addr; /* address of trap recipient */ 162 struct interface *tr_localaddr; /* interface to send this through */ 163 u_long tr_settime; /* time trap was set */ 164 u_long tr_count; /* async messages sent to this guy */ 165 u_long tr_origtime; /* time trap was originally set */ 166 u_long tr_resets; /* count of resets for this trap */ 167 u_short tr_sequence; /* trap sequence id */ 168 u_char tr_flags; /* trap flags */ 169 u_char tr_version; /* version number of trapper */ 170}; 171extern struct ctl_trap ctl_traps[CTL_MAXTRAPS]; 172 173/* 174 * Flag bits 175 */ 176#define TRAP_INUSE 0x1 /* this trap is active */ 177#define TRAP_NONPRIO 0x2 /* this trap is non-priority */ 178#define TRAP_CONFIGURED 0x4 /* this trap was configured */ 179 180/* 181 * Types of things we may deal with 182 * shared between ntpq and library 183 */ 184#define TYPE_SYS 1 185#define TYPE_PEER 2 186#define TYPE_CLOCK 3 187 188/* 189 * IFSTATS_FIELDS is the number of fields ntpd supplies for each ifstats 190 * row. Similarly RESLIST_FIELDS for reslist. 191 */ 192#define IFSTATS_FIELDS 12 193#define RESLIST_FIELDS 4 194 195#endif /* NTP_CONTROL_H */ 196 197