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 <michal.miroslaw@atendesoftware.pl> Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
This commit is contained in:
parent
7601d32ed3
commit
c6c7a8d7e6
@ -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;
|
||||
|
@ -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::
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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))))
|
||||
|
||||
|
@ -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 *
|
||||
|
Loading…
Reference in New Issue
Block a user