usertools/rss: add CNXK RSS key

Message ID 20231009163033.1095213-1-skori@marvell.com (mailing list archive)
State Superseded, archived
Delegated to: Thomas Monjalon
Headers
Series usertools/rss: add CNXK RSS key |

Checks

Context Check Description
ci/checkpatch warning coding style issues
ci/loongarch-compilation success Compilation OK
ci/loongarch-unit-testing success Unit Testing PASS
ci/Intel-compilation success Compilation OK
ci/intel-Testing success Testing PASS
ci/intel-Functional success Functional PASS

Commit Message

Sunil Kumar Kori Oct. 9, 2023, 4:30 p.m. UTC
  From: Sunil Kumar Kori <skori@marvell.com>

This patch adds RSS key for CNXK platforms. CNXK platform uses
48 bytes long key for hash calculations.

For the same patch also updates help mesaages to provide range
information for supporting NICs/platforms.

Also CNXK uses reta size as 64 so to get correct offset to retrieve
queue index, user must pass reta_size option as 64 i.e. -t 64.

Examples:
$ ./dpdk-rss-flows.py -k cnxk 8 28.0.0.0/24 40.0.0.0/24 -t 64
SRC_IP      DST_IP       QUEUE
28.0.0.1    40.0.0.1     7
28.0.0.1    40.0.0.2     2
28.0.0.1    40.0.0.3     4
28.0.0.1    40.0.0.7     1
28.0.0.1    40.0.0.8     3
28.0.0.1    40.0.0.9     5
28.0.0.1    40.0.0.10    0
28.0.0.1    40.0.0.11    6

Signed-off-by: Sunil Kumar Kori <skori@marvell.com>
Change-Id: I631639d74c0bf91759f8aa188836019b4990caf2
---
 usertools/dpdk-rss-flows.py | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)
  

Patch

diff --git a/usertools/dpdk-rss-flows.py b/usertools/dpdk-rss-flows.py
index 73821eb471..b6edd7a2e0 100755
--- a/usertools/dpdk-rss-flows.py
+++ b/usertools/dpdk-rss-flows.py
@@ -188,11 +188,24 @@  def balanced_traffic(
         0x81, 0x15, 0x03, 0x66,
     )
 )
+# rss_key_default, see drivers/net/cnxk/cnxk_flow.c
+# Marvell's cnxk NICs take 48 bytes keys
+RSS_KEY_CNXK = bytes(
+    (
+        0xfe, 0xed, 0x0b, 0xad, 0xfe, 0xed, 0x0b, 0xad,
+        0xfe, 0xed, 0x0b, 0xad, 0xfe, 0xed, 0x0b, 0xad,
+        0xfe, 0xed, 0x0b, 0xad, 0xfe, 0xed, 0x0b, 0xad,
+        0xfe, 0xed, 0x0b, 0xad, 0xfe, 0xed, 0x0b, 0xad,
+        0xfe, 0xed, 0x0b, 0xad, 0xfe, 0xed, 0x0b, 0xad,
+        0xfe, 0xed, 0x0b, 0xad, 0xfe, 0xed, 0x0b, 0xad,
+    )
+)
 # fmt: on
 DEFAULT_DRIVER_KEYS = {
     "intel": RSS_KEY_INTEL,
     "mlx": RSS_KEY_MLX,
     "i40e": RSS_KEY_I40E,
+    "cnxk": RSS_KEY_CNXK,
 }
 
 
@@ -202,7 +215,7 @@  def rss_key(value):
     try:
         key = binascii.unhexlify(value)
         if len(key) not in (40, 52):
-            raise argparse.ArgumentTypeError("The key must be 40 or 52 bytes long")
+            raise argparse.ArgumentTypeError("The key must be 40 to 52 bytes long")
         return key
     except (TypeError, ValueError) as e:
         raise argparse.ArgumentTypeError(str(e)) from e
@@ -299,7 +312,7 @@  def parse_args():
         default=RSS_KEY_INTEL,
         type=rss_key,
         help="""
-        The random 40-bytes key used to compute the RSS hash. This option
+        The random 40 to 52 bytes key used to compute the RSS hash. This option
         supports either a well-known name or the hex value of the key
         (well-known names: "intel", "mlx", default: "intel").
         """,