#include <stdlib.h>
#include <string.h>
+#include <rte_string_fns.h>
+#include <rte_table_hash_func.h>
+
#include "action.h"
-#include "hash_func.h"
/**
* Input port
(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:
}
/* 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;
((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)
}
}
+ 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);
}
/* 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;