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