Home | History | Annotate | Download | only in snoop
      1    0  stevel /*
      2    0  stevel  * CDDL HEADER START
      3    0  stevel  *
      4    0  stevel  * The contents of this file are subject to the terms of the
      5    0  stevel  * Common Development and Distribution License, Version 1.0 only
      6    0  stevel  * (the "License").  You may not use this file except in compliance
      7    0  stevel  * with the License.
      8    0  stevel  *
      9    0  stevel  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
     10    0  stevel  * or http://www.opensolaris.org/os/licensing.
     11    0  stevel  * See the License for the specific language governing permissions
     12    0  stevel  * and limitations under the License.
     13    0  stevel  *
     14    0  stevel  * When distributing Covered Code, include this CDDL HEADER in each
     15    0  stevel  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     16    0  stevel  * If applicable, add the following below this CDDL HEADER, with the
     17    0  stevel  * fields enclosed by brackets "[]" replaced with your own identifying
     18    0  stevel  * information: Portions Copyright [yyyy] [name of copyright owner]
     19    0  stevel  *
     20    0  stevel  * CDDL HEADER END
     21    0  stevel  */
     22    0  stevel /*
     23  410  kcpoon  * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
     24    0  stevel  * Use is subject to license terms.
     25    0  stevel  */
     26    0  stevel 
     27    0  stevel /*
     28    0  stevel  * University Copyright- Copyright (c) 1982, 1986, 1988
     29    0  stevel  * The Regents of the University of California
     30    0  stevel  * All Rights Reserved
     31    0  stevel  *
     32    0  stevel  * University Acknowledgment- Portions of this document are derived from
     33    0  stevel  * software developed by the University of California, Berkeley, and its
     34    0  stevel  * contributors.
     35    0  stevel  */
     36    0  stevel 
     37    0  stevel #ifndef	_NTP_H
     38    0  stevel #define	_NTP_H
     39    0  stevel 
     40    0  stevel #pragma ident	"%Z%%M%	%I%	%E% SMI"
     41    0  stevel 
     42    0  stevel #ifdef __cplusplus
     43    0  stevel extern "C" {
     44    0  stevel #endif
     45    0  stevel 
     46    0  stevel /* $Source: /usr/users/louie/ntp/RCS/ntp.h,v $  */
     47    0  stevel /* $Revision: 3.4.1.5 $ $Date: 89/04/10 15:55:42 $ */
     48    0  stevel 
     49    0  stevel /*
     50    0  stevel  *  $Log:	ntp.h,v $
     51    0  stevel  * Revision 3.4.1.5  89/04/10  15:55:42  louie
     52    0  stevel  * Provide default value for number of bits/byte if not defined.  Compute the
     53    0  stevel  * Window shift mask inside of conditional code on XTAL so we get the correct
     54    0  stevel  * value if configured without a crystal controled clock (!!)
     55    0  stevel  *
     56    0  stevel  * Revision 3.4.1.4  89/03/31  16:34:50  louie
     57    0  stevel  * Add bit in flags which allow a peer to be synced to.  Changed a char to a bit
     58    0  stevel  * field so that it is always signed.
     59    0  stevel  *
     60    0  stevel  * Revision 3.4.1.3  89/03/29  12:26:18  louie
     61    0  stevel  * Removed some unused #defines.  Replaced MAXSTRATUM with NTP_INFIN per new
     62    0  stevel  * spec.  The variable 'mode' in the peer structure has been renamed 'hmode'
     63    0  stevel  * per the new spec.
     64    0  stevel  *
     65    0  stevel  * Revision 3.4.1.2  89/03/22  18:28:18  louie
     66    0  stevel  * patch3: Use new RCS headers.
     67    0  stevel  *
     68    0  stevel  * Revision 3.4.1.1  89/03/20  00:02:53  louie
     69    0  stevel  * 1
     70    0  stevel  *
     71    0  stevel  * Revision 3.4  89/03/17  18:37:00  louie
     72    0  stevel  * Latest test release.
     73    0  stevel  *
     74    0  stevel  * Revision 3.3.1.1  89/03/17  18:23:49  louie
     75    0  stevel  * Change CLOCK_FACTOR to be a power of 2.
     76    0  stevel  *
     77    0  stevel  * Revision 3.3  89/03/15  14:19:36  louie
     78    0  stevel  * New baseline for next release.
     79    0  stevel  *
     80    0  stevel  * Revision 3.2.1.2  89/03/15  13:46:52  louie
     81    0  stevel  * The version number for that particular flavor of ntpd <--> ntpdc interaction
     82    0  stevel  * is now defined by NTPDC_VERSION.  The packet format for the ntpdc program
     83    0  stevel  * has changed slightly to improve robustness when dealing with multiple packets
     84    0  stevel  * of status data.
     85    0  stevel  *
     86    0  stevel  * Revision 3.2.1.1  89/03/09  17:11:24  louie
     87    0  stevel  * patch1: Updated constants, which were previously in incorrect units.
     88    0  stevel  *
     89    0  stevel  * Revision 3.2  89/03/07  18:21:45  louie
     90    0  stevel  * New version of UNIX NTP daemon and software based on the 6 March 1989
     91    0  stevel  * draft of the new NTP protocol specification.  This version doesn't
     92    0  stevel  * implement authentication, and accepts and send only NTP Version 1
     93    0  stevel  * packets.
     94    0  stevel  *
     95    0  stevel  * Revision 3.1.1.1  89/02/15  08:54:42  louie
     96    0  stevel  * *** empty log message ***
     97    0  stevel  *
     98    0  stevel  *
     99    0  stevel  * Revision 3.1  89/01/30  14:43:07  louie
    100    0  stevel  * Second UNIX NTP test release.
    101    0  stevel  *
    102    0  stevel  * Revision 3.0  88/12/12  16:01:07  louie
    103    0  stevel  * Test release of new UNIX NTP software.  This version should conform to the
    104    0  stevel  * revised NTP protocol specification.
    105    0  stevel  *
    106    0  stevel  */
    107    0  stevel 
    108    0  stevel #ifndef FD_SET
    109    0  stevel #define	NFDBITS		32
    110    0  stevel #define	FD_SETSIZE	32
    111    0  stevel #define	FD_SET(n, p)	((p)->fds_bits[(n)/NFDBITS] |= (1 << ((n) % NFDBITS)))
    112    0  stevel #define	FD_CLR(n, p)	((p)->fds_bits[(n)/NFDBITS] &= ~(1 << ((n) % NFDBITS)))
    113    0  stevel #define	FD_ISSET(n, p)	((p)->fds_bits[(n)/NFDBITS] & (1 << ((n) % NFDBITS)))
    114    0  stevel #define	FD_ZERO(p)	bzero((char *)(p), sizeof (*(p)))
    115    0  stevel #endif
    116    0  stevel 
    117    0  stevel #ifndef	NBBY
    118    0  stevel #define	NBBY	8	/* number of bits per byte */
    119    0  stevel #endif
    120    0  stevel 
    121    0  stevel #define	MAXNETIF	10
    122    0  stevel 
    123    0  stevel struct intf {
    124    0  stevel 	int fd;
    125    0  stevel 	char *name;
    126    0  stevel 	struct sockaddr_in sin;
    127    0  stevel 	struct sockaddr_in bcast;
    128    0  stevel 	struct sockaddr_in mask;
    129    0  stevel 	int uses;
    130    0  stevel 	int if_flags;
    131    0  stevel };
    132    0  stevel extern struct intf addrs[];
    133    0  stevel extern int nintf;
    134    0  stevel 
    135    0  stevel /*
    136    0  stevel  *  Definitions for the masses
    137    0  stevel  */
    138  410  kcpoon #define	JAN_1970	2208988800U	/* 1970 - 1900 in seconds */
    139    0  stevel 
    140    0  stevel /*
    141    0  stevel  *  Daemon specific (ntpd.c)
    142    0  stevel  */
    143    0  stevel #define	SHIFT_MASK	0xff	/* number of intervals to wait */
    144    0  stevel 
    145    0  stevel #ifndef	WAYTOOBIG
    146    0  stevel #define	WAYTOOBIG	1000.0	/* Too many seconds to correct, something is */
    147    0  stevel 				/* really wrong */
    148    0  stevel #endif
    149    0  stevel 
    150    0  stevel #ifndef	XTAL
    151    0  stevel #define	XTAL	1	/* crystal controlled clock by default */
    152    0  stevel #endif
    153    0  stevel 
    154    0  stevel #ifndef	NTPINITFILE
    155    0  stevel #define	NTPINITFILE	"/etc/ntp.conf"
    156    0  stevel #endif
    157    0  stevel 
    158    0  stevel struct list {
    159    0  stevel 	struct ntp_peer *head;
    160    0  stevel 	struct ntp_peer *tail;
    161    0  stevel 	int members;
    162    0  stevel };
    163    0  stevel 
    164    0  stevel #define	STRMCMP(a, cond, b) \
    165    0  stevel 	(((a) == UNSPECIFIED ? NTP_INFIN+1 : a) cond \
    166    0  stevel 		((b) == UNSPECIFIED ? NTP_INFIN+1 : (b)))
    167    0  stevel 
    168    0  stevel 
    169    0  stevel /*
    170    0  stevel  *  Definitions outlined in the NTP spec
    171    0  stevel  */
    172    0  stevel #define	NTP_VERSION	1
    173    0  stevel #define	NTP_PORT	123	/* for ref only (see /etc/services) */
    174    0  stevel #define	NTP_INFIN	15
    175    0  stevel #define	NTP_MAXAGE	86400
    176    0  stevel #define	NTP_MAXSKW	0.01	/* seconds */
    177    0  stevel #define	NTP_MINDIST	0.02	/* seconds */
    178    0  stevel #define	NTP_MINPOLL	6	/* (64) seconds between messages */
    179    0  stevel #define	NTP_MAXPOLL	10	/* (1024) secs to poll */
    180    0  stevel #define	NTP_WINDOW	8	/* size of shift register */
    181    0  stevel #define	NTP_MAXWGT	8	/* maximum allowable dispersion */
    182    0  stevel #define	NTP_MAXLIST	5	/* max size of selection list */
    183    0  stevel #define	NTP_MAXSTRA	2	/* max number of strata in selection list */
    184    0  stevel #define	X_NTP_CANDIDATES 64	/* number of peers to consider when doing */
    185    0  stevel 				/*	clock selection */
    186    0  stevel #define	NTP_SELECT	0.75	/* weight used to compute dispersion */
    187    0  stevel 
    188    0  stevel #define	PEER_MAXDISP	64.0	/* Maximum dispersion  */
    189    0  stevel #define	PEER_THRESHOLD	0.5	/* dispersion threshold */
    190    0  stevel #define	PEER_FILTER	0.5	/* filter weight */
    191    0  stevel 
    192    0  stevel #if	XTAL == 0
    193    0  stevel #define	PEER_SHIFT	4
    194    0  stevel #define	NTP_WINDOW_SHIFT_MASK 0x0f
    195    0  stevel #else
    196    0  stevel #define	PEER_SHIFT	8
    197    0  stevel #define	NTP_WINDOW_SHIFT_MASK 0xff
    198    0  stevel #endif
    199    0  stevel 
    200    0  stevel 
    201    0  stevel /*
    202    0  stevel  *  5.1 Uniform Phase Adjustments
    203    0  stevel  *  Clock parameters
    204    0  stevel  */
    205    0  stevel #define	CLOCK_UPDATE	8	/* update interval (1<<CLOCK_UPDATE secs) */
    206    0  stevel #if	XTAL
    207    0  stevel #define	CLOCK_ADJ	2	/* adjustment interval (1<<CLOCK_ADJ secs) */
    208    0  stevel #define	CLOCK_PHASE	8	/* phase shift */
    209    0  stevel #define	CLOCK_MAX	0.128	/* maximum aperture (milliseconds) */
    210    0  stevel #else
    211    0  stevel #define	CLOCK_ADJ	0
    212    0  stevel #define	CLOCK_PHASE	6	/* phase shift */
    213    0  stevel #define	CLOCK_MAX	0.512	/* maximum aperture (milliseconds) */
    214    0  stevel #endif
    215    0  stevel #define	CLOCK_FREQ	10	/* frequency shift */
    216    0  stevel #define	CLOCK_TRACK	8
    217    0  stevel #define	CLOCK_COMP	4
    218    0  stevel #define	CLOCK_FACTOR	18
    219    0  stevel 
    220    0  stevel /*
    221    0  stevel  * Structure definitions for NTP fixed point values
    222    0  stevel  *
    223    0  stevel  *    0			  1		      2			  3
    224    0  stevel  *    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    225    0  stevel  *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    226    0  stevel  *   |			       Integer Part			     |
    227    0  stevel  *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    228    0  stevel  *   |			       Fraction Part			     |
    229    0  stevel  *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    230    0  stevel  *
    231    0  stevel  *
    232    0  stevel  *    0			  1		      2			  3
    233    0  stevel  *    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    234    0  stevel  *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    235    0  stevel  *   |		  Integer Part	     |	   Fraction Part	     |
    236    0  stevel  *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    237    0  stevel  */
    238    0  stevel struct l_fixedpt {
    239  410  kcpoon 	ulong_t int_part;
    240  410  kcpoon 	ulong_t fraction;
    241    0  stevel };
    242    0  stevel 
    243    0  stevel struct s_fixedpt {
    244  410  kcpoon 	ushort_t int_part;
    245  410  kcpoon 	ushort_t fraction;
    246    0  stevel };
    247    0  stevel 
    248    0  stevel /*
    249    0  stevel  *  =================  Table 3.3. Packet Variables   =================
    250    0  stevel  *    0			  1		      2			  3
    251    0  stevel  *    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    252    0  stevel  *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    253    0  stevel  *   |LI | VN  | Mode|	  Stratum    |	    Poll     |	 Precision   |
    254    0  stevel  *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    255    0  stevel  *   |			   Synchronizing Distance		     |
    256    0  stevel  *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    257    0  stevel  *   |			  Synchronizing Dispersion		     |
    258    0  stevel  *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    259    0  stevel  *   |			Reference Clock Identifier		     |
    260    0  stevel  *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    261    0  stevel  *   |								     |
    262    0  stevel  *   |		       Reference Timestamp (64 bits)		     |
    263    0  stevel  *   |								     |
    264    0  stevel  *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    265    0  stevel  *   |								     |
    266    0  stevel  *   |		       Originate Timestamp (64 bits)		     |
    267    0  stevel  *   |								     |
    268    0  stevel  *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    269    0  stevel  *   |								     |
    270    0  stevel  *   |			Receive Timestamp (64 bits)		     |
    271    0  stevel  *   |								     |
    272    0  stevel  *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    273    0  stevel  *   |								     |
    274    0  stevel  *   |			Transmit Timestamp (64 bits)		     |
    275    0  stevel  *   |								     |
    276    0  stevel  *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    277    0  stevel  *   |		     Encryption Keyid (32 bits, when A bit set)	     |
    278    0  stevel  *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    279    0  stevel  *   |								     |
    280    0  stevel  *   |		Message Authentication Code/MAC (when A bit set)     |
    281    0  stevel  *   |								     |
    282    0  stevel  *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    283    0  stevel  */
    284    0  stevel 
    285    0  stevel #define	MAC_OCTETS_DES	8
    286    0  stevel #define	MAC_OCTETS_MD5	16
    287    0  stevel #define	MAC_OCTETS_MIN	MAC_OCTETS_DES
    288    0  stevel #define	MAC_OCTETS_MAX	MAC_OCTETS_MD5
    289    0  stevel #define	AUTH_OCTETS_V3	(MAC_OCTETS_MAX + sizeof (uint32_t))
    290    0  stevel 
    291    0  stevel struct ntpdata {
    292  410  kcpoon 	uchar_t li_vn_mode;	/* contains leap indicator, version and mode */
    293  410  kcpoon 	uchar_t stratum; 	/* Stratum level */
    294  410  kcpoon 	uchar_t ppoll;		/* poll value */
    295    0  stevel 	int precision:8;
    296    0  stevel 	struct s_fixedpt distance;
    297    0  stevel 	struct s_fixedpt dispersion;
    298  410  kcpoon 	ulong_t refid;
    299    0  stevel 	struct l_fixedpt reftime;
    300    0  stevel 	struct l_fixedpt org;
    301    0  stevel 	struct l_fixedpt rec;
    302    0  stevel 	struct l_fixedpt xmt;
    303    0  stevel 	uint32_t keyid;
    304  410  kcpoon 	uchar_t mac[MAC_OCTETS_MAX];
    305    0  stevel };
    306    0  stevel 
    307    0  stevel #define	LEN_PKT_NOMAC	(sizeof (struct ntpdata) - AUTH_OCTETS_V3)
    308    0  stevel 
    309    0  stevel /*
    310    0  stevel  *	Leap Second Codes (high order two bits)
    311    0  stevel  */
    312    0  stevel #define	NO_WARNING	0x00	/* no warning */
    313    0  stevel #define	PLUS_SEC	0x40	/* add a second (61 seconds) */
    314    0  stevel #define	MINUS_SEC	0x80	/* minus a second (59 seconds) */
    315    0  stevel #define	ALARM		0xc0	/* alarm condition (clock unsynchronized) */
    316    0  stevel 
    317    0  stevel /*
    318    0  stevel  *	Clock Status Bits that Encode Version
    319    0  stevel  */
    320    0  stevel #define	NTPVERSION_1	0x08
    321    0  stevel #define	VERSIONMASK	0x38
    322    0  stevel #define	LEAPMASK	0xc0
    323    0  stevel #define	NTPMODEMASK	0x07
    324    0  stevel 
    325    0  stevel /*
    326    0  stevel  *	Code values
    327    0  stevel  */
    328    0  stevel #define	MODE_UNSPEC	0	/* unspecified */
    329    0  stevel #define	MODE_SYM_ACT	1	/* symmetric active */
    330    0  stevel #define	MODE_SYM_PAS	2	/* symmetric passive */
    331    0  stevel #define	MODE_CLIENT	3	/* client */
    332    0  stevel #define	MODE_SERVER	4	/* server */
    333    0  stevel #define	MODE_BROADCAST	5	/* broadcast */
    334    0  stevel #define	MODE_CONTROL	6	/* control */
    335    0  stevel #define	MODE_PRIVATE	7	/* private */
    336    0  stevel 
    337    0  stevel /*
    338    0  stevel  *	Stratum Definitions
    339    0  stevel  */
    340    0  stevel #define	UNSPECIFIED	0
    341    0  stevel #define	PRIM_REF	1	/* radio clock */
    342    0  stevel #define	INFO_QUERY	62	/* **** THIS implementation dependent **** */
    343    0  stevel #define	INFO_REPLY	63	/* **** THIS implementation dependent **** */
    344    0  stevel 
    345    0  stevel 
    346    0  stevel /* =================  table 3.2 Peer Variables	================= */
    347    0  stevel struct ntp_peer {
    348    0  stevel 	struct ntp_peer *next, *prev;
    349    0  stevel 	struct sockaddr_in src;		/* both peer.srcadr and peer.srcport */
    350    0  stevel 	int	flags;			/* local flags */
    351    0  stevel #define	PEER_FL_CONFIG		1
    352    0  stevel #define	PEER_FL_AUTHENABLE	2
    353    0  stevel #define	PEER_FL_SYNC		0x1000	/* peer can bet sync'd to */
    354    0  stevel #define	PEER_FL_BCAST		0x2000	/* broadcast peer */
    355    0  stevel #define	PEER_FL_SELECTED	0x8000	/* actually used by query routine */
    356    0  stevel 
    357    0  stevel 	int	sock;			/* index into sockets to derive */
    358    0  stevel 					/*   peer.dstadr and peer.dstport */
    359  410  kcpoon 	uchar_t	leap;			/* receive */
    360  410  kcpoon 	uchar_t	hmode;			/* receive */
    361  410  kcpoon 	uchar_t	stratum;		/* receive */
    362  410  kcpoon 	uchar_t	ppoll;			/* receive */
    363  410  kcpoon 	uchar_t	hpoll;			/* poll update */
    364    0  stevel 	short	precision;		/* receive */
    365    0  stevel 	struct	s_fixedpt distance;	/* receive */
    366    0  stevel 	struct	s_fixedpt dispersion;	/* receive */
    367  410  kcpoon 	ulong_t	refid;			/* receive */
    368    0  stevel 	struct	l_fixedpt reftime;	/* receive */
    369    0  stevel 	struct	l_fixedpt org;		/* receive, clear */
    370    0  stevel 	struct	l_fixedpt rec;		/* receive, clear */
    371    0  stevel 	struct	l_fixedpt xmt;		/* transmit, clear */
    372  410  kcpoon 	ulong_t	reach;			/* receive, transmit, clear */
    373  410  kcpoon 	ulong_t	valid;			/* packet, transmit, clear */
    374  410  kcpoon 	ulong_t	timer;			/* receive, transmit, poll update */
    375    0  stevel 	long	stopwatch;		/* <<local>> for timing */
    376    0  stevel 	/*
    377    0  stevel 	 * first order offsets
    378    0  stevel 	 */
    379    0  stevel 	struct	filter {
    380    0  stevel 		short samples;		/* <<local>> */
    381    0  stevel 		double offset[PEER_SHIFT];
    382    0  stevel 		double delay[PEER_SHIFT];
    383    0  stevel 	} filter;			/* filter, clear */
    384    0  stevel 
    385    0  stevel 	double	estdelay;		/* filter */
    386    0  stevel 	double	estoffset;		/* filter */
    387    0  stevel 	double	estdisp;		/* filter */
    388    0  stevel 
    389  410  kcpoon 	ulong_t	pkt_sent;		/* <<local>> */
    390  410  kcpoon 	ulong_t pkt_rcvd;		/* <<local>> */
    391  410  kcpoon 	ulong_t	pkt_dropped;		/* <<local>> */
    392    0  stevel };
    393    0  stevel 
    394    0  stevel /* ================= table 3.1:  System Variables ================= */
    395    0  stevel 
    396    0  stevel struct sysdata {			/* procedure */
    397  410  kcpoon 	uchar_t leap;			/* clock update */
    398  410  kcpoon 	uchar_t stratum;		/* clock update */
    399    0  stevel 	short precision;		/* system */
    400    0  stevel 	struct s_fixedpt distance;	/* clock update */
    401    0  stevel 	struct s_fixedpt dispersion;	/* clock update */
    402  410  kcpoon 	ulong_t refid;			/* clock update */
    403    0  stevel 	struct l_fixedpt reftime;	/* clock update */
    404    0  stevel 	int hold;			/* clock update */
    405    0  stevel 	struct ntp_peer *peer;		/* selection */
    406    0  stevel 	int maxpeers;			/* <<local>> */
    407  410  kcpoon 	uchar_t filler;			/* put here for %&*%$$ SUNs */
    408    0  stevel };
    409    0  stevel 
    410    0  stevel #define	NTPDC_VERSION	2
    411    0  stevel 
    412    0  stevel /*
    413    0  stevel  *  These structures are used to pass information to the ntpdc (control)
    414    0  stevel  *  program.  They are unique to this implementation and not part of the
    415    0  stevel  *  NTP specification.
    416    0  stevel  */
    417    0  stevel struct clockinfo {
    418  410  kcpoon 	ulong_t net_address;
    419  410  kcpoon 	ulong_t my_address;
    420  410  kcpoon 	ushort_t port;
    421  410  kcpoon 	ushort_t flags;
    422  410  kcpoon 	ulong_t pkt_sent;
    423  410  kcpoon 	ulong_t pkt_rcvd;
    424  410  kcpoon 	ulong_t pkt_dropped;
    425  410  kcpoon 	ulong_t timer;
    426  410  kcpoon 	uchar_t leap;
    427  410  kcpoon 	uchar_t stratum;
    428  410  kcpoon 	uchar_t ppoll;
    429    0  stevel 	int precision:8;
    430    0  stevel 
    431  410  kcpoon 	uchar_t hpoll;
    432  410  kcpoon 	uchar_t filler1;
    433  410  kcpoon 	ushort_t reach;
    434    0  stevel 
    435    0  stevel 	long	estdisp;			/* scaled by 1000 */
    436    0  stevel 	long	estdelay;			/* in milliseconds */
    437    0  stevel 	long	estoffset;			/* in milliseconds */
    438  410  kcpoon 	ulong_t refid;
    439    0  stevel 	struct l_fixedpt reftime;
    440    0  stevel 	struct info_filter {
    441    0  stevel 		short index;
    442    0  stevel 		short filler;
    443    0  stevel 		long offset[PEER_SHIFT];	/* in milliseconds */
    444    0  stevel 		long delay[PEER_SHIFT];		/* in milliseconds */
    445    0  stevel 	} info_filter;
    446    0  stevel };
    447    0  stevel 
    448    0  stevel struct ntpinfo {
    449  410  kcpoon 	uchar_t version;
    450  410  kcpoon 	uchar_t type;		/* request type (stratum in ntp packets) */
    451  410  kcpoon 	uchar_t count;		/* number of entries in this packet */
    452  410  kcpoon 	uchar_t seq;		/* sequence number of this packet */
    453    0  stevel 
    454  410  kcpoon 	uchar_t npkts;		/* total number of packets */
    455  410  kcpoon 	uchar_t peers;
    456  410  kcpoon 	uchar_t fill3;
    457  410  kcpoon 	uchar_t fill4;
    458    0  stevel };
    459    0  stevel 
    460    0  stevel /*
    461    0  stevel  * From usr/src/cmd/xntpd/include/ntp_control.h:
    462    0  stevel  * Definition of a mode 6 packet.
    463    0  stevel  */
    464    0  stevel struct ntp_control {
    465  410  kcpoon 	uchar_t li_vn_mode;		/* leap, version, mode */
    466  410  kcpoon 	uchar_t r_m_e_op;		/* response, more, error, opcode */
    467  410  kcpoon 	ushort_t sequence;		/* sequence number of request */
    468  410  kcpoon 	ushort_t status;		/* status word for association */
    469  410  kcpoon 	ushort_t associd;		/* association ID */
    470  410  kcpoon 	ushort_t offset;		/* offset of this batch of data */
    471  410  kcpoon 	ushort_t count;			/* count of data in this packet */
    472  410  kcpoon 	uchar_t data[1];		/* data + auth */
    473    0  stevel };
    474    0  stevel 
    475    0  stevel #define	NTPC_DATA_MAXLEN	(480 + AUTH_OCTETS_V3)
    476    0  stevel 
    477    0  stevel /*
    478    0  stevel  * Decoding for the r_m_e_op field
    479    0  stevel  */
    480    0  stevel #define	CTL_RESPONSE	0x80
    481    0  stevel #define	CTL_ERROR	0x40
    482    0  stevel #define	CTL_MORE	0x20
    483    0  stevel #define	CTL_OP_MASK	0x1f
    484    0  stevel 
    485    0  stevel /*
    486    0  stevel  * Opcodes
    487    0  stevel  */
    488    0  stevel #define	CTL_OP_UNSPEC		0
    489    0  stevel #define	CTL_OP_READSTAT		1
    490    0  stevel #define	CTL_OP_READVAR		2
    491    0  stevel #define	CTL_OP_WRITEVAR		3
    492    0  stevel #define	CTL_OP_READCLOCK	4
    493    0  stevel #define	CTL_OP_WRITECLOCK	5
    494    0  stevel #define	CTL_OP_SETTRAP		6
    495    0  stevel #define	CTL_OP_ASYNCMSG		7
    496    0  stevel #define	CTL_OP_UNSETTRAP	31
    497    0  stevel 
    498    0  stevel /*
    499    0  stevel  * From usr/src/cmd/xntpd/include/ntp_request.h:
    500    0  stevel  * A mode 7 packet is used exchanging data between an NTP server
    501    0  stevel  * and a client for purposes other than time synchronization, e.g.
    502    0  stevel  * monitoring, statistics gathering and configuration.  A mode 7
    503    0  stevel  * packet has the following format:
    504    0  stevel  */
    505    0  stevel 
    506    0  stevel struct ntp_private {
    507  410  kcpoon 	uchar_t rm_vn_mode;		/* response, more, version, mode */
    508  410  kcpoon 	uchar_t auth_seq;		/* key, sequence number */
    509  410  kcpoon 	uchar_t implementation;		/* implementation number */
    510  410  kcpoon 	uchar_t request;		/* request number */
    511  410  kcpoon 	ushort_t err_nitems;		/* error code/number of data items */
    512  410  kcpoon 	ushort_t mbz_itemsize;		/* item size */
    513    0  stevel 	char data[1];			/* data area */
    514    0  stevel };
    515    0  stevel 
    516    0  stevel #define	RESP_BIT		0x80
    517    0  stevel #define	MORE_BIT		0x40
    518  410  kcpoon #define	INFO_VERSION(rm_vn_mode) ((uchar_t)(((rm_vn_mode)>>3) & 0x7))
    519    0  stevel #define	INFO_MODE(rm_vn_mode)	((rm_vn_mode) & 0x7)
    520    0  stevel 
    521    0  stevel #define	AUTH_BIT		0x80
    522    0  stevel #define	INFO_SEQ(auth_seq)	((auth_seq) & 0x7f)
    523    0  stevel 
    524  410  kcpoon #define	INFO_ERR(err_nitems)	((ushort_t)((ntohs(err_nitems) >> 12) & 0xf))
    525  410  kcpoon #define	INFO_NITEMS(err_nitems)	((ushort_t)(ntohs(err_nitems) & 0xfff))
    526    0  stevel 
    527    0  stevel #define	INFO_ITEMSIZE(mbz_itemsize) (ntohs(mbz_itemsize) & 0xfff)
    528    0  stevel 
    529    0  stevel #ifdef __cplusplus
    530    0  stevel }
    531    0  stevel #endif
    532    0  stevel 
    533    0  stevel #endif	/* _NTP_H */
    534