[dpdk-dev] [PATCH V16 3/3] app/testpmd: add FEC command
Min Hu (Connor)
humin29 at huawei.com
Fri Oct 9 05:48:24 CEST 2020
Hi Ferruh,
I have fixed it, and send the patch.
Please check it out, thanks.
https://patches.dpdk.org/patch/80097/
在 2020/10/8 23:57, Ferruh Yigit 写道:
> On 10/8/2020 11:02 AM, Min Hu (Connor) wrote:
>> This commit adds testpmd capability to query and config FEC
>> function of device. This includes:
>> - show FEC capabilities, example:
>> testpmd> show port 0 fec capabilities
>> - show FEC mode, example:
>> testpmd> show port 0 fec_mode
>> - config FEC mode, example:
>> testpmd> set port <port_id> fec_mode auto|off|rs|baser
>>
>> where:
>>
>> auto|off|rs|baser are four kinds of FEC mode which dev
>> support according to MAC link speed.
>>
>> Signed-off-by: Min Hu (Connor) <humin29 at huawei.com>
>> Reviewed-by: Wei Hu (Xavier) <xavier.huwei at huawei.com>
>> Reviewed-by: Chengwen Feng <fengchengwen at huawei.com>
>> Reviewed-by: Chengchang Tang <tangchengchang at huawei.com>
>
> <...>
>
>> +static const struct {
>> + uint32_t speed;
>> + const char *name;
>> +} eth_speed_name[] = {
>> + {
>> + .speed = ETH_SPEED_NUM_10G,
>> + .name = "Speed 10G",
>> + },
>> + {
>> + .speed = ETH_SPEED_NUM_25G,
>> + .name = "Speed 25G",
>> + },
>> + {
>> + .speed = ETH_SPEED_NUM_40G,
>> + .name = "Speed 40G",
>> + },
>> + {
>> + .speed = ETH_SPEED_NUM_50G,
>> + .name = "Speed 50G",
>> + },
>> + {
>> + .speed = ETH_SPEED_NUM_100G,
>> + .name = "Speed 100G",
>> + },
>> + {
>> + .speed = ETH_SPEED_NUM_200G,
>> + .name = "Speed 200G",
>> + },
>> +};
>> +
>> static void
>> print_ethaddr(const char *name, struct rte_ether_addr *eth_addr)
>> {
>> @@ -2969,6 +3021,45 @@ set_tx_pkt_split(const char *name)
>> printf("unknown value: \"%s\"\n", name);
>> }
>> +int
>> +parse_fec_mode(const char *name, uint32_t *mode)
>> +{
>> + uint8_t i;
>> +
>> + for (i = 0; i < RTE_DIM(fec_mode_name); i++) {
>> + if (strcmp(fec_mode_name[i].name, name) == 0) {
>> + *mode = RTE_ETH_FEC_MODE_TO_CAPA(fec_mode_name[i].mode);
>> + return 0;
>> + }
>> + }
>> + return -1;
>> +}
>> +
>> +void
>> +show_fec_capability(unsigned int num, struct rte_eth_fec_capa
>> *speed_fec_capa)
>> +{
>> + unsigned int i, j, k;
>> +
>> + printf("FEC capabilities:\n");
>> +
>> + for (i = 0; i < num; i++) {
>> + for (j = 0; j < RTE_DIM(eth_speed_name); j++) {
>> + if (eth_speed_name[j].speed ==
>> + speed_fec_capa[i].speed) {
>> + printf("%s : ", eth_speed_name[j].name);
>> + break;
>> + }
>> + }
>> +
>> + for (k = RTE_ETH_FEC_AUTO; k < RTE_DIM(fec_mode_name); k++) {
>> + if (RTE_ETH_FEC_MODE_TO_CAPA(k) &
>> + speed_fec_capa[i].capa)
>> + printf("%s ", fec_mode_name[k].name);
>> + }
>> + printf("\n");
>> + }
>> +}
>
> Hi Connor,
>
> Sorry for catching this late, but there is a new
> 'rte_eth_link_speed_to_str()' API in the ethdev, which may enable
> removing above global 'eth_speed_name' array [1].
>
> I will proceed with this patchset, but can you please send an
> increamental patch to use the 'rte_eth_link_speed_to_str()'?
> If it comes before the next-net pulled I can squash it, if not it can
> stay as individual patch.
>
> Thanks,
> ferruh
>
>
> [1]
> printf("%s : ", rte_eth_link_speed_to_str(speed_fec_capa[i].speed));
>
> .
More information about the dev
mailing list