29 #include <arpa/inet.h> 31 #define MIN(a,b) ((b) < (a) ? (b) : (a)) 32 #define MAX(a,b) ((b) > (a) ? (b) : (a)) 33 #define MEM_BARRIER() __asm__ volatile("" ::: "memory") 34 #define STATIC_ASSERT(COND,MSG) typedef char static_assertion_##MSG[(COND)?1:-1] 35 #define LIKELY(x) __builtin_expect((x),1) 36 #define UNLIKELY(x) __builtin_expect((x),0) 38 int util_parse_ipv4(
const char *s, uint32_t *ip);
39 int util_parse_mac(
const char *s, uint64_t *mac);
41 void util_dump_mem(
const void *b,
size_t len);
44 struct beui16 { uint16_t x; } __attribute__((packed));
45 struct beui32 { uint32_t x; } __attribute__((packed));
46 struct beui64 { uint64_t x; } __attribute__((packed));
47 typedef struct beui16 beui16_t;
48 typedef struct beui32 beui32_t;
49 typedef struct beui64 beui64_t;
51 static inline uint16_t f_beui16(beui16_t x) {
return __builtin_bswap16(x.x); }
52 static inline uint32_t f_beui32(beui32_t x) {
return __builtin_bswap32(x.x); }
53 static inline uint64_t f_beui64(beui64_t x) {
return __builtin_bswap64(x.x); }
55 static inline beui16_t t_beui16(uint16_t x)
58 b.x = __builtin_bswap16(x);
62 static inline beui32_t t_beui32(uint32_t x)
65 b.x = __builtin_bswap32(x);
69 static inline beui64_t t_beui64(uint64_t x)
72 b.x = __builtin_bswap64(x);
76 static inline uint64_t util_rdtsc(
void)
79 asm volatile (
"rdtsc" :
"=a" (eax),
"=d" (edx));
80 return ((uint64_t) edx << 32) | eax;
83 static inline void util_prefetch0(
const volatile void *p)
85 asm volatile (
"prefetcht0 %[p]" : : [p]
"m" (*(
const volatile char *)p));