acl: introduce a macro for bitmask conversion

Introduce new RTE_ACL_MASKLEN_TO_BITMASK macro, that will be used
in several places inside librte_acl and it's UT.
Simplify and cleanup build_trie() code a bit.

Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
This commit is contained in:
Konstantin Ananyev 2015-06-08 11:41:27 +01:00 committed by Thomas Monjalon
parent 4a6ce751ac
commit cd40cd9195
2 changed files with 6 additions and 13 deletions

View File

@ -1262,19 +1262,9 @@ build_trie(struct acl_build_context *context, struct rte_acl_build_rule *head,
* all higher bits.
*/
uint64_t mask;
if (fld->mask_range.u32 == 0) {
mask = 0;
/*
* arithmetic right shift for the length of
* the mask less the msb.
*/
} else {
mask = -1 <<
(rule->config->defs[n].size *
CHAR_BIT - fld->mask_range.u32);
}
mask = RTE_ACL_MASKLEN_TO_BITMASK(
fld->mask_range.u32,
rule->config->defs[n].size);
/* gen a mini-trie for this field */
merge = acl_gen_mask_trie(context,

View File

@ -122,6 +122,9 @@ enum {
#define RTE_ACL_INVALID_USERDATA 0
#define RTE_ACL_MASKLEN_TO_BITMASK(v, s) \
((v) == 0 ? (v) : (typeof(v))((uint64_t)-1 << ((s) * CHAR_BIT - (v))))
/**
* Miscellaneous data for ACL rule.
*/