When stopping dumpcap and the main application set an interface to promiscuous mode, it would be disabled when dumpcap performed its cleanup. This results in a change of behavior for the main application after running/utilizing dumpcap. The initial promiscuous mode is now stored and compared when cleaning up allowing that to be preserved.
Fixes: d59fb4d ("app/dumpcap: add new packet capture application") Cc: step...@networkplumber.org Cc: sta...@dpdk.org Signed-off-by: Ben Magistro <konce...@gmail.com> --- app/dumpcap/main.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/dumpcap/main.c b/app/dumpcap/main.c index aaee9349b1..26c641df61 100644 --- a/app/dumpcap/main.c +++ b/app/dumpcap/main.c @@ -84,6 +84,7 @@ struct interface { TAILQ_ENTRY(interface) next; uint16_t port; char name[RTE_ETH_NAME_MAX_LEN]; + int promiscuous_exit; /* 1 when promicuous is set prior to starting dumpcap */ struct rte_rxtx_callback *rx_cb[RTE_MAX_QUEUES_PER_PORT]; }; @@ -204,6 +205,8 @@ static void add_interface(uint16_t port, const char *name) memset(intf, 0, sizeof(*intf)); intf->port = port; rte_strscpy(intf->name, name, sizeof(intf->name)); + // not checking error here; should only error if given an invalid port id + intf->promiscuous_exit = rte_eth_promiscuous_get(port); printf("Capturing on '%s'\n", name); @@ -462,7 +465,7 @@ cleanup_pdump_resources(void) TAILQ_FOREACH(intf, &interfaces, next) { rte_pdump_disable(intf->port, RTE_PDUMP_ALL_QUEUES, RTE_PDUMP_FLAG_RXTX); - if (promiscuous_mode) + if (!intf->promiscuous_exit && promiscuous_mode) rte_eth_promiscuous_disable(intf->port); } } -- 2.27.0