File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / ntp / include / ntp_control.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue May 29 12:08:38 2012 UTC (12 years, 5 months ago) by misho
Branches: ntp, MAIN
CVS tags: v4_2_6p5p0, v4_2_6p5, HEAD
ntp 4.2.6p5

    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		(offsetof(struct ntp_control, data))
   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	/* unspeciffied */
   49: #define	CTL_OP_READSTAT		1	/* read status */
   50: #define	CTL_OP_READVAR		2	/* read variables */
   51: #define	CTL_OP_WRITEVAR		3	/* write variables */
   52: #define	CTL_OP_READCLOCK	4	/* read clock variables */
   53: #define	CTL_OP_WRITECLOCK	5	/* write clock variables */
   54: #define	CTL_OP_SETTRAP		6	/* set trap address */
   55: #define	CTL_OP_ASYNCMSG		7	/* asynchronous message */
   56: #define CTL_OP_CONFIGURE	8	/* runtime configuration */
   57: #define CTL_OP_SAVECONFIG	9	/* save config to file */
   58: #define	CTL_OP_UNSETTRAP	31	/* unset trap */
   59: 
   60: /*
   61:  * {En,De}coding of the system status word
   62:  */
   63: #define	CTL_SST_TS_UNSPEC	0	/* unspec */
   64: #define	CTL_SST_TS_ATOM		1	/* pps */
   65: #define	CTL_SST_TS_LF		2	/* lf radio */
   66: #define	CTL_SST_TS_HF		3	/* hf radio */
   67: #define	CTL_SST_TS_UHF		4	/* uhf radio */
   68: #define	CTL_SST_TS_LOCAL	5	/* local */
   69: #define	CTL_SST_TS_NTP		6	/* ntp */
   70: #define	CTL_SST_TS_UDPTIME	7	/* other */
   71: #define	CTL_SST_TS_WRSTWTCH	8	/* wristwatch */
   72: #define	CTL_SST_TS_TELEPHONE	9	/* telephone */
   73: 
   74: #define	CTL_SYS_MAXEVENTS	15
   75: 
   76: #define	CTL_SYS_STATUS(li, source, nevnt, evnt) \
   77: 		(((((unsigned short)(li))<< 14)&0xc000) | \
   78: 		(((source)<<8)&0x3f00) | \
   79: 		(((nevnt)<<4)&0x00f0) | \
   80: 		((evnt)&0x000f))
   81: 
   82: #define	CTL_SYS_LI(status)	(((status)>>14) & 0x3)
   83: #define	CTL_SYS_SOURCE(status)	(((status)>>8) & 0x3f)
   84: #define	CTL_SYS_NEVNT(status)	(((status)>>4) & 0xf)
   85: #define	CTL_SYS_EVENT(status)	((status) & 0xf)
   86: 
   87: /*
   88:  * {En,De}coding of the peer status word
   89:  */
   90: #define	CTL_PST_CONFIG		0x80
   91: #define	CTL_PST_AUTHENABLE	0x40
   92: #define	CTL_PST_AUTHENTIC	0x20
   93: #define	CTL_PST_REACH		0x10
   94: #define	CTL_PST_BCAST		0x08
   95: 
   96: #define	CTL_PST_SEL_REJECT	0	/*   reject */
   97: #define	CTL_PST_SEL_SANE	1	/* x falsetick */
   98: #define	CTL_PST_SEL_CORRECT	2	/* . excess */
   99: #define	CTL_PST_SEL_SELCAND	3	/* - outlyer */
  100: #define	CTL_PST_SEL_SYNCCAND	4	/* + candidate */
  101: #define	CTL_PST_SEL_EXCESS	5	/* # backup */
  102: #define	CTL_PST_SEL_SYSPEER	6	/* * sys.peer */
  103: #define	CTL_PST_SEL_PPS		7	/* o pps.peer */
  104: 
  105: #define	CTL_PEER_MAXEVENTS	15
  106: 
  107: #define	CTL_PEER_STATUS(status, nevnt, evnt) \
  108: 		((((status)<<8) & 0xff00) | \
  109: 		(((nevnt)<<4) & 0x00f0) | \
  110: 		((evnt) & 0x000f))
  111: 
  112: #define	CTL_PEER_STATVAL(status)(((status)>>8) & 0xff)
  113: #define	CTL_PEER_NEVNT(status)	(((status)>>4) & 0xf)
  114: #define	CTL_PEER_EVENT(status)	((status) & 0xf)
  115: 
  116: /*
  117:  * {En,De}coding of the clock status word
  118:  */
  119: #define	CTL_CLK_OKAY		0
  120: #define	CTL_CLK_NOREPLY		1
  121: #define	CTL_CLK_BADFORMAT	2
  122: #define	CTL_CLK_FAULT		3
  123: #define	CTL_CLK_PROPAGATION	4
  124: #define	CTL_CLK_BADDATE		5
  125: #define	CTL_CLK_BADTIME		6
  126: 
  127: #define	CTL_CLK_STATUS(status, event) \
  128: 		((((status)<<8) & 0xff00) | \
  129: 		((event) & 0x00ff))
  130: 
  131: /*
  132:  * Error code responses returned when the E bit is set.
  133:  */
  134: #define	CERR_UNSPEC	0
  135: #define	CERR_PERMISSION	1
  136: #define	CERR_BADFMT	2
  137: #define	CERR_BADOP	3
  138: #define	CERR_BADASSOC	4
  139: #define	CERR_UNKNOWNVAR	5
  140: #define	CERR_BADVALUE	6
  141: #define	CERR_RESTRICT	7
  142: 
  143: #define	CERR_NORESOURCE	CERR_PERMISSION	/* wish there was a different code */
  144: 
  145: 
  146: /*
  147:  * System variables we understand
  148:  */
  149: #define	CS_LEAP		1
  150: #define	CS_STRATUM	2
  151: #define	CS_PRECISION	3
  152: #define	CS_ROOTDELAY	4
  153: #define	CS_ROOTDISPERSION	5
  154: #define	CS_REFID	6
  155: #define	CS_REFTIME	7
  156: #define	CS_POLL		8
  157: #define	CS_PEERID	9
  158: #define	CS_OFFSET	10
  159: #define	CS_DRIFT	11
  160: #define CS_JITTER	12
  161: #define CS_ERROR	13
  162: #define	CS_CLOCK	14
  163: #define	CS_PROCESSOR	15
  164: #define	CS_SYSTEM	16
  165: #define CS_VERSION	17
  166: #define	CS_STABIL	18
  167: #define CS_VARLIST	19
  168: #define CS_TAI          20
  169: #define CS_LEAPTAB      21
  170: #define CS_LEAPEND      22
  171: #define	CS_RATE		23
  172: #ifdef OPENSSL
  173: #define CS_FLAGS	24
  174: #define CS_HOST		25
  175: #define CS_PUBLIC	26
  176: #define	CS_CERTIF	27
  177: #define	CS_SIGNATURE	28
  178: #define	CS_REVTIME	29
  179: #define	CS_GROUP	30
  180: #define CS_DIGEST	31
  181: #define	CS_MAXCODE	CS_DIGEST
  182: #else
  183: #define	CS_MAXCODE	CS_RATE
  184: #endif /* OPENSSL */
  185: 
  186: /*
  187:  * Peer variables we understand
  188:  */
  189: #define	CP_CONFIG	1
  190: #define	CP_AUTHENABLE	2
  191: #define	CP_AUTHENTIC	3
  192: #define	CP_SRCADR	4
  193: #define	CP_SRCPORT	5
  194: #define	CP_DSTADR	6
  195: #define	CP_DSTPORT	7
  196: #define	CP_LEAP		8
  197: #define	CP_HMODE	9
  198: #define	CP_STRATUM	10
  199: #define	CP_PPOLL	11
  200: #define	CP_HPOLL	12
  201: #define	CP_PRECISION	13
  202: #define	CP_ROOTDELAY	14
  203: #define	CP_ROOTDISPERSION	15
  204: #define	CP_REFID	16
  205: #define	CP_REFTIME	17
  206: #define	CP_ORG		18
  207: #define	CP_REC		19
  208: #define	CP_XMT		20
  209: #define	CP_REACH	21
  210: #define	CP_UNREACH	22
  211: #define	CP_TIMER	23
  212: #define	CP_DELAY	24
  213: #define	CP_OFFSET	25
  214: #define CP_JITTER	26
  215: #define	CP_DISPERSION	27
  216: #define	CP_KEYID	28
  217: #define	CP_FILTDELAY	29
  218: #define	CP_FILTOFFSET	30
  219: #define	CP_PMODE	31
  220: #define	CP_RECEIVED	32
  221: #define	CP_SENT		33
  222: #define	CP_FILTERROR	34
  223: #define	CP_FLASH	35
  224: #define CP_TTL		36
  225: #define CP_VARLIST	37
  226: #define	CP_IN		38
  227: #define	CP_OUT		39
  228: #define	CP_RATE		40
  229: #define	CP_BIAS		41
  230: #ifdef OPENSSL
  231: #define CP_FLAGS	42
  232: #define CP_HOST		43
  233: #define CP_VALID	44
  234: #define	CP_INITSEQ	45
  235: #define	CP_INITKEY	46
  236: #define	CP_INITTSP	47
  237: #define	CP_SIGNATURE	48
  238: #define	CP_MAXCODE	CP_SIGNATURE
  239: #else
  240: #define	CP_MAXCODE	CP_BIAS
  241: #endif /* OPENSSL */
  242: 
  243: /*
  244:  * Clock variables we understand
  245:  */
  246: #define	CC_TYPE		1
  247: #define	CC_TIMECODE	2
  248: #define	CC_POLL		3
  249: #define	CC_NOREPLY	4
  250: #define	CC_BADFORMAT	5
  251: #define	CC_BADDATA	6
  252: #define	CC_FUDGETIME1	7
  253: #define	CC_FUDGETIME2	8
  254: #define	CC_FUDGEVAL1	9
  255: #define	CC_FUDGEVAL2	10
  256: #define	CC_FLAGS	11
  257: #define	CC_DEVICE	12
  258: #define CC_VARLIST	13
  259: #define	CC_MAXCODE	CC_VARLIST
  260: 
  261: /*
  262:  * Definition of the structure used internally to hold trap information.
  263:  * ntp_request.c wants to see this.
  264:  */
  265: struct ctl_trap {
  266: 	sockaddr_u tr_addr;		/* address of trap recipient */
  267: 	struct interface *tr_localaddr;	/* interface to send this through */
  268: 	u_long tr_settime;		/* time trap was set */
  269: 	u_long tr_count;		/* async messages sent to this guy */
  270: 	u_long tr_origtime;		/* time trap was originally set */
  271: 	u_long tr_resets;		/* count of resets for this trap */
  272: 	u_short tr_sequence;		/* trap sequence id */
  273: 	u_char tr_flags;		/* trap flags */
  274: 	u_char tr_version;		/* version number of trapper */
  275: };
  276: extern struct ctl_trap ctl_trap[];
  277: 
  278: /*
  279:  * Flag bits
  280:  */
  281: #define	TRAP_INUSE	0x1		/* this trap is active */
  282: #define	TRAP_NONPRIO	0x2		/* this trap is non-priority */
  283: #define	TRAP_CONFIGURED	0x4		/* this trap was configured */
  284: 
  285: /*
  286:  * Types of things we may deal with
  287:  * shared between ntpq and library
  288:  */
  289: #define	TYPE_SYS	1
  290: #define	TYPE_PEER	2
  291: #define	TYPE_CLOCK	3

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>