Annotation of embedaddon/ntp/include/ntp_machine.h, revision 1.1.1.1
1.1 misho 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>