SCEnter();
LiveDevice *pd, *tpd;
+ /* dpdk: need to close all devices before freeing them. */
+ TAILQ_FOREACH (pd, &live_devices, next) {
+ DPDKCloseDevice(pd);
+ }
TAILQ_FOREACH_SAFE(pd, &live_devices, next, tpd) {
if (live_devices_stats) {
SCLogNotice("%s: packets: %" PRIu64 ", drops: %" PRIu64
}
RestoreIfaceOffloading(pd);
- DPDKCloseDevice(pd);
+ DPDKFreeDevice(pd);
if (pd->dev)
SCFree(pd->dev);
{
(void)ldev; // avoid warnings of unused variable
#ifdef HAVE_DPDK
- uint16_t port_id;
- int retval;
if (run_mode == RUNMODE_DPDK) {
- retval = rte_eth_dev_get_port_by_name(ldev->dev, &port_id);
+ uint16_t port_id;
+ int retval = rte_eth_dev_get_port_by_name(ldev->dev, &port_id);
if (retval < 0) {
SCLogError("%s: failed get port id, error: %s", ldev->dev, rte_strerror(-retval));
return;
SCLogPerf("%s: closing device", ldev->dev);
rte_eth_dev_close(port_id);
+ }
+#endif
+}
+void DPDKFreeDevice(LiveDevice *ldev)
+{
+ (void)ldev; // avoid warnings of unused variable
+#ifdef HAVE_DPDK
+ if (run_mode == RUNMODE_DPDK) {
SCLogDebug("%s: releasing packet mempool", ldev->dev);
rte_mempool_free(ldev->dpdk_vars.pkt_mp);
}
void DPDKCleanupEAL(void);
void DPDKCloseDevice(LiveDevice *ldev);
+void DPDKFreeDevice(LiveDevice *ldev);
#ifdef HAVE_DPDK
const char *DPDKGetPortNameByPortID(uint16_t pid);