From: Michał Mirosław Date: Wed, 18 Jan 2017 19:32:51 +0000 (+0100) Subject: acl: allow zero verdict X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=c6c7a8d7e6a81320b17dccf63e274bd62df262ae;p=dpdk.git acl: allow zero verdict This enables ACL matches to return 0 where the distinction from no-match case is not needed. Signed-off-by: Michał Mirosław Acked-by: Konstantin Ananyev --- diff --git a/app/test/test_acl.c b/app/test/test_acl.c index be744ec23d..c6b511fb19 100644 --- a/app/test/test_acl.c +++ b/app/test/test_acl.c @@ -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; diff --git a/doc/guides/prog_guide/packet_classif_access_ctrl.rst b/doc/guides/prog_guide/packet_classif_access_ctrl.rst index 5fd3d348d1..a6bee9ba2d 100644 --- a/doc/guides/prog_guide/packet_classif_access_ctrl.rst +++ b/doc/guides/prog_guide/packet_classif_access_ctrl.rst @@ -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:: diff --git a/lib/librte_acl/rte_acl.c b/lib/librte_acl/rte_acl.c index 8b7e92cec2..d1f40bef0f 100644 --- a/lib/librte_acl/rte_acl.c +++ b/lib/librte_acl/rte_acl.c @@ -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; } diff --git a/lib/librte_acl/rte_acl.h b/lib/librte_acl/rte_acl.h index caa91f7eab..b53179a839 100644 --- a/lib/librte_acl/rte_acl.h +++ b/lib/librte_acl/rte_acl.h @@ -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)))) diff --git a/lib/librte_table/rte_table_acl.c b/lib/librte_table/rte_table_acl.c index 8f1f8cebc5..94b69a9832 100644 --- a/lib/librte_table/rte_table_acl.c +++ b/lib/librte_table/rte_table_acl.c @@ -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 *