++ Balaji and Mike.

> -----Original Message-----
> From: Kaur, Arshdeep <arshdeep.k...@intel.com>
> Sent: Friday, September 16, 2022 1:49 PM
> To: Stephen Hemminger <step...@networkplumber.org>; dev@dpdk.org
> Subject: RE: [RFT] dumpcap: add file-prefix option
> 
> 
> 
> > -----Original Message-----
> > From: Stephen Hemminger <step...@networkplumber.org>
> > Sent: Tuesday, September 13, 2022 12:34 AM
> > To: dev@dpdk.org
> > Cc: Stephen Hemminger <step...@networkplumber.org>; Kaur,
> Arshdeep
> > <arshdeep.k...@intel.com>
> > 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 <arshdeep.k...@intel.com>
> > Signed-off-by: Stephen Hemminger <step...@networkplumber.org>
> > ---
> > 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>   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

Reply via email to