}
parser->rss_conf = (struct rte_flow_action_rss){
.func = RTE_ETH_HASH_FUNCTION_DEFAULT,
- .level = rss->level,
+ .level = rss->level ? rss->level : 1,
.types = rss->types,
.key_len = rss_key_len,
.queue_num = rss->queue_num,
int outer = parser->tunnel && parser->rss_conf.level < 2;
uint64_t rss = parser->rss_conf.types;
- /* Default to outer RSS. */
- if (!parser->rss_conf.level)
- parser->rss_conf.level = 1;
layer = outer ? parser->out_layer : parser->layer;
if (layer == HASH_RXQ_TUNNEL)
layer = HASH_RXQ_ETH;
parser->tunnel = ptype_ext[PTYPE_IDX(RTE_PTYPE_TUNNEL_VXLAN)];
parser->out_layer = parser->layer;
parser->layer = HASH_RXQ_TUNNEL;
- /* Default VXLAN to outer RSS. */
- if (!parser->rss_conf.level)
- parser->rss_conf.level = 1;
if (spec) {
if (!mask)
mask = default_mask;
parser->tunnel = ptype_ext[PTYPE_IDX(RTE_PTYPE_TUNNEL_VXLAN_GPE)];
parser->out_layer = parser->layer;
parser->layer = HASH_RXQ_TUNNEL;
- /* Default VXLAN-GPE to outer RSS. */
- if (!parser->rss_conf.level)
- parser->rss_conf.level = 1;
if (spec) {
if (!mask)
mask = default_mask;
parser->tunnel = ptype_ext[PTYPE_IDX(RTE_PTYPE_TUNNEL_GRE)];
parser->out_layer = parser->layer;
parser->layer = HASH_RXQ_TUNNEL;
- /* Default GRE to inner RSS. */
- if (!parser->rss_conf.level)
- parser->rss_conf.level = 2;
#ifdef HAVE_IBV_DEVICE_MPLS_SUPPORT
if (spec) {
if (!mask)
/* parser->out_layer stays as in GRE out_layer. */
}
parser->layer = HASH_RXQ_TUNNEL;
- /*
- * For MPLS-in-GRE, RSS level should have been set.
- * For MPLS-in-UDP, use outer RSS.
- */
- if (!parser->rss_conf.level)
- parser->rss_conf.level = 1;
if (spec) {
if (!mask)
mask = default_mask;
flow->tunnel = parser.tunnel;
flow->rss_conf = (struct rte_flow_action_rss){
.func = RTE_ETH_HASH_FUNCTION_DEFAULT,
- .level = 0,
+ .level = parser.rss_conf.level,
.types = parser.rss_conf.types,
.key_len = parser.rss_conf.key_len,
.queue_num = parser.rss_conf.queue_num,