octeon: add support for changing RSS key 02/43702/2
authorDamjan Marion <[email protected]>
Mon, 15 Sep 2025 17:36:24 +0000 (19:36 +0200)
committerFlorin Coras <[email protected]>
Mon, 15 Sep 2025 21:30:17 +0000 (21:30 +0000)
Change-Id: I855c394262b275d1f98d9bce1a3cd4a2411d88f7
Type: improvement
Signed-off-by: Damjan Marion <[email protected]>
src/plugins/dev_octeon/init.c
src/plugins/dev_octeon/port.c

index acacd9a..b7dc20b 100644 (file)
@@ -220,6 +220,16 @@ oct_init_nix (vlib_main_t *vm, vnet_dev_t *dev)
        .tx_offloads = {
          .ip4_cksum = 1,
        },
+
+      },
+      .default_rss_key = {
+        .key = {
+          0xfe, 0xed, 0x0b, 0xad, 0xfe, 0xed, 0x0b, 0xad, 0xad, 0x0b, 0xed, 0xfe,
+          0xad, 0x0b, 0xed, 0xfe, 0x13, 0x57, 0x9b, 0xef, 0x24, 0x68, 0xac, 0x0e,
+          0x91, 0x72, 0x53, 0x11, 0x82, 0x64, 0x20, 0x44, 0x12, 0xef, 0x34, 0xcd,
+          0x56, 0xbc, 0x78, 0x9a, 0x9a, 0x78, 0xbc, 0x56, 0xcd, 0x34, 0xef, 0x12,
+        },
+        .length = 48,
       },
       .ops = {
         .init = oct_port_init,
index 091cea5..a9d170e 100644 (file)
@@ -18,13 +18,6 @@ VLIB_REGISTER_LOG_CLASS (oct_log, static) = {
   .subclass_name = "port",
 };
 
-static const u8 default_rss_key[] = {
-  0xfe, 0xed, 0x0b, 0xad, 0xfe, 0xed, 0x0b, 0xad, 0xad, 0x0b, 0xed, 0xfe,
-  0xad, 0x0b, 0xed, 0xfe, 0x13, 0x57, 0x9b, 0xef, 0x24, 0x68, 0xac, 0x0e,
-  0x91, 0x72, 0x53, 0x11, 0x82, 0x64, 0x20, 0x44, 0x12, 0xef, 0x34, 0xcd,
-  0x56, 0xbc, 0x78, 0x9a, 0x9a, 0x78, 0xbc, 0x56, 0xcd, 0x34, 0xef, 0x12
-};
-
 static const u64 rxq_cfg =
   ROC_NIX_LF_RX_CFG_DIS_APAD | ROC_NIX_LF_RX_CFG_IP6_UDP_OPT |
   ROC_NIX_LF_RX_CFG_L2_LEN_ERR | ROC_NIX_LF_RX_CFG_DROP_RE |
@@ -190,7 +183,7 @@ oct_port_init (vlib_main_t *vm, vnet_dev_port_t *port)
       return oct_roc_err (dev, rrv, "roc_nix_rss_default_setup() failed");
     }
 
-  roc_nix_rss_key_set (nix, default_rss_key);
+  roc_nix_rss_key_set (nix, port->rss_key.key);
 
   cp->npc.roc_nix = nix;
   cp->npc.flow_prealloc_size = OCT_FLOW_PREALLOC_SIZE;
@@ -674,6 +667,19 @@ oct_op_config_max_rx_len (vlib_main_t *vm, vnet_dev_port_t *port,
   return rv;
 }
 
+vnet_dev_rv_t
+oct_op_config_set_rss_key (vlib_main_t *vm, vnet_dev_port_t *port,
+                          vnet_dev_rss_key_t *k)
+{
+  vnet_dev_t *dev = port->dev;
+  oct_device_t *cd = vnet_dev_get_data (dev);
+  vnet_dev_rv_t rv = VNET_DEV_OK;
+
+  roc_nix_rss_key_set (cd->nix, k->key);
+
+  return rv;
+}
+
 vnet_dev_rv_t
 oct_port_cfg_change_validate (vlib_main_t *vm, vnet_dev_port_t *port,
                              vnet_dev_port_cfg_change_req_t *req)
@@ -693,6 +699,7 @@ oct_port_cfg_change_validate (vlib_main_t *vm, vnet_dev_port_t *port,
     case VNET_DEV_PORT_CFG_CHANGE_PRIMARY_HW_ADDR:
     case VNET_DEV_PORT_CFG_ADD_SECONDARY_HW_ADDR:
     case VNET_DEV_PORT_CFG_REMOVE_SECONDARY_HW_ADDR:
+    case VNET_DEV_PORT_CFG_SET_RSS_KEY:
       break;
 
     case VNET_DEV_PORT_CFG_ADD_RX_FLOW:
@@ -738,6 +745,10 @@ oct_port_cfg_change (vlib_main_t *vm, vnet_dev_port_t *port,
       rv = oct_op_config_max_rx_len (vm, port, req->max_rx_frame_size);
       break;
 
+    case VNET_DEV_PORT_CFG_SET_RSS_KEY:
+      rv = oct_op_config_set_rss_key (vm, port, &req->rss_key);
+      break;
+
     case VNET_DEV_PORT_CFG_ADD_RX_FLOW:
     case VNET_DEV_PORT_CFG_DEL_RX_FLOW:
     case VNET_DEV_PORT_CFG_GET_RX_FLOW_COUNTER: