xref: /freebsd-src/contrib/ntp/include/ntp_machine.h (revision 416ba5c74546f32a993436a99516d35008e9f384)
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