From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id B4E0EA0C4A; Sat, 17 Jul 2021 04:15:52 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 33F5B4067B; Sat, 17 Jul 2021 04:15:52 +0200 (CEST) Received: from szxga03-in.huawei.com (szxga03-in.huawei.com [45.249.212.189]) by mails.dpdk.org (Postfix) with ESMTP id 5F97040151 for ; Sat, 17 Jul 2021 04:15:50 +0200 (CEST) Received: from dggeme756-chm.china.huawei.com (unknown [172.30.72.54]) by szxga03-in.huawei.com (SkyGuard) with ESMTP id 4GRWn00DH6z7tDD for ; Sat, 17 Jul 2021 10:11:16 +0800 (CST) Received: from [10.67.103.128] (10.67.103.128) by dggeme756-chm.china.huawei.com (10.3.19.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2176.2; Sat, 17 Jul 2021 10:15:47 +0800 From: "Min Hu (Connor)" To: CC: , Andrew Rybchenko References: <1619599379-470-1-git-send-email-humin29@huawei.com> <2c9d58e1-57f1-d2ec-dc30-c12cb9ce9c67@huawei.com> Message-ID: Date: Sat, 17 Jul 2021 10:15:47 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.3.1 MIME-Version: 1.0 In-Reply-To: <2c9d58e1-57f1-d2ec-dc30-c12cb9ce9c67@huawei.com> Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 8bit X-Originating-IP: [10.67.103.128] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggeme756-chm.china.huawei.com (10.3.19.102) X-CFilter-Loop: Reflected Subject: Re: [dpdk-dev] [PATCH] examples/ethtool: fix pause configuration 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" Hi, all, any comments? 在 2021/6/28 10:17, Min Hu (Connor) 写道: > Hi, all, >     any comments? > > 在 2021/4/28 16:42, Min Hu (Connor) 写道: >> From: Huisong Li >> >> Currently, the pause command in ethtool to enable Rx/Tx pause has the >> following problem. Namely, Assume that the device supports flow control >> auto-negotiation to set pause parameters, which will the device that does >> not support flow control auto-negotiation fails to run this command. >> >> This patch supports the configuration of flow control auto-negotiation >> and fixes the print format and style of the pause cmd to make it more >> readable. >> >> Fixes: bda68ab9d1e7 ("examples/ethtool: add user-space ethtool sample >> application") >> >> Signed-off-by: Huisong Li >> Signed-off-by: Min Hu (Connor) >> --- >>   examples/ethtool/ethtool-app/ethapp.c | 59 >> +++++++++++++++++++++-------------- >>   1 file changed, 36 insertions(+), 23 deletions(-) >> >> diff --git a/examples/ethtool/ethtool-app/ethapp.c >> b/examples/ethtool/ethtool-app/ethapp.c >> index 36a1c37..057fa97 100644 >> --- a/examples/ethtool/ethtool-app/ethapp.c >> +++ b/examples/ethtool/ethtool-app/ethapp.c >> @@ -49,6 +49,13 @@ struct pcmd_intintint_params { >>       uint16_t rx; >>   }; >> +struct pcmd_pause_params { >> +    cmdline_fixed_string_t cmd; >> +    uint16_t port; >> +    cmdline_fixed_string_t mode; >> +    cmdline_fixed_string_t autoneg; >> +    cmdline_fixed_string_t an_status; >> +}; >>   /* Parameter-less commands */ >>   cmdline_parse_token_string_t pcmd_quit_token_cmd = >> @@ -116,12 +123,18 @@ cmdline_parse_token_num_t pcmd_intintint_token_rx = >>   /* Pause commands */ >>   cmdline_parse_token_string_t pcmd_pause_token_cmd = >> -    TOKEN_STRING_INITIALIZER(struct pcmd_intstr_params, cmd, "pause"); >> +    TOKEN_STRING_INITIALIZER(struct pcmd_pause_params, cmd, "pause"); >>   cmdline_parse_token_num_t pcmd_pause_token_port = >> -    TOKEN_NUM_INITIALIZER(struct pcmd_intstr_params, port, RTE_UINT16); >> -cmdline_parse_token_string_t pcmd_pause_token_opt = >> -    TOKEN_STRING_INITIALIZER(struct pcmd_intstr_params, >> -        opt, "all#tx#rx#none"); >> +    TOKEN_NUM_INITIALIZER(struct pcmd_pause_params, port, RTE_UINT16); >> +cmdline_parse_token_string_t pcmd_pause_token_mode = >> +    TOKEN_STRING_INITIALIZER(struct pcmd_pause_params, >> +        mode, "full#tx#rx#none"); >> +cmdline_parse_token_string_t pcmd_pause_token_autoneg = >> +    TOKEN_STRING_INITIALIZER(struct pcmd_pause_params, >> +        autoneg, "autoneg"); >> +cmdline_parse_token_string_t pcmd_pause_token_an_status = >> +    TOKEN_STRING_INITIALIZER(struct pcmd_pause_params, >> +        an_status, "on#off"); >>   /* VLAN commands */ >>   cmdline_parse_token_string_t pcmd_vlan_token_cmd = >> @@ -348,13 +361,12 @@ pcmd_module_eeprom_callback(void *ptr_params, >>       fclose(fp_eeprom); >>   } >> - >>   static void >>   pcmd_pause_callback(void *ptr_params, >>       __rte_unused struct cmdline *ctx, >>       void *ptr_data) >>   { >> -    struct pcmd_intstr_params *params = ptr_params; >> +    struct pcmd_pause_params *params = ptr_params; >>       struct ethtool_pauseparam info; >>       int stat; >> @@ -366,39 +378,38 @@ pcmd_pause_callback(void *ptr_params, >>           stat = rte_ethtool_get_pauseparam(params->port, &info); >>       } else { >>           memset(&info, 0, sizeof(info)); >> -        if (strcasecmp("all", params->opt) == 0) { >> +        if (strcasecmp("full", params->mode) == 0) { >>               info.tx_pause = 1; >>               info.rx_pause = 1; >> -        } else if (strcasecmp("tx", params->opt) == 0) { >> +        } else if (strcasecmp("tx", params->mode) == 0) { >>               info.tx_pause = 1; >>               info.rx_pause = 0; >> -        } else if (strcasecmp("rx", params->opt) == 0) { >> +        } else if (strcasecmp("rx", params->mode) == 0) { >>               info.tx_pause = 0; >>               info.rx_pause = 1; >>           } else { >>               info.tx_pause = 0; >>               info.rx_pause = 0; >>           } >> -        /* Assume auto-negotiation wanted */ >> -        info.autoneg = 1; >> + >> +        if (strcasecmp("on", params->an_status) == 0) >> +            info.autoneg = 1; >> +        else >> +            info.autoneg = 0; >> + >>           stat = rte_ethtool_set_pauseparam(params->port, &info); >>       } >>       if (stat == 0) { >> -        if (info.rx_pause && info.tx_pause) >> -            printf("Port %i: Tx & Rx Paused\n", params->port); >> -        else if (info.rx_pause) >> -            printf("Port %i: Rx Paused\n", params->port); >> -        else if (info.tx_pause) >> -            printf("Port %i: Tx Paused\n", params->port); >> -        else >> -            printf("Port %i: Tx & Rx not paused\n", params->port); >> +        printf("Pause parameters for Port %i:\n", params->port); >> +        printf("Rx pause: %s\n", info.rx_pause ? "on" : "off"); >> +        printf("Tx pause: %s\n", info.tx_pause ? "on" : "off"); >> +        printf("Autoneg: %s\n", info.autoneg ? "on" : "off"); >>       } else if (stat == -ENOTSUP) >>           printf("Port %i: Operation not supported\n", params->port); >>       else >>           printf("Port %i: Error %i\n", params->port, stat); >>   } >> - >>   static void >>   pcmd_open_callback(__rte_unused void *ptr_params, >>       __rte_unused struct cmdline *ctx, >> @@ -741,11 +752,13 @@ cmdline_parse_inst_t pcmd_pause = { >>       .f = pcmd_pause_callback, >>       .data = NULL, >>       .help_str = >> -        "pause \n     Pause/unpause port", >> +        "pause autoneg \n >> Pause/unpause port", >>       .tokens = { >>           (void *)&pcmd_pause_token_cmd, >>           (void *)&pcmd_pause_token_port, >> -        (void *)&pcmd_pause_token_opt, >> +        (void *)&pcmd_pause_token_mode, >> +        (void *)&pcmd_pause_token_autoneg, >> +        (void *)&pcmd_pause_token_an_status, >>           NULL >>       }, >>   }; >> > .