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 89CC1A0C41; Thu, 18 Nov 2021 03:58:22 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 0A2CE40687; Thu, 18 Nov 2021 03:58:22 +0100 (CET) Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by mails.dpdk.org (Postfix) with ESMTP id 315BE40395 for ; Thu, 18 Nov 2021 03:58:19 +0100 (CET) Received: from dggemv703-chm.china.huawei.com (unknown [172.30.72.55]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4HvkrK3CslzcbQc; Thu, 18 Nov 2021 10:53:21 +0800 (CST) Received: from kwepemm600004.china.huawei.com (7.193.23.242) by dggemv703-chm.china.huawei.com (10.3.19.46) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20; Thu, 18 Nov 2021 10:58:13 +0800 Received: from [10.67.103.231] (10.67.103.231) by kwepemm600004.china.huawei.com (7.193.23.242) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.15; Thu, 18 Nov 2021 10:58:13 +0800 Message-ID: <6895707a-5c68-32d1-1776-9570e4c41823@huawei.com> Date: Thu, 18 Nov 2021 10:58:12 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.2.0 Subject: Re: [dpdk-dev] [PATCH V1 2/2] examples/ethtool: support the query of MTU To: David Marchand CC: dev , "Yigit, Ferruh" , "Min Hu (Connor)" References: <1619693609-28244-1-git-send-email-humin29@huawei.com> <1619693609-28244-3-git-send-email-humin29@huawei.com> From: "lihuisong (C)" In-Reply-To: Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 8bit X-Originating-IP: [10.67.103.231] X-ClientProxiedBy: dggems701-chm.china.huawei.com (10.3.19.178) To kwepemm600004.china.huawei.com (7.193.23.242) 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 在 2021/11/18 1:51, David Marchand 写道: > On Thu, Apr 29, 2021 at 12:53 PM Min Hu (Connor) wrote: >> From: Huisong Li >> >> This patch supports the query of MTU. >> >> Signed-off-by: Huisong Li >> --- >> examples/ethtool/ethtool-app/ethapp.c | 48 +++++++++++++++++++++++++---------- >> examples/ethtool/lib/rte_ethtool.c | 7 +++++ >> examples/ethtool/lib/rte_ethtool.h | 14 ++++++++++ >> 3 files changed, 56 insertions(+), 13 deletions(-) >> >> diff --git a/examples/ethtool/ethtool-app/ethapp.c b/examples/ethtool/ethtool-app/ethapp.c >> index fc743ce..aed4bc5 100644 >> --- a/examples/ethtool/ethtool-app/ethapp.c >> +++ b/examples/ethtool/ethtool-app/ethapp.c >> @@ -517,31 +517,41 @@ pcmd_macaddr_callback(void *ptr_params, >> static void >> pcmd_mtu_callback(void *ptr_params, >> __rte_unused struct cmdline *ctx, >> - __rte_unused void *ptr_data) >> + void *ptr_data) >> { >> struct pcmd_intstr_params *params = ptr_params; >> int stat; >> uint16_t new_mtu; >> char *ptr_parse_end; >> >> - new_mtu = strtoul(params->opt, &ptr_parse_end, 10); >> - if (*ptr_parse_end != '\0' || >> - new_mtu < RTE_ETHER_MIN_MTU || >> - new_mtu > RTE_ETHER_MAX_JUMBO_FRAME_LEN) { >> - printf("Port %i: Invalid MTU value\n", params->port); >> + if (ptr_data == NULL) { >> + new_mtu = strtoul(params->opt, &ptr_parse_end, 10); >> + if (*ptr_parse_end != '\0' || >> + new_mtu < RTE_ETHER_MIN_MTU || >> + new_mtu > RTE_ETHER_MAX_JUMBO_FRAME_LEN) { >> + printf("Port %i: Invalid MTU value\n", params->port); >> + return; >> + } >> + stat = rte_ethtool_net_change_mtu(params->port, new_mtu); >> + if (stat == 0) >> + printf("Port %i: MTU set to %i\n", params->port, >> + new_mtu); >> + else if (stat == -ENOTSUP) >> + printf("Port %i: Operation not supported\n", >> + params->port); >> + else >> + printf("Port %i: Error setting MTU\n", params->port); >> + >> return; >> } >> - stat = rte_ethtool_net_change_mtu(params->port, new_mtu); >> - if (stat == 0) >> - printf("Port %i: MTU set to %i\n", params->port, new_mtu); >> - else if (stat == -ENOTSUP) >> + >> + stat = rte_ethtool_net_get_mtu(params->port, &new_mtu); >> + if (stat) >> printf("Port %i: Operation not supported\n", params->port); >> else >> - printf("Port %i: Error setting MTU\n", params->port); >> + printf("Port %i: Current MTU: %i\n", params->port, new_mtu); >> } > > Please separate as two helpers, there is no code shared between set > and get, afaics. > The main purpose of my modification is to be consistent with other command styles. Like: pcmd_ringparam & pcmd_ringparam_set and pcmd_macaddr & pcmd_macaddr_get. Do you mean to use a separate interface to implement MTU query? >> - >> - >> static void pcmd_portstats_callback(__rte_unused void *ptr_params, >> __rte_unused struct cmdline *ctx, >> __rte_unused void *ptr_data) >> @@ -799,6 +809,17 @@ cmdline_parse_inst_t pcmd_macaddr = { >> NULL >> }, >> }; >> +cmdline_parse_inst_t pcmd_mtu_get = { >> + .f = pcmd_mtu_callback, >> + .data = (void *)0x01, >> + .help_str = "mtu \n" >> + " Get MTU", >> + .tokens = { >> + (void *)&pcmd_mtu_token_cmd, >> + (void *)&pcmd_intstr_token_port, >> + NULL >> + }, >> +}; >> cmdline_parse_inst_t pcmd_mtu = { >> .f = pcmd_mtu_callback, >> .data = NULL, >> @@ -879,6 +900,7 @@ cmdline_parse_ctx_t list_prompt_commands[] = { >> (cmdline_parse_inst_t *)&pcmd_link, >> (cmdline_parse_inst_t *)&pcmd_macaddr_get, >> (cmdline_parse_inst_t *)&pcmd_macaddr, >> + (cmdline_parse_inst_t *)&pcmd_mtu_get, >> (cmdline_parse_inst_t *)&pcmd_mtu, >> (cmdline_parse_inst_t *)&pcmd_open, >> (cmdline_parse_inst_t *)&pcmd_pause_noopt, >> diff --git a/examples/ethtool/lib/rte_ethtool.c b/examples/ethtool/lib/rte_ethtool.c >> index 73193ed..e69b2c1 100644 >> --- a/examples/ethtool/lib/rte_ethtool.c >> +++ b/examples/ethtool/lib/rte_ethtool.c >> @@ -345,6 +345,13 @@ rte_ethtool_net_validate_addr(uint16_t port_id __rte_unused, >> return rte_is_valid_assigned_ether_addr(addr); >> } >> >> +int >> +rte_ethtool_net_get_mtu(uint16_t port_id, uint16_t *mtu) >> +{ >> + RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV); >> + >> + return rte_eth_dev_get_mtu(port_id, mtu); >> +} >> >> int >> rte_ethtool_net_change_mtu(uint16_t port_id, uint16_t mtu) >> diff --git a/examples/ethtool/lib/rte_ethtool.h b/examples/ethtool/lib/rte_ethtool.h >> index fe3250e..434ad1d 100644 >> --- a/examples/ethtool/lib/rte_ethtool.h >> +++ b/examples/ethtool/lib/rte_ethtool.h >> @@ -23,6 +23,7 @@ >> * rte_ethtool_net_stop: net_device_ops::ndo_stop >> * rte_ethtool_net_set_mac_addr: net_device_ops::ndo_set_mac_address >> * rte_ethtool_net_validate_addr: net_device_ops::ndo_validate_addr >> + * rte_ethtool_net_get_mtu: net_device_ops::ndo_get_mtu >> * rte_ethtool_net_change_mtu: net_device_ops::ndo_change_mtu >> * rte_ethtool_net_get_stats64: net_device_ops::ndo_get_stats64 >> * rte_ethtool_net_vlan_rx_add_vid net_device_ops::ndo_vlan_rx_add_vid >> @@ -296,6 +297,19 @@ int rte_ethtool_net_validate_addr(uint16_t port_id, >> struct rte_ether_addr *addr); >> >> /** >> + * Retrieve the MTU of an Ethernet device. >> + * >> + * @param port_id >> + * The port identifier of the Ethernet device. >> + * @param mtu >> + * A pointer to a uint16_t where the retrieved MTU is to be stored. >> + * @return >> + * - (0) if successful. >> + * - (-ENODEV) if *port_id* invalid. >> + */ >> +int rte_ethtool_net_get_mtu(uint16_t port_id, uint16_t *mtu); >> + >> +/** >> * Setting the Ethernet device maximum Tx unit. >> * >> * @param port_id >> -- >> 2.8.1 >> >