summaryrefslogtreecommitdiffstats
path: root/usr.sbin/xntpd/include/ntp_refclock.h
diff options
context:
space:
mode:
Diffstat (limited to 'usr.sbin/xntpd/include/ntp_refclock.h')
-rw-r--r--usr.sbin/xntpd/include/ntp_refclock.h142
1 files changed, 142 insertions, 0 deletions
diff --git a/usr.sbin/xntpd/include/ntp_refclock.h b/usr.sbin/xntpd/include/ntp_refclock.h
new file mode 100644
index 0000000..96e63ac
--- /dev/null
+++ b/usr.sbin/xntpd/include/ntp_refclock.h
@@ -0,0 +1,142 @@
+/*
+ * ntp_refclock.h - definitions for reference clock support
+ */
+
+#include "ntp_types.h"
+
+#if !defined(SYSV_TTYS) && !defined(STREAM) & !defined(BSD_TTYS)
+#define BSD_TTYS
+#endif /* SYSV_TTYS STREAM BSD_TTYS */
+
+/*
+ * 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
+ * see lib/clocktypes.c (must also agree with xntpd/refclock_conf.c)
+ */
+struct clktype {
+ int code; /* driver "major" number */
+ char *clocktype; /* LONG description */
+ char *abbrev; /* short description */
+};
+
+/*
+ * Definitions for default values
+ */
+#define noentry 0 /* flag for null routine */
+
+/*
+ * Definitions for flags
+ */
+#define NOFLAGS 0
+#define REF_FLAG_BCLIENT 0x1 /* clock prefers to run as a bclient */
+
+/*
+ * 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
+
+/*
+ * Structure for returning clock status
+ */
+struct refclockstat {
+ u_char type;
+ u_char flags;
+ u_char haveflags;
+ u_short lencode; /* ahem, we do have some longer "time-codes" */
+ char *lastcode;
+ U_LONG polls;
+ U_LONG noresponse;
+ U_LONG badformat;
+ U_LONG baddata;
+ U_LONG timereset;
+ char *clockdesc; /* description of clock, in ASCII */
+ l_fp fudgetime1;
+ l_fp fudgetime2;
+ LONG fudgeval1;
+ LONG fudgeval2;
+ u_char currentstatus;
+ u_char lastevent;
+ u_char unused[1];
+};
+
+
+/*
+ * 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;
+ void (*clock_recv)();
+ caddr_t srcclock; /* pointer to clock structure */
+ int datalen;
+ int fd;
+ U_LONG recvcount;
+};
+
+
+/*
+ * Sizes of things we return for debugging
+ */
+#define NCLKBUGVALUES 16
+#define NCLKBUGTIMES 32
+
+/*
+ * Structure for returning debugging info
+ */
+struct refclockbug {
+ u_char nvalues;
+ u_char ntimes;
+ u_short svalues;
+ U_LONG stimes;
+ U_LONG values[NCLKBUGVALUES];
+ l_fp times[NCLKBUGTIMES];
+};
+
+/*
+ * Struct refclock provides the interface between the reference
+ * clock support and particular clock drivers. There are entries
+ * to open and close a unit, optional values to specify the
+ * timer interval for calls to the transmit procedure and to
+ * specify a polling routine to be called when the transmit
+ * procedure executes. There is an entry which is called when
+ * the transmit routine is about to shift zeroes into the
+ * filter register, and entries for stuffing fudge factors into
+ * the driver and getting statistics from it.
+ */
+struct refclock {
+ int (*clock_start) P((u_int, struct peer *)); /* start a clock unit */
+ void (*clock_shutdown) P((int)); /* shut a clock down */
+ void (*clock_poll) P((int, struct peer *)); /* called from the xmit routine */
+ void (*clock_control) P((u_int, struct refclockstat *, struct refclockstat *)); /* set fudge values, return stats */
+ void (*clock_init) P((void)); /* initialize driver data at startup */
+ void (*clock_buginfo) P((int, struct refclockbug *)); /* get clock dependent bug info */
+ U_LONG clock_flags; /* flag values */
+};
+
+extern int io_addclock_simple P((struct refclockio *));
+extern int io_addclock P((struct refclockio *));
+extern void io_closeclock P((struct refclockio *));
+
+#ifdef REFCLOCK
+extern void refclock_buginfo P((struct sockaddr_in *, struct refclockbug *));
+extern void refclock_control P((struct sockaddr_in *, struct refclockstat *, struct refclockstat *));
+#endif /* REFCLOCK */
OpenPOWER on IntegriCloud