From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129]) by dpdk.org (Postfix) with ESMTP id 343364F90 for ; Sun, 16 Sep 2018 15:35:08 +0200 (CEST) Received: from Internal Mail-Server by MTLPINE1 (envelope-from dekelp@mellanox.com) with ESMTPS (AES256-SHA encrypted); 16 Sep 2018 15:39:25 +0200 Received: from mtl-vdi-280.wap.labs.mlnx. (mtl-vdi-280.wap.labs.mlnx [10.128.130.87]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id w8GDZ0JT019574; Sun, 16 Sep 2018 16:35:05 +0300 From: Dekel Peled To: wenzhuo.lu@intel.com, jingjing.wu@intel.com, bernard.iremonger@intel.com, dev@dpdk.org, olivier.matz@6wind.com, adrien.mazarguil@6wind.com, thomas@monjalon.net, ferruh.yigit@intel.com, arybchenko@solarflare.com Cc: shahafs@mellanox.com, orika@mellanox.com Date: Sun, 16 Sep 2018 16:33:55 +0300 Message-Id: <1537104835-9034-3-git-send-email-dekelp@mellanox.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1537104835-9034-1-git-send-email-dekelp@mellanox.com> References: <1537104835-9034-1-git-send-email-dekelp@mellanox.com> Subject: [dpdk-dev] [PATCH 3/3] app/testpmd: add debug command tx_metadata set X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 16 Sep 2018 13:35:08 -0000 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 debug command takes a 32 bit value and stores it per port. testpmd will add to any Tx packet sent from this port the metadata value, and set ol_flags accordingly. [1] "ethdev: support metadata as flow rule criteria" [2] "app/testpmd: support metadata as flow rule criteria" Signed-off-by: Dekel Peled --- app/test-pmd/cmdline.c | 46 +++++++++++++++++++++++++++++ app/test-pmd/config.c | 6 ++++ app/test-pmd/testpmd.c | 1 + app/test-pmd/testpmd.h | 3 ++ app/test-pmd/txonly.c | 10 +++++++ doc/guides/testpmd_app_ug/testpmd_funcs.rst | 7 +++++ 6 files changed, 73 insertions(+) diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index 4559d59..83ed2b2 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -17604,6 +17604,51 @@ struct cmd_config_per_queue_tx_offload_result { } }; +/* *** ENABLE METADATA INSERTION IN TX PACKETS SENT TO PMD *** */ +struct cmd_tx_metadata_set_result { + cmdline_fixed_string_t tx_metadata; + cmdline_fixed_string_t set; + portid_t port_id; + uint32_t metadata; +}; + +static void +cmd_tx_metadata_set_parsed(void *parsed_result, + __attribute__((unused)) struct cmdline *cl, + __attribute__((unused)) void *data) +{ + struct cmd_tx_metadata_set_result *res = parsed_result; + + tx_metadata_set(res->port_id, res->metadata); +} + +cmdline_parse_token_string_t cmd_tx_metadata_set_tx_metadata = + TOKEN_STRING_INITIALIZER(struct cmd_tx_metadata_set_result, + tx_metadata, "tx_metadata"); +cmdline_parse_token_string_t cmd_tx_metadata_set_set = + TOKEN_STRING_INITIALIZER(struct cmd_tx_metadata_set_result, + set, "set"); +cmdline_parse_token_num_t cmd_tx_metadata_set_portid = + TOKEN_NUM_INITIALIZER(struct cmd_tx_metadata_set_result, + port_id, UINT16); +cmdline_parse_token_num_t cmd_tx_metadata_set_metadata = + TOKEN_NUM_INITIALIZER(struct cmd_tx_metadata_set_result, + metadata, UINT32); + +cmdline_parse_inst_t cmd_tx_metadata_set = { + .f = cmd_tx_metadata_set_parsed, + .data = NULL, + .help_str = "tx_metadata set : " + "Enable metadata insertion in packets sent to PMD", + .tokens = { + (void *)&cmd_tx_metadata_set_tx_metadata, + (void *)&cmd_tx_metadata_set_set, + (void *)&cmd_tx_metadata_set_portid, + (void *)&cmd_tx_metadata_set_metadata, + NULL, + }, +}; + /* ******************************************************************************** */ /* list of instructions */ @@ -17869,6 +17914,7 @@ 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_tx_metadata_set, NULL, }; diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index 70b2cce..b87c691 100644 --- a/app/test-pmd/config.c +++ b/app/test-pmd/config.c @@ -3828,3 +3828,9 @@ struct igb_ring_desc_16_bytes { printf("\n\n"); } + +void +tx_metadata_set(portid_t port_id, uint32_t metadata) +{ + ports[port_id].metadata = metadata; +} diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index 969eb7c..cd6823d 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -776,6 +776,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->metadata = 0; } /* diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index a1f6614..10b0cd3 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -183,6 +183,7 @@ struct rte_port { #ifdef SOFTNIC struct softnic_port softport; /**< softnic params */ #endif + uint32_t metadata; /**< metadata value to add in tx packets (debug only) */ }; /** @@ -743,6 +744,8 @@ enum print_warning { queueid_t get_allowed_max_nb_txq(portid_t *pid); int check_nb_txq(queueid_t txq); +void tx_metadata_set(portid_t port_id, uint32_t metadata); + /* * Work-around of a compilation error with ICC on invocations of the * rte_be_to_cpu_16() function. diff --git a/app/test-pmd/txonly.c b/app/test-pmd/txonly.c index 1f08b6e..5d55d52 100644 --- a/app/test-pmd/txonly.c +++ b/app/test-pmd/txonly.c @@ -253,6 +253,16 @@ 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].metadata) + { + pkt->hash.fdir.hi = ports[fs->tx_port].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 28da560..cfedf2d 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