📄 ntp_refclock.h
字号:
/* * ntp_refclock.h - definitions for reference clock support */#ifndef NTP_REFCLOCK_H#define NTP_REFCLOCK_H#include "ntp_types.h"#if defined(HAVE_BSD_TTYS)#include <sgtty.h>#endif /* HAVE_BSD_TTYS */#if defined(HAVE_SYSV_TTYS)#include <termio.h>#endif /* HAVE_SYSV_TTYS */#if defined(HAVE_TERMIOS)# ifdef TERMIOS_NEEDS__SVID3# define _SVID3# endif# include <termios.h># ifdef TERMIOS_NEEDS__SVID3# undef _SVID3# endif#endif#if defined(HAVE_SYS_MODEM_H)#include <sys/modem.h>#endif#if 0 /* If you need that, include ntp_io.h instead */#if defined(STREAM)#include <stropts.h>#if defined(CLK) /* This is never defined, except perhaps by a system header file */#include <sys/clkdefs.h>#endif /* CLK */#endif /* STREAM */#endif#include "recvbuff.h"#if !defined(SYSV_TTYS) && !defined(STREAM) & !defined(BSD_TTYS)#define BSD_TTYS#endif /* SYSV_TTYS STREAM BSD_TTYS */#define SAMPLE(x) pp->coderecv = (pp->coderecv + 1) % MAXSTAGE; \ pp->filter[pp->coderecv] = (x); \ if (pp->coderecv == pp->codeproc) \ pp->codeproc = (pp->codeproc + 1) % MAXSTAGE;/* * Macros to determine the clock type and unit numbers from a * 127.127.t.u address */#define REFCLOCKTYPE(srcadr) ((SRCADR(srcadr) >> 8) & 0xff)#define REFCLOCKUNIT(srcadr) (SRCADR(srcadr) & 0xff)/* * List of reference clock names and descriptions. These must agree with * lib/clocktypes.c and ntpd/refclock_conf.c. */struct clktype { int code; /* driver "major" number */ const char *clocktype; /* long description */ const char *abbrev; /* short description */};extern struct clktype clktypes[];/* * Configuration flag values */#define CLK_HAVETIME1 0x1#define CLK_HAVETIME2 0x2#define CLK_HAVEVAL1 0x4#define CLK_HAVEVAL2 0x8#define CLK_FLAG1 0x1#define CLK_FLAG2 0x2#define CLK_FLAG3 0x4#define CLK_FLAG4 0x8#define CLK_HAVEFLAG1 0x10#define CLK_HAVEFLAG2 0x20#define CLK_HAVEFLAG3 0x40#define CLK_HAVEFLAG4 0x80/* * Constant for disabling event reporting in * refclock_receive. ORed in leap * parameter */#define REFCLOCK_OWN_STATES 0x80/* * Structure for returning clock status */struct refclockstat { u_char type; /* clock type */ u_char flags; /* clock flags */ u_char haveflags; /* bit array of valid flags */ u_short lencode; /* length of last timecode */ const char *p_lastcode; /* last timecode received */ u_int32 polls; /* transmit polls */ u_int32 noresponse; /* no response to poll */ u_int32 badformat; /* bad format timecode received */ u_int32 baddata; /* invalid data timecode received */ u_int32 timereset; /* driver resets */ const char *clockdesc; /* ASCII description */ double fudgetime1; /* configure fudge time1 */ double fudgetime2; /* configure fudge time2 */ int32 fudgeval1; /* configure fudge value1 */ int32 fudgeval2; /* configure fudge value2 */ u_char currentstatus; /* clock status */ u_char lastevent; /* last exception event */ u_char leap; /* leap bits */ struct ctl_var *kv_list; /* additional variables */};/* * Reference clock I/O structure. Used to provide an interface between * the reference clock drivers and the I/O module. */struct refclockio { struct refclockio *next; /* link to next structure */ void (*clock_recv) P((struct recvbuf *)); /* completion routine */ int (*io_input) P((struct recvbuf *)); /* input routine - to avoid excessive buffer use due to small bursts of refclock input data */ caddr_t srcclock; /* pointer to clock structure */ int datalen; /* lenth of data */ SOCKET fd; /* file descriptor */ u_long recvcount; /* count of receive completions */};/* * Structure for returning debugging info */#define NCLKBUGVALUES 16#define NCLKBUGTIMES 32struct refclockbug { u_char nvalues; /* values following */ u_char ntimes; /* times following */ u_short svalues; /* values format sign array */ u_int32 stimes; /* times format sign array */ u_int32 values[NCLKBUGVALUES]; /* real values */ l_fp times[NCLKBUGTIMES]; /* real times */};/* * Structure interface between the reference clock support * ntp_refclock.c and the driver utility routines */#define MAXSTAGE 60 /* max median filter stages */#define NSTAGE 5 /* default median filter stages */#define BMAX 128 /* max timecode length */#define GMT 0 /* I hope nobody sees this */#define MAXDIAL 60 /* max length of modem dial strings *//* * Line discipline flags. These require line discipline or streams * modules to be installed/loaded in the kernel. If specified, but not * installed, the code runs as if unspecified. */#define LDISC_STD 0x00 /* standard */#define LDISC_CLK 0x01 /* tty_clk \n intercept */#define LDISC_CLKPPS 0x02 /* tty_clk \377 intercept */#define LDISC_ACTS 0x04 /* tty_clk #* intercept */#define LDISC_CHU 0x08 /* depredated */#define LDISC_PPS 0x10 /* ppsclock, ppsapi */#define LDISC_RAW 0x20 /* raw binary */#define LDISC_ECHO 0x40 /* enable echo */#define LDISC_REMOTE 0x80 /* remote mode */#define LDISC_7O1 0x100 /* 7-bit, odd parity for Z3801A */struct refclockproc { struct refclockio io; /* I/O handler structure */ caddr_t unitptr; /* pointer to unit structure */ u_char leap; /* leap/synchronization code */ u_char currentstatus; /* clock status */ u_char lastevent; /* last exception event */ u_char type; /* clock type */ const char *clockdesc; /* clock description */ char a_lastcode[BMAX]; /* last timecode received */ u_short lencode; /* length of last timecode */ int year; /* year of eternity */ int day; /* day of year */ int hour; /* hour of day */ int minute; /* minute of hour */ int second; /* second of minute */ long nsec; /* nanosecond of second */ u_long yearstart; /* beginning of year */ int coderecv; /* put pointer */ int codeproc; /* get pointer */ l_fp lastref; /* reference timestamp */ l_fp lastrec; /* receive timestamp */ double offset; /* mean offset */ double disp; /* sample dispersion */ double jitter; /* jitter (mean squares) */ double filter[MAXSTAGE]; /* median filter */ /* * Configuration data */ double fudgetime1; /* fudge time1 */ double fudgetime2; /* fudge time2 */ u_char stratum; /* server stratum */ u_int32 refid; /* reference identifier */ u_char sloppyclockflag; /* fudge flags */ /* * Status tallies */ u_long timestarted; /* time we started this */ u_long polls; /* polls sent */ u_long noreply; /* no replies to polls */ u_long badformat; /* bad format reply */ u_long baddata; /* bad data reply */};/* * Structure interface between the reference clock support * ntp_refclock.c and particular clock drivers. This must agree with the * structure defined in the driver. */#define noentry 0 /* flag for null routine */#define NOFLAGS 0 /* flag for null flags */struct refclock { int (*clock_start) P((int, struct peer *)); void (*clock_shutdown) P((int, struct peer *)); void (*clock_poll) P((int, struct peer *)); void (*clock_control) P((int, struct refclockstat *, struct refclockstat *, struct peer *)); void (*clock_init) P((void)); void (*clock_buginfo) P((int, struct refclockbug *, struct peer *)); void (*clock_timer) P((int, struct peer *));};/* * Function prototypes *//* * auxiliary PPS interface (implemented by refclock_atom()) */extern int pps_sample P((l_fp *));extern int io_addclock_simple P((struct refclockio *));extern int io_addclock P((struct refclockio *));extern void io_closeclock P((struct refclockio *));#ifdef REFCLOCKextern void refclock_buginfo P((struct sockaddr_storage *, struct refclockbug *));extern void refclock_control P((struct sockaddr_storage *, struct refclockstat *, struct refclockstat *));extern int refclock_open P((char *, u_int, u_int));extern int refclock_setup P((int, u_int, u_int));extern void refclock_timer P((struct peer *));extern void refclock_transmit P((struct peer *));extern int refclock_ioctl P((int, u_int));extern int refclock_process P((struct refclockproc *));extern void refclock_process_offset P((struct refclockproc *, l_fp, l_fp, double));extern void refclock_report P((struct peer *, int));extern int refclock_gtlin P((struct recvbuf *, char *, int, l_fp *));extern int refclock_gtraw P((struct recvbuf *, char *, int, l_fp *));#endif /* REFCLOCK */#endif /* NTP_REFCLOCK_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -