[V5,5/7] app/testpmd: compact RSS types output in some commands
Commit Message
From: Ferruh Yigit <ferruh.yigit@xilinx.com>
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 <ferruh.yigit@xilinx.com>
Signed-off-by: Huisong Li <lihuisong@huawei.com>
---
app/test-pmd/config.c | 68 +++++++++++++++++++++++++++++++-----------
app/test-pmd/testpmd.h | 2 ++
2 files changed, 52 insertions(+), 18 deletions(-)
Comments
On 6/24/2022 8:23 AM, Huisong Li wrote:
> CAUTION: This message has originated from an External Source. Please use proper judgment and caution when opening attachments, clicking links, or responding to this email.
>
>
> From: Ferruh Yigit <ferruh.yigit@xilinx.com>
>
> 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 <ferruh.yigit@xilinx.com>
> Signed-off-by: Huisong Li <lihuisong@huawei.com>
> ---
> app/test-pmd/config.c | 68 +++++++++++++++++++++++++++++++-----------
> app/test-pmd/testpmd.h | 2 ++
> 2 files changed, 52 insertions(+), 18 deletions(-)
>
> diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c
> index a0a5f12c71..b3cb68003c 100644
> --- a/app/test-pmd/config.c
> +++ b/app/test-pmd/config.c
> @@ -699,6 +699,38 @@ rsstypes_to_str(uint64_t rss_type)
> return NULL;
> }
>
> +static void
> +rss_offload_types_display(uint64_t offload_types, uint16_t char_num_per_line)
> +{
> + uint16_t unknown_offload_str_len;
> + uint16_t total_len = 0;
> + uint16_t str_len = 0;
> + uint64_t rss_offload;
> + uint16_t i;
> +
> + for (i = 0; i < sizeof(offload_types) * CHAR_BIT; i++) {
> + rss_offload = RTE_BIT64(i);
> + if ((offload_types & rss_offload) != 0) {
> + const char *p = rsstypes_to_str(rss_offload);
> +
> + unknown_offload_str_len =
> + strlen("unknown_offload(BIT())") + (i / 10 + 1);
> + str_len = p ? strlen(p) : unknown_offload_str_len;
> + str_len += 2; /* add two spaces */
> + if (total_len + str_len >= char_num_per_line) {
> + total_len = 0;
> + printf("\n");
> + }
> +
> + if (p)
> + printf(" %s", p);
> + else
> + printf(" unknown_offload(BIT(%u))", i);
> + total_len += str_len;
> + }
> + }
> +}
> +
> void
> port_infos_display(portid_t port_id)
> {
> @@ -803,21 +835,10 @@ 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 = rsstypes_to_str(rss_offload);
> - if (p)
> - printf(" %s\n", p);
> - else
> - printf(" unknown_offload(BIT(%u))\n",
> - i);
> - }
> - }
> + rss_offload_types_display(dev_info.flow_type_rss_offloads,
> + TESTPMD_RSS_TYPES_CHAR_NUM_PER_LINE);
> + printf("\n");
Why 'rss_types_display()' is not reused, but new function
'rss_offload_types_display()' created?
在 2022/6/24 22:04, Ferruh Yigit 写道:
> On 6/24/2022 8:23 AM, Huisong Li wrote:
>> CAUTION: This message has originated from an External Source. Please
>> use proper judgment and caution when opening attachments, clicking
>> links, or responding to this email.
>>
>>
>> From: Ferruh Yigit <ferruh.yigit@xilinx.com>
>>
>> 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 <ferruh.yigit@xilinx.com>
>> Signed-off-by: Huisong Li <lihuisong@huawei.com>
>> ---
>> app/test-pmd/config.c | 68 +++++++++++++++++++++++++++++++-----------
>> app/test-pmd/testpmd.h | 2 ++
>> 2 files changed, 52 insertions(+), 18 deletions(-)
>>
>> diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c
>> index a0a5f12c71..b3cb68003c 100644
>> --- a/app/test-pmd/config.c
>> +++ b/app/test-pmd/config.c
>> @@ -699,6 +699,38 @@ rsstypes_to_str(uint64_t rss_type)
>> return NULL;
>> }
>>
>> +static void
>> +rss_offload_types_display(uint64_t offload_types, uint16_t
>> char_num_per_line)
>> +{
>> + uint16_t unknown_offload_str_len;
>> + uint16_t total_len = 0;
>> + uint16_t str_len = 0;
>> + uint64_t rss_offload;
>> + uint16_t i;
>> +
>> + for (i = 0; i < sizeof(offload_types) * CHAR_BIT; i++) {
>> + rss_offload = RTE_BIT64(i);
>> + if ((offload_types & rss_offload) != 0) {
>> + const char *p = rsstypes_to_str(rss_offload);
>> +
>> + unknown_offload_str_len =
>> + strlen("unknown_offload(BIT())") + (i
>> / 10 + 1);
>> + str_len = p ? strlen(p) :
>> unknown_offload_str_len;
>> + str_len += 2; /* add two spaces */
>> + if (total_len + str_len >= char_num_per_line) {
>> + total_len = 0;
>> + printf("\n");
>> + }
>> +
>> + if (p)
>> + printf(" %s", p);
>> + else
>> + printf(" unknown_offload(BIT(%u))", i);
>> + total_len += str_len;
>> + }
>> + }
>> +}
>> +
>> void
>> port_infos_display(portid_t port_id)
>> {
>> @@ -803,21 +835,10 @@ 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 =
>> rsstypes_to_str(rss_offload);
>> - if (p)
>> - printf(" %s\n", p);
>> - else
>> - printf("
>> unknown_offload(BIT(%u))\n",
>> - i);
>> - }
>> - }
>> + rss_offload_types_display(dev_info.flow_type_rss_offloads,
>> + TESTPMD_RSS_TYPES_CHAR_NUM_PER_LINE);
>> + printf("\n");
>
> Why 'rss_types_display()' is not reused, but new function
> 'rss_offload_types_display()' created?
As mentioned in the 1/7 patch reply, there are different purposes.
> .
On 6/25/2022 3:13 AM, lihuisong (C) wrote:
>
> 在 2022/6/24 22:04, Ferruh Yigit 写道:
>> On 6/24/2022 8:23 AM, Huisong Li wrote:
>>> CAUTION: This message has originated from an External Source. Please
>>> use proper judgment and caution when opening attachments, clicking
>>> links, or responding to this email.
>>>
>>>
>>> From: Ferruh Yigit <ferruh.yigit@xilinx.com>
>>>
>>> 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 <ferruh.yigit@xilinx.com>
>>> Signed-off-by: Huisong Li <lihuisong@huawei.com>
>>> ---
>>> app/test-pmd/config.c | 68 +++++++++++++++++++++++++++++++-----------
>>> app/test-pmd/testpmd.h | 2 ++
>>> 2 files changed, 52 insertions(+), 18 deletions(-)
>>>
>>> diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c
>>> index a0a5f12c71..b3cb68003c 100644
>>> --- a/app/test-pmd/config.c
>>> +++ b/app/test-pmd/config.c
>>> @@ -699,6 +699,38 @@ rsstypes_to_str(uint64_t rss_type)
>>> return NULL;
>>> }
>>>
>>> +static void
>>> +rss_offload_types_display(uint64_t offload_types, uint16_t
>>> char_num_per_line)
>>> +{
>>> + uint16_t unknown_offload_str_len;
>>> + uint16_t total_len = 0;
>>> + uint16_t str_len = 0;
>>> + uint64_t rss_offload;
>>> + uint16_t i;
>>> +
>>> + for (i = 0; i < sizeof(offload_types) * CHAR_BIT; i++) {
>>> + rss_offload = RTE_BIT64(i);
>>> + if ((offload_types & rss_offload) != 0) {
>>> + const char *p = rsstypes_to_str(rss_offload);
>>> +
>>> + unknown_offload_str_len =
>>> + strlen("unknown_offload(BIT())") + (i
>>> / 10 + 1);
>>> + str_len = p ? strlen(p) :
>>> unknown_offload_str_len;
>>> + str_len += 2; /* add two spaces */
>>> + if (total_len + str_len >= char_num_per_line) {
>>> + total_len = 0;
>>> + printf("\n");
>>> + }
>>> +
>>> + if (p)
>>> + printf(" %s", p);
>>> + else
>>> + printf(" unknown_offload(BIT(%u))", i);
>>> + total_len += str_len;
>>> + }
>>> + }
>>> +}
>>> +
>>> void
>>> port_infos_display(portid_t port_id)
>>> {
>>> @@ -803,21 +835,10 @@ 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 =
>>> rsstypes_to_str(rss_offload);
>>> - if (p)
>>> - printf(" %s\n", p);
>>> - else
>>> - printf("
>>> unknown_offload(BIT(%u))\n",
>>> - i);
>>> - }
>>> - }
>>> + rss_offload_types_display(dev_info.flow_type_rss_offloads,
>>> + TESTPMD_RSS_TYPES_CHAR_NUM_PER_LINE);
>>> + printf("\n");
>>
>> Why 'rss_types_display()' is not reused, but new function
>> 'rss_offload_types_display()' created?
> As mentioned in the 1/7 patch reply, there are different purposes.
OK. Lets continue as it is.
@@ -699,6 +699,38 @@ rsstypes_to_str(uint64_t rss_type)
return NULL;
}
+static void
+rss_offload_types_display(uint64_t offload_types, uint16_t char_num_per_line)
+{
+ uint16_t unknown_offload_str_len;
+ uint16_t total_len = 0;
+ uint16_t str_len = 0;
+ uint64_t rss_offload;
+ uint16_t i;
+
+ for (i = 0; i < sizeof(offload_types) * CHAR_BIT; i++) {
+ rss_offload = RTE_BIT64(i);
+ if ((offload_types & rss_offload) != 0) {
+ const char *p = rsstypes_to_str(rss_offload);
+
+ unknown_offload_str_len =
+ strlen("unknown_offload(BIT())") + (i / 10 + 1);
+ str_len = p ? strlen(p) : unknown_offload_str_len;
+ str_len += 2; /* add two spaces */
+ if (total_len + str_len >= char_num_per_line) {
+ total_len = 0;
+ printf("\n");
+ }
+
+ if (p)
+ printf(" %s", p);
+ else
+ printf(" unknown_offload(BIT(%u))", i);
+ total_len += str_len;
+ }
+ }
+}
+
void
port_infos_display(portid_t port_id)
{
@@ -803,21 +835,10 @@ 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 = rsstypes_to_str(rss_offload);
- if (p)
- printf(" %s\n", p);
- else
- printf(" unknown_offload(BIT(%u))\n",
- i);
- }
- }
+ rss_offload_types_display(dev_info.flow_type_rss_offloads,
+ TESTPMD_RSS_TYPES_CHAR_NUM_PER_LINE);
+ printf("\n");
}
printf("Minimum size of RX buffer: %u\n", dev_info.min_rx_bufsize);
@@ -1570,8 +1591,10 @@ port_flow_complain(struct rte_flow_error *error)
}
static void
-rss_types_display(uint64_t rss_types)
+rss_types_display(uint64_t rss_types, uint16_t char_num_per_line)
{
+ uint16_t total_len = 0;
+ uint16_t str_len;
uint16_t i;
if (rss_types == 0)
@@ -1580,9 +1603,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 spces */
+ str_len = strlen(rss_type_table[i].str) + 2;
+ if (total_len + str_len > char_num_per_line) {
+ printf("\n");
+ total_len = 0;
+ }
printf(" %s", rss_type_table[i].str);
+ total_len += str_len;
+ }
}
}
@@ -1628,7 +1660,7 @@ rss_config_display(struct rte_flow_action_rss *rss_conf)
printf(" none\n");
return;
}
- rss_types_display(rss_conf->types);
+ rss_types_display(rss_conf->types, TESTPMD_RSS_TYPES_CHAR_NUM_PER_LINE);
}
static struct port_indirect_action *
@@ -3859,7 +3891,7 @@ port_rss_hash_conf_show(portid_t port_id, int show_rss_key)
return;
}
printf("RSS functions:\n");
- rss_types_display(rss_hf);
+ rss_types_display(rss_hf, TESTPMD_RSS_TYPES_CHAR_NUM_PER_LINE);
printf("\n");
if (!show_rss_key)
return;
@@ -113,6 +113,8 @@ struct pkt_burst_stats {
unsigned int pkt_burst_spread[MAX_PKT_BURST + 1];
};
+
+#define TESTPMD_RSS_TYPES_CHAR_NUM_PER_LINE 64
/** Information for a given RSS type. */
struct rss_type_info {
const char *str; /**< Type name. */