Kaur, I believe parse_opts() should be called before dpdk_init() now see https://patches.dpdk.org/project/dpdk/patch/20220125032545.7704-1-koncept1@gmail.com/ On Fri, Sep 16, 2022 at 4:19 AM Kaur, Arshdeep wrote: > > > > -----Original Message----- > > From: Stephen Hemminger > > Sent: Tuesday, September 13, 2022 12:34 AM > > To: dev@dpdk.org > > Cc: Stephen Hemminger ; Kaur, Arshdeep > > > > Subject: [RFT] dumpcap: add file-prefix option > > > > When using dumpcap in container environment or with multiple DPDK > > processes, it is useful to be able to specify file prefix. > > > > This version only accepts the long format option used by other commands. > > If no prefix is specified then the default is used. > > > > Suggested-by: Arshdeep Kaur > > Signed-off-by: Stephen Hemminger > > --- > > Did basic command line test, but still needs testing with a prefix being > used > > (ie multiple apps). > > > > app/dumpcap/main.c | 24 ++++++++++++++++++------ > > 1 file changed, 18 insertions(+), 6 deletions(-) > > > > diff --git a/app/dumpcap/main.c b/app/dumpcap/main.c index > > a6041d4ff495..bdeef96d9c0b 100644 > > --- a/app/dumpcap/main.c > > +++ b/app/dumpcap/main.c > > @@ -61,6 +61,7 @@ static char *output_name; static const char > > *filter_str; static unsigned int ring_size = 2048; static const char > > *capture_comment; > > +static const char *file_prefix; > > static uint32_t snaplen = RTE_MBUF_DEFAULT_BUF_SIZE; static bool > > dump_bpf; static struct { @@ -122,6 +123,7 @@ static void usage(void) > > " add a capture comment to the > output file\n" > > "\n" > > "Miscellaneous:\n" > > + " --file-prefix= prefix to use for > multi-process\n" > > " -q don't report packet capture > counts\n" > > " -v, --version print version information and > exit\n" > > " -h, --help display this help and exit\n" > > @@ -310,6 +312,7 @@ static void parse_opts(int argc, char **argv) > > static const struct option long_options[] = { > > { "autostop", required_argument, NULL, 'a' }, > > { "capture-comment", required_argument, NULL, 0 }, > > + { "file-prefix", required_argument, NULL, 0 }, > > { "help", no_argument, NULL, 'h' }, > > { "interface", required_argument, NULL, 'i' }, > > { "list-interfaces", no_argument, NULL, 'D' }, > > @@ -330,11 +333,13 @@ static void parse_opts(int argc, char **argv) > > > > switch (c) { > > case 0: > > - switch (option_index) { > > - case 0: > > + if (!strcmp(long_options[option_index].name, > > + "capture-comment")) { > > capture_comment = optarg; > > - break; > > - default: > > + } else if (!strcmp(long_options[option_index].name, > > + "file-prefix")) { > > + file_prefix = optarg; > > + } else { > > usage(); > > exit(1); > > } > > parse_opts() is called after dpdk_init(). So whatever file-prefix we > provide, for eal init, it remains NULL. > Please let me know your thoughts about it. > > > @@ -512,12 +517,14 @@ static void dpdk_init(void) > > static const char * const args[] = { > > "dumpcap", "--proc-type", "secondary", > > "--log-level", "notice" > > - > > }; > > - const int eal_argc = RTE_DIM(args); > > + int eal_argc = RTE_DIM(args); > > char **eal_argv; > > unsigned int i; > > > > + if (file_prefix != NULL) > > + eal_argc += 2; > > + > > /* DPDK API requires mutable versions of command line arguments. > > */ > > eal_argv = calloc(eal_argc + 1, sizeof(char *)); > > if (eal_argv == NULL) > > @@ -527,6 +534,11 @@ static void dpdk_init(void) > > for (i = 1; i < RTE_DIM(args); i++) > > eal_argv[i] = strdup(args[i]); > > > > + if (file_prefix != NULL) { > > + eal_argv[i++] = strdup("--file-prefix"); > > + eal_argv[i++] = strdup(file_prefix); > > + } > > + > > if (rte_eal_init(eal_argc, eal_argv) < 0) > > rte_exit(EXIT_FAILURE, "EAL init failed: is primary process > > running?\n"); > > > > -- > > 2.35.1 > >