1c0b746e5SOllivier Robert /* 2*2b15cb3dSCy Schubert * ntp_machine.h 3*2b15cb3dSCy Schubert * 4c0b746e5SOllivier Robert * Collect all machine dependent idiosyncrasies in one place. 5*2b15cb3dSCy Schubert * 6*2b15cb3dSCy Schubert * The functionality formerly in this file is mostly handled by 7*2b15cb3dSCy Schubert * Autoconf these days. 8c0b746e5SOllivier Robert */ 9c0b746e5SOllivier Robert 10*2b15cb3dSCy Schubert #ifndef NTP_MACHINE_H 11*2b15cb3dSCy Schubert #define NTP_MACHINE_H 12c0b746e5SOllivier Robert 13c0b746e5SOllivier Robert #ifdef HAVE_SYS_TIME_H 14c0b746e5SOllivier Robert # include <sys/time.h> 15*2b15cb3dSCy Schubert #endif 16224ba2bdSOllivier Robert #include <time.h> 17c0b746e5SOllivier Robert 18c0b746e5SOllivier Robert #include "ntp_proto.h" 19c0b746e5SOllivier Robert 20c0b746e5SOllivier Robert /* 21c0b746e5SOllivier Robert 22c0b746e5SOllivier Robert HEY! CHECK THIS OUT! 23c0b746e5SOllivier Robert 24c0b746e5SOllivier Robert The per-system SYS_* #defins ARE NO LONGER USED, with the temporary 25c0b746e5SOllivier Robert exception of SYS_WINNT. 26c0b746e5SOllivier Robert 27c0b746e5SOllivier Robert If you find a hunk of code that is bracketed by a SYS_* macro and you 28c0b746e5SOllivier Robert *know* that it is still needed, please let us know. In many cases the 29c0b746e5SOllivier Robert code fragment is now handled somewhere else by autoconf choices. 30c0b746e5SOllivier Robert 31c0b746e5SOllivier Robert */ 32c0b746e5SOllivier Robert 33c0b746e5SOllivier Robert /* 34c0b746e5SOllivier Robert 35c0b746e5SOllivier Robert HOW TO GET IP INTERFACE INFORMATION 36c0b746e5SOllivier Robert 37c0b746e5SOllivier Robert Some UNIX V.4 machines implement a sockets library on top of 38c0b746e5SOllivier Robert streams. For these systems, you must use send the SIOCGIFCONF down 39c0b746e5SOllivier Robert the stream in an I_STR ioctl. This ususally also implies 40c0b746e5SOllivier Robert USE_STREAMS_DEVICE FOR IF_CONFIG. Dell UNIX is a notable exception. 41c0b746e5SOllivier Robert 42c0b746e5SOllivier Robert WHAT DOES IOCTL(SIOCGIFCONF) RETURN IN THE BUFFER 43c0b746e5SOllivier Robert 44c0b746e5SOllivier Robert UNIX V.4 machines implement a sockets library on top of streams. 45c0b746e5SOllivier Robert When requesting the IP interface configuration with an ioctl(2) calll, 46c0b746e5SOllivier Robert an array of ifreq structures are placed in the provided buffer. Some 47c0b746e5SOllivier Robert implementations also place the length of the buffer information in 48c0b746e5SOllivier Robert the first integer position of the buffer. 49c0b746e5SOllivier Robert 50c0b746e5SOllivier Robert SIZE_RETURNED_IN_BUFFER - size integer is in the buffer 51c0b746e5SOllivier Robert 52c0b746e5SOllivier Robert WILL IOCTL(SIOCGIFCONF) WORK ON A SOCKET 53c0b746e5SOllivier Robert 54c0b746e5SOllivier Robert Some UNIX V.4 machines do not appear to support ioctl() requests for the 55c0b746e5SOllivier Robert IP interface configuration on a socket. They appear to require the use 56c0b746e5SOllivier Robert of the streams device instead. 57c0b746e5SOllivier Robert 58c0b746e5SOllivier Robert USE_STREAMS_DEVICE_FOR_IF_CONFIG - use the /dev/ip device for configuration 59c0b746e5SOllivier Robert 60c0b746e5SOllivier Robert MISC 61c0b746e5SOllivier Robert 62c0b746e5SOllivier Robert DOSYNCTODR - Resync TODR clock every hour. 63c0b746e5SOllivier Robert RETSIGTYPE - Define signal function type. 64c0b746e5SOllivier Robert NO_SIGNED_CHAR_DECL - No "signed char" see include/ntp.h 65c0b746e5SOllivier Robert LOCK_PROCESS - Have plock. 66c0b746e5SOllivier Robert */ 67c0b746e5SOllivier Robert 68*2b15cb3dSCy Schubert int ntp_set_tod (struct timeval *tvp, void *tzp); 69c0b746e5SOllivier Robert 70c0b746e5SOllivier Robert /*casey Tue May 27 15:45:25 SAT 1997*/ 71c0b746e5SOllivier Robert #ifdef SYS_VXWORKS 72c0b746e5SOllivier Robert 73c0b746e5SOllivier Robert /* casey's new defines */ 74c0b746e5SOllivier Robert #define NO_MAIN_ALLOWED 1 75c0b746e5SOllivier Robert #define NO_NETDB 1 76c0b746e5SOllivier Robert #define NO_RENAME 1 77c0b746e5SOllivier Robert 78c0b746e5SOllivier Robert /* in vxWorks we use FIONBIO, but the others are defined for old systems, so 79c0b746e5SOllivier Robert * all hell breaks loose if we leave them defined we define USE_FIONBIO to 80c0b746e5SOllivier Robert * undefine O_NONBLOCK FNDELAY O_NDELAY where necessary. 81c0b746e5SOllivier Robert */ 82c0b746e5SOllivier Robert #define USE_FIONBIO 1 83c0b746e5SOllivier Robert /* end my new defines */ 84c0b746e5SOllivier Robert 85c0b746e5SOllivier Robert #define TIMEOFDAY 0x0 /* system wide realtime clock */ 86c0b746e5SOllivier Robert #define HAVE_GETCLOCK 1 /* configure does not set this ... */ 87c0b746e5SOllivier Robert #define HAVE_NO_NICE 1 /* configure does not set this ... */ 88c0b746e5SOllivier Robert #define HAVE_RANDOM 1 /* configure does not set this ... */ 89c0b746e5SOllivier Robert #define HAVE_SRANDOM 1 /* configure does not set this ... */ 90c0b746e5SOllivier Robert 91c0b746e5SOllivier Robert /* vxWorks specific additions to take care of its 92c0b746e5SOllivier Robert * unix (non)complicance 93c0b746e5SOllivier Robert */ 94c0b746e5SOllivier Robert 95c0b746e5SOllivier Robert #include "vxWorks.h" 96c0b746e5SOllivier Robert #include "ioLib.h" 97c0b746e5SOllivier Robert #include "taskLib.h" 98c0b746e5SOllivier Robert #include "time.h" 99c0b746e5SOllivier Robert 100*2b15cb3dSCy Schubert extern int sysClkRateGet (); 101c0b746e5SOllivier Robert 102c0b746e5SOllivier Robert /* usrtime.h 103c0b746e5SOllivier Robert * Bob Herlien's excellent time code find it at: 104c0b746e5SOllivier Robert * ftp://ftp.atd.ucar.edu/pub/vxworks/vx/usrTime.shar 105c0b746e5SOllivier Robert * I would recommend this instead of clock_[g|s]ettime() plus you get 106c0b746e5SOllivier Robert * adjtime() too ... casey 107c0b746e5SOllivier Robert */ 108c0b746e5SOllivier Robert /* 109*2b15cb3dSCy Schubert extern int gettimeofday ( struct timeval *tp, struct timezone *tzp ); 110*2b15cb3dSCy Schubert extern int settimeofday (struct timeval *, struct timezone *); 111*2b15cb3dSCy Schubert extern int adjtime ( struct timeval *delta, struct timeval *olddelta ); 112c0b746e5SOllivier Robert */ 113c0b746e5SOllivier Robert 114c0b746e5SOllivier Robert /* in machines.c */ 115*2b15cb3dSCy Schubert extern void sleep (int seconds); 116*2b15cb3dSCy Schubert extern void alarm (int seconds); 117c0b746e5SOllivier Robert /* machines.c */ 118c0b746e5SOllivier Robert 119c0b746e5SOllivier Robert 120c0b746e5SOllivier Robert /* this is really this */ 121c0b746e5SOllivier Robert #define getpid taskIdSelf 122c0b746e5SOllivier Robert #define getclock clock_gettime 123c0b746e5SOllivier Robert #define fcntl ioctl 124c0b746e5SOllivier Robert #define _getch getchar 125c0b746e5SOllivier Robert 126c0b746e5SOllivier Robert /* define this away for vxWorks */ 127c0b746e5SOllivier Robert #define openlog(x,y) 128c0b746e5SOllivier Robert /* use local defines for these */ 129c0b746e5SOllivier Robert #undef min 130c0b746e5SOllivier Robert #undef max 131c0b746e5SOllivier Robert 132c0b746e5SOllivier Robert #endif /* SYS_VXWORKS */ 133c0b746e5SOllivier Robert 134c0b746e5SOllivier Robert #ifdef NO_NETDB 135c0b746e5SOllivier Robert /* These structures are needed for gethostbyname() etc... */ 136c0b746e5SOllivier Robert /* structures used by netdb.h */ 137c0b746e5SOllivier Robert struct hostent { 138c0b746e5SOllivier Robert char *h_name; /* official name of host */ 139c0b746e5SOllivier Robert char **h_aliases; /* alias list */ 140c0b746e5SOllivier Robert int h_addrtype; /* host address type */ 141c0b746e5SOllivier Robert int h_length; /* length of address */ 142c0b746e5SOllivier Robert char **h_addr_list; /* list of addresses from name server */ 143c0b746e5SOllivier Robert #define h_addr h_addr_list[0] /* address, for backward compatibility */ 144c0b746e5SOllivier Robert }; 145c0b746e5SOllivier Robert 146c0b746e5SOllivier Robert struct servent { 147c0b746e5SOllivier Robert char *s_name; /* official service name */ 148c0b746e5SOllivier Robert char **s_aliases; /* alias list */ 149c0b746e5SOllivier Robert int s_port; /* port # */ 150c0b746e5SOllivier Robert char *s_proto; /* protocol to use */ 151c0b746e5SOllivier Robert }; 152c0b746e5SOllivier Robert extern int h_errno; 153c0b746e5SOllivier Robert 154c0b746e5SOllivier Robert #define TRY_AGAIN 2 155c0b746e5SOllivier Robert 156*2b15cb3dSCy Schubert struct hostent *gethostbyname (char * netnum); 157*2b15cb3dSCy Schubert struct hostent *gethostbyaddr (char * netnum, int size, int addr_type); 158c0b746e5SOllivier Robert /* type is the protocol */ 159*2b15cb3dSCy Schubert struct servent *getservbyname (char *name, char *type); 160c0b746e5SOllivier Robert #endif /* NO_NETDB */ 161c0b746e5SOllivier Robert 162c0b746e5SOllivier Robert #ifdef NO_MAIN_ALLOWED 163c0b746e5SOllivier Robert /* we have no main routines so lets make a plan */ 164c0b746e5SOllivier Robert #define CALL(callname, progname, callmain) \ 165c0b746e5SOllivier Robert extern int callmain (int,char**); \ 166c0b746e5SOllivier Robert void callname (a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) \ 167c0b746e5SOllivier Robert char *a0; \ 168c0b746e5SOllivier Robert char *a1; \ 169c0b746e5SOllivier Robert char *a2; \ 170c0b746e5SOllivier Robert char *a3; \ 171c0b746e5SOllivier Robert char *a4; \ 172c0b746e5SOllivier Robert char *a5; \ 173c0b746e5SOllivier Robert char *a6; \ 174c0b746e5SOllivier Robert char *a7; \ 175c0b746e5SOllivier Robert char *a8; \ 176c0b746e5SOllivier Robert char *a9; \ 177c0b746e5SOllivier Robert char *a10; \ 178c0b746e5SOllivier Robert { \ 179c0b746e5SOllivier Robert char *x[11]; \ 180c0b746e5SOllivier Robert int argc; \ 181c0b746e5SOllivier Robert char *argv[] = {progname,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL}; \ 182c0b746e5SOllivier Robert int i; \ 183c0b746e5SOllivier Robert for (i=0;i<11;i++) \ 184c0b746e5SOllivier Robert x[i] = NULL; \ 185c0b746e5SOllivier Robert x[0] = a0; \ 186c0b746e5SOllivier Robert x[1] = a1; \ 187c0b746e5SOllivier Robert x[2] = a2; \ 188c0b746e5SOllivier Robert x[3] = a3; \ 189c0b746e5SOllivier Robert x[4] = a4; \ 190c0b746e5SOllivier Robert x[5] = a5; \ 191c0b746e5SOllivier Robert x[6] = a6; \ 192c0b746e5SOllivier Robert x[7] = a7; \ 193c0b746e5SOllivier Robert x[8] = a8; \ 194c0b746e5SOllivier Robert x[9] = a9; \ 195c0b746e5SOllivier Robert x[10] = a10; \ 196c0b746e5SOllivier Robert argc=1; \ 197c0b746e5SOllivier Robert for (i=0; i<11;i++) \ 198c0b746e5SOllivier Robert if (x[i]) \ 199c0b746e5SOllivier Robert { \ 200c0b746e5SOllivier Robert argv[argc++] = x[i]; \ 201c0b746e5SOllivier Robert } \ 202c0b746e5SOllivier Robert callmain(argc,argv); \ 203c0b746e5SOllivier Robert } 204c0b746e5SOllivier Robert #endif /* NO_MAIN_ALLOWED */ 205c0b746e5SOllivier Robert /*casey Tue May 27 15:45:25 SAT 1997*/ 206c0b746e5SOllivier Robert 207c0b746e5SOllivier Robert /* 208c0b746e5SOllivier Robert * Here's where autoconfig starts to take over 209c0b746e5SOllivier Robert */ 210c0b746e5SOllivier Robert #ifdef HAVE_SYS_STROPTS_H 211c0b746e5SOllivier Robert # ifdef HAVE_SYS_STREAM_H 212c0b746e5SOllivier Robert # define STREAM 213c0b746e5SOllivier Robert # endif 214c0b746e5SOllivier Robert #endif 215c0b746e5SOllivier Robert 216c0b746e5SOllivier Robert #ifndef RETSIGTYPE 217c0b746e5SOllivier Robert # if defined(NTP_POSIX_SOURCE) 218c0b746e5SOllivier Robert # define RETSIGTYPE void 219c0b746e5SOllivier Robert # else 220c0b746e5SOllivier Robert # define RETSIGTYPE int 221c0b746e5SOllivier Robert # endif 222c0b746e5SOllivier Robert #endif 223c0b746e5SOllivier Robert 224c0b746e5SOllivier Robert #ifdef NTP_SYSCALLS_STD 225c0b746e5SOllivier Robert # ifndef NTP_SYSCALL_GET 226c0b746e5SOllivier Robert # define NTP_SYSCALL_GET 235 227c0b746e5SOllivier Robert # endif 228c0b746e5SOllivier Robert # ifndef NTP_SYSCALL_ADJ 229c0b746e5SOllivier Robert # define NTP_SYSCALL_ADJ 236 230c0b746e5SOllivier Robert # endif 231c0b746e5SOllivier Robert #endif /* NTP_SYSCALLS_STD */ 232c0b746e5SOllivier Robert 233ce265a54SOllivier Robert #ifdef MPE 234ce265a54SOllivier Robert # include <sys/types.h> 235ce265a54SOllivier Robert # include <netinet/in.h> 236ce265a54SOllivier Robert # include <stdio.h> 237ce265a54SOllivier Robert # include <time.h> 238ce265a54SOllivier Robert 239ce265a54SOllivier Robert /* missing functions that are easily renamed */ 240ce265a54SOllivier Robert 241ce265a54SOllivier Robert # define _getch getchar 242ce265a54SOllivier Robert 243ce265a54SOllivier Robert /* special functions that require MPE-specific wrappers */ 244ce265a54SOllivier Robert 245ce265a54SOllivier Robert # define bind __ntp_mpe_bind 246ce265a54SOllivier Robert # define fcntl __ntp_mpe_fcntl 247ce265a54SOllivier Robert 248ce265a54SOllivier Robert /* standard macros missing from MPE include files */ 249ce265a54SOllivier Robert 250ce265a54SOllivier Robert # define IN_CLASSD(i) ((((long)(i))&0xf0000000)==0xe0000000) 251ce265a54SOllivier Robert # define IN_MULTICAST IN_CLASSD 252ce265a54SOllivier Robert # define ITIMER_REAL 0 253ce265a54SOllivier Robert 254ce265a54SOllivier Robert /* standard structures missing from MPE include files */ 255ce265a54SOllivier Robert 256ce265a54SOllivier Robert struct itimerval { 257ce265a54SOllivier Robert struct timeval it_interval; /* timer interval */ 258ce265a54SOllivier Robert struct timeval it_value; /* current value */ 259ce265a54SOllivier Robert }; 260ce265a54SOllivier Robert 261ce265a54SOllivier Robert /* various declarations to make gcc stop complaining */ 262ce265a54SOllivier Robert 263ce265a54SOllivier Robert extern int __filbuf(FILE *); 264ce265a54SOllivier Robert extern int __flsbuf(int, FILE *); 265ce265a54SOllivier Robert extern int gethostname(char *, int); 266ce265a54SOllivier Robert extern unsigned long inet_addr(char *); 267ce265a54SOllivier Robert extern char *strdup(const char *); 268ce265a54SOllivier Robert 269ce265a54SOllivier Robert /* miscellaneous NTP macros */ 270ce265a54SOllivier Robert 271ce265a54SOllivier Robert # define HAVE_NO_NICE 272ce265a54SOllivier Robert #endif /* MPE */ 273ce265a54SOllivier Robert 274c0b746e5SOllivier Robert #ifdef HAVE_RTPRIO 275c0b746e5SOllivier Robert # define HAVE_NO_NICE 276c0b746e5SOllivier Robert #else 277c0b746e5SOllivier Robert # ifdef HAVE_SETPRIORITY 278c0b746e5SOllivier Robert # define HAVE_BSD_NICE 279c0b746e5SOllivier Robert # else 280c0b746e5SOllivier Robert # ifdef HAVE_NICE 281c0b746e5SOllivier Robert # define HAVE_ATT_NICE 282c0b746e5SOllivier Robert # endif 283c0b746e5SOllivier Robert # endif 284c0b746e5SOllivier Robert #endif 285c0b746e5SOllivier Robert 286c0b746e5SOllivier Robert #if !defined(HAVE_ATT_NICE) \ 287c0b746e5SOllivier Robert && !defined(HAVE_BSD_NICE) \ 288*2b15cb3dSCy Schubert && !defined(HAVE_NO_NICE) 289c0b746e5SOllivier Robert #include "ERROR: You must define one of the HAVE_xx_NICE defines!" 290c0b746e5SOllivier Robert #endif 291c0b746e5SOllivier Robert 2929c2daa00SOllivier Robert #ifndef HAVE_TIMEGM 293*2b15cb3dSCy Schubert extern time_t timegm (struct tm *); 2949c2daa00SOllivier Robert #endif 2959c2daa00SOllivier Robert 296c0b746e5SOllivier Robert 297*2b15cb3dSCy Schubert #endif /* NTP_MACHINE_H */ 298