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