[dpdk-users] Question about range type of DPDK ACL

Shyam Shrivastav shrivastav.shyam at gmail.com
Tue Jun 20 10:58:51 CEST 2017


RTE_ACL_FIELD_TYPE_RANGE is for linear integer range like port numbers
For ip addresses RTE_ACL_FIELD_TYPE_MASK should be used.

On Tue, Jun 20, 2017 at 1:57 PM, 이두환 <letsme at gmail.com> wrote:

> Hello everyone.
>
> I want to implement some feature like ACL using DPDK ACL library.
> so, I defined rule like below.
>
> struct acl_match_component
> {
>     uint8_t protocol;
>     uint32_t sip;
>     uint32_t dip;
>     uint16_t sport;
>     uint16_t dport;
>     uint16_t in_if;
>     uint16_t out_if;
> }
>
>
> struct rte_acl_field_def ipv4_defs[7] = {
>     {
>         .type = RTE_ACL_FIELD_TYPE_RANGE,
>         .size = sizeof(uint8_t),
>         .field_index = 0,
>         .input_index = 0,
>         .offset = 0
>     },
>     {
>         .type = RTE_ACL_FIELD_TYPE_RANGE,
>         .size = sizeof(uint32_t),
>         .field_index = 1,
>         .input_index = 1,
>         .offset = offsetof(struct acl_match_component, sip)
>     },
>     {
>         .type = RTE_ACL_FIELD_TYPE_RANGE,
>         .size = sizeof(uint32_t),
>         .field_index = 2,
>         .input_index = 2,
>         .offset = offsetof(struct acl_match_component, dip)
>     },
>     {
>         .type = RTE_ACL_FIELD_TYPE_RANGE,
>         .size = sizeof(uint16_t),
>         .field_index = 3,
>         .input_index = 3,
>         .offset = offsetof(struct acl_match_component, sport)
>     },
>     {
>         .type = RTE_ACL_FIELD_TYPE_RANGE,
>         .size = sizeof(uint16_t),
>         .field_index = 4,
>         .input_index = 3,
>         .offset = offsetof(struct acl_match_component, dport)
>     },
>     {
>         .type = RTE_ACL_FIELD_TYPE_RANGE,
>         .size = sizeof(uint16_t),
>         .field_index = 5,
>         .input_index = 4,
>         .offset = offsetof(struct acl_match_component, in_if)
>     },
>     {
>         .type = RTE_ACL_FIELD_TYPE_RANGE,
>         .size = sizeof(uint16_t),
>         .field_index = 6,
>         .input_index = 4,
>         .offset = offsetof(struct acl_match_component, out_if)
>     },
> };
>
> I defined 32bit IPv4 address filed as RTE_ACL_FIELD_TYPE_RANGE type.
> and I set rte_acl_field for IP field like below.
>
> value.u32 = IPv4(10,10,10,10);
> mask_range.u32 = IPv4(20,20,20,20);
>
> In this case, I think IP 10.10.10.15 and 10.10.10.30 should be matched.
> but result was IP 10.10.10.15 was matched and 10.10.10.30 was not matched.
>
> I am using DPDK 16.04 and there was no example in the DPDK source using
> 32bit field as range type.
> Range type with 16bit field (ex. port number) works well.
> And, DPDK 17.05 has no meaningful changes on ACL library compare to DPDK
> 16.04
>
> Do you have any idea about this?
>
> Thank you.
>


More information about the users mailing list