summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 2fa4468)
raw | patch | inline | side by side (parent: 2fa4468)
author | octo <octo> | |
Sun, 28 May 2006 15:21:47 +0000 (15:21 +0000) | ||
committer | octo <octo> | |
Sun, 28 May 2006 15:21:47 +0000 (15:21 +0000) |
src/ntp_machine.h | [new file with mode: 0644] | patch | blob |
src/ntp_types.h | [new file with mode: 0644] | patch | blob |
diff --git a/src/ntp_machine.h b/src/ntp_machine.h
--- /dev/null
+++ b/src/ntp_machine.h
@@ -0,0 +1,596 @@
+/*
+ * Collect all machine dependent idiosyncrasies in one place.
+ */
+
+#ifndef __ntp_machine
+#define __ntp_machine
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#ifdef TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# ifdef HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif
+
+#include "ntp_proto.h"
+
+/*
+
+ HEY! CHECK THIS OUT!
+
+ The first half of this file is obsolete, and is only there to help
+ reconcile "what went before" with "current behavior".
+
+ The per-system SYS_* #defins ARE NO LONGER USED, with the temporary
+ exception of SYS_WINNT.
+
+ If you find a hunk of code that is bracketed by a SYS_* macro and you
+ *know* that it is still needed, please let us know. In many cases the
+ code fragment is now handled somewhere else by autoconf choices.
+
+*/
+
+/*
+
+INFO ON NEW KERNEL PLL SYS CALLS
+
+ NTP_SYSCALLS_STD - use the "normal" ones
+ NTP_SYSCALL_GET - SYS_ntp_gettime id
+ NTP_SYSCALL_ADJ - SYS_ntp_adjtime id
+ NTP_SYSCALLS_LIBC - ntp_adjtime() and ntp_gettime() are in libc.
+
+HOW TO GET IP INTERFACE INFORMATION
+
+ Some UNIX V.4 machines implement a sockets library on top of
+ streams. For these systems, you must use send the SIOCGIFCONF down
+ the stream in an I_STR ioctl. This ususally also implies
+ USE_STREAMS_DEVICE FOR IF_CONFIG. Dell UNIX is a notable exception.
+
+ STREAMS_TLI - use ioctl(I_STR) to implement ioctl(SIOCGIFCONF)
+
+WHAT DOES IOCTL(SIOCGIFCONF) RETURN IN THE BUFFER
+
+ UNIX V.4 machines implement a sockets library on top of streams.
+ When requesting the IP interface configuration with an ioctl(2) calll,
+ an array of ifreq structures are placed in the provided buffer. Some
+ implementations also place the length of the buffer information in
+ the first integer position of the buffer.
+
+ SIZE_RETURNED_IN_BUFFER - size integer is in the buffer
+
+WILL IOCTL(SIOCGIFCONF) WORK ON A SOCKET
+
+ Some UNIX V.4 machines do not appear to support ioctl() requests for the
+ IP interface configuration on a socket. They appear to require the use
+ of the streams device instead.
+
+ USE_STREAMS_DEVICE_FOR_IF_CONFIG - use the /dev/ip device for configuration
+
+MISC
+
+ HAVE_PROTOTYPES - Prototype functions
+ DOSYNCTODR - Resync TODR clock every hour.
+ RETSIGTYPE - Define signal function type.
+ NO_SIGNED_CHAR_DECL - No "signed char" see include/ntp.h
+ LOCK_PROCESS - Have plock.
+ UDP_WILDCARD_DELIVERY
+ - these systems deliver broadcast packets to the wildcard
+ port instead to a port bound to the interface bound
+ to the correct broadcast address - are these
+ implementations broken or did the spec change ?
+*/
+
+/*
+ * Set up for prototyping (duplicated from ntp_types.h)
+ */
+#ifndef P
+#if defined(__STDC__) || defined(HAVE_PROTOTYPES)
+#define P(x) x
+#else /* not __STDC__ and not HAVE_PROTOTYPES */
+#define P(x) ()
+#endif /* not __STDC__ and not HAVE_PROTOTYPES */
+#endif /* P */
+
+#if 0
+
+/*
+ * IRIX 4.X and IRIX 5.x
+ */
+#if defined(SYS_IRIX4)||defined(SYS_IRIX5)
+# define ADJTIME_IS_ACCURATE
+# define LOCK_PROCESS
+#endif
+
+/*
+ * Ultrix
+ * Note: posix version has NTP_POSIX_SOURCE and HAVE_SIGNALED_IO
+ */
+#if defined(SYS_ULTRIX)
+# define S_CHAR_DEFINED
+# define NTP_SYSCALLS_STD
+# define HAVE_MODEM_CONTROL
+#endif
+
+/*
+ * AUX
+ */
+#if defined(SYS_AUX2) || defined(SYS_AUX3)
+# define NO_SIGNED_CHAR_DECL
+# define LOCK_PROCESS
+# define NTP_POSIX_SOURCE
+/*
+ * This requires that _POSIX_SOURCE be forced on the
+ * compiler command flag. We can't do it here since this
+ * file is included _after_ the system header files and we
+ * need to let _them_ know we're POSIX. We do this in
+ * compilers/aux3.gcc...
+ */
+# define LOG_NTP LOG_LOCAL1
+#endif
+
+/*
+ * HPUX
+ */
+#if defined(SYS_HPUX)
+# define getdtablesize() sysconf(_SC_OPEN_MAX)
+# define setlinebuf(f) setvbuf(f, NULL, _IOLBF, 0)
+# define NO_SIGNED_CHAR_DECL
+# define LOCK_PROCESS
+#endif
+
+/*
+ * BSD/OS 2.0 and above
+ */
+#if defined(SYS_BSDI)
+# define USE_FSETOWNCTTY /* this funny system demands a CTTY for FSETOWN */
+#endif
+
+/*
+ * FreeBSD 2.0 and above
+ */
+#ifdef SYS_FREEBSD
+# define KERNEL_PLL
+#endif
+
+/*
+ * Linux
+ */
+#if defined(SYS_LINUX)
+# define ntp_adjtime __adjtimex
+#endif
+
+/*
+ * PTX
+ */
+#if defined(SYS_PTX)
+# define LOCK_PROCESS
+struct timezone { int __0; }; /* unused placebo */
+/*
+ * no comment !@!
+ */
+typedef unsigned int u_int;
+# ifndef _NETINET_IN_SYSTM_INCLUDED /* i am about to comment... */
+typedef unsigned char u_char;
+typedef unsigned short u_short;
+typedef unsigned long u_long;
+# endif
+#endif
+
+/*
+ * UNIX V.4 on and NCR 3000
+ */
+#if defined(SYS_SVR4)
+# define STREAM
+# define LOCK_PROCESS
+# define SIZE_RETURNED_IN_BUFFER
+#endif
+
+/*
+ * (Univel/Novell) Unixware1 SVR4 on intel x86 processor
+ */
+#if defined(SYS_UNIXWARE1)
+/* #define _POSIX_SOURCE */
+# define STREAM
+# define STREAMS
+# undef STEP_SLEW /* TWO step */
+# define LOCK_PROCESS
+# define SIZE_RETURNED_IN_BUFFER
+# include <sys/sockio.h>
+# include <sys/types.h>
+# include <netinet/in_systm.h>
+#endif
+
+/*
+ * DomainOS
+ */
+#if defined(SYS_DOMAINOS)
+# define NTP_SYSCALLS_STD
+/* older versions of domain/os don't have class D */
+# ifndef IN_CLASSD
+# define IN_CLASSD(i) (((long)(i) & 0xf0000000) == 0xe0000000)
+# define IN_CLASSD_NET 0xf0000000
+# define IN_CLASSD_NSHIFT 28
+# define IN_CLASSD_HOST 0xfffffff
+# define IN_MULTICAST(i) IN_CLASSD(i)
+# endif
+#endif
+
+/*
+ * Fujitsu UXP/V
+ */
+#if defined(SYS_UXPV)
+# define LOCK_PROCESS
+# define SIZE_RETURNED_IN_BUFFER
+#endif
+
+
+#endif /* 0 */
+
+/*
+ * Define these here for non-Windows NT systems
+ * SOCKET and INVALID_SOCKET are native macros
+ * on Windows NT and since they have different
+ * requirements we use them in the code and
+ * make them macros for everyone else
+ */
+#ifndef SYS_WINNT
+# define SOCKET int
+# define INVALID_SOCKET -1
+# define closesocket close
+#endif
+/*
+ * Windows NT
+ */
+#if defined(SYS_WINNT)
+# if !defined(HAVE_CONFIG_H) || !defined(__config)
+# include <config.h>
+# endif /* HAVE_CONFIG_H) */
+# include <windows.h>
+# include <ws2tcpip.h>
+# include <winsock2.h>
+
+# define ifreq _INTERFACE_INFO
+# define ifr_flags iiFlags
+# define ifr_addr iiAddress.AddressIn
+# define ifr_broadaddr iiBroadcastAddress.AddressIn
+# define ifr_mask iiNetmask.AddressIn
+# define zz_family sin_family
+
+# define S_IFREG _S_IFREG
+# define stat _stat
+# define isascii __isascii
+# define isatty _isatty
+# define mktemp _mktemp
+# define unlink _unlink
+# define fileno _fileno
+# define write _write
+# define vsnprintf _vsnprintf
+# define snprintf _snprintf
+#ifndef close
+# define close _close
+#endif
+# undef interface
+# include <process.h>
+#define getpid _getpid
+/*
+ * Defining registers are not a good idea on Windows
+ * This gets rid of the usage
+ */
+#ifndef register
+# define register
+#endif
+ typedef char *caddr_t;
+# define vsnprintf _vsnprintf
+#endif /* SYS_WINNT */
+
+int ntp_set_tod P((struct timeval *tvp, void *tzp));
+
+#if defined (SYS_CYGWIN32)
+#include <windows.h>
+#define __int64 long long
+#endif
+
+/*casey Tue May 27 15:45:25 SAT 1997*/
+#ifdef SYS_VXWORKS
+
+/* casey's new defines */
+#define NO_MAIN_ALLOWED 1
+#define NO_NETDB 1
+#define NO_RENAME 1
+
+/* in vxWorks we use FIONBIO, but the others are defined for old systems, so
+ * all hell breaks loose if we leave them defined we define USE_FIONBIO to
+ * undefine O_NONBLOCK FNDELAY O_NDELAY where necessary.
+ */
+#define USE_FIONBIO 1
+/* end my new defines */
+
+#define TIMEOFDAY 0x0 /* system wide realtime clock */
+#define HAVE_GETCLOCK 1 /* configure does not set this ... */
+#define HAVE_NO_NICE 1 /* configure does not set this ... */
+#define HAVE_RANDOM 1 /* configure does not set this ... */
+#define HAVE_SRANDOM 1 /* configure does not set this ... */
+
+#define NODETACH 1
+
+/* vxWorks specific additions to take care of its
+ * unix (non)complicance
+ */
+
+#include "vxWorks.h"
+#include "ioLib.h"
+#include "taskLib.h"
+#include "time.h"
+
+extern int sysClkRateGet P(());
+
+/* usrtime.h
+ * Bob Herlien's excellent time code find it at:
+ * ftp://ftp.atd.ucar.edu/pub/vxworks/vx/usrTime.shar
+ * I would recommend this instead of clock_[g|s]ettime() plus you get
+ * adjtime() too ... casey
+ */
+/*
+extern int gettimeofday P(( struct timeval *tp, struct timezone *tzp ));
+extern int settimeofday P((struct timeval *, struct timezone *));
+extern int adjtime P(( struct timeval *delta, struct timeval *olddelta ));
+ */
+
+/* in machines.c */
+extern void sleep P((int seconds));
+extern void alarm P((int seconds));
+/* machines.c */
+
+
+/* this is really this */
+#define getpid taskIdSelf
+#define getclock clock_gettime
+#define fcntl ioctl
+#define _getch getchar
+#define random rand
+#define srandom srand
+
+/* define this away for vxWorks */
+#define openlog(x,y)
+/* use local defines for these */
+#undef min
+#undef max
+
+#endif /* SYS_VXWORKS */
+
+#ifdef NO_NETDB
+/* These structures are needed for gethostbyname() etc... */
+/* structures used by netdb.h */
+struct hostent {
+ char *h_name; /* official name of host */
+ char **h_aliases; /* alias list */
+ int h_addrtype; /* host address type */
+ int h_length; /* length of address */
+ char **h_addr_list; /* list of addresses from name server */
+#define h_addr h_addr_list[0] /* address, for backward compatibility */
+};
+
+struct servent {
+ char *s_name; /* official service name */
+ char **s_aliases; /* alias list */
+ int s_port; /* port # */
+ char *s_proto; /* protocol to use */
+};
+extern int h_errno;
+
+#define TRY_AGAIN 2
+
+struct hostent *gethostbyname P((char * netnum));
+struct hostent *gethostbyaddr P((char * netnum, int size, int addr_type));
+/* type is the protocol */
+struct servent *getservbyname P((char *name, char *type));
+#endif /* NO_NETDB */
+
+#ifdef NO_MAIN_ALLOWED
+/* we have no main routines so lets make a plan */
+#define CALL(callname, progname, callmain) \
+ extern int callmain (int,char**); \
+ void callname (a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) \
+ char *a0; \
+ char *a1; \
+ char *a2; \
+ char *a3; \
+ char *a4; \
+ char *a5; \
+ char *a6; \
+ char *a7; \
+ char *a8; \
+ char *a9; \
+ char *a10; \
+ { \
+ char *x[11]; \
+ int argc; \
+ char *argv[] = {progname,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL}; \
+ int i; \
+ for (i=0;i<11;i++) \
+ x[i] = NULL; \
+ x[0] = a0; \
+ x[1] = a1; \
+ x[2] = a2; \
+ x[3] = a3; \
+ x[4] = a4; \
+ x[5] = a5; \
+ x[6] = a6; \
+ x[7] = a7; \
+ x[8] = a8; \
+ x[9] = a9; \
+ x[10] = a10; \
+ argc=1; \
+ for (i=0; i<11;i++) \
+ if (x[i]) \
+ { \
+ argv[argc++] = x[i]; \
+ } \
+ callmain(argc,argv); \
+ }
+#endif /* NO_MAIN_ALLOWED */
+/*casey Tue May 27 15:45:25 SAT 1997*/
+
+/*
+ * Here's where autoconfig starts to take over
+ */
+#ifdef HAVE_SYS_STROPTS_H
+# ifdef HAVE_SYS_STREAM_H
+# define STREAM
+# endif
+#endif
+
+#ifndef RETSIGTYPE
+# if defined(NTP_POSIX_SOURCE)
+# define RETSIGTYPE void
+# else
+# define RETSIGTYPE int
+# endif
+#endif
+
+#ifdef NTP_SYSCALLS_STD
+# ifndef NTP_SYSCALL_GET
+# define NTP_SYSCALL_GET 235
+# endif
+# ifndef NTP_SYSCALL_ADJ
+# define NTP_SYSCALL_ADJ 236
+# endif
+#endif /* NTP_SYSCALLS_STD */
+
+#ifdef MPE
+# include <sys/types.h>
+# include <netinet/in.h>
+# include <stdio.h>
+# include <time.h>
+
+/* missing functions that are easily renamed */
+
+# define _getch getchar
+
+/* special functions that require MPE-specific wrappers */
+
+# define bind __ntp_mpe_bind
+# define fcntl __ntp_mpe_fcntl
+
+/* standard macros missing from MPE include files */
+
+# define IN_CLASSD(i) ((((long)(i))&0xf0000000)==0xe0000000)
+# define IN_MULTICAST IN_CLASSD
+# define ITIMER_REAL 0
+# define MAXHOSTNAMELEN 64
+
+/* standard structures missing from MPE include files */
+
+struct itimerval {
+ struct timeval it_interval; /* timer interval */
+ struct timeval it_value; /* current value */
+};
+
+/* various declarations to make gcc stop complaining */
+
+extern int __filbuf(FILE *);
+extern int __flsbuf(int, FILE *);
+extern int gethostname(char *, int);
+extern unsigned long inet_addr(char *);
+extern char *strdup(const char *);
+
+/* miscellaneous NTP macros */
+
+# define HAVE_NO_NICE
+#endif /* MPE */
+
+#ifdef HAVE_RTPRIO
+# define HAVE_NO_NICE
+#else
+# ifdef HAVE_SETPRIORITY
+# define HAVE_BSD_NICE
+# else
+# ifdef HAVE_NICE
+# define HAVE_ATT_NICE
+# endif
+# endif
+#endif
+
+#if !defined(HAVE_ATT_NICE) \
+ && !defined(HAVE_BSD_NICE) \
+ && !defined(HAVE_NO_NICE) \
+ && !defined(SYS_WINNT)
+#include "ERROR: You must define one of the HAVE_xx_NICE defines!"
+#endif
+
+/*
+ * use only one tty model - no use in initialising
+ * a tty in three ways
+ * HAVE_TERMIOS is preferred over HAVE_SYSV_TTYS over HAVE_BSD_TTYS
+ */
+
+#ifdef HAVE_TERMIOS_H
+# define HAVE_TERMIOS
+#else
+# ifdef HAVE_TERMIO_H
+# define HAVE_SYSV_TTYS
+# else
+# ifdef HAVE_SGTTY_H
+# define HAVE_BSD_TTYS
+# endif
+# endif
+#endif
+
+#ifdef HAVE_TERMIOS
+# undef HAVE_BSD_TTYS
+# undef HAVE_SYSV_TTYS
+#endif
+
+#ifndef HAVE_TIMEGM
+extern time_t timegm P((struct tm *));
+#endif
+
+#ifdef HAVE_SYSV_TTYS
+# undef HAVE_BSD_TTYS
+#endif
+
+#if !defined(SYS_WINNT) && !defined(VMS) && !defined(SYS_VXWORKS)
+# if !defined(HAVE_SYSV_TTYS) \
+ && !defined(HAVE_BSD_TTYS) \
+ && !defined(HAVE_TERMIOS)
+#include "ERROR: no tty type defined!"
+# endif
+#endif /* SYS_WINNT || VMS || SYS_VXWORKS*/
+
+#ifdef WORDS_BIGENDIAN
+# define XNTP_BIG_ENDIAN 1
+#else
+# define XNTP_LITTLE_ENDIAN 1
+#endif
+
+/*
+ * Byte order woes.
+ * This used to be resolved by calling ntohl() and htonl() to swap things
+ * around, but this turned out to be quite costly on Vaxes where those
+ * things are actual functions. The code now straightens out byte
+ * order troubles on its own, with no performance penalty for little
+ * end first machines, but at great expense to cleanliness.
+ */
+#if !defined(XNTP_BIG_ENDIAN) && !defined(XNTP_LITTLE_ENDIAN)
+ /*
+ * Pick one or the other.
+ */
+ BYTE_ORDER_NOT_DEFINED_FOR_AUTHENTICATION
+#endif
+
+#if defined(XNTP_BIG_ENDIAN) && defined(XNTP_LITTLE_ENDIAN)
+ /*
+ * Pick one or the other.
+ */
+ BYTE_ORDER_NOT_DEFINED_FOR_AUTHENTICATION
+#endif
+
+#endif /* __ntp_machine */
diff --git a/src/ntp_types.h b/src/ntp_types.h
--- /dev/null
+++ b/src/ntp_types.h
@@ -0,0 +1,80 @@
+/*
+ * ntp_types.h - defines how int32 and u_int32 are treated.
+ * For 64 bit systems like the DEC Alpha, they have to be defined
+ * as int and u_int.
+ * For 32 bit systems, define them as long and u_long
+ */
+#include <sys/types.h>
+#include "ntp_machine.h"
+
+#ifndef _NTP_TYPES_
+#define _NTP_TYPES_
+
+/*
+ * This is another naming conflict.
+ * On NetBSD for MAC the macro "mac" is defined as 1
+ * this is fun for us as a packet structure contains an
+ * optional "mac" member - severe confusion results 8-)
+ * As we hopefully do not have to rely on that macro we
+ * just undefine that.
+ */
+#ifdef mac
+#undef mac
+#endif
+
+/*
+ * Set up for prototyping
+ */
+#ifndef P
+#if defined(__STDC__) || defined(HAVE_PROTOTYPES)
+#define P(x) x
+#else /* not __STDC__ and not HAVE_PROTOTYPES */
+#define P(x) ()
+#endif /* not __STDC__ and HAVE_PROTOTYPES */
+#endif /* P */
+
+/*
+ * VMS DECC (v4.1), {u_char,u_short,u_long} are only in SOCKET.H,
+ * and u_int isn't defined anywhere
+ */
+#if defined(VMS)
+#include <socket.h>
+typedef unsigned int u_int;
+/*
+ * Note: VMS DECC has long == int (even on __alpha),
+ * so the distinction below doesn't matter
+ */
+#endif /* VMS */
+
+#if (SIZEOF_INT == 4)
+# ifndef int32
+# define int32 int
+# endif
+# ifndef u_int32
+# define u_int32 unsigned int
+# endif
+#else /* not sizeof(int) == 4 */
+# if (SIZEOF_LONG == 4)
+# else /* not sizeof(long) == 4 */
+# ifndef int32
+# define int32 long
+# endif
+# ifndef u_int32
+# define u_int32 unsigned long
+# endif
+# endif /* not sizeof(long) == 4 */
+# include "Bletch: what's 32 bits on this machine?"
+#endif /* not sizeof(int) == 4 */
+
+typedef u_char ntp_u_int8_t;
+typedef u_short ntp_u_int16_t;
+typedef u_int32 ntp_u_int32_t;
+
+typedef struct ntp_uint64_t { u_int32 val[2]; } ntp_uint64_t;
+
+typedef unsigned short associd_t; /* association ID */
+typedef u_int32 keyid_t; /* cryptographic key ID */
+typedef u_int32 tstamp_t; /* NTP seconds timestamp */
+
+#endif /* _NTP_TYPES_ */
+