From: Huisong Li <lihuis...@huawei.com> This patch supports the query of MTU.
Signed-off-by: Huisong Li <lihuis...@huawei.com> --- 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 <port_id>\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