All of lore.kernel.org
 help / color / mirror / Atom feed
From: Wei Dai <wei.dai@intel.com>
To: thomas@monjalon.net, wenzhuo.lu@intel.com,
	konstantin.ananyev@intel.com, helin.zhang@intel.com,
	jingjing.wu@intel.com
Cc: dev@dpdk.org, Wei Dai <wei.dai@intel.com>
Subject: [PATCH v2 5/5] app/testpmd: add command to test NIC restoration
Date: Tue, 27 Jun 2017 22:07:18 +0800	[thread overview]
Message-ID: <1498572438-25125-6-git-send-email-wei.dai@intel.com> (raw)
In-Reply-To: <1498572438-25125-1-git-send-email-wei.dai@intel.com>

When a NIC is reset, a message will show it.
And then user can run the command "reset_port port_id"
to reset the port and to keep same port id without any
without any configuration.
This patch adds a testpmd command "reconfig_port port_id"
to test whether the port can be reconfigured to have
success Rx and Tx function.
The new command will configure the port with the simplest
setting which includes only 1 Rx queue, only 1 Tx queue,
Rx mode = None and Tx mode = None.
It check if the port can receive and forward some packets.
For example 100 packets in this new command.
Before testing with "reset_port port_id" and then
"reconfig_port port_id", current forwarding should be stopped
first to avoid crash.

Signed-off-by: Wei Dai <wei.dai@intel.com>
---
 app/test-pmd/cmdline.c | 31 ++++++++++++++++
 app/test-pmd/config.c  | 98 ++++++++++++++++++++++++++++++++++++++++++++++++++
 app/test-pmd/testpmd.h |  1 +
 3 files changed, 130 insertions(+)

diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index 90f6bde..1038cee 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -2618,6 +2618,36 @@ cmdline_parse_inst_t cmd_reset_port = {
 	},
 };
 
+/* *** reconfig a port with simplest settings only for test *** */
+struct cmd_reconfig_port_result {
+	cmdline_fixed_string_t command;
+	uint8_t port_id;
+};
+
+static void cmd_reconfig_port_parsed(__attribute__((unused)) void *parsed_result,
+			    __attribute__((unused)) struct cmdline *cl,
+			    __attribute__((unused)) void *data)
+{
+	struct cmd_reconfig_port_result *res = parsed_result;
+	reconfig_port(res->port_id);
+}
+
+cmdline_parse_token_string_t cmd_reconfig_port_cmd =
+	TOKEN_STRING_INITIALIZER(struct cmd_reconfig_port_result, command, "reconfig_port");
+cmdline_parse_token_num_t cmd_reconfig_port_id =
+	TOKEN_NUM_INITIALIZER(struct cmd_reconfig_port_result, port_id, UINT8);
+
+cmdline_parse_inst_t cmd_reconfig_port = {
+	.f = cmd_reconfig_port_parsed,
+	.data = NULL,
+	.help_str = "reconfig_port <port_id>",
+	.tokens = {
+		(void *)&cmd_reconfig_port_cmd,
+		(void *)&cmd_reconfig_port_id,
+		NULL,
+	},
+};
+
 /* *** SET CORELIST and PORTLIST CONFIGURATION *** */
 
 unsigned int
@@ -13782,6 +13812,7 @@ cmdline_parse_ctx_t main_ctx[] = {
 	(cmdline_parse_inst_t *)&cmd_read_rxd_txd,
 	(cmdline_parse_inst_t *)&cmd_stop,
 	(cmdline_parse_inst_t *)&cmd_reset_port,
+	(cmdline_parse_inst_t *)&cmd_reconfig_port,
 	(cmdline_parse_inst_t *)&cmd_mac_addr,
 	(cmdline_parse_inst_t *)&cmd_set_qmap,
 	(cmdline_parse_inst_t *)&cmd_operate_port,
diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c
index da3b525..1fd6a54 100644
--- a/app/test-pmd/config.c
+++ b/app/test-pmd/config.c
@@ -3331,3 +3331,101 @@ reset_port(portid_t port_id)
 		return;
 	printf("Reset port %d failed. diag=%d\n", port_id, diag);	
 }
+
+static void
+test_simplest_rxtx(portid_t port)
+{
+#define BURST_SIZE 32
+#define NUM_PACKETS 100
+
+	struct rte_mbuf *bufs[BURST_SIZE];
+	uint16_t nb_rx, nb_tx, total;
+
+	printf("Begin to forward at least %d packets to test reconfiguration\n", NUM_PACKETS);
+	total = 0;
+	while (1) {
+		nb_rx = rte_eth_rx_burst(port, 0, bufs, BURST_SIZE);
+		if (nb_rx == 0)
+			continue;
+		nb_tx = rte_eth_tx_burst(port, 0, bufs, nb_rx);
+		total += nb_tx;
+		/* Free any unsent packets. */
+		if (unlikely(nb_tx < nb_rx)) {
+			uint16_t buf;
+			for (buf = nb_tx; buf < nb_rx; buf++)
+				rte_pktmbuf_free(bufs[buf]);
+		}
+		if (total >= NUM_PACKETS)
+			break;
+	}
+	printf("Finish forwarding %u packets to test reconfiguration\n", total);
+	return;
+}
+
+int
+reconfig_port(portid_t port)
+{
+#define RX_RING_SIZE 128
+#define TX_RING_SIZE 512
+
+#define NUM_MBUFS 8191
+#define MBUF_CACHE_SIZE 250
+
+	struct rte_mempool *mbuf_pool;
+	struct rte_eth_conf dev_conf = {
+		.rxmode = { .max_rx_pkt_len = ETHER_MAX_LEN }
+	};
+	const uint16_t rx_rings = 1, tx_rings = 1;
+	int retval;
+	uint16_t q;
+
+	if (port_id_is_invalid(port, ENABLED_WARN))
+		return -1;
+
+	/* Creates a new mempool in memory to hold the mbufs. */
+	mbuf_pool = rte_pktmbuf_pool_create("MBUF_POOL", NUM_MBUFS,
+		MBUF_CACHE_SIZE, 0, RTE_MBUF_DEFAULT_BUF_SIZE, rte_eth_dev_socket_id(port));
+
+	/* Configure the Ethernet device. */
+	retval = rte_eth_dev_configure(port, rx_rings, tx_rings, &dev_conf);
+	if (retval != 0)
+		return retval;
+
+	/* Allocate and set up 1 RX queue per Ethernet port. */
+	for (q = 0; q < rx_rings; q++) {
+		retval = rte_eth_rx_queue_setup(port, q, RX_RING_SIZE,
+				rte_eth_dev_socket_id(port), NULL, mbuf_pool);
+		if (retval < 0)
+			return retval;
+	}
+
+	/* Allocate and set up 1 TX queue per Ethernet port. */
+	for (q = 0; q < tx_rings; q++) {
+		retval = rte_eth_tx_queue_setup(port, q, TX_RING_SIZE,
+				rte_eth_dev_socket_id(port), NULL);
+		if (retval < 0)
+			return retval;
+	}
+
+	/* Start the Ethernet port. */
+	retval = rte_eth_dev_start(port);
+	if (retval < 0)
+		return retval;
+
+	/* Display the port MAC address. */
+	struct ether_addr addr;
+	rte_eth_macaddr_get(port, &addr);
+	printf("Port %u MAC: %02" PRIx8 " %02" PRIx8 " %02" PRIx8
+			   " %02" PRIx8 " %02" PRIx8 " %02" PRIx8 "\n",
+			(unsigned)port,
+			addr.addr_bytes[0], addr.addr_bytes[1],
+			addr.addr_bytes[2], addr.addr_bytes[3],
+			addr.addr_bytes[4], addr.addr_bytes[5]);
+
+	/* Enable RX in promiscuous mode for the Ethernet device. */
+	rte_eth_promiscuous_enable(port);
+
+	test_simplest_rxtx(port);
+
+	return 0;
+}
diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h
index 956eec5..c4c2e59 100644
--- a/app/test-pmd/testpmd.h
+++ b/app/test-pmd/testpmd.h
@@ -599,6 +599,7 @@ void close_port(portid_t pid);
 void attach_port(char *identifier);
 void detach_port(uint8_t port_id);
 void reset_port(portid_t port_id);
+int reconfig_port(portid_t port_id);
 int all_ports_stopped(void);
 int port_is_started(portid_t port_id);
 void pmd_test_exit(void);
-- 
2.7.4

  parent reply	other threads:[~2017-06-27 14:17 UTC|newest]

Thread overview: 91+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-05-27  8:22 [PATCH 0/7] NIC port restoration Wei Dai
2017-05-27  8:22 ` [PATCH 1/7] ethdev: add support of NIC restoration Wei Dai
2017-05-27  8:22 ` [PATCH 2/7] ethdev: add support of restoration of queue state Wei Dai
2017-05-27  8:22 ` [PATCH 3/7] ethdev: add support of restoration of port status Wei Dai
2017-05-27  8:22 ` [PATCH 4/7] ethdev: add support of MTU restoration Wei Dai
2017-05-27  8:22 ` [PATCH 5/7] ethdev: add support of restoration of multicast addr Wei Dai
2017-05-27  8:22 ` [PATCH 6/7] net/ixgbe: add support of restoration Wei Dai
2017-05-27  8:22 ` [PATCH 7/7] net/i40e: " Wei Dai
2017-06-07  7:50   ` Wu, Jingjing
2017-06-20  7:55     ` Dai, Wei
2017-06-27 14:07 ` [PATCH v2 0/5] Support NIC reset and keep same port id Wei Dai
2017-06-27 14:07   ` [PATCH v2 1/5] ethdev: add support of NIC reset Wei Dai
2017-06-27 14:07   ` [PATCH v2 2/5] net/ixgbe: add support of reset Wei Dai
2017-06-27 14:07   ` [PATCH v2 3/5] net/i40e: " Wei Dai
2017-06-27 14:07   ` [PATCH v2 4/5] app/testpmd: add command to test NIC reset Wei Dai
2017-06-28  9:10     ` Wu, Jingjing
2017-06-29  7:00       ` Dai, Wei
2017-06-27 14:07   ` Wei Dai [this message]
2017-06-28  9:05     ` [PATCH v2 5/5] app/testpmd: add command to test NIC restoration Wu, Jingjing
2017-06-29  6:58       ` Dai, Wei
2017-06-29  3:51   ` [PATCH v2 0/5] Support NIC reset and keep same port id Peng, Yuan
2017-06-29  6:29     ` Dai, Wei
2017-06-29  8:34   ` [PATCH v3 0/4] " Wei Dai
2017-06-29  8:34     ` [PATCH v3 1/4] ethdev: add support of NIC reset Wei Dai
2017-06-29  8:34     ` [PATCH v3 2/4] net/ixgbe: add support of reset Wei Dai
2017-06-29  8:34     ` [PATCH v3 3/4] net/i40e: " Wei Dai
2017-06-29  8:34     ` [PATCH v3 4/4] app/testpmd: enhance command to test NIC reset Wei Dai
2017-06-29 14:57     ` [PATCH v4 0/5] Support NIC reset and keep same port id Wei Dai
2017-06-29 14:57       ` [PATCH v4 1/5] ethdev: add support of NIC reset Wei Dai
2017-06-29 14:57       ` [PATCH v4 2/5] net/ixgbe: add support of reset Wei Dai
2017-06-29 14:58       ` [PATCH v4 3/5] net/i40e: " Wei Dai
2017-06-30  8:54         ` Wu, Jingjing
2017-06-30  9:37           ` Dai, Wei
2017-06-29 14:58       ` [PATCH v4 4/5] app/testpmd: display PCI address in port info Wei Dai
2017-06-30  9:07         ` Wu, Jingjing
2017-06-29 14:58       ` [PATCH v4 5/5] app/testpmd: enhance command to test NIC reset Wei Dai
2017-06-30  5:13         ` Peng, Yuan
2017-06-30  8:57         ` Wu, Jingjing
2017-06-30  9:09         ` Wu, Jingjing
2017-06-30  9:15           ` Dai, Wei
2017-06-30  5:11       ` [PATCH v4 0/5] Support NIC reset and keep same port id Peng, Yuan
2017-06-30 10:12       ` [PATCH v5 0/4] " Wei Dai
2017-06-30 10:12         ` [PATCH v5 1/4] ethdev: add support of NIC reset Wei Dai
2017-06-30 10:12         ` [PATCH v5 2/4] net/ixgbe: add support of reset Wei Dai
2017-07-07  8:25           ` Thomas Monjalon
2017-07-07  8:36             ` Thomas Monjalon
2017-07-10 10:19               ` Dai, Wei
2017-06-30 10:12         ` [PATCH v5 3/4] net/i40e: " Wei Dai
2017-06-30 10:12         ` [PATCH v5 4/4] app/testpmd: enhance command to test NIC reset Wei Dai
2017-06-30 10:50         ` [PATCH v5 0/4] Support NIC reset and keep same port id Wu, Jingjing
2017-07-05  5:48           ` Dai, Wei
2017-07-10 10:05         ` [PATCH v6 " Wei Dai
2017-07-10 10:05           ` [PATCH v6 1/4] ethdev: add support of NIC reset Wei Dai
2017-07-10 11:35             ` Jerin Jacob
2017-07-11  1:57               ` Dai, Wei
2017-07-11  5:17                 ` Jerin Jacob
2017-07-11 14:36                   ` Dai, Wei
2017-07-12 16:13                     ` Jerin Jacob
2017-07-13 16:06                   ` Dai, Wei
2017-07-10 10:05           ` [PATCH v6 2/4] net/ixgbe: add support of reset Wei Dai
2017-07-10 10:05           ` [PATCH v6 3/4] net/i40e: " Wei Dai
2017-07-10 10:05           ` [PATCH v6 4/4] app/testpmd: enhance command to test NIC reset Wei Dai
2017-07-13 15:53           ` [PATCH v7 0/5] Support NIC reset and keep same port id Wei Dai
2017-07-13 15:53             ` [PATCH v7 1/5] ethdev: add support of NIC reset Wei Dai
2017-07-13 15:53             ` [PATCH v7 2/5] net/ixgbe: add support of reset Wei Dai
2017-07-13 15:53             ` [PATCH v7 3/5] net/i40e: " Wei Dai
2017-07-13 15:53             ` [PATCH v7 4/5] app/testpmd: enhance command to test NIC reset Wei Dai
2017-07-13 15:53             ` [PATCH v7 5/5] doc: add description of the NIC reset API Wei Dai
2017-07-16 19:25             ` [PATCH v7 0/5] Support NIC reset and keep same port id Thomas Monjalon
2017-07-17 14:02               ` Dai, Wei
2017-07-19 14:36               ` Dai, Wei
2017-07-17 15:14             ` [PATCH v8 0/5] Support of " Wei Dai
2017-07-17 15:14               ` [PATCH v8 1/5] ethdev: add support of NIC reset Wei Dai
2017-07-20 13:21                 ` Remy Horton
2017-07-23 13:45                   ` Dai, Wei
2017-07-17 15:15               ` [PATCH v8 2/5] net/ixgbe: add support of reset Wei Dai
2017-07-17 15:15               ` [PATCH v8 3/5] net/i40e: " Wei Dai
2017-07-17 15:15               ` [PATCH v8 4/5] app/testpmd: enhance command to test NIC reset Wei Dai
2017-07-17 15:15               ` [PATCH v8 5/5] doc: add description of the NIC reset API Wei Dai
2017-07-20 13:22                 ` Remy Horton
2017-07-23  9:15               ` [PATCH v9 0/5] Support of NIC reset and keep same port id Wei Dai
2017-07-23  9:15                 ` [PATCH v9 1/5] ethdev: add support of NIC reset Wei Dai
2017-09-13 20:51                   ` Thomas Monjalon
2017-09-14 18:16                   ` Luca Boccassi
2017-07-23  9:15                 ` [PATCH v9 2/5] net/ixgbe: add support of reset Wei Dai
2017-09-13 20:53                   ` Thomas Monjalon
2017-07-23  9:15                 ` [PATCH v9 3/5] net/i40e: " Wei Dai
2017-07-23  9:15                 ` [PATCH v9 4/5] app/testpmd: enhance command to test NIC reset Wei Dai
2017-07-23  9:15                 ` [PATCH v9 5/5] doc: add description of the NIC reset API Wei Dai
2017-09-13 21:02                 ` [PATCH v9 0/5] Support of NIC reset and keep same port id Thomas Monjalon
2017-09-14  1:32                   ` Dai, Wei

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1498572438-25125-6-git-send-email-wei.dai@intel.com \
    --to=wei.dai@intel.com \
    --cc=dev@dpdk.org \
    --cc=helin.zhang@intel.com \
    --cc=jingjing.wu@intel.com \
    --cc=konstantin.ananyev@intel.com \
    --cc=thomas@monjalon.net \
    --cc=wenzhuo.lu@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.