Fix bug in load balance action for pipeline table. Signed-off-by: Cristian Dumitrescu <cristian.dumitre...@intel.com> Signed-off-by: Jasvinder Singh <jasvinder.si...@intel.com> --- examples/ip_pipeline/action.c | 42 ++++++++++++++++++++++++++++++++++++++++++ examples/ip_pipeline/cli.c | 9 ++++----- 2 files changed, 46 insertions(+), 5 deletions(-)
diff --git a/examples/ip_pipeline/action.c b/examples/ip_pipeline/action.c index 2cedb24..77a04fe 100644 --- a/examples/ip_pipeline/action.c +++ b/examples/ip_pipeline/action.c @@ -186,6 +186,48 @@ table_action_profile_create(const char *name, ((params->action_mask & (1LLU << RTE_TABLE_ACTION_FWD)) == 0)) return NULL; + if ((params->action_mask & (1LLU << RTE_TABLE_ACTION_LB)) && + (params->lb.f_hash == NULL)) { + switch (params->lb.key_size) { + case 8: + params->lb.f_hash = hash_default_key8; + break; + + case 16: + params->lb.f_hash = hash_default_key16; + break; + + case 24: + params->lb.f_hash = hash_default_key24; + break; + + case 32: + params->lb.f_hash = hash_default_key32; + break; + + case 40: + params->lb.f_hash = hash_default_key40; + break; + + case 48: + params->lb.f_hash = hash_default_key48; + break; + + case 56: + params->lb.f_hash = hash_default_key56; + break; + + case 64: + params->lb.f_hash = hash_default_key64; + break; + + default: + return NULL; + } + + params->lb.seed = 0; + } + /* Resource */ ap = rte_table_action_profile_create(¶ms->common); if (ap == NULL) diff --git a/examples/ip_pipeline/cli.c b/examples/ip_pipeline/cli.c index 433f644..357d0ae 100644 --- a/examples/ip_pipeline/cli.c +++ b/examples/ip_pipeline/cli.c @@ -2314,8 +2314,7 @@ cmd_pipeline_table_stats(char **tokens, * priority <priority> * ipv4 | ipv6 <sa> <sa_depth> <da> <da_depth> * <sp0> <sp1> <dp0> <dp1> <proto> - * | array - * pos + * | array <pos> * | hash * raw <key> * | ipv4_5tuple <sa> <da> <sp> <dp> <proto> @@ -2845,15 +2844,15 @@ parse_table_action_balance(char **tokens, tokens++; n_tokens--; - if (n_tokens < RTE_TABLE_ACTION_LB_KEY_SIZE_MAX) + if (n_tokens < RTE_TABLE_ACTION_LB_TABLE_SIZE) return 0; - for (i = 0; i < RTE_TABLE_ACTION_LB_KEY_SIZE_MAX; i++) + for (i = 0; i < RTE_TABLE_ACTION_LB_TABLE_SIZE; i++) if (parser_read_uint32(&a->lb.out[i], tokens[i]) != 0) return 0; a->action_mask |= 1 << RTE_TABLE_ACTION_LB; - return 1 + RTE_TABLE_ACTION_LB_KEY_SIZE_MAX; + return 1 + RTE_TABLE_ACTION_LB_TABLE_SIZE; } -- 2.9.3