#ifndef _UTILS_H #define _UTILS_H #ifdef __cpluscplus extern "C" { #endif #include #include struct metrics { uint64_t rx_pkts; uint64_t rx_bytes; uint64_t rx_err_pkts; uint64_t rx_err_bytes; uint64_t succ_tx_v4_pkts; uint64_t succ_tx_v4_bytes; uint64_t succ_tx_v6_pkts; uint64_t succ_tx_v6_bytes; uint64_t err_tx_v4_pkts; uint64_t err_tx_v4_bytes; uint64_t err_tx_v6_pkts; uint64_t err_tx_v6_bytes; }; inline void metrics_dump(struct metrics *metrics) { printf(" rx_pkts : %ld\n", metrics->rx_pkts); printf(" rx_bytes : %ld\n", metrics->rx_bytes); printf(" rx_err_pkts : %ld\n", metrics->rx_err_pkts); printf(" rx_err_bytes : %ld\n", metrics->rx_err_bytes); printf(" succ_tx_v4_pkts : %ld\n", metrics->succ_tx_v4_pkts); printf(" succ_tx_v4_bytes : %ld\n", metrics->succ_tx_v4_bytes); printf(" succ_tx_v6_pkts : %ld\n", metrics->succ_tx_v6_pkts); printf(" succ_tx_v6_bytes : %ld\n", metrics->succ_tx_v6_bytes); printf(" err_tx_v4_pkts : %ld\n", metrics->err_tx_v4_pkts); printf(" err_tx_v4_bytes : %ld\n", metrics->err_tx_v4_bytes); printf(" err_tx_v6_pkts : %ld\n", metrics->err_tx_v6_pkts); printf(" err_tx_v6_bytes : %ld\n", metrics->err_tx_v6_bytes); } #define ATOMIC_READ(x) __atomic_fetch_add(x, 0, __ATOMIC_RELAXED) #define ATOMIC_ADD(x, y) __atomic_fetch_add(x, y, __ATOMIC_RELAXED) #ifdef __cpluscplus } #endif #endif