#ifndef IPTRAF_NG_COMPAT_H #define IPTRAF_NG_COMPAT_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifndef ETH_P_8021AD #define ETH_P_8021AD 0x88A8 /* 802.1ad Service VLAN */ #endif #ifndef ETH_P_QINQ1 #define ETH_P_QINQ1 0x9100 /* deprecated QinQ VLAN [ NOT AN OFFICIALLY REGISTERED ID ] */ #endif #ifndef ETH_P_QINQ2 #define ETH_P_QINQ2 0x9200 /* deprecated QinQ VLAN [ NOT AN OFFICIALLY REGISTERED ID ] */ #endif #ifndef ETH_P_QINQ3 #define ETH_P_QINQ3 0x9300 /* deprecated QinQ VLAN [ NOT AN OFFICIALLY REGISTERED ID ] */ #endif #define debug(...) \ do { \ fprintf(stderr, "%s:%s():%d:", \ __FILE__, __func__, __LINE__); \ fprintf(stderr, __VA_ARGS__); \ fprintf(stderr, "\n"); \ } while(0) #define KBITS 0 #define dispmode(mode) \ (((mode) == KBITS) ? "kbps": "kBps") #define __noreturn __attribute__((noreturn)) #define __unused __attribute__((unused)) #define __printf(x, y) __attribute__((format(printf, (x), (y)))) /* screen delay (in msecs) if update rate == 0 */ #define DEFAULT_UPDATE_DELAY 50 #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) #define alloc_nr(x) (((x)+16)*3/2) /* * Realloc the buffer pointed at by variable 'x' so that it can hold * at least 'nr' entries; the number of entries currently allocated * is 'alloc', using the standard growing factor alloc_nr() macro. * * DO NOT USE any expression with side-effect for 'x', 'nr', or 'alloc'. */ #define ALLOC_GROW(x, nr, alloc) \ do { \ if ((nr) > alloc) { \ if (alloc_nr(alloc) < (nr)) \ alloc = (nr); \ else \ alloc = alloc_nr(alloc); \ x = xrealloc((x), alloc * sizeof(*(x))); \ } \ } while (0) extern int daemonized; extern int exitloop; extern void *xmalloc(size_t size); extern void *xcalloc(size_t nmemb, size_t size); extern void *xrealloc(void *ptr, size_t size); extern void *xmallocz(size_t size); extern char *xstrdup(const char *s); extern int strtoul_ui(char const *s, int base, unsigned int *result); extern int strtol_i(char const *s, int base, int *result); extern void die(const char *err, ...) __noreturn __printf(1,2); extern void die_errno(const char *fmt, ...) __noreturn __printf(1,2); extern void error(const char *err, ...) __printf(1,2); static inline char *skip_whitespace(char *str) { while (isspace(*str)) ++str; return str; } static inline unsigned long timeval_diff_msec(const struct timeval *end, const struct timeval *start) { if (!start || !end) return 0UL; signed long secs = end->tv_sec - start->tv_sec; signed long usecs = end->tv_usec - start->tv_usec; if(usecs < 0) { usecs = 1000000 - usecs; secs -= 1; } if(secs >= 0) return secs * 1000UL + usecs / 1000UL; else return 0UL; } #endif /* IPTRAF_NG_COMPAT_H */