File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / ntp / ntpdate / ntpdate.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 ago) by misho
Branches: ntp, MAIN
CVS tags: v4_2_6p5p0, v4_2_6p5, HEAD
ntp 4.2.6p5

    1: /*
    2:  * ntpdate.h - declarations for the ntpdate and ntptimeset programs
    3:  */
    4: 
    5: #include "ntp_malloc.h"
    6: 
    7: extern void	loadservers	(char *cfgpath);
    8: 
    9: /*
   10:  * The server structure is a much simplified version of the
   11:  * peer structure, for ntpdate's use.  Since we always send
   12:  * in client mode and expect to receive in server mode, this
   13:  * leaves only a very limited number of things we need to
   14:  * remember about the server.
   15:  */
   16: struct server {
   17: 	struct server *next_server;	/* next server in build list */
   18: 	sockaddr_u srcadr;		/* address of remote host */
   19: 	u_char version;			/* version to use */
   20: 	u_char leap;			/* leap indicator */
   21: 	u_char stratum;			/* stratum of remote server */
   22: 	s_char precision;		/* server's clock precision */
   23: 	u_char trust;			/* trustability of the filtered data */
   24: 	u_fp rootdelay;			/* distance from primary clock */
   25: 	u_fp rootdisp;			/* peer clock dispersion */
   26: 	u_int32 refid;			/* peer reference ID */
   27: 	l_fp reftime;			/* time of peer's last update */
   28: 	u_long event_time;		/* time for next timeout */
   29: 	u_long last_xmit;		/* time of last transmit */
   30: 	u_short xmtcnt;			/* number of packets transmitted */
   31: 	u_short rcvcnt;			/* number of packets received */
   32: 	u_char reach;			/* reachability, NTP_WINDOW bits */
   33: 	u_short filter_nextpt;		/* index into filter shift register */
   34: 	s_fp filter_delay[NTP_SHIFT];	/* delay part of shift register */
   35: 	l_fp filter_offset[NTP_SHIFT];	/* offset part of shift register */
   36: 	s_fp filter_soffset[NTP_SHIFT]; /* offset in s_fp format, for disp */
   37: 	u_fp filter_error[NTP_SHIFT];	/* error part of shift register */
   38: 	l_fp org;			/* peer's originate time stamp */
   39: 	l_fp xmt;			/* transmit time stamp */
   40: 	u_fp delay;			/* filter estimated delay */
   41: 	u_fp dispersion;		/* filter estimated dispersion */
   42: 	l_fp offset;			/* filter estimated clock offset */
   43: 	s_fp soffset;			/* fp version of above */
   44: };
   45: 
   46: 
   47: /*
   48:  * ntpdate runs everything on a simple, short timeout.  It sends a
   49:  * packet and sets the timeout (by default, to a small value suitable
   50:  * for a LAN).  If it receives a response it sends another request.
   51:  * If it times out it shifts zeroes into the filter and sends another
   52:  * request.
   53:  *
   54:  * The timer routine is run often (once every 1/5 second currently)
   55:  * so that time outs are done with reasonable precision.
   56:  */
   57: #define TIMER_HZ	(5)		/* 5 per second */
   58: 
   59: /*
   60:  * ntpdate will make a long adjustment using adjtime() if the times
   61:  * are close, or step the time if the times are farther apart.  The
   62:  * following defines what is "close".
   63:  */
   64: #define	NTPDATE_THRESHOLD	(FP_SECOND >> 1)	/* 1/2 second */
   65: 
   66: #define NTP_MAXAGE	86400	/* one day in seconds */
   67: 
   68: /*
   69:  * When doing adjustments, ntpdate actually overadjusts (currently
   70:  * by 50%, though this may change).  While this will make it take longer
   71:  * to reach a steady state condition, it will typically result in
   72:  * the clock keeping more accurate time, on average.  The amount of
   73:  * overshoot is limited.
   74:  */
   75: #ifdef	NOTNOW
   76: #define	ADJ_OVERSHOOT	1/2	/* this is hard coded */
   77: #endif	/* NOTNOW */
   78: #define	ADJ_MAXOVERSHOOT	0x10000000	/* 50 ms as a ts fraction */
   79: 
   80: /*
   81:  * Since ntpdate isn't aware of some of the things that normally get
   82:  * put in an NTP packet, we fix some values.
   83:  */
   84: #define	NTPDATE_PRECISION	(-6)		/* use this precision */
   85: #define	NTPDATE_DISTANCE	FP_SECOND	/* distance is 1 sec */
   86: #define	NTPDATE_DISP		FP_SECOND	/* so is the dispersion */
   87: #define	NTPDATE_REFID		(0)		/* reference ID to use */
   88: #define PEER_MAXDISP	(64*FP_SECOND)	/* maximum dispersion (fp 64) */
   89: 
   90: 
   91: /*
   92:  * Some defaults
   93:  */
   94: #define	MINTIMEOUT	(2 * TIMER_HZ)	/* 2s min. between packets */
   95: #define	DEFTIMEOUT	MINTIMEOUT	/*   (to the same server) */
   96: #define	DEFSAMPLES	4		/* get 4 samples per server */
   97: #define	DEFPRECISION	(-5)		/* the precision we claim */
   98: #define	DEFMAXPERIOD	60		/* maximum time to wait */
   99: #define	DEFMINSERVERS	3		/* minimum responding servers */
  100: #define	DEFMINVALID	1		/* mimimum servers with valid time */
  101: 
  102: /*
  103:  * Define the max number of sockets we can open
  104:  */
  105: #define MAX_AF 2

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