app/testpmd: add --disable-link-check option
authorDavid Marchand <david.marchand@6wind.com>
Wed, 30 Apr 2014 13:30:02 +0000 (15:30 +0200)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Fri, 16 May 2014 11:25:42 +0000 (13:25 +0200)
When starting/stopping ports, a link status check on all available ports is
done. This can be annoying when cables are not plugged at the time.
Default behavior is untouched.

Signed-off-by: David Marchand <david.marchand@6wind.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
app/test-pmd/cmdline.c
app/test-pmd/parameters.c
app/test-pmd/testpmd.c
app/test-pmd/testpmd.h

index c6a417a..5f39281 100644 (file)
@@ -2328,6 +2328,46 @@ cmdline_parse_inst_t cmd_set_flush_rx = {
        },
 };
 
+/* *** ENABLE/DISABLE LINK STATUS CHECK *** */
+struct cmd_set_link_check {
+       cmdline_fixed_string_t set;
+       cmdline_fixed_string_t link_check;
+       cmdline_fixed_string_t mode;
+};
+
+static void
+cmd_set_link_check_parsed(void *parsed_result,
+               __attribute__((unused)) struct cmdline *cl,
+               __attribute__((unused)) void *data)
+{
+       struct cmd_set_link_check *res = parsed_result;
+       no_link_check = (uint8_t)((strcmp(res->mode, "on") == 0) ? 0 : 1);
+}
+
+cmdline_parse_token_string_t cmd_setlinkcheck_set =
+       TOKEN_STRING_INITIALIZER(struct cmd_set_link_check,
+                       set, "set");
+cmdline_parse_token_string_t cmd_setlinkcheck_link_check =
+       TOKEN_STRING_INITIALIZER(struct cmd_set_link_check,
+                       link_check, "link_check");
+cmdline_parse_token_string_t cmd_setlinkcheck_mode =
+       TOKEN_STRING_INITIALIZER(struct cmd_set_link_check,
+                       mode, "on#off");
+
+
+cmdline_parse_inst_t cmd_set_link_check = {
+       .f = cmd_set_link_check_parsed,
+       .help_str = "set link_check on|off: enable/disable link status check "
+                   "when starting/stopping a port",
+       .data = NULL,
+       .tokens = {
+               (void *)&cmd_setlinkcheck_set,
+               (void *)&cmd_setlinkcheck_link_check,
+               (void *)&cmd_setlinkcheck_mode,
+               NULL,
+       },
+};
+
 #ifdef RTE_NIC_BYPASS
 /* *** SET NIC BYPASS MODE *** */
 struct cmd_set_bypass_mode_result {
@@ -5136,6 +5176,7 @@ cmdline_parse_ctx_t main_ctx[] = {
        (cmdline_parse_inst_t *)&cmd_set_allmulti_mode_one,
        (cmdline_parse_inst_t *)&cmd_set_allmulti_mode_all,
        (cmdline_parse_inst_t *)&cmd_set_flush_rx,
+       (cmdline_parse_inst_t *)&cmd_set_link_check,
 #ifdef RTE_NIC_BYPASS
        (cmdline_parse_inst_t *)&cmd_set_bypass_mode,
        (cmdline_parse_inst_t *)&cmd_set_bypass_event,
index d37e1b0..7a60048 100644 (file)
@@ -197,6 +197,8 @@ usage(char* progname)
        printf("  --no-flush-rx: Don't flush RX streams before forwarding."
               " Used mainly with PCAP drivers.\n");
        printf("  --txpkts=X[,Y]*: set TX segment sizes.\n");
+       printf("  --disable-link-check: disable check on link status when "
+              "starting/stopping ports.\n");
 }
 
 #ifdef RTE_LIBRTE_CMDLINE
@@ -587,6 +589,7 @@ launch_args_parse(int argc, char** argv)
                { "rx-queue-stats-mapping",     1, 0, 0 },
                { "no-flush-rx",        0, 0, 0 },
                { "txpkts",                     1, 0, 0 },
+               { "disable-link-check",         0, 0, 0 },
                { 0, 0, 0, 0 },
        };
 
@@ -1044,6 +1047,8 @@ launch_args_parse(int argc, char** argv)
                        }
                        if (!strcmp(lgopts[opt_idx].name, "no-flush-rx"))
                                no_flush_rx = 1;
+                       if (!strcmp(lgopts[opt_idx].name, "disable-link-check"))
+                               no_link_check = 1;
 
                        break;
                case 'h':
index a4a8032..ded8cd3 100644 (file)
@@ -262,6 +262,11 @@ uint16_t port_topology = PORT_TOPOLOGY_PAIRED; /* Ports are paired by default */
  */
 uint8_t no_flush_rx = 0; /* flush by default */
 
+/*
+ * Avoids to check link status when starting/stopping a port.
+ */
+uint8_t no_link_check = 0; /* check by default */
+
 /*
  * NIC bypass mode configuration options.
  */
@@ -1364,7 +1369,7 @@ start_port(portid_t pid)
                need_check_link_status = 1;
        }
 
-       if (need_check_link_status)
+       if (need_check_link_status && !no_link_check)
                check_all_ports_link_status(nb_ports, RTE_PORT_ALL);
        else
                printf("Please stop the ports first\n");
@@ -1406,7 +1411,7 @@ stop_port(portid_t pid)
                        printf("Port %d can not be set into stopped\n", pi);
                need_check_link_status = 1;
        }
-       if (need_check_link_status)
+       if (need_check_link_status && !no_link_check)
                check_all_ports_link_status(nb_ports, RTE_PORT_ALL);
 
        printf("Done\n");
index 83193ef..2bdb1a2 100644 (file)
@@ -278,6 +278,7 @@ extern uint8_t  numa_support; /**< set by "--numa" parameter */
 extern uint16_t port_topology; /**< set by "--port-topology" parameter */
 extern uint8_t no_flush_rx; /**<set by "--no-flush-rx" parameter */
 extern uint8_t  mp_anon; /**< set by "--mp-anon" parameter */
+extern uint8_t no_link_check; /**<set by "--disable-link-check" parameter */
 
 #ifdef RTE_NIC_BYPASS
 extern uint32_t bypass_timeout; /**< Store the NIC bypass watchdog timeout */