xref: /netbsd-src/external/bsd/ntp/dist/include/ntp_syscall.h (revision a5847cc334d9a7029f6352b847e9e8d71a0f9e0c)
1 /*	$NetBSD: ntp_syscall.h,v 1.1.1.1 2009/12/13 16:54:54 kardel Exp $	*/
2 
3 /*
4  * ntp_syscall.h - various ways to perform the ntp_adjtime() and ntp_gettime()
5  * 		   system calls.
6  */
7 
8 #ifndef NTP_SYSCALL_H
9 #define NTP_SYSCALL_H
10 
11 #ifdef HAVE_CONFIG_H
12 #include <config.h>
13 #endif
14 
15 #ifdef HAVE_SYS_TIMEX_H
16 # include <sys/timex.h>
17 #endif
18 
19 #ifndef NTP_SYSCALLS_LIBC
20 #ifdef NTP_SYSCALLS_STD
21 # define ntp_adjtime(t)		syscall(SYS_ntp_adjtime, (t))
22 # define ntp_gettime(t)		syscall(SYS_ntp_gettime, (t))
23 #else /* !NTP_SYSCALLS_STD */
24 # ifdef HAVE___ADJTIMEX
25 extern	int	__adjtimex	(struct timex *);
26 
27 #  define ntp_adjtime(t)	__adjtimex((t))
28 
29 #ifndef HAVE_STRUCT_NTPTIMEVAL
30 struct ntptimeval
31 {
32   struct timeval time;  /* current time (ro) */
33   long int maxerror;    /* maximum error (us) (ro) */
34   long int esterror;    /* estimated error (us) (ro) */
35 };
36 #endif
37 
38 static inline int
39 ntp_gettime(
40 	struct ntptimeval *ntv
41 	)
42 {
43 	struct timex tntx;
44 	int result;
45 
46 	tntx.modes = 0;
47 	result = __adjtimex (&tntx);
48 	ntv->time = tntx.time;
49 	ntv->maxerror = tntx.maxerror;
50 	ntv->esterror = tntx.esterror;
51 #ifdef NTP_API
52 # if NTP_API > 3
53 	ntv->tai = tntx.tai;
54 # endif
55 #endif
56 	return(result);
57 }
58 # else /* !HAVE__ADJTIMEX */
59 #  ifdef HAVE___NTP_GETTIME
60 #   define ntp_gettime(t)	__ntp_gettime((t))
61 #  endif
62 # endif /* !HAVE_ADJTIMEX */
63 #endif /* !NTP_SYSCALLS_STD */
64 #endif /* !NTP_SYSCALLS_LIBC */
65 
66 #endif /* NTP_SYSCALL_H */
67