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>