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 8CF14A054D; Thu, 9 Jun 2022 05:41:05 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2622040689; Thu, 9 Jun 2022 05:41:05 +0200 (CEST) Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by mails.dpdk.org (Postfix) with ESMTP id D77C640220 for ; Thu, 9 Jun 2022 05:41:03 +0200 (CEST) Received: from dggemv704-chm.china.huawei.com (unknown [172.30.72.53]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4LJVGW3d1BzjXHq; Thu, 9 Jun 2022 11:40:03 +0800 (CST) Received: from kwepemm600004.china.huawei.com (7.193.23.242) by dggemv704-chm.china.huawei.com (10.3.19.47) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.24; Thu, 9 Jun 2022 11:41:02 +0800 Received: from [10.67.103.231] (10.67.103.231) by kwepemm600004.china.huawei.com (7.193.23.242) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.24; Thu, 9 Jun 2022 11:41:01 +0800 Message-ID: Date: Thu, 9 Jun 2022 11:41:00 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.2.0 Subject: Re: [PATCH V3 app/testpmd 3/4] app/testpmd: compact RSS types output in some commands To: Ferruh Yigit , , , , CC: , , References: <20220429102445.23711-1-lihuisong@huawei.com> <20220607083246.12259-1-lihuisong@huawei.com> <20220607083246.12259-4-lihuisong@huawei.com> <3120e1ce-013e-5024-6a2a-e4cf9a8f3a86@xilinx.com> From: "lihuisong (C)" In-Reply-To: <3120e1ce-013e-5024-6a2a-e4cf9a8f3a86@xilinx.com> Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 8bit X-Originating-IP: [10.67.103.231] X-ClientProxiedBy: dggems704-chm.china.huawei.com (10.3.19.181) To kwepemm600004.china.huawei.com (7.193.23.242) X-CFilter-Loop: Reflected 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 在 2022/6/7 23:46, Ferruh Yigit 写道: > On 6/7/2022 9:32 AM, Huisong Li wrote: > >> >> From: Ferruh Yigit >> >> In port info command output, 'show port info all', supported RSS offload >> types printed one type per line, and although this information is not >> most important part of the command it takes big part of the command >> output. >> >> In port RSS hash and flow RSS command output, 'show port 0 rss-hash', >> and 'flow query 0 0 rss', all enabled RSS types are printed on one line. >> If there are many types, the print will be very long. >> >> Compacting these RSS offloads and types output by fixing the length >> of the >> character string printed on each line, instead of one per line or one >> line. >> Output becomes as following: >> >> Supported RSS offload flow types: >>    ipv4-frag  ipv4-tcp  ipv4-udp  ipv4-sctp  ipv4-other ipv6-frag  >> ipv6-tcp >>    ipv6-udp  ipv6-sctp  ipv6-other  l4-dst-only  l4-src-only l3-dst-only >>    l3-src-only >> >> Signed-off-by: Ferruh Yigit >> Signed-off-by: Huisong Li >> --- >>   app/test-pmd/config.c | 64 ++++++++++++++++++++++++++++++++----------- >>   1 file changed, 48 insertions(+), 16 deletions(-) >> >> diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c >> index 9cb1211f00..209cbcc514 100644 >> --- a/app/test-pmd/config.c >> +++ b/app/test-pmd/config.c >> @@ -66,6 +66,8 @@ >> >>   #define NS_PER_SEC 1E9 >> >> +#define MAX_CHAR_NUM_PER_LINE 64 >> + >>   static const struct { >>          enum tx_pkt_split split; >>          const char *name; >> @@ -198,6 +200,8 @@ const struct rss_type_info rss_type_table[] = { >>   static void >>   rss_types_display(uint64_t rss_types) >>   { >> +       uint16_t total_len = 0; >> +       uint16_t str_len = 0; >>          uint16_t i; >> >>          if (rss_types == 0) >> @@ -206,9 +210,18 @@ rss_types_display(uint64_t rss_types) >>          for (i = 0; rss_type_table[i].str; i++) { >>                  if (rss_type_table[i].rss_type == 0) >>                          continue; >> + >>                  if ((rss_types & rss_type_table[i].rss_type) == >> - rss_type_table[i].rss_type) >> + rss_type_table[i].rss_type) { >> +                       /* contain two blanks */ >> +                       str_len = strlen(rss_type_table[i].str) + 2; >> +                       if (total_len + str_len > >> MAX_CHAR_NUM_PER_LINE) { >> +                               printf("\n"); >> +                               total_len = 0; >> +                       } >>                          printf("  %s", rss_type_table[i].str); >> +                       total_len += str_len; >> +               } >>          } >>   } >> >> @@ -766,6 +779,38 @@ rss_offload_to_str(uint64_t rss_offload) >>          return NULL; >>   } >> >> +static void >> +rss_offload_types_display(uint64_t rss_offload_types) >> +{ >> +#define USER_DEFINED_DISPLAY_STR_LEN 23 >> + >> +       uint16_t total_len = 0; >> +       uint16_t str_len = 0; >> +       uint64_t rss_offload; >> +       uint16_t i; >> + >> +       for (i = 0; i < sizeof(rss_offload_types) * CHAR_BIT; i++) { >> +               rss_offload = RTE_BIT64(i); >> +               if ((rss_offload_types & rss_offload) != 0) { >> +                       const char *p = rss_offload_to_str(rss_offload); >> + >> +                       str_len = p ? strlen(p) : >> USER_DEFINED_DISPLAY_STR_LEN; >> +                       str_len += 2; /* add two blanks */ >> +                       if (total_len + str_len >= >> MAX_CHAR_NUM_PER_LINE) { >> +                               total_len = 0; >> +                               printf("\n"); >> +                       } >> + >> +                       if (p) >> +                               printf("  %s", p); >> +                       else >> +                               printf("  user defined 0x%"PRIx64"", >> +                                      rss_offload); >> +                       total_len += str_len; >> +               } >> +       } >> +} > > If you go with 'rss_type_table[]', above function can be used for both > 'port_infos_display()' and 'rss_types_display()', what do you think? I just don't think it's appropriate to use this table for that. > And perhaps 'rss_offload_types_display()' can get length as parameter. Ack. > >> + >>   void >>   port_infos_display(portid_t port_id) >>   { >> @@ -870,22 +915,9 @@ port_infos_display(portid_t port_id) >>          if (!dev_info.flow_type_rss_offloads) >>                  printf("No RSS offload flow type is supported.\n"); >>          else { >> -               uint64_t rss_offload_types = >> dev_info.flow_type_rss_offloads; >> -               uint16_t i; >> - >>                  printf("Supported RSS offload flow types:\n"); >> -               for (i = 0; i < sizeof(rss_offload_types) * CHAR_BIT; >> i++) { >> -                       uint64_t rss_offload = RTE_BIT64(i); >> -                       if ((rss_offload_types & rss_offload) != 0) { >> -                               const char *p = >> - rss_offload_to_str(rss_offload); >> -                               if (p) >> -                                       printf("  %s\n", p); >> -                               else >> -                                       printf("  user defined >> 0x%"PRIx64"\n", >> -                                              rss_offload); >> -                       } >> -               } >> + rss_offload_types_display(dev_info.flow_type_rss_offloads); >> +               printf("\n"); >>          } >> >>          printf("Minimum size of RX buffer: %u\n", >> dev_info.min_rx_bufsize); >> -- >> 2.33.0 >> > > .