Add a parameter in testpmd CLI. This parameter is used
to set the max queue number per VF.

Signed-off-by: Wenzhuo Lu <wenzhuo...@intel.com>
---
 app/test-pmd/parameters.c | 33 ++++++++++++++++++++++++++++++++-
 app/test-pmd/testpmd.c    |  2 ++
 app/test-pmd/testpmd.h    |  1 +
 3 files changed, 35 insertions(+), 1 deletion(-)

diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c
index 2f7f70f..2dd806d 100644
--- a/app/test-pmd/parameters.c
+++ b/app/test-pmd/parameters.c
@@ -100,7 +100,7 @@
               "--rss-ip | --rss-udp | "
               "--rxpt= | --rxht= | --rxwt= | --rxfreet= | "
               "--txpt= | --txht= | --txwt= | --txfreet= | "
-              "--txrst= | --txqflags= ]\n",
+              "--txrst= | --txqflags= | --vf-max-queue= ]\n",
               progname);
 #ifdef RTE_LIBRTE_CMDLINE
        printf("  --interactive: run in interactive mode.\n");
@@ -216,6 +216,8 @@
               "disable print of designated event or all of them.\n");
        printf("  --flow-isolate-all: "
               "requests flow API isolated mode on all ports at initialization 
time.\n");
+       printf("  --vf-max-queue=N: set the maximum queue number per VF "
+              "(N: positive integer).\n");
 }
 
 #ifdef RTE_LIBRTE_CMDLINE
@@ -638,6 +640,7 @@
                { "no-rmv-interrupt",           0, 0, 0 },
                { "print-event",                1, 0, 0 },
                { "mask-event",                 1, 0, 0 },
+               { "vf-max-queue",               1, 0, 0 },
                { 0, 0, 0, 0 },
        };
 
@@ -1133,3 +1136,31 @@
                }
        }
 }
+
+void
+pre_launch_args_parse(int argc, char **argv)
+{
+       int i;
+       char *tmp;
+       int nb_queue = 0;
+
+       /**
+        * Don't want to check the first string.
+        * It should not be a parameter.
+        */
+       for (i = 1; i < argc; i++) {
+               tmp = *(argv + i);
+               if (!strncmp(tmp, "--vf-max-queue=", 15)) {
+                       tmp += 15;
+                       nb_queue = atoi(tmp);
+                       if (nb_queue > 0)
+                               g_max_queue_number_per_vf = nb_queue;
+                       else
+                               rte_exit(EXIT_FAILURE,
+                                        "vf-max-queue must be > 0\n");
+
+                       /* delete it if more than 1 patameters to check */
+                       break;
+               }
+       }
+}
diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
index e754d12..b374f38 100644
--- a/app/test-pmd/testpmd.c
+++ b/app/test-pmd/testpmd.c
@@ -2289,6 +2289,8 @@ uint8_t port_is_bonding_slave(portid_t slave_pid)
        signal(SIGINT, signal_handler);
        signal(SIGTERM, signal_handler);
 
+       pre_launch_args_parse(argc, argv);
+
        diag = rte_eal_init(argc, argv);
        if (diag < 0)
                rte_panic("Cannot init EAL\n");
diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h
index c9d7739..8d0e72b 100644
--- a/app/test-pmd/testpmd.h
+++ b/app/test-pmd/testpmd.h
@@ -650,6 +650,7 @@ void port_rss_hash_key_update(portid_t port_id, char 
rss_type[],
 uint8_t *open_ddp_package_file(const char *file_path, uint32_t *size);
 int save_ddp_package_file(const char *file_path, uint8_t *buf, uint32_t size);
 int close_ddp_package_file(uint8_t *buf);
+void pre_launch_args_parse(int argc, char **argv);
 
 enum print_warning {
        ENABLED_WARN = 0,
-- 
1.9.3

Reply via email to