File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / ntp / include / ntp_machine.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue May 29 12:08:38 2012 UTC (12 years, 1 month ago) by misho
Branches: ntp, MAIN
CVS tags: v4_2_6p5p0, v4_2_6p5, HEAD
ntp 4.2.6p5

    1: /*
    2:  * Collect all machine dependent idiosyncrasies in one place.
    3:  */
    4: 
    5: #ifndef NTP_MACHINE_H
    6: #define NTP_MACHINE_H
    7: 
    8: #ifdef HAVE_CONFIG_H
    9: # include <config.h>
   10: #endif
   11: 
   12: #ifdef TIME_WITH_SYS_TIME
   13: # include <sys/time.h>
   14: # include <time.h>
   15: #else
   16: # ifdef HAVE_SYS_TIME_H
   17: #  include <sys/time.h>
   18: # else
   19: #  include <time.h>
   20: # endif
   21: #endif
   22: 
   23: #include "ntp_proto.h"
   24: 
   25: /*
   26: 
   27: 			 HEY!  CHECK THIS OUT!
   28: 
   29:   The first half of this file is obsolete, and is only there to help
   30:   reconcile "what went before" with "current behavior".
   31: 
   32:   The per-system SYS_* #defins ARE NO LONGER USED, with the temporary
   33:   exception of SYS_WINNT.
   34: 
   35:   If you find a hunk of code that is bracketed by a SYS_* macro and you
   36:   *know* that it is still needed, please let us know.  In many cases the
   37:   code fragment is now handled somewhere else by autoconf choices.
   38: 
   39: */
   40: 
   41: /*
   42: 
   43: INFO ON NEW KERNEL PLL SYS CALLS
   44: 
   45:   NTP_SYSCALLS_STD	- use the "normal" ones
   46:   NTP_SYSCALL_GET	- SYS_ntp_gettime id
   47:   NTP_SYSCALL_ADJ	- SYS_ntp_adjtime id
   48:   NTP_SYSCALLS_LIBC - ntp_adjtime() and ntp_gettime() are in libc.
   49: 
   50: HOW TO GET IP INTERFACE INFORMATION
   51: 
   52:   Some UNIX V.4 machines implement a sockets library on top of
   53:   streams. For these systems, you must use send the SIOCGIFCONF down
   54:   the stream in an I_STR ioctl. This ususally also implies
   55:   USE_STREAMS_DEVICE FOR IF_CONFIG. Dell UNIX is a notable exception.
   56: 
   57: WHAT DOES IOCTL(SIOCGIFCONF) RETURN IN THE BUFFER
   58: 
   59:   UNIX V.4 machines implement a sockets library on top of streams.
   60:   When requesting the IP interface configuration with an ioctl(2) calll,
   61:   an array of ifreq structures are placed in the provided buffer.  Some
   62:   implementations also place the length of the buffer information in
   63:   the first integer position of the buffer.
   64: 
   65:   SIZE_RETURNED_IN_BUFFER - size integer is in the buffer
   66: 
   67: WILL IOCTL(SIOCGIFCONF) WORK ON A SOCKET
   68: 
   69:   Some UNIX V.4 machines do not appear to support ioctl() requests for the
   70:   IP interface configuration on a socket.  They appear to require the use
   71:   of the streams device instead.
   72: 
   73:   USE_STREAMS_DEVICE_FOR_IF_CONFIG - use the /dev/ip device for configuration
   74: 
   75: MISC
   76: 
   77:   DOSYNCTODR		- Resync TODR clock  every hour.
   78:   RETSIGTYPE		- Define signal function type.
   79:   NO_SIGNED_CHAR_DECL - No "signed char" see include/ntp.h
   80:   LOCK_PROCESS		- Have plock.
   81: */
   82: 
   83: #if !defined(HAVE_NTP_ADJTIME) && defined(HAVE___ADJTIMEX)
   84: # define ntp_adjtime __adjtimex
   85: #endif
   86: 
   87: #if 0
   88: 
   89: /*
   90:  * IRIX 4.X and IRIX 5.x
   91:  */
   92: #if defined(SYS_IRIX4)||defined(SYS_IRIX5)
   93: # define ADJTIME_IS_ACCURATE
   94: # define LOCK_PROCESS
   95: #endif
   96: 
   97: /*
   98:  * Ultrix
   99:  * Note: posix version has NTP_POSIX_SOURCE and HAVE_SIGNALED_IO
  100:  */
  101: #if defined(SYS_ULTRIX)
  102: # define S_CHAR_DEFINED
  103: # define NTP_SYSCALLS_STD
  104: # define HAVE_MODEM_CONTROL
  105: #endif
  106: 
  107: /*
  108:  * AUX
  109:  */
  110: #if defined(SYS_AUX2) || defined(SYS_AUX3)
  111: # define NO_SIGNED_CHAR_DECL
  112: # define LOCK_PROCESS
  113: # define NTP_POSIX_SOURCE
  114: /*
  115:  * This requires that _POSIX_SOURCE be forced on the
  116:  * compiler command flag. We can't do it here since this
  117:  * file is included _after_ the system header files and we
  118:  * need to let _them_ know we're POSIX. We do this in
  119:  * compilers/aux3.gcc...
  120:  */
  121: # define LOG_NTP LOG_LOCAL1
  122: #endif
  123: 
  124: /*
  125:  * HPUX
  126:  */
  127: #if defined(SYS_HPUX)
  128: # define getdtablesize() sysconf(_SC_OPEN_MAX)
  129: # define setlinebuf(f) setvbuf(f, NULL, _IOLBF, 0)
  130: # define NO_SIGNED_CHAR_DECL
  131: # define LOCK_PROCESS
  132: #endif
  133: 
  134: /*
  135:  * BSD/OS 2.0 and above
  136:  */
  137: #if defined(SYS_BSDI)
  138: # define USE_FSETOWNCTTY	/* this funny system demands a CTTY for FSETOWN */
  139: #endif
  140: 
  141: /*
  142:  * FreeBSD 2.0 and above
  143:  */
  144: #ifdef SYS_FREEBSD
  145: # define KERNEL_PLL
  146: #endif
  147: 
  148: /*
  149:  * Linux
  150:  */
  151: #if defined(SYS_LINUX)
  152: # define ntp_adjtime __adjtimex
  153: #endif
  154: 
  155: /*
  156:  * PTX
  157:  */
  158: #if defined(SYS_PTX)
  159: # define LOCK_PROCESS
  160: struct timezone { int __0; };	/* unused placebo */
  161: /*
  162:  * no comment !@!
  163:  */
  164: typedef unsigned int u_int;
  165: # ifndef	_NETINET_IN_SYSTM_INCLUDED	/* i am about to comment... */
  166: typedef unsigned char u_char;
  167: typedef unsigned short u_short;
  168: typedef unsigned long u_long;
  169: # endif
  170: #endif
  171: 
  172: /*
  173:  * UNIX V.4 on and NCR 3000
  174:  */
  175: #if defined(SYS_SVR4)
  176: # define STREAM
  177: # define LOCK_PROCESS
  178: # define SIZE_RETURNED_IN_BUFFER
  179: #endif
  180: 
  181: /*
  182:  * (Univel/Novell) Unixware1 SVR4 on intel x86 processor
  183:  */
  184: #if defined(SYS_UNIXWARE1)
  185: /* #define _POSIX_SOURCE */
  186: # define STREAM
  187: # define STREAMS
  188: # undef STEP_SLEW		/* TWO step */
  189: # define LOCK_PROCESS
  190: # define SIZE_RETURNED_IN_BUFFER
  191: # include <sys/sockio.h>
  192: # include <sys/types.h>
  193: # include <netinet/in_systm.h>
  194: #endif
  195: 
  196: /*
  197:  * DomainOS
  198:  */
  199: #if defined(SYS_DOMAINOS)
  200: # define NTP_SYSCALLS_STD
  201: /* older versions of domain/os don't have class D */
  202: # ifndef IN_CLASSD
  203: #  define IN_CLASSD(i)		(((long)(i) & 0xf0000000) == 0xe0000000)
  204: #  define IN_CLASSD_NET 	0xf0000000
  205: #  define IN_CLASSD_NSHIFT	28
  206: #  define IN_CLASSD_HOST	0xfffffff
  207: #  define IN_MULTICAST(i)	IN_CLASSD(i)
  208: # endif
  209: #endif
  210: 
  211: /*
  212:  * Fujitsu UXP/V
  213:  */
  214: #if defined(SYS_UXPV)
  215: # define LOCK_PROCESS
  216: # define SIZE_RETURNED_IN_BUFFER
  217: #endif
  218: 
  219: 
  220: #endif /* 0 */
  221: 
  222: /*
  223:  * Define these here for non-Windows NT systems
  224:  * SOCKET and INVALID_SOCKET are native macros
  225:  * on Windows NT and since they have different
  226:  * requirements we use them in the code and
  227:  * make them macros for everyone else
  228:  */
  229: #ifndef SYS_WINNT
  230: typedef int SOCKET;
  231: # define INVALID_SOCKET	-1
  232: # define SOCKET_ERROR	-1
  233: # define socket_errno()		(errno)
  234: # define closesocket(fd)	close(fd)
  235: #else	/* SYS_WINNT follows */
  236: # define socket_errno()		(errno = WSAGetLastError())
  237: #endif
  238: 
  239: int ntp_set_tod (struct timeval *tvp, void *tzp);
  240: 
  241: #if defined (SYS_CYGWIN32)
  242: #include <windows.h>
  243: #define __int64 long long
  244: #endif
  245: 
  246: /*casey Tue May 27 15:45:25 SAT 1997*/
  247: #ifdef SYS_VXWORKS
  248: 
  249: /* casey's new defines */
  250: #define NO_MAIN_ALLOWED 	1
  251: #define NO_NETDB			1
  252: #define NO_RENAME			1
  253: 
  254: /* in vxWorks we use FIONBIO, but the others are defined for old systems, so
  255:  * all hell breaks loose if we leave them defined we define USE_FIONBIO to
  256:  * undefine O_NONBLOCK FNDELAY O_NDELAY where necessary.
  257:  */
  258: #define USE_FIONBIO 		1
  259: /* end my new defines */
  260: 
  261: #define TIMEOFDAY		0x0 	/* system wide realtime clock */
  262: #define HAVE_GETCLOCK		1	/* configure does not set this ... */
  263: #define HAVE_NO_NICE		1	/* configure does not set this ... */
  264: #define HAVE_RANDOM		1	/* configure does not set this ...  */
  265: #define HAVE_SRANDOM		1	/* configure does not set this ... */
  266: 
  267: #define NODETACH		1
  268: 
  269: /* vxWorks specific additions to take care of its
  270:  * unix (non)complicance
  271:  */
  272: 
  273: #include "vxWorks.h"
  274: #include "ioLib.h"
  275: #include "taskLib.h"
  276: #include "time.h"
  277: 
  278: extern int sysClkRateGet ();
  279: 
  280: /* usrtime.h
  281:  * Bob Herlien's excellent time code find it at:
  282:  * ftp://ftp.atd.ucar.edu/pub/vxworks/vx/usrTime.shar
  283:  * I would recommend this instead of clock_[g|s]ettime() plus you get
  284:  * adjtime() too ... casey
  285:  */
  286: /*
  287: extern int	  gettimeofday ( struct timeval *tp, struct timezone *tzp );
  288: extern int	  settimeofday (struct timeval *, struct timezone *);
  289: extern int	  adjtime ( struct timeval *delta, struct timeval *olddelta );
  290:  */
  291: 
  292: /* in  machines.c */
  293: extern void sleep (int seconds);
  294: extern void alarm (int seconds);
  295: /* machines.c */
  296: 
  297: 
  298: /*		this is really this 	*/
  299: #define getpid		taskIdSelf
  300: #define getclock	clock_gettime
  301: #define fcntl		ioctl
  302: #define _getch		getchar
  303: 
  304: /* define this away for vxWorks */
  305: #define openlog(x,y)
  306: /* use local defines for these */
  307: #undef min
  308: #undef max
  309: 
  310: #endif /* SYS_VXWORKS */
  311: 
  312: #ifdef NO_NETDB
  313: /* These structures are needed for gethostbyname() etc... */
  314: /* structures used by netdb.h */
  315: struct	hostent {
  316: 	char	*h_name;				/* official name of host */
  317: 	char	**h_aliases;			/* alias list */
  318: 	int h_addrtype; 				/* host address type */
  319: 	int h_length;					/* length of address */
  320: 	char	**h_addr_list;			/* list of addresses from name server */
  321: #define 	h_addr h_addr_list[0]	/* address, for backward compatibility */
  322: };
  323: 
  324: struct	servent {
  325: 	char	*s_name;				/* official service name */
  326: 	char	**s_aliases;			/* alias list */
  327: 	int s_port; 					/* port # */
  328: 	char	*s_proto;				/* protocol to use */
  329: };
  330: extern int h_errno;
  331: 
  332: #define TRY_AGAIN	2
  333: 
  334: struct hostent *gethostbyname (char * netnum);
  335: struct hostent *gethostbyaddr (char * netnum, int size, int addr_type);
  336: /* type is the protocol */
  337: struct servent *getservbyname (char *name, char *type);
  338: #endif	/* NO_NETDB */
  339: 
  340: #ifdef NO_MAIN_ALLOWED
  341: /* we have no main routines so lets make a plan */
  342: #define CALL(callname, progname, callmain) \
  343: 	extern int callmain (int,char**); \
  344: 	void callname (a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) \
  345: 		char *a0;  \
  346: 		char *a1;  \
  347: 		char *a2;  \
  348: 		char *a3;  \
  349: 		char *a4;  \
  350: 		char *a5;  \
  351: 		char *a6;  \
  352: 		char *a7;  \
  353: 		char *a8;  \
  354: 		char *a9;  \
  355: 		char *a10; \
  356: 	{ \
  357: 	  char *x[11]; \
  358: 	  int argc; \
  359: 	  char *argv[] = {progname,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL}; \
  360: 	  int i; \
  361: 	  for (i=0;i<11;i++) \
  362: 	   x[i] = NULL; \
  363: 	  x[0] = a0; \
  364: 	  x[1] = a1; \
  365: 	  x[2] = a2; \
  366: 	  x[3] = a3; \
  367: 	  x[4] = a4; \
  368: 	  x[5] = a5; \
  369: 	  x[6] = a6; \
  370: 	  x[7] = a7; \
  371: 	  x[8] = a8; \
  372: 	  x[9] = a9; \
  373: 	  x[10] = a10; \
  374: 	  argc=1; \
  375: 	  for (i=0; i<11;i++) \
  376: 		if (x[i]) \
  377: 		{ \
  378: 		  argv[argc++] = x[i];	\
  379: 		} \
  380: 	 callmain(argc,argv);  \
  381: 	}
  382: #endif /* NO_MAIN_ALLOWED */
  383: /*casey Tue May 27 15:45:25 SAT 1997*/
  384: 
  385: /*
  386:  * Here's where autoconfig starts to take over
  387:  */
  388: #ifdef HAVE_SYS_STROPTS_H
  389: # ifdef HAVE_SYS_STREAM_H
  390: #  define STREAM
  391: # endif
  392: #endif
  393: 
  394: #ifndef RETSIGTYPE
  395: # if defined(NTP_POSIX_SOURCE)
  396: #  define	RETSIGTYPE	void
  397: # else
  398: #  define	RETSIGTYPE	int
  399: # endif
  400: #endif
  401: 
  402: #ifdef	NTP_SYSCALLS_STD
  403: # ifndef	NTP_SYSCALL_GET
  404: #  define	NTP_SYSCALL_GET 235
  405: # endif
  406: # ifndef	NTP_SYSCALL_ADJ
  407: #  define	NTP_SYSCALL_ADJ 236
  408: # endif
  409: #endif	/* NTP_SYSCALLS_STD */
  410: 
  411: #ifdef MPE
  412: # include <sys/types.h>
  413: # include <netinet/in.h>
  414: # include <stdio.h>
  415: # include <time.h>
  416: 
  417: /* missing functions that are easily renamed */
  418: 
  419: # define _getch getchar
  420: 
  421: /* special functions that require MPE-specific wrappers */
  422: 
  423: # define bind	__ntp_mpe_bind
  424: # define fcntl	__ntp_mpe_fcntl
  425: 
  426: /* standard macros missing from MPE include files */
  427: 
  428: # define IN_CLASSD(i)	((((long)(i))&0xf0000000)==0xe0000000)
  429: # define IN_MULTICAST IN_CLASSD
  430: # define ITIMER_REAL 0
  431: # define MAXHOSTNAMELEN 64
  432: 
  433: /* standard structures missing from MPE include files */
  434: 
  435: struct itimerval { 
  436:         struct timeval it_interval;    /* timer interval */
  437:         struct timeval it_value;       /* current value */
  438: };
  439: 
  440: /* various declarations to make gcc stop complaining */
  441: 
  442: extern int __filbuf(FILE *);
  443: extern int __flsbuf(int, FILE *);
  444: extern int gethostname(char *, int);
  445: extern unsigned long inet_addr(char *);
  446: extern char *strdup(const char *);
  447: 
  448: /* miscellaneous NTP macros */
  449: 
  450: # define HAVE_NO_NICE
  451: #endif /* MPE */
  452: 
  453: #ifdef HAVE_RTPRIO
  454: # define HAVE_NO_NICE
  455: #else
  456: # ifdef HAVE_SETPRIORITY
  457: #  define HAVE_BSD_NICE
  458: # else
  459: #  ifdef HAVE_NICE
  460: #	define HAVE_ATT_NICE
  461: #  endif
  462: # endif
  463: #endif
  464: 
  465: #if !defined(HAVE_ATT_NICE) \
  466: 	&& !defined(HAVE_BSD_NICE) \
  467: 	&& !defined(HAVE_NO_NICE)
  468: #include "ERROR: You must define one of the HAVE_xx_NICE defines!"
  469: #endif
  470: 
  471: /*
  472:  * use only one tty model - no use in initialising
  473:  * a tty in three ways
  474:  * HAVE_TERMIOS is preferred over HAVE_SYSV_TTYS over HAVE_BSD_TTYS
  475:  */
  476: 
  477: #ifdef HAVE_TERMIOS_H
  478: # define HAVE_TERMIOS
  479: #else
  480: # ifdef HAVE_TERMIO_H
  481: #  define HAVE_SYSV_TTYS
  482: # else
  483: #  ifdef HAVE_SGTTY_H
  484: #	define HAVE_BSD_TTYS
  485: #  endif
  486: # endif
  487: #endif
  488: 
  489: #ifdef HAVE_TERMIOS
  490: # undef HAVE_BSD_TTYS
  491: # undef HAVE_SYSV_TTYS
  492: #endif
  493: 
  494: #ifndef HAVE_TIMEGM
  495: extern time_t	timegm		(struct tm *);
  496: #endif
  497: 
  498: #ifdef HAVE_SYSV_TTYS
  499: # undef HAVE_BSD_TTYS
  500: #endif
  501: 
  502: #if !defined(SYS_WINNT) && !defined(VMS) && !defined(SYS_VXWORKS)
  503: # if	!defined(HAVE_SYSV_TTYS) \
  504: 	&& !defined(HAVE_BSD_TTYS) \
  505: 	&& !defined(HAVE_TERMIOS)
  506: #include "ERROR: no tty type defined!"
  507: # endif
  508: #endif /* SYS_WINNT || VMS	|| SYS_VXWORKS*/
  509: 
  510: #ifdef	WORDS_BIGENDIAN
  511: # define	XNTP_BIG_ENDIAN 1
  512: #else
  513: # define	XNTP_LITTLE_ENDIAN	1
  514: #endif
  515: 
  516: /*
  517:  * Byte order woes.
  518:  * This used to be resolved by calling ntohl() and htonl() to swap things
  519:  * around, but this turned out to be quite costly on Vaxes where those
  520:  * things are actual functions.  The code now straightens out byte
  521:  * order troubles on its own, with no performance penalty for little
  522:  * end first machines, but at great expense to cleanliness.
  523:  */
  524: #if !defined(XNTP_BIG_ENDIAN) && !defined(XNTP_LITTLE_ENDIAN)
  525: 	/*
  526: 	 * Pick one or the other.
  527: 	 */
  528: 	BYTE_ORDER_NOT_DEFINED_FOR_AUTHENTICATION
  529: #endif
  530: 
  531: #if defined(XNTP_BIG_ENDIAN) && defined(XNTP_LITTLE_ENDIAN)
  532: 	/*
  533: 	 * Pick one or the other.
  534: 	 */
  535: 	BYTE_ORDER_NOT_DEFINED_FOR_AUTHENTICATION
  536: #endif
  537: 
  538: #endif	/* NTP_MACHINE_H */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>