#ifndef _RTE_OS_SHIM_
#define _RTE_OS_SHIM_
+#include <time.h>
+
#include <rte_os.h>
/**
* Provides semi-standard OS facilities by convenient names.
*/
+#ifndef TIME_UTC
+
+#define TIME_UTC 1
+
+static inline int
+rte_timespec_get(struct timespec *now, int base)
+{
+ if (base != TIME_UTC || clock_gettime(CLOCK_REALTIME, now) < 0)
+ return 0;
+ return base;
+}
+
+#define timespec_get(ts, base) rte_timespec_get(ts, base)
+
+#endif /* !defined TIME_UTC */
+
#endif /* _RTE_OS_SHIM_ */
#ifndef _RTE_OS_SHIM_
#define _RTE_OS_SHIM_
+#include <time.h>
+
#include <rte_os.h>
+#include <rte_windows.h>
/**
* @file
#define IPPROTO_SCTP 132
#endif
+#ifdef RTE_TOOLCHAIN_GCC
+
+#define TIME_UTC 1
+
+static inline int
+rte_timespec_get(struct timespec *now, int base)
+{
+ /* 100ns ticks from 1601-01-01 to 1970-01-01 */
+ static const uint64_t EPOCH = 116444736000000000ULL;
+ static const uint64_t TICKS_PER_SEC = 10000000;
+ static const uint64_t NS_PER_TICK = 100;
+
+ FILETIME ft;
+ uint64_t ticks;
+
+ if (base != TIME_UTC)
+ return 0;
+
+ GetSystemTimePreciseAsFileTime(&ft);
+ ticks = ((uint64_t)ft.dwHighDateTime << 32) | ft.dwLowDateTime;
+ ticks -= EPOCH;
+ now->tv_sec = ticks / TICKS_PER_SEC;
+ now->tv_nsec = (ticks - now->tv_sec * TICKS_PER_SEC) * NS_PER_TICK;
+ return base;
+}
+
+#define timespec_get(ts, base) rte_timespec_get(ts, base)
+
+#endif /* RTE_TOOLCHAIN_GCC */
+
#endif /* _RTE_OS_SHIM_ */