From 085c3d8c4d5266e16a7edce32af0625e2b447bb8 Mon Sep 17 00:00:00 2001 From: Jasvinder Singh Date: Fri, 30 Mar 2018 15:31:07 +0100 Subject: [PATCH] examples/ip_pipeline: fix load balance table action Fix bug in load balance action for pipeline table. Signed-off-by: Cristian Dumitrescu Signed-off-by: Jasvinder Singh --- 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 2cedb2461e..77a04fe19d 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 fa371b3344..199a31ff89 100644 --- a/examples/ip_pipeline/cli.c +++ b/examples/ip_pipeline/cli.c @@ -2314,8 +2314,7 @@ cmd_pipeline_table_stats(char **tokens, * priority * ipv4 | ipv6 * - * | array - * pos + * | array * | hash * raw * | ipv4_5tuple @@ -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.20.1