/contrib/ntp/include/ntp_machine.h
https://bitbucket.org/freebsd/freebsd-head/ · C++ Header · 590 lines · 330 code · 75 blank · 185 comment · 19 complexity · 505f92b9df38643232a1405930b4320b MD5 · raw file
- /*
- * 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.
- 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.
- */
- /*
- * 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 !defined(HAVE_NTP_ADJTIME) && defined(HAVE___ADJTIMEX)
- # define ntp_adjtime __adjtimex
- #endif
- #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 SOCKET_ERROR -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
- #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 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 */