table: add table entry priority

Add support for table entry priority, which is required for the
wildcard match/ACL table type.

Signed-off-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
This commit is contained in:
Cristian Dumitrescu 2021-02-16 20:46:45 +00:00 committed by Thomas Monjalon
parent 924d3ba019
commit ddcce12249
2 changed files with 36 additions and 0 deletions

View File

@ -386,6 +386,9 @@ table_entry_duplicate(struct rte_swx_ctl_pipeline *ctl,
entry->key_mask,
table->params.key_size);
}
/* key_priority. */
new_entry->key_priority = entry->key_priority;
}
if (data_duplicate) {
@ -1672,6 +1675,28 @@ rte_swx_ctl_pipeline_table_entry_read(struct rte_swx_ctl_pipeline *ctl,
tokens += 1 + table->info.n_match_fields;
n_tokens -= 1 + table->info.n_match_fields;
/*
* Match priority.
*/
if (n_tokens && !strcmp(tokens[0], "priority")) {
char *priority = tokens[1];
uint32_t val;
if (n_tokens < 2)
goto error;
/* Parse. */
val = strtoul(priority, &priority, 0);
if (priority[0])
goto error;
/* Copy to entry. */
entry->key_priority = val;
tokens += 2;
n_tokens -= 2;
}
/*
* Action.
*/
@ -1768,6 +1793,8 @@ table_entry_printf(FILE *f,
fprintf(f, "%02x", entry->key_mask[i]);
}
fprintf(f, " priority %u", entry->key_priority);
fprintf(f, " action %s ", action->info.name);
for (i = 0; i < action->data_size; i++)
fprintf(f, "%02x", entry->action_data[i]);

View File

@ -89,6 +89,15 @@ struct rte_swx_table_entry {
*/
uint64_t key_signature;
/** Key priority for the current entry. Useful for wildcard match (as
* match rules are commonly overlapping with other rules), ignored for
* exact match (as match rules never overlap, hence all rules have the
* same match priority) and for LPM (match priority is driven by the
* prefix length, with non-overlapping prefixes essentially having the
* same match priority). Value 0 indicates the highest match priority.
*/
uint32_t key_priority;
/** Action ID for the current entry. */
uint64_t action_id;