X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=examples%2Fip_pipeline%2Faction.c;h=d2104aad6e8be51b60bbdea7c6f08061d40331dd;hb=4216cdc0e3d90810e107473d875cba01f413b59f;hp=20e222c80eaf874c20f48513a7a71a6535866101;hpb=719374345ceea6ca3321b0f3f0bba2a1c7be1831;p=dpdk.git diff --git a/examples/ip_pipeline/action.c b/examples/ip_pipeline/action.c index 20e222c80e..d2104aad6e 100644 --- a/examples/ip_pipeline/action.c +++ b/examples/ip_pipeline/action.c @@ -6,8 +6,10 @@ #include #include +#include +#include + #include "action.h" -#include "hash_func.h" /** * Input port @@ -55,35 +57,35 @@ port_in_action_profile_create(const char *name, (params->lb.f_hash == NULL)) { switch (params->lb.key_size) { case 8: - params->lb.f_hash = hash_default_key8; + params->lb.f_hash = rte_table_hash_crc_key8; break; case 16: - params->lb.f_hash = hash_default_key16; + params->lb.f_hash = rte_table_hash_crc_key16; break; case 24: - params->lb.f_hash = hash_default_key24; + params->lb.f_hash = rte_table_hash_crc_key24; break; case 32: - params->lb.f_hash = hash_default_key32; + params->lb.f_hash = rte_table_hash_crc_key32; break; case 40: - params->lb.f_hash = hash_default_key40; + params->lb.f_hash = rte_table_hash_crc_key40; break; case 48: - params->lb.f_hash = hash_default_key48; + params->lb.f_hash = rte_table_hash_crc_key48; break; case 56: - params->lb.f_hash = hash_default_key56; + params->lb.f_hash = rte_table_hash_crc_key56; break; case 64: - params->lb.f_hash = hash_default_key64; + params->lb.f_hash = rte_table_hash_crc_key64; break; default: @@ -133,7 +135,7 @@ port_in_action_profile_create(const char *name, } /* Node fill in */ - strncpy(profile->name, name, sizeof(profile->name)); + strlcpy(profile->name, name, sizeof(profile->name)); memcpy(&profile->params, params, sizeof(*params)); profile->ap = ap; @@ -186,6 +188,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 = rte_table_hash_crc_key8; + break; + + case 16: + params->lb.f_hash = rte_table_hash_crc_key16; + break; + + case 24: + params->lb.f_hash = rte_table_hash_crc_key24; + break; + + case 32: + params->lb.f_hash = rte_table_hash_crc_key32; + break; + + case 40: + params->lb.f_hash = rte_table_hash_crc_key40; + break; + + case 48: + params->lb.f_hash = rte_table_hash_crc_key48; + break; + + case 56: + params->lb.f_hash = rte_table_hash_crc_key56; + break; + + case 64: + params->lb.f_hash = rte_table_hash_crc_key64; + break; + + default: + return NULL; + } + + params->lb.seed = 0; + } + /* Resource */ ap = rte_table_action_profile_create(¶ms->common); if (ap == NULL) @@ -202,6 +246,17 @@ table_action_profile_create(const char *name, } } + if (params->action_mask & (1LLU << RTE_TABLE_ACTION_LB)) { + status = rte_table_action_profile_action_register(ap, + RTE_TABLE_ACTION_LB, + ¶ms->lb); + + if (status) { + rte_table_action_profile_free(ap); + return NULL; + } + } + if (params->action_mask & (1LLU << RTE_TABLE_ACTION_MTR)) { status = rte_table_action_profile_action_register(ap, RTE_TABLE_ACTION_MTR, @@ -278,6 +333,39 @@ table_action_profile_create(const char *name, } } + if (params->action_mask & (1LLU << RTE_TABLE_ACTION_SYM_CRYPTO)) { + status = rte_table_action_profile_action_register(ap, + RTE_TABLE_ACTION_SYM_CRYPTO, + ¶ms->sym_crypto); + + if (status) { + rte_table_action_profile_free(ap); + return NULL; + } + } + + if (params->action_mask & (1LLU << RTE_TABLE_ACTION_TAG)) { + status = rte_table_action_profile_action_register(ap, + RTE_TABLE_ACTION_TAG, + NULL); + + if (status) { + rte_table_action_profile_free(ap); + return NULL; + } + } + + if (params->action_mask & (1LLU << RTE_TABLE_ACTION_DECAP)) { + status = rte_table_action_profile_action_register(ap, + RTE_TABLE_ACTION_DECAP, + NULL); + + if (status) { + rte_table_action_profile_free(ap); + return NULL; + } + } + status = rte_table_action_profile_freeze(ap); if (status) { rte_table_action_profile_free(ap); @@ -292,7 +380,7 @@ table_action_profile_create(const char *name, } /* Node fill in */ - strncpy(profile->name, name, sizeof(profile->name)); + strlcpy(profile->name, name, sizeof(profile->name)); memcpy(&profile->params, params, sizeof(*params)); profile->ap = ap;