From patchwork Thu Apr 29 10:53:29 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "humin (Q)" X-Patchwork-Id: 92409 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 47E7EA0547; Thu, 29 Apr 2021 12:53:39 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C87754131B; Thu, 29 Apr 2021 12:53:31 +0200 (CEST) Received: from szxga06-in.huawei.com (szxga06-in.huawei.com [45.249.212.32]) by mails.dpdk.org (Postfix) with ESMTP id C8DA041194 for ; Thu, 29 Apr 2021 12:53:27 +0200 (CEST) Received: from DGGEMS411-HUB.china.huawei.com (unknown [172.30.72.58]) by szxga06-in.huawei.com (SkyGuard) with ESMTP id 4FWC3b75fszjcJZ for ; Thu, 29 Apr 2021 18:51:23 +0800 (CST) Received: from localhost.localdomain (10.69.192.56) by DGGEMS411-HUB.china.huawei.com (10.3.19.211) with Microsoft SMTP Server id 14.3.498.0; Thu, 29 Apr 2021 18:53:21 +0800 From: "Min Hu (Connor)" To: CC: Date: Thu, 29 Apr 2021 18:53:29 +0800 Message-ID: <1619693609-28244-3-git-send-email-humin29@huawei.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1619693609-28244-1-git-send-email-humin29@huawei.com> References: <1619693609-28244-1-git-send-email-humin29@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.69.192.56] X-CFilter-Loop: Reflected Subject: [dpdk-dev] [PATCH V1 2/2] examples/ethtool: support the query of MTU 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 Sender: "dev" 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); } - - 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