All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dekel Peled <dekelp@mellanox.com>
To: wenzhuo.lu@intel.com, jingjing.wu@intel.com,
	bernard.iremonger@intel.com, olivier.matz@6wind.com,
	adrien.mazarguil@6wind.com, thomas@monjalon.net,
	ferruh.yigit@intel.com, arybchenko@solarflare.com
Cc: shahafs@mellanox.com, dev@dpdk.org, orika@mellanox.com
Subject: [PATCH v4 3/3] app/testpmd: add Tx metadata debug commands
Date: Thu, 11 Oct 2018 13:49:58 +0300	[thread overview]
Message-ID: <1539254998-8555-4-git-send-email-dekelp@mellanox.com> (raw)
In-Reply-To: <1538056677-33846-1-git-send-email-dekelp@mellanox.com>

As described in [1],[2] this series adds option to set metadata value as
match pattern when creating a new flow rule.

This patch introduces code for debug porpuse only.
The new 'config' command takes a 32 bit value and stores it per port:
	port config <port_id> tx_metadata <value>

testpmd will add to any Tx packet sent from this port the metadata
value, and set ol_flags accordingly.

A matching 'show' command is added to read the configured value:
	port config <port_id> tx_metadata <value>

[1] "ethdev: support metadata as flow rule criteria"
[2] "app/testpmd: support metadata as flow rule criteria"

Signed-off-by: Dekel Peled <dekelp@mellanox.com>
---
 app/test-pmd/cmdline.c                      | 104 ++++++++++++++++++++++++++++
 app/test-pmd/testpmd.c                      |   1 +
 app/test-pmd/testpmd.h                      |   2 +
 app/test-pmd/txonly.c                       |   9 +++
 doc/guides/testpmd_app_ug/testpmd_funcs.rst |   7 ++
 5 files changed, 123 insertions(+)

diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index d7409be..64218b4 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -17690,6 +17690,108 @@ struct cmd_config_per_queue_tx_offload_result {
 	}
 };
 
+/* *** configure tx_metadata for specific port *** */
+struct cmd_config_tx_metadata_specific_result {
+	cmdline_fixed_string_t port;
+	cmdline_fixed_string_t keyword;
+	uint16_t port_id;
+	cmdline_fixed_string_t item;
+	uint32_t value;
+};
+
+static void
+cmd_config_tx_metadata_specific_parsed(void *parsed_result,
+				__attribute__((unused)) struct cmdline *cl,
+				__attribute__((unused)) void *data)
+{
+	struct cmd_config_tx_metadata_specific_result *res = parsed_result;
+
+	if (port_id_is_invalid(res->port_id, ENABLED_WARN))
+		return;
+	ports[res->port_id].tx_metadata = res->value;
+}
+
+cmdline_parse_token_string_t cmd_config_tx_metadata_specific_port =
+	TOKEN_STRING_INITIALIZER(struct cmd_config_tx_metadata_specific_result,
+			port, "port");
+cmdline_parse_token_string_t cmd_config_tx_metadata_specific_keyword =
+	TOKEN_STRING_INITIALIZER(struct cmd_config_tx_metadata_specific_result,
+			keyword, "config");
+cmdline_parse_token_num_t cmd_config_tx_metadata_specific_id =
+	TOKEN_NUM_INITIALIZER(struct cmd_config_tx_metadata_specific_result,
+			port_id, UINT16);
+cmdline_parse_token_string_t cmd_config_tx_metadata_specific_item =
+	TOKEN_STRING_INITIALIZER(struct cmd_config_tx_metadata_specific_result,
+			item, "tx_metadata");
+cmdline_parse_token_num_t cmd_config_tx_metadata_specific_value =
+	TOKEN_NUM_INITIALIZER(struct cmd_config_tx_metadata_specific_result,
+			value, UINT32);
+
+cmdline_parse_inst_t cmd_config_tx_metadata_specific = {
+	.f = cmd_config_tx_metadata_specific_parsed,
+	.data = NULL,
+	.help_str = "port config <port_id> tx_metadata <value>",
+	.tokens = {
+		(void *)&cmd_config_tx_metadata_specific_port,
+		(void *)&cmd_config_tx_metadata_specific_keyword,
+		(void *)&cmd_config_tx_metadata_specific_id,
+		(void *)&cmd_config_tx_metadata_specific_item,
+		(void *)&cmd_config_tx_metadata_specific_value,
+		NULL,
+	},
+};
+
+/* *** display tx_metadata per port configuration *** */
+struct cmd_show_tx_metadata_result {
+	cmdline_fixed_string_t cmd_show;
+	cmdline_fixed_string_t cmd_port;
+	cmdline_fixed_string_t cmd_keyword;
+	portid_t cmd_pid;
+};
+
+static void
+cmd_show_tx_metadata_parsed(void *parsed_result,
+		__attribute__((unused)) struct cmdline *cl,
+		__attribute__((unused)) void *data)
+{
+	struct cmd_show_tx_metadata_result *res = parsed_result;
+
+	if (!rte_eth_dev_is_valid_port(res->cmd_pid)) {
+		printf("invalid port id %u\n", res->cmd_pid);
+		return;
+	}
+	if (!strcmp(res->cmd_keyword, "tx_metadata")) {
+		printf("Port %u tx_metadata: %u\n", res->cmd_pid,
+				ports[res->cmd_pid].tx_metadata);
+	}
+}
+
+cmdline_parse_token_string_t cmd_show_tx_metadata_show =
+	TOKEN_STRING_INITIALIZER(struct cmd_show_tx_metadata_result,
+			cmd_show, "show");
+cmdline_parse_token_string_t cmd_show_tx_metadata_port =
+	TOKEN_STRING_INITIALIZER(struct cmd_show_tx_metadata_result,
+			cmd_port, "port");
+cmdline_parse_token_num_t cmd_show_tx_metadata_pid =
+	TOKEN_NUM_INITIALIZER(struct cmd_show_tx_metadata_result,
+			cmd_pid, UINT16);
+cmdline_parse_token_string_t cmd_show_tx_metadata_keyword =
+	TOKEN_STRING_INITIALIZER(struct cmd_show_tx_metadata_result,
+			cmd_keyword, "tx_metadata");
+
+cmdline_parse_inst_t cmd_show_tx_metadata = {
+	.f = cmd_show_tx_metadata_parsed,
+	.data = NULL,
+	.help_str = "show port <port_id> tx_metadata",
+	.tokens = {
+		(void *)&cmd_show_tx_metadata_show,
+		(void *)&cmd_show_tx_metadata_port,
+		(void *)&cmd_show_tx_metadata_pid,
+		(void *)&cmd_show_tx_metadata_keyword,
+		NULL,
+	},
+};
+
 /* ******************************************************************************** */
 
 /* list of instructions */
@@ -17956,6 +18058,8 @@ struct cmd_config_per_queue_tx_offload_result {
 	(cmdline_parse_inst_t *)&cmd_operate_bpf_ld_parse,
 	(cmdline_parse_inst_t *)&cmd_operate_bpf_unld_parse,
 #endif
+	(cmdline_parse_inst_t *)&cmd_config_tx_metadata_specific,
+	(cmdline_parse_inst_t *)&cmd_show_tx_metadata,
 	NULL,
 };
 
diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
index a806900..68434da 100644
--- a/app/test-pmd/testpmd.c
+++ b/app/test-pmd/testpmd.c
@@ -771,6 +771,7 @@ static void eth_dev_event_callback(char *device_name,
 		/* set flag to initialize port/queue */
 		port->need_reconfig = 1;
 		port->need_reconfig_queues = 1;
+		port->tx_metadata = 0;
 	}
 
 	/*
diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h
index a1f6614..ac55311 100644
--- a/app/test-pmd/testpmd.h
+++ b/app/test-pmd/testpmd.h
@@ -183,6 +183,8 @@ struct rte_port {
 #ifdef SOFTNIC
 	struct softnic_port     softport;  /**< softnic params */
 #endif
+	/**< metadata value to add in Tx packets (debug only). */
+	uint32_t                tx_metadata;
 };
 
 /**
diff --git a/app/test-pmd/txonly.c b/app/test-pmd/txonly.c
index 1f08b6e..fae84ca 100644
--- a/app/test-pmd/txonly.c
+++ b/app/test-pmd/txonly.c
@@ -253,6 +253,15 @@
 		pkt->l2_len = sizeof(struct ether_hdr);
 		pkt->l3_len = sizeof(struct ipv4_hdr);
 		pkts_burst[nb_pkt] = pkt;
+
+		/*
+		 * If user configured metadata value add it to packet
+		 * and set ol_flags accordingly
+		 */
+		if (ports[fs->tx_port].tx_metadata) {
+			pkt->tx_metadata = ports[fs->tx_port].tx_metadata;
+			pkt->ol_flags |= PKT_TX_METADATA;
+		}
 	}
 	nb_tx = rte_eth_tx_burst(fs->tx_port, fs->tx_queue, pkts_burst, nb_pkt);
 	/*
diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
index 83635c0..7edea33 100644
--- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst
+++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst
@@ -851,6 +851,13 @@ Disable hardware insertion of a VLAN header in packets sent on a port::
 
    testpmd> tx_vlan reset (port_id)
 
+tx_metadata set
+~~~~~~~~~~~~~~~
+
+Set metadata value to insert in packets sent to PMD::
+
+   testpmd> tx_metadata set (port_id) (value)
+
 csum set
 ~~~~~~~~
 
-- 
1.8.3.1

  parent reply	other threads:[~2018-10-11 11:05 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-16 13:33 [PATCH 1/3] ethdev: support metadata as flow rule criteria Dekel Peled
2018-09-16 13:33 ` [PATCH 2/3] app/testpmd: " Dekel Peled
2018-09-16 13:33 ` [PATCH 3/3] app/testpmd: add debug command tx_metadata set <port-id> <value> Dekel Peled
2018-09-16 14:37 ` [PATCH v2 0/3] *** SUBJECT HERE *** Dekel Peled
2018-09-27 13:57   ` [PATCH v3 0/3] support meadata as flow rule criteria Dekel Peled
2018-10-03 20:46     ` Thomas Monjalon
2018-10-11 10:49     ` [PATCH v4 " Dekel Peled
2018-10-16  8:42       ` Shahaf Shuler
2018-10-17 12:03       ` [PATCH v5 0/3] support metadata " Dekel Peled
2018-10-21 14:22         ` [PATCH v6 0/2] " Dekel Peled
2018-10-22 16:14           ` Ferruh Yigit
2018-10-21 14:22         ` [PATCH v6 1/2] ethdev: " Dekel Peled
2018-10-21 14:22         ` [PATCH v6 2/2] app/testpmd: support metadata as flow rule item Dekel Peled
2018-10-22 16:13           ` Ferruh Yigit
2018-10-17 12:03       ` [PATCH v5 1/3] ethdev: support metadata as flow rule criteria Dekel Peled
2018-10-17 14:04         ` Andrew Rybchenko
2018-10-17 12:03       ` [PATCH v5 2/3] app/testpmd: support metadata as flow rule item Dekel Peled
2018-10-18 12:26         ` Ori Kam
2018-10-21 13:49           ` Dekel Peled
2018-10-17 12:03       ` [PATCH v5 3/3] app/testpmd: add Tx metadata debug commands Dekel Peled
2018-10-18  7:56         ` Ferruh Yigit
2018-10-18  8:30           ` Dekel Peled
2018-10-11 10:49     ` [PATCH v4 1/3] ethdev: support metadata as flow rule criteria Dekel Peled
2018-10-16 14:11       ` Andrew Rybchenko
2018-10-17  5:27         ` Dekel Peled
2018-10-17  6:02           ` Andrew Rybchenko
2018-10-17  7:52             ` Dekel Peled
2018-10-11 10:49     ` [PATCH v4 2/3] app/testpmd: " Dekel Peled
2018-10-11 10:49     ` Dekel Peled [this message]
2018-09-27 13:57   ` [PATCH v3 1/3] ethdev: " Dekel Peled
2018-10-05 13:31     ` Ferruh Yigit
2018-10-05 13:39       ` Andrew Rybchenko
2018-10-05 18:20         ` Yongseok Koh
2018-10-08 15:10         ` Dekel Peled
2018-10-09 14:46         ` Ferruh Yigit
2018-10-09 14:52           ` Andrew Rybchenko
2018-09-27 13:57   ` [PATCH v3 2/3] app/testpmd: " Dekel Peled
2018-09-27 13:57   ` [PATCH v3 3/3] app/testpmd: add debug command Tx metadata set Dekel Peled
2018-10-05 13:27     ` Ferruh Yigit
2018-09-16 14:37 ` [PATCH v2 1/3] ethdev: support metadata as flow rule criteria Dekel Peled
2018-09-18  7:55   ` Xueming(Steven) Li
2018-09-16 14:37 ` [PATCH v2 2/3] app/testpmd: " Dekel Peled
2018-09-18  8:21   ` Xueming(Steven) Li
2018-09-25 11:32     ` Dekel Peled
2018-09-16 14:37 ` [PATCH v2 3/3] app/testpmd: add debug command Tx metadata set Dekel Peled
2018-09-19  5:39   ` Xueming(Steven) Li
2018-10-05 13:19   ` Ferruh Yigit
2018-10-09 14:30     ` Dekel Peled

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=1539254998-8555-4-git-send-email-dekelp@mellanox.com \
    --to=dekelp@mellanox.com \
    --cc=adrien.mazarguil@6wind.com \
    --cc=arybchenko@solarflare.com \
    --cc=bernard.iremonger@intel.com \
    --cc=dev@dpdk.org \
    --cc=ferruh.yigit@intel.com \
    --cc=jingjing.wu@intel.com \
    --cc=olivier.matz@6wind.com \
    --cc=orika@mellanox.com \
    --cc=shahafs@mellanox.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.