On Thu, Apr 29, 2021 at 12:53 PM Min Hu (Connor) <humi...@huawei.com> wrote: > > 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); > }
Please separate as two helpers, there is no code shared between set and get, afaics. > > - > - > 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 > -- David Marchand