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);
                        }
@@ -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