From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 5C235A00C4; Mon, 25 Jul 2022 06:15:49 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 4FE9041148; Mon, 25 Jul 2022 06:15:44 +0200 (CEST) Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by mails.dpdk.org (Postfix) with ESMTP id 2F544400D4 for ; Mon, 25 Jul 2022 06:15:40 +0200 (CEST) Received: from dggpeml500024.china.huawei.com (unknown [172.30.72.53]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4LrmrJ1cKjzmV9d; Mon, 25 Jul 2022 12:13:52 +0800 (CST) Received: from localhost.localdomain (10.67.165.24) by dggpeml500024.china.huawei.com (7.185.36.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.24; Mon, 25 Jul 2022 12:15:39 +0800 From: Chengwen Feng To: , CC: , , , , Subject: [PATCH v2 3/3] net/bonding: add testpmd cmd for Tx prepare Date: Mon, 25 Jul 2022 12:08:42 +0800 Message-ID: <20220725040842.35027-4-fengchengwen@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20220725040842.35027-1-fengchengwen@huawei.com> References: <1619171202-28486-2-git-send-email-tangchengchang@huawei.com> <20220725040842.35027-1-fengchengwen@huawei.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Originating-IP: [10.67.165.24] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500024.china.huawei.com (7.185.36.10) X-CFilter-Loop: Reflected X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org From: Chengchang Tang Add new command to support enable/disable Tx prepare for bonded devices. This helps to test some Tx HW offloads (e.g. checksum and TSO) for bonded devices in testpmd. The command is: set bonding tx_prepare (enable|disable) This patch also support display Tx prepare enabling status in 'show bonding config ' command. Signed-off-by: Chengchang Tang Signed-off-by: Chengwen Feng --- .../link_bonding_poll_mode_drv_lib.rst | 9 +++ drivers/net/bonding/bonding_testpmd.c | 73 ++++++++++++++++++- 2 files changed, 81 insertions(+), 1 deletion(-) diff --git a/doc/guides/prog_guide/link_bonding_poll_mode_drv_lib.rst b/doc/guides/prog_guide/link_bonding_poll_mode_drv_lib.rst index a3d91b2091..428c7d67c7 100644 --- a/doc/guides/prog_guide/link_bonding_poll_mode_drv_lib.rst +++ b/doc/guides/prog_guide/link_bonding_poll_mode_drv_lib.rst @@ -623,6 +623,15 @@ Enable one of the specific aggregators mode when in mode 4 (link-aggregation-802 testpmd> set bonding agg_mode (port_id) (bandwidth|count|stable) +set bonding tx_prepare +~~~~~~~~~~~~~~~~~~~~~~ + +Enable Tx prepare on bonding devices to help the slave devices prepare the packets for +some HW offloading (e.g. checksum and TSO):: + + testpmd> set bonding tx_prepare (port_id) (enable|disable) + + show bonding config ~~~~~~~~~~~~~~~~~~~ diff --git a/drivers/net/bonding/bonding_testpmd.c b/drivers/net/bonding/bonding_testpmd.c index 3941f4cf23..da3fe03f7e 100644 --- a/drivers/net/bonding/bonding_testpmd.c +++ b/drivers/net/bonding/bonding_testpmd.c @@ -413,7 +413,7 @@ static void cmd_show_bonding_config_parsed(void *parsed_result, __rte_unused struct cmdline *cl, __rte_unused void *data) { struct cmd_show_bonding_config_result *res = parsed_result; - int bonding_mode, agg_mode; + int bonding_mode, agg_mode, tx_prepare_flag; portid_t slaves[RTE_MAX_ETHPORTS]; int num_slaves, num_active_slaves; int primary_id; @@ -429,6 +429,10 @@ static void cmd_show_bonding_config_parsed(void *parsed_result, } printf("\tBonding mode: %d\n", bonding_mode); + /* Display the Tx-prepare flag. */ + tx_prepare_flag = rte_eth_bond_tx_prepare_get(port_id); + printf("\tTx-prepare state: %s\n", tx_prepare_flag == 1 ? "on" : "off"); + if (bonding_mode == BONDING_MODE_BALANCE || bonding_mode == BONDING_MODE_8023AD) { int balance_xmit_policy; @@ -962,6 +966,68 @@ static cmdline_parse_inst_t cmd_set_bonding_agg_mode_policy = { } }; +struct cmd_set_bonding_tx_prepare_result { + cmdline_fixed_string_t set; + cmdline_fixed_string_t bonding; + cmdline_fixed_string_t tx_prepare; + portid_t port_id; + cmdline_fixed_string_t mode; +}; + +static void +cmd_set_bonding_tx_prepare_parsed(void *parsed_result, + __rte_unused struct cmdline *cl, + __rte_unused void *data) +{ + struct cmd_set_bonding_tx_prepare_result *res = parsed_result; + portid_t port_id = res->port_id; + + if (!strcmp(res->mode, "enable")) { + if (rte_eth_bond_tx_prepare_set(port_id, true) == 0) + printf("Tx prepare for bonding device enabled\n"); + else + printf("Enabling bonding device Tx prepare " + "on port %d failed\n", port_id); + } else if (!strcmp(res->mode, "disable")) { + if (rte_eth_bond_tx_prepare_set(port_id, false) == 0) + printf("Tx prepare for bonding device disabled\n"); + else + printf("Disabling bonding device Tx prepare " + "on port %d failed\n", port_id); + } +} + +static cmdline_parse_token_string_t cmd_setbonding_tx_prepare_set = + TOKEN_STRING_INITIALIZER(struct cmd_set_bonding_tx_prepare_result, + set, "set"); +static cmdline_parse_token_string_t cmd_setbonding_tx_prepare_bonding = + TOKEN_STRING_INITIALIZER(struct cmd_set_bonding_tx_prepare_result, + bonding, "bonding"); +static cmdline_parse_token_string_t cmd_setbonding_tx_prepare_tx_prepare = + TOKEN_STRING_INITIALIZER(struct cmd_set_bonding_tx_prepare_result, + tx_prepare, "tx_prepare"); +static cmdline_parse_token_num_t cmd_setbonding_tx_prepare_port_id = + TOKEN_NUM_INITIALIZER(struct cmd_set_bonding_tx_prepare_result, + port_id, RTE_UINT16); +static cmdline_parse_token_string_t cmd_setbonding_tx_prepare_mode = + TOKEN_STRING_INITIALIZER(struct cmd_set_bonding_tx_prepare_result, + mode, "enable#disable"); + +static cmdline_parse_inst_t cmd_set_bond_tx_prepare = { + .f = cmd_set_bonding_tx_prepare_parsed, + .help_str = "set bonding tx_prepare enable|disable: " + "Enable/disable tx_prepare for port_id", + .data = NULL, + .tokens = { + (void *)&cmd_setbonding_tx_prepare_set, + (void *)&cmd_setbonding_tx_prepare_bonding, + (void *)&cmd_setbonding_tx_prepare_tx_prepare, + (void *)&cmd_setbonding_tx_prepare_port_id, + (void *)&cmd_setbonding_tx_prepare_mode, + NULL + } +}; + static struct testpmd_driver_commands bonding_cmds = { .commands = { { @@ -1024,6 +1090,11 @@ static struct testpmd_driver_commands bonding_cmds = { "set bonding mode IEEE802.3AD aggregator policy (port_id) (agg_name)\n" " Set Aggregation mode for IEEE802.3AD (mode 4)\n", }, + { + &cmd_set_bond_tx_prepare, + "set bonding tx_prepare (enable|disable)\n" + " Enable/disable tx_prepare for bonded device\n", + }, { NULL, NULL }, }, }; -- 2.33.0