From 0489bcb1377f35af43c3c3c07c641ef36e0454f4 Mon Sep 17 00:00:00 2001 From: Jim Harris Date: Mon, 6 Nov 2017 09:58:29 -0700 Subject: [PATCH] iscsi, nvmf, vhost: break out arg parsing into separate functions This prepares for moving all of the common app framework argument parsing into a library that can be used by all app framework based applications. Signed-off-by: Jim Harris Change-Id: Ibbfb08ac687acf3201c4a3e808edbe770213a6f0 Reviewed-on: https://review.gerrithub.io/385928 Reviewed-by: Ben Walker Reviewed-by: Daniel Verkamp Tested-by: SPDK Automated Test System --- app/iscsi_tgt/iscsi_tgt.c | 120 ++++++++++++++++++++------------------ app/nvmf_tgt/nvmf_main.c | 110 +++++++++++++++++----------------- app/vhost/vhost.c | 56 ++++++++++-------- 3 files changed, 155 insertions(+), 131 deletions(-) diff --git a/app/iscsi_tgt/iscsi_tgt.c b/app/iscsi_tgt/iscsi_tgt.c index 1ba35f63b..1387c2d63 100644 --- a/app/iscsi_tgt/iscsi_tgt.c +++ b/app/iscsi_tgt/iscsi_tgt.c @@ -39,6 +39,8 @@ #include "spdk/log.h" #include "spdk/net.h" +static int g_daemon_mode = 0; + static void spdk_sigusr1(int signo __attribute__((__unused__))) { @@ -86,12 +88,70 @@ spdk_startup(void *arg1, void *arg2) } } +static void +iscsi_parse_args(int argc, char **argv, struct spdk_app_opts *opts) +{ + int ch, rc; + + while ((ch = getopt(argc, argv, "bc:de:i:m:n:p:qs:t:H")) != -1) { + switch (ch) { + case 'd': + opts->enable_coredump = false; + break; + case 'c': + opts->config_file = optarg; + break; + case 'i': + opts->shm_id = atoi(optarg); + break; + case 't': + rc = spdk_log_set_trace_flag(optarg); + if (rc < 0) { + fprintf(stderr, "unknown flag\n"); + usage(argv[0]); + exit(EXIT_FAILURE); + } + opts->print_level = SPDK_LOG_DEBUG; +#ifndef DEBUG + fprintf(stderr, "%s must be built with CONFIG_DEBUG=y for -t flag\n", + argv[0]); + usage(argv[0]); + exit(EXIT_FAILURE); +#endif + break; + case 'e': + opts->tpoint_group_mask = optarg; + break; + case 'q': + opts->print_level = SPDK_LOG_WARN; + break; + case 'm': + opts->reactor_mask = optarg; + break; + case 'n': + opts->mem_channel = atoi(optarg); + break; + case 'p': + opts->master_core = atoi(optarg); + break; + case 's': + opts->mem_size = atoi(optarg); + break; + case 'b': + g_daemon_mode = 1; + break; + case 'H': + default: + usage(argv[0]); + exit(EXIT_SUCCESS); + } + } +} + int main(int argc, char **argv) { - int ch; int rc; - int daemon_mode = 0; struct spdk_app_opts opts = {}; /* default value in opts structure */ @@ -102,61 +162,9 @@ main(int argc, char **argv) } opts.name = "iscsi"; - while ((ch = getopt(argc, argv, "bc:de:i:m:n:p:qs:t:H")) != -1) { - switch (ch) { - case 'd': - opts.enable_coredump = false; - break; - case 'c': - opts.config_file = optarg; - break; - case 'i': - opts.shm_id = atoi(optarg); - break; - case 't': - rc = spdk_log_set_trace_flag(optarg); - if (rc < 0) { - fprintf(stderr, "unknown flag\n"); - usage(argv[0]); - exit(EXIT_FAILURE); - } - opts.print_level = SPDK_LOG_DEBUG; -#ifndef DEBUG - fprintf(stderr, "%s must be built with CONFIG_DEBUG=y for -t flag\n", - argv[0]); - usage(argv[0]); - exit(EXIT_FAILURE); -#endif - break; - case 'e': - opts.tpoint_group_mask = optarg; - break; - case 'q': - opts.print_level = SPDK_LOG_WARN; - break; - case 'm': - opts.reactor_mask = optarg; - break; - case 'n': - opts.mem_channel = atoi(optarg); - break; - case 'p': - opts.master_core = atoi(optarg); - break; - case 's': - opts.mem_size = atoi(optarg); - break; - case 'b': - daemon_mode = 1; - break; - case 'H': - default: - usage(argv[0]); - exit(EXIT_SUCCESS); - } - } + iscsi_parse_args(argc, argv, &opts); - if (daemon_mode) { + if (g_daemon_mode) { if (daemon(1, 0) < 0) { SPDK_ERRLOG("Start iscsi target daemon faild.\n"); exit(EXIT_FAILURE); diff --git a/app/nvmf_tgt/nvmf_main.c b/app/nvmf_tgt/nvmf_main.c index 8b0d0f37c..fb5719621 100644 --- a/app/nvmf_tgt/nvmf_main.c +++ b/app/nvmf_tgt/nvmf_main.c @@ -65,11 +65,67 @@ usage(void) printf(" -d - disable coredump file enabling\n"); } +static void +nvmf_parse_args(int argc, char **argv, struct spdk_app_opts *opts) +{ + int ch, rc; + + while ((ch = getopt(argc, argv, "c:de:i:m:n:p:qs:t:DH")) != -1) { + switch (ch) { + case 'd': + opts->enable_coredump = false; + break; + case 'c': + opts->config_file = optarg; + break; + case 'i': + opts->shm_id = atoi(optarg); + break; + case 't': + rc = spdk_log_set_trace_flag(optarg); + if (rc < 0) { + fprintf(stderr, "unknown flag\n"); + usage(); + exit(EXIT_FAILURE); + } + opts->print_level = SPDK_LOG_DEBUG; +#ifndef DEBUG + fprintf(stderr, "%s must be rebuilt with CONFIG_DEBUG=y for -t flag.\n", + argv[0]); + usage(); + exit(EXIT_FAILURE); +#endif + break; + case 'm': + opts->reactor_mask = optarg; + break; + case 'n': + opts->mem_channel = atoi(optarg); + break; + case 'p': + opts->master_core = atoi(optarg); + break; + case 's': + opts->mem_size = atoi(optarg); + break; + case 'e': + opts->tpoint_group_mask = optarg; + break; + case 'q': + opts->print_level = SPDK_LOG_WARN; + break; + case 'D': + case 'H': + default: + usage(); + exit(EXIT_SUCCESS); + } + } +} int main(int argc, char **argv) { - int ch; int rc; struct spdk_app_opts opts = {}; @@ -81,57 +137,7 @@ main(int argc, char **argv) } opts.max_delay_us = 1000; /* 1 ms */ - while ((ch = getopt(argc, argv, "c:de:i:m:n:p:qs:t:DH")) != -1) { - switch (ch) { - case 'd': - opts.enable_coredump = false; - break; - case 'c': - opts.config_file = optarg; - break; - case 'i': - opts.shm_id = atoi(optarg); - break; - case 't': - rc = spdk_log_set_trace_flag(optarg); - if (rc < 0) { - fprintf(stderr, "unknown flag\n"); - usage(); - exit(EXIT_FAILURE); - } - opts.print_level = SPDK_LOG_DEBUG; -#ifndef DEBUG - fprintf(stderr, "%s must be rebuilt with CONFIG_DEBUG=y for -t flag.\n", - argv[0]); - usage(); - exit(EXIT_FAILURE); -#endif - break; - case 'm': - opts.reactor_mask = optarg; - break; - case 'n': - opts.mem_channel = atoi(optarg); - break; - case 'p': - opts.master_core = atoi(optarg); - break; - case 's': - opts.mem_size = atoi(optarg); - break; - case 'e': - opts.tpoint_group_mask = optarg; - break; - case 'q': - opts.print_level = SPDK_LOG_WARN; - break; - case 'D': - case 'H': - default: - usage(); - exit(EXIT_SUCCESS); - } - } + nvmf_parse_args(argc, argv, &opts); rc = spdk_nvmf_tgt_start(&opts); diff --git a/app/vhost/vhost.c b/app/vhost/vhost.c index 1915b83bb..dfbd197bf 100644 --- a/app/vhost/vhost.c +++ b/app/vhost/vhost.c @@ -44,6 +44,9 @@ #define SPDK_VHOST_DEFAULT_ENABLE_COREDUMP true #define SPDK_VHOST_DEFAULT_MEM_SIZE 1024 +static const char *g_socket_path = NULL; +static const char *g_pid_path = NULL; + static void vhost_app_opts_init(struct spdk_app_opts *opts) { @@ -94,54 +97,50 @@ save_pid(const char *pid_path) fclose(pid_file); } -int -main(int argc, char *argv[]) +static void +vhost_parse_args(int argc, char **argv, struct spdk_app_opts *opts) { - struct spdk_app_opts opts = {}; - int ch; - int rc; - const char *socket_path = NULL; - const char *pid_path = NULL; + int ch, rc; - vhost_app_opts_init(&opts); + vhost_app_opts_init(opts); while ((ch = getopt(argc, argv, "c:de:f:i:m:Np:qs:S:t:h")) != -1) { switch (ch) { case 'c': - opts.config_file = optarg; + opts->config_file = optarg; break; case 'd': - opts.enable_coredump = false; + opts->enable_coredump = false; break; case 'e': - opts.tpoint_group_mask = optarg; + opts->tpoint_group_mask = optarg; break; case 'f': - pid_path = optarg; + g_pid_path = optarg; break; case 'h': usage(argv[0]); exit(EXIT_SUCCESS); case 'i': - opts.shm_id = strtoul(optarg, NULL, 10); + opts->shm_id = strtoul(optarg, NULL, 10); break; case 'm': - opts.reactor_mask = optarg; + opts->reactor_mask = optarg; break; case 'N': - opts.no_pci = true; + opts->no_pci = true; break; case 'p': - opts.master_core = strtoul(optarg, NULL, 10); + opts->master_core = strtoul(optarg, NULL, 10); break; case 'q': - opts.print_level = SPDK_LOG_WARN; + opts->print_level = SPDK_LOG_WARN; break; case 's': - opts.mem_size = strtoul(optarg, NULL, 10); + opts->mem_size = strtoul(optarg, NULL, 10); break; case 'S': - socket_path = optarg; + g_socket_path = optarg; break; case 't': rc = spdk_log_set_trace_flag(optarg); @@ -150,7 +149,7 @@ main(int argc, char *argv[]) usage(argv[0]); exit(EXIT_FAILURE); } - opts.print_level = SPDK_LOG_DEBUG; + opts->print_level = SPDK_LOG_DEBUG; #ifndef DEBUG fprintf(stderr, "%s must be rebuilt with CONFIG_DEBUG=y for -t flag.\n", argv[0]); @@ -164,15 +163,26 @@ main(int argc, char *argv[]) exit(EXIT_FAILURE); } } +} - if (pid_path) { - save_pid(pid_path); +int +main(int argc, char *argv[]) +{ + struct spdk_app_opts opts = {}; + int rc; + + vhost_app_opts_init(&opts); + + vhost_parse_args(argc, argv, &opts); + + if (g_pid_path) { + save_pid(g_pid_path); } opts.shutdown_cb = spdk_vhost_shutdown_cb; /* Blocks until the application is exiting */ - rc = spdk_app_start(&opts, spdk_vhost_startup, (void *)socket_path, NULL); + rc = spdk_app_start(&opts, spdk_vhost_startup, (void *)g_socket_path, NULL); spdk_app_fini();