On 9/16/21 5:56 AM, Min Hu (Connor) wrote: > Currently, link speed to string only supports specific speeds, like 10M, > 100M, 1G etc. > > This patch expands support for any link speed which is over 1M and one > decimal place will kept for display at most. > > Signed-off-by: Min Hu (Connor) <humi...@huawei.com> > --- > lib/ethdev/rte_ethdev.c | 34 +++++++++++++++++----------------- > 1 file changed, 17 insertions(+), 17 deletions(-) > > diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c > index daf5ca9242..1d3b960305 100644 > --- a/lib/ethdev/rte_ethdev.c > +++ b/lib/ethdev/rte_ethdev.c > @@ -2750,24 +2750,24 @@ rte_eth_link_get_nowait(uint16_t port_id, struct > rte_eth_link *eth_link) > const char * > rte_eth_link_speed_to_str(uint32_t link_speed) > { > - switch (link_speed) { > - case ETH_SPEED_NUM_NONE: return "None"; > - case ETH_SPEED_NUM_10M: return "10 Mbps"; > - case ETH_SPEED_NUM_100M: return "100 Mbps"; > - case ETH_SPEED_NUM_1G: return "1 Gbps"; > - case ETH_SPEED_NUM_2_5G: return "2.5 Gbps"; > - case ETH_SPEED_NUM_5G: return "5 Gbps"; > - case ETH_SPEED_NUM_10G: return "10 Gbps"; > - case ETH_SPEED_NUM_20G: return "20 Gbps"; > - case ETH_SPEED_NUM_25G: return "25 Gbps"; > - case ETH_SPEED_NUM_40G: return "40 Gbps"; > - case ETH_SPEED_NUM_50G: return "50 Gbps"; > - case ETH_SPEED_NUM_56G: return "56 Gbps"; > - case ETH_SPEED_NUM_100G: return "100 Gbps"; > - case ETH_SPEED_NUM_200G: return "200 Gbps"; > - case ETH_SPEED_NUM_UNKNOWN: return "Unknown"; > - default: return "Invalid"; > +#define SPEED_STRING_LEN 16 > + static char name[SPEED_STRING_LEN];
NACK Nothing good will happen if you try to use the function to print two different link speeds in one log message. > + > + if (link_speed == ETH_SPEED_NUM_NONE) > + return "None"; > + if (link_speed == ETH_SPEED_NUM_UNKNOWN) > + return "Unknown"; > + if (link_speed < ETH_SPEED_NUM_1G) { > + snprintf(name, sizeof(name), "%u Mbps", link_speed); > + } else if (link_speed % ETH_SPEED_NUM_1G != 0) { > + snprintf(name, sizeof(name), "%.1f Gbps", > + (double)link_speed / ETH_SPEED_NUM_1G); > + } else { > + snprintf(name, sizeof(name), "%u Gbps", > + link_speed / ETH_SPEED_NUM_1G); > } > + > + return (const char *)name; > } > > int >