From cd40cd919540489e9da57863ac88136a89ac8759 Mon Sep 17 00:00:00 2001 From: Konstantin Ananyev Date: Mon, 8 Jun 2015 11:41:27 +0100 Subject: [PATCH] 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 --- lib/librte_acl/acl_bld.c | 16 +++------------- lib/librte_acl/rte_acl.h | 3 +++ 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/lib/librte_acl/acl_bld.c b/lib/librte_acl/acl_bld.c index d89c66af2e..4d8a62ffdd 100644 --- a/lib/librte_acl/acl_bld.c +++ b/lib/librte_acl/acl_bld.c @@ -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, diff --git a/lib/librte_acl/rte_acl.h b/lib/librte_acl/rte_acl.h index 8d9bbe5c9b..bd8f892e6f 100644 --- a/lib/librte_acl/rte_acl.h +++ b/lib/librte_acl/rte_acl.h @@ -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. */ -- 2.20.1