Code

Added `ntp_{types,machine}.h' from the NTPd distribution.
authorocto <octo>
Sun, 28 May 2006 15:21:47 +0000 (15:21 +0000)
committerocto <octo>
Sun, 28 May 2006 15:21:47 +0000 (15:21 +0000)
src/ntp_machine.h [new file with mode: 0644]
src/ntp_types.h [new file with mode: 0644]

diff --git a/src/ntp_machine.h b/src/ntp_machine.h
new file mode 100644 (file)
index 0000000..65ef5be
--- /dev/null
@@ -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
new file mode 100644 (file)
index 0000000..0b575c8
--- /dev/null
@@ -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_ */
+