acl: allow zero verdict
authorMichał Mirosław <michal.miroslaw@atendesoftware.pl>
Wed, 18 Jan 2017 19:32:51 +0000 (20:32 +0100)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Mon, 30 Jan 2017 10:08:47 +0000 (11:08 +0100)
This enables ACL matches to return 0 where the distinction
from no-match case is not needed.

Signed-off-by: Michał Mirosław <michal.miroslaw@atendesoftware.pl>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
app/test/test_acl.c
doc/guides/prog_guide/packet_classif_access_ctrl.rst
lib/librte_acl/rte_acl.c
lib/librte_acl/rte_acl.h
lib/librte_table/rte_table_acl.c

index be744ec..c6b511f 100644 (file)
@@ -1357,19 +1357,6 @@ test_invalid_rules(void)
                goto err;
        }
 
-       rule.dst_mask_len = 0;
-       rule.src_mask_len = 0;
-       rule.data.userdata = 0;
-
-       /* try adding this rule (it should fail because userdata is invalid) */
-       ret = rte_acl_ipv4vlan_add_rules(acx, &rule, 1);
-       if (ret == 0) {
-               printf("Line %i: Adding a rule with invalid user data "
-                               "should have failed!\n", __LINE__);
-               rte_acl_free(acx);
-               return -1;
-       }
-
        rte_acl_free(acx);
 
        return 0;
index 5fd3d34..a6bee9b 100644 (file)
@@ -329,8 +329,9 @@ When creating a set of rules, for each rule, additional information must be supp
     Each set could be assigned its own category and by combining them into a single database,
     one lookup returns a result for each of the four sets.
 
-*   **userdata**: A user-defined field that could be any value except zero.
+*   **userdata**: A user-defined value.
     For each category, a successful match returns the userdata field of the highest priority matched rule.
+    When no rules match, returned value is zero.
 
 .. note::
 
index 8b7e92c..d1f40be 100644 (file)
@@ -313,8 +313,7 @@ acl_check_rule(const struct rte_acl_rule_data *rd)
        if ((RTE_LEN2MASK(RTE_ACL_MAX_CATEGORIES, typeof(rd->category_mask)) &
                        rd->category_mask) == 0 ||
                        rd->priority > RTE_ACL_MAX_PRIORITY ||
-                       rd->priority < RTE_ACL_MIN_PRIORITY ||
-                       rd->userdata == RTE_ACL_INVALID_USERDATA)
+                       rd->priority < RTE_ACL_MIN_PRIORITY)
                return -EINVAL;
        return 0;
 }
index caa91f7..b53179a 100644 (file)
@@ -120,8 +120,6 @@ enum {
        RTE_ACL_MIN_PRIORITY = 0,
 };
 
-#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))))
 
index 8f1f8ce..94b69a9 100644 (file)
@@ -792,7 +792,7 @@ rte_table_acl_lookup(
 
                pkts_mask &= ~pkt_mask;
 
-               if (action_table_pos != RTE_ACL_INVALID_USERDATA) {
+               if (action_table_pos != 0) {
                        pkts_out_mask |= pkt_mask;
                        entries[pkt_pos] = (void *)
                                &acl->memory[action_table_pos *