app/dumpcap: fix list interfaces

The change to do argument process before EAL init broke
the support of list-interfaces option.
Fix by setting flag and doing list-interfaces later.

Fixes: a8dde09f97 ("app/dumpcap: allow help/version without primary process")
Cc: stable@dpdk.org

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Reshma Pattan <reshma.pattan@intel.com>
This commit is contained in:
Stephen Hemminger 2022-09-25 16:34:10 -07:00 committed by Thomas Monjalon
parent 668958f3c1
commit d59fb4d1a2

View File

@ -63,6 +63,8 @@ static unsigned int ring_size = 2048;
static const char *capture_comment;
static uint32_t snaplen = RTE_MBUF_DEFAULT_BUF_SIZE;
static bool dump_bpf;
static bool show_interfaces;
static struct {
uint64_t duration; /* nanoseconds */
unsigned long packets; /* number of packets in file */
@ -256,7 +258,7 @@ static void select_interface(const char *arg)
}
/* Display list of possible interfaces that can be used. */
static void show_interfaces(void)
static void dump_interfaces(void)
{
char name[RTE_ETH_NAME_MAX_LEN];
uint16_t p;
@ -266,6 +268,8 @@ static void show_interfaces(void)
continue;
printf("%u. %s\n", p, name);
}
exit(0);
}
static void compile_filter(void)
@ -353,8 +357,8 @@ static void parse_opts(int argc, char **argv)
dump_bpf = true;
break;
case 'D':
show_interfaces();
exit(0);
show_interfaces = true;
break;
case 'f':
filter_str = optarg;
break;
@ -529,9 +533,6 @@ static void dpdk_init(void)
if (rte_eal_init(eal_argc, eal_argv) < 0)
rte_exit(EXIT_FAILURE, "EAL init failed: is primary process running?\n");
if (rte_eth_dev_count_avail() == 0)
rte_exit(EXIT_FAILURE, "No Ethernet ports found\n");
}
/* Create packet ring shared between callbacks and process */
@ -789,6 +790,12 @@ int main(int argc, char **argv)
parse_opts(argc, argv);
dpdk_init();
if (show_interfaces)
dump_interfaces();
if (rte_eth_dev_count_avail() == 0)
rte_exit(EXIT_FAILURE, "No Ethernet ports found\n");
if (filter_str)
compile_filter();