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 252BF432EE; Fri, 10 Nov 2023 04:30:31 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id ACF6C40268; Fri, 10 Nov 2023 04:30:30 +0100 (CET) Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by mails.dpdk.org (Postfix) with ESMTP id 5E5DF400D6 for ; Fri, 10 Nov 2023 04:30:28 +0100 (CET) Received: from kwepemm000004.china.huawei.com (unknown [172.30.72.57]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4SRPQ75NbMzmXJM; Fri, 10 Nov 2023 11:27:11 +0800 (CST) Received: from localhost.localdomain (10.69.192.56) by kwepemm000004.china.huawei.com (7.193.23.18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.31; Fri, 10 Nov 2023 11:30:24 +0800 From: Huisong Li To: , Remy Horton CC: , , , Subject: [PATCH v2] examples/ethtool: fix pause configuration Date: Fri, 10 Nov 2023 11:30:39 +0800 Message-ID: <20231110033039.2111-1-lihuisong@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <1619599379-470-1-git-send-email-humin29@huawei.com> References: <1619599379-470-1-git-send-email-humin29@huawei.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Originating-IP: [10.69.192.56] X-ClientProxiedBy: dggems702-chm.china.huawei.com (10.3.19.179) To kwepemm000004.china.huawei.com (7.193.23.18) 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 Currently, the pause command in ethtool to enable Rx/Tx pause has the following problem. Namely, Assume that the device supports flow control auto-negotiation to set pause parameters, which will the device that does not support flow control auto-negotiation fails to run this command. This patch supports the configuration of flow control auto-negotiation and fixes the print format and style of the pause cmd to make it more readable. Fixes: bda68ab9d1e7 ("examples/ethtool: add user-space ethtool sample application") Cc: stable@dpdk.org Signed-off-by: Huisong Li Signed-off-by: Min Hu (Connor) Acked-by: Stephen Hemminger --- -v2: add acked-by Stephen Hemminger --- examples/ethtool/ethtool-app/ethapp.c | 59 ++++++++++++++++----------- 1 file changed, 36 insertions(+), 23 deletions(-) diff --git a/examples/ethtool/ethtool-app/ethapp.c b/examples/ethtool/ethtool-app/ethapp.c index 4ea504ed6a..489cd4f515 100644 --- a/examples/ethtool/ethtool-app/ethapp.c +++ b/examples/ethtool/ethtool-app/ethapp.c @@ -51,6 +51,13 @@ struct pcmd_intintint_params { uint16_t rx; }; +struct pcmd_pause_params { + cmdline_fixed_string_t cmd; + uint16_t port; + cmdline_fixed_string_t mode; + cmdline_fixed_string_t autoneg; + cmdline_fixed_string_t an_status; +}; /* Parameter-less commands */ cmdline_parse_token_string_t pcmd_quit_token_cmd = @@ -118,12 +125,18 @@ cmdline_parse_token_num_t pcmd_intintint_token_rx = /* Pause commands */ cmdline_parse_token_string_t pcmd_pause_token_cmd = - TOKEN_STRING_INITIALIZER(struct pcmd_intstr_params, cmd, "pause"); + TOKEN_STRING_INITIALIZER(struct pcmd_pause_params, cmd, "pause"); cmdline_parse_token_num_t pcmd_pause_token_port = - TOKEN_NUM_INITIALIZER(struct pcmd_intstr_params, port, RTE_UINT16); -cmdline_parse_token_string_t pcmd_pause_token_opt = - TOKEN_STRING_INITIALIZER(struct pcmd_intstr_params, - opt, "all#tx#rx#none"); + TOKEN_NUM_INITIALIZER(struct pcmd_pause_params, port, RTE_UINT16); +cmdline_parse_token_string_t pcmd_pause_token_mode = + TOKEN_STRING_INITIALIZER(struct pcmd_pause_params, + mode, "full#tx#rx#none"); +cmdline_parse_token_string_t pcmd_pause_token_autoneg = + TOKEN_STRING_INITIALIZER(struct pcmd_pause_params, + autoneg, "autoneg"); +cmdline_parse_token_string_t pcmd_pause_token_an_status = + TOKEN_STRING_INITIALIZER(struct pcmd_pause_params, + an_status, "on#off"); /* VLAN commands */ cmdline_parse_token_string_t pcmd_vlan_token_cmd = @@ -350,13 +363,12 @@ pcmd_module_eeprom_callback(void *ptr_params, fclose(fp_eeprom); } - static void pcmd_pause_callback(void *ptr_params, __rte_unused struct cmdline *ctx, void *ptr_data) { - struct pcmd_intstr_params *params = ptr_params; + struct pcmd_pause_params *params = ptr_params; struct ethtool_pauseparam info; int stat; @@ -368,39 +380,38 @@ pcmd_pause_callback(void *ptr_params, stat = rte_ethtool_get_pauseparam(params->port, &info); } else { memset(&info, 0, sizeof(info)); - if (strcasecmp("all", params->opt) == 0) { + if (strcasecmp("full", params->mode) == 0) { info.tx_pause = 1; info.rx_pause = 1; - } else if (strcasecmp("tx", params->opt) == 0) { + } else if (strcasecmp("tx", params->mode) == 0) { info.tx_pause = 1; info.rx_pause = 0; - } else if (strcasecmp("rx", params->opt) == 0) { + } else if (strcasecmp("rx", params->mode) == 0) { info.tx_pause = 0; info.rx_pause = 1; } else { info.tx_pause = 0; info.rx_pause = 0; } - /* Assume auto-negotiation wanted */ - info.autoneg = 1; + + if (strcasecmp("on", params->an_status) == 0) + info.autoneg = 1; + else + info.autoneg = 0; + stat = rte_ethtool_set_pauseparam(params->port, &info); } if (stat == 0) { - if (info.rx_pause && info.tx_pause) - printf("Port %i: Tx & Rx Paused\n", params->port); - else if (info.rx_pause) - printf("Port %i: Rx Paused\n", params->port); - else if (info.tx_pause) - printf("Port %i: Tx Paused\n", params->port); - else - printf("Port %i: Tx & Rx not paused\n", params->port); + printf("Pause parameters for Port %i:\n", params->port); + printf("Rx pause: %s\n", info.rx_pause ? "on" : "off"); + printf("Tx pause: %s\n", info.tx_pause ? "on" : "off"); + printf("Autoneg: %s\n", info.autoneg ? "on" : "off"); } else if (stat == -ENOTSUP) printf("Port %i: Operation not supported\n", params->port); else printf("Port %i: Error %i\n", params->port, stat); } - static void pcmd_open_callback(__rte_unused void *ptr_params, __rte_unused struct cmdline *ctx, @@ -737,11 +748,13 @@ cmdline_parse_inst_t pcmd_pause = { .f = pcmd_pause_callback, .data = NULL, .help_str = - "pause \n Pause/unpause port", + "pause autoneg \n Pause/unpause port", .tokens = { (void *)&pcmd_pause_token_cmd, (void *)&pcmd_pause_token_port, - (void *)&pcmd_pause_token_opt, + (void *)&pcmd_pause_token_mode, + (void *)&pcmd_pause_token_autoneg, + (void *)&pcmd_pause_token_an_status, NULL }, }; -- 2.33.0