From: Damjan Marion Date: Mon, 15 Sep 2025 13:24:08 +0000 (+0200) Subject: octeon: add option to specify RSS flowkey bitmap X-Git-Tag: v26.02-rc0~31 X-Git-Url: https://gerrit.fd.io/r/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F00%2F43700%2F3;p=vpp.git octeon: add option to specify RSS flowkey bitmap Type: improvement Change-Id: I0fa660c96a44ede0fcb435af560544bbc0f8da04 Signed-off-by: Damjan Marion Signed-off-by: Monendra Singh Kushwaha --- diff --git a/src/plugins/dev_octeon/init.c b/src/plugins/dev_octeon/init.c index ad5fca1f7d4..acacd9a841c 100644 --- a/src/plugins/dev_octeon/init.c +++ b/src/plugins/dev_octeon/init.c @@ -87,6 +87,15 @@ static vnet_dev_arg_t oct_port_args[] = { .type = VNET_DEV_ARG_TYPE_BOOL, .default_val.boolean = false, }, + { + .id = OCT_PORT_ARG_RSS_FLOW_KEY, + .name = "rss_flow_key", + .desc = "RSS Flow Key Bitmap, applicable to network devices only", + .type = VNET_DEV_ARG_TYPE_UINT32, + .default_val.uint32 = FLOW_KEY_TYPE_IPV4 | FLOW_KEY_TYPE_IPV6 | + FLOW_KEY_TYPE_TCP | FLOW_KEY_TYPE_UDP | + FLOW_KEY_TYPE_SCTP, + }, { .id = OCT_PORT_ARG_END, .name = "end", diff --git a/src/plugins/dev_octeon/octeon.h b/src/plugins/dev_octeon/octeon.h index a77dc8a11a3..765cdbb556d 100644 --- a/src/plugins/dev_octeon/octeon.h +++ b/src/plugins/dev_octeon/octeon.h @@ -33,6 +33,7 @@ typedef enum typedef enum { OCT_PORT_ARG_EN_ETH_PAUSE_FRAME = 1, + OCT_PORT_ARG_RSS_FLOW_KEY = 2, OCT_PORT_ARG_END } oct_port_args_t; @@ -83,6 +84,7 @@ typedef struct u8 q_intr_enabled : 1; struct roc_npc npc; oct_flow_entry_t *flow_entries; + u32 rss_flowkey; } oct_port_t; typedef struct diff --git a/src/plugins/dev_octeon/port.c b/src/plugins/dev_octeon/port.c index d466a1efde2..091cea5c02e 100644 --- a/src/plugins/dev_octeon/port.c +++ b/src/plugins/dev_octeon/port.c @@ -25,10 +25,6 @@ static const u8 default_rss_key[] = { 0x56, 0xbc, 0x78, 0x9a, 0x9a, 0x78, 0xbc, 0x56, 0xcd, 0x34, 0xef, 0x12 }; -static const u32 default_rss_flowkey = - (FLOW_KEY_TYPE_IPV4 | FLOW_KEY_TYPE_IPV6 | FLOW_KEY_TYPE_TCP | - FLOW_KEY_TYPE_UDP | FLOW_KEY_TYPE_SCTP); - 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 | @@ -143,6 +139,8 @@ oct_port_init (vlib_main_t *vm, vnet_dev_port_t *port) if (arg->id == OCT_PORT_ARG_EN_ETH_PAUSE_FRAME && vnet_dev_arg_get_bool (arg)) is_pause_frame_enable = true; + else if (arg->id == OCT_PORT_ARG_RSS_FLOW_KEY) + cp->rss_flowkey = vnet_dev_arg_get_uint32 (arg); } if ((rrv = roc_nix_lf_alloc (nix, ifs->num_rx_queues, ifs->num_tx_queues, @@ -186,7 +184,7 @@ oct_port_init (vlib_main_t *vm, vnet_dev_port_t *port) return oct_roc_err (dev, rrv, "roc_nix_tm_hierarchy_enable() failed"); } - if ((rrv = roc_nix_rss_default_setup (nix, default_rss_flowkey))) + if ((rrv = roc_nix_rss_default_setup (nix, cp->rss_flowkey))) { oct_port_deinit (vm, port); return oct_roc_err (dev, rrv, "roc_nix_rss_default_setup() failed"); @@ -623,6 +621,7 @@ oct_port_add_del_eth_addr (vlib_main_t *vm, vnet_dev_port_t *port, { vnet_dev_t *dev = port->dev; oct_device_t *cd = vnet_dev_get_data (dev); + oct_port_t *cp = vnet_dev_get_port_data (port); struct roc_nix *nix = cd->nix; vnet_dev_rv_t rv = VNET_DEV_OK; i32 rrv; @@ -649,7 +648,7 @@ oct_port_add_del_eth_addr (vlib_main_t *vm, vnet_dev_port_t *port, } } - rrv = roc_nix_rss_default_setup (nix, default_rss_flowkey); + rrv = roc_nix_rss_default_setup (nix, cp->rss_flowkey); if (rrv) rv = oct_roc_err (dev, rrv, "roc_nix_rss_default_setup() failed"); }