[dpdk-dev] [PATCH] app/testpmd: add --disable-link-check option

David Marchand david.marchand at 6wind.com
Wed Apr 30 15:30:02 CEST 2014


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 at 6wind.com>
---
 app/test-pmd/cmdline.c    |   41 +++++++++++++++++++++++++++++++++++++++++
 app/test-pmd/parameters.c |    5 +++++
 app/test-pmd/testpmd.c    |    9 +++++++--
 app/test-pmd/testpmd.h    |    1 +
 4 files changed, 54 insertions(+), 2 deletions(-)

diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index 7becedc..9d3c823 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -2335,6 +2335,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 {
@@ -5131,6 +5171,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,
diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c
index f537e49..4fa6296 100644
--- a/app/test-pmd/parameters.c
+++ b/app/test-pmd/parameters.c
@@ -192,6 +192,8 @@ usage(char* progname)
 	       "(0 <= mapping <= %d).\n", RTE_ETHDEV_QUEUE_STAT_CNTRS - 1);
 	printf("  --no-flush-rx: Don't flush RX streams before forwarding."
 	       " Used mainly with PCAP drivers.\n");
+	printf("  --disable-link-check: disable check on link status when "
+	       "starting/stopping ports.\n");
 }
 
 #ifdef RTE_LIBRTE_CMDLINE
@@ -533,6 +535,7 @@ launch_args_parse(int argc, char** argv)
 		{ "tx-queue-stats-mapping",	1, 0, 0 },
 		{ "rx-queue-stats-mapping",	1, 0, 0 },
 		{ "no-flush-rx",	0, 0, 0 },
+		{ "disable-link-check",		0, 0, 0 },
 		{ 0, 0, 0, 0 },
 	};
 
@@ -967,6 +970,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':
diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
index a661d33..b9447f2 100644
--- a/app/test-pmd/testpmd.c
+++ b/app/test-pmd/testpmd.c
@@ -259,6 +259,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.
  */
 #ifdef RTE_NIC_BYPASS
@@ -1360,7 +1365,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");
@@ -1402,7 +1407,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");
diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h
index 5b4ee6f..e1664fa 100644
--- a/app/test-pmd/testpmd.h
+++ b/app/test-pmd/testpmd.h
@@ -273,6 +273,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 */
-- 
1.7.10.4



More information about the dev mailing list