acl: introduce a macro for bitmask conversion
authorKonstantin Ananyev <konstantin.ananyev@intel.com>
Mon, 8 Jun 2015 10:41:27 +0000 (11:41 +0100)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Thu, 18 Jun 2015 16:08:34 +0000 (18:08 +0200)
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>
lib/librte_acl/acl_bld.c
lib/librte_acl/rte_acl.h

index d89c66a..4d8a62f 100644 (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,
index 8d9bbe5..bd8f892 100644 (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.
  */