static int dpdk_stats_read(user_data_t *ud) { DPDK_STATS_TRACE(); int ret = 0; if (g_hc == NULL) { ERROR("dpdk stats plugin not initialized"); return -EINVAL; } dpdk_stats_ctx_t *ctx = DPDK_STATS_CTX_GET(g_hc); int result = 0; ret = dpdk_helper_command(g_hc, DPDK_CMD_GET_STATS, &result, ctx->config.interval); if (ret != 0) { return 0; } if (result == -ENOBUFS) { dpdk_stats_reinit_helper(); } else if (result == -ENODEV) { dpdk_helper_shutdown(g_hc); } else if (result == 0) { dpdk_stats_counters_dispatch(g_hc); } return 0; }
static int dpdk_stats_shutdown(void) { DPDK_STATS_TRACE(); dpdk_helper_shutdown(g_hc); g_hc = NULL; return 0; }
static int dpdk_stats_shutdown(void) { DPDK_STATS_TRACE(); int ret = 0; ret = dpdk_helper_shutdown(g_hc); g_hc = NULL; if (ret != 0) { ERROR("%s: failed to cleanup %s helper", DPDK_STATS_PLUGIN, g_shm_name); return ret; } return ret; }
static int dpdk_stats_reinit_helper() { DPDK_STATS_TRACE(); dpdk_stats_ctx_t *ctx = DPDK_STATS_CTX_GET(g_hc); size_t data_size = sizeof(dpdk_stats_ctx_t) + (ctx->stats_count * DPDK_STATS_CTX_GET_XSTAT_SIZE); DEBUG("%s:%d helper reinit (new_size=%zu)", __FUNCTION__, __LINE__, data_size); dpdk_stats_ctx_t tmp_ctx; dpdk_eal_config_t tmp_eal; memcpy(&tmp_ctx, ctx, sizeof(dpdk_stats_ctx_t)); dpdk_helper_eal_config_get(g_hc, &tmp_eal); dpdk_helper_shutdown(g_hc); g_hc = NULL; int ret; ret = dpdk_helper_init(g_shm_name, data_size, &g_hc); if (ret != 0) { char errbuf[ERR_BUF_SIZE]; ERROR("%s: failed to initialize %s helper(error: %s)", DPDK_STATS_PLUGIN, g_shm_name, sstrerror(errno, errbuf, sizeof(errbuf))); return ret; } ctx = DPDK_STATS_CTX_GET(g_hc); memcpy(ctx, &tmp_ctx, sizeof(dpdk_stats_ctx_t)); DPDK_STATS_CTX_INIT(ctx); dpdk_helper_eal_config_set(g_hc, &tmp_eal); return ret; }