#include "ntp_types.h"
#ifdef SIM
#include "ntpsim.h"
#endif
#ifdef SIM
# define GETTIMEOFDAY(a, b) (node_gettime(&ntp_node, a))
# define SETTIMEOFDAY(a, b) (node_settime(&ntp_node, a))
# define ADJTIMEOFDAY(a, b) (node_adjtime(&ntp_node, a, b))
#else
# define ADJTIMEOFDAY(a, b) (adjtime(a, b))
# if defined(HAVE_SYS_TIMERS_H) && defined(HAVE_GETCLOCK)
# include <sys/timers.h>
int getclock (int clock_type, struct timespec *tp);
# define SETTIMEOFDAY(a, b) (settimeofday(a, b))
# else
# ifdef SYSV_TIMEOFDAY
# define GETTIMEOFDAY(a, b) (gettimeofday(a))
# define SETTIMEOFDAY(a, b) (settimeofday(a))
# else
#if defined SYS_CYGWIN32
# define GETTIMEOFDAY(a, b) (gettimeofday(a, b))
# define SETTIMEOFDAY(a, b) (settimeofday_NT(a))
#else
# define GETTIMEOFDAY(a, b) (gettimeofday(a, b))
# define SETTIMEOFDAY(a, b) (settimeofday(a, b))
#endif
# endif
# endif
#endif
#define JAN_1970 0x83aa7e80
#define TS_MASK 0xfffff000
#define TS_ROUNDBIT 0x00000800
extern u_long ustotslo[];
extern u_long ustotsmid[];
extern u_long ustotshi[];
#define TVUTOTSF(tvu, tsf) \
(tsf) = ustotslo[(tvu) & 0xff] \
+ ustotsmid[((tvu) >> 8) & 0xff] \
+ ustotshi[((tvu) >> 16) & 0xf]
#define TVTOTS(tv, ts) \
do { \
(ts)->l_ui = (u_long)(tv)->tv_sec; \
TVUTOTSF((tv)->tv_usec, (ts)->l_uf); \
} while(0)
#define sTVTOTS(tv, ts) \
do { \
int isneg = 0; \
long usec; \
(ts)->l_ui = (tv)->tv_sec; \
usec = (tv)->tv_usec; \
if (((tv)->tv_sec < 0) || ((tv)->tv_usec < 0)) { \
usec = -usec; \
(ts)->l_ui = -(ts)->l_ui; \
isneg = 1; \
} \
TVUTOTSF(usec, (ts)->l_uf); \
if (isneg) { \
L_NEG((ts)); \
} \
} while(0)
#define TV_SHIFT 3
#define TV_ROUNDBIT 0x4
extern long tstouslo[];
extern long tstousmid[];
extern long tstoushi[];
#define TSFTOTVU(tsf, tvu) \
(tvu) = (tstoushi[((tsf) >> 24) & 0xff] \
+ tstousmid[((tsf) >> 16) & 0xff] \
+ tstouslo[((tsf) >> 9) & 0x7f] \
+ TV_ROUNDBIT) >> TV_SHIFT
#define TSTOTV(ts, tv) \
do { \
(tv)->tv_sec = (ts)->l_ui; \
TSFTOTVU((ts)->l_uf, (tv)->tv_usec); \
if ((tv)->tv_usec == 1000000) { \
(tv)->tv_sec++; \
(tv)->tv_usec = 0; \
} \
} while (0)
extern u_long msutotsflo[];
extern u_long msutotsfhi[];
#define MSUTOTSF(msu, tsf) \
(tsf) = msutotsfhi[((msu) >> 5) & 0x1f] + msutotsflo[(msu) & 0x1f]