From: Doohwan Lee <letsme@gmail.com>
To: Shyam Shrivastav <shrivastav.shyam@gmail.com>
Cc: Anupam Kapoor <anupam.kapoor@gmail.com>, users@dpdk.org
Subject: Re: [dpdk-users] Question about range type of DPDK ACL
Date: Thu, 22 Jun 2017 15:58:27 +0900 [thread overview]
Message-ID: <CAG5unGy+vkW4KY5yKUu4jec8S2REZ2De9DfT29UxgWt2HnOoVw@mail.gmail.com> (raw)
In-Reply-To: <CAGSp03=4=fyQW+f59sOsw4sgUUkeXKasoGb-59fmT4wA32f+zQ@mail.gmail.com>
IPv4(1,2,3,4) means 0x01020304, and it is already host order (little
endian).
It need not to be converted using rte_be_to_cpu32() for setting rule.
2017-06-22 15:27 GMT+09:00 Shyam Shrivastav <shrivastav.shyam@gmail.com>:
>
> Yes Doohwan, it is there in rte_ip.h just saw. So this conversion leaves
> the address in big endian format. Theoretically, we are supposed to add the
> acl fields in host order, if you see pipeline code even for ip address with
> mask, following conversion is being done line 1096
> examples/ip_pipeline/pipeline-firewall.c
>
> key.type = PIPELINE_FIREWALL_IPV4_5TUPLE;
> key.key.ipv4_5tuple.src_ip = rte_be_to_cpu_32(sipaddr.s_addr);
> key.key.ipv4_5tuple.src_ip_mask = sipdepth;
> key.key.ipv4_5tuple.dst_ip = rte_be_to_cpu_32(dipaddr.s_addr);
>
> I would suggest this in your code
>
> rule->field[2].value.u32 = rte_be_to_cpu_32(IPv4(1,2,3,4));
> rule->filed[2].mask_range.u32 = rte_be_to_cpu_32(IPv4(1,10,10,10));
>
>
>
>
>
>
> On Thu, Jun 22, 2017 at 11:28 AM, Doohwan Lee <letsme@gmail.com> wrote:
>
>> Ok. The code to set rule for IPv4 address is like below.
>>
>> ------------------------------------------------------------
>> #define IPv4(a,b,c,d) ((uint32_t)(((a) & 0xff) << 24) | \
>> (((b) & 0xff) << 16) | \
>> (((c) & 0xff) << 8) | \
>> ((d) & 0xff))
>>
>> .......
>> rule->field[2].value.u32 = IPv4(1,2,3,4);
>> rule->filed[2].mask_range.u32 = IPv4(1,10,10,10);
>> .......
>> -------------------------------------------------------------
>>
>> The macro IPv4() is from the DPDK (rte_ip.h)
>> The matching data is from the packet. so it is network order. (big endian)
>>
>>
>>
>> On Thu, Jun 22, 2017 at 1:26 PM, Shyam Shrivastav <
>> shrivastav.shyam@gmail.com> wrote:
>>
>>> Yes if these are the results then might be some issue, but can not be
>>> sure unless do this myself, have been using ACL library but not this case
>>> till now.
>>> Can you share code fragment converting dotted decimal to integer if
>>> possible ..
>>>
>>> On Thu, Jun 22, 2017 at 7:57 AM, Doohwan Lee <letsme@gmail.com> wrote:
>>>
>>>> Thank you Shyam.
>>>> Let me explain my situation in detail.
>>>> All the cases described below use RTE_ACL_FIELD_TYPE_RANGE type.
>>>>
>>>> -----------------------------------------------
>>>> Case 1.
>>>> rule: 1.2.3.4 ~ 1.2.3.4
>>>> packet: 1.2.3.4
>>>> result: match (correct)
>>>>
>>>> Case 2.
>>>> rule: 1.2.3.4 ~ 1.10.10.10
>>>> packet: 1.2.10.5
>>>> result: match (correct)
>>>>
>>>> Case 3
>>>> rule: 1.2.3.4 ~ 1.10.10.10
>>>> packet: 1.10.10.11
>>>> result: not match (correct)
>>>>
>>>> Case 4
>>>> rule: 1.2.3.4 ~ 1.10.10.10
>>>> packet: 1.2.3.10
>>>> result: match (correct)
>>>>
>>>> Case 5:
>>>> rule: 1.2.3.4~1.10.10.10
>>>> packet: 1.2.10.11
>>>> result: not match (incorrect)
>>>>
>>>> Case 6:
>>>> rule: 1.2.3.4~1.10.10.10
>>>> packet: 1.2.10.3
>>>> result: not match (incorrect)
>>>> -----------------------------------------------
>>>>
>>>>
>>>> Considering case 1~4, It shows expected results and there is no problem
>>>> with byte ordering.
>>>> But, in case 5~6, the result should be 'match' but it was not.
>>>> This is why I doubt DPDK ACL library doesn't support 32-bit range
>>>> matching.
>>>>
>>>>
>>>> On Wed, Jun 21, 2017 at 9:09 PM, Shyam Shrivastav <
>>>> shrivastav.shyam@gmail.com> wrote:
>>>>
>>>>> I haven't used range type with 32 bit integers yet ...
>>>>> Just some theory in case if you haven't already taken into account,
>>>>> if little-endian host 10.10.10.30 actually means 0x1e0a0a0a for acl match,
>>>>> dotted decimal is in big endian so when in little endian host you need to
>>>>> add it other way round as integers for matching. This means if you add
>>>>> range 0x0a0a0a0a to 0x1e1e1e1e should match 10.10.10.30, this is my
>>>>> understanding theoretically ..
>>>>>
>>>>> On Wed, Jun 21, 2017 at 4:54 PM, Doohwan Lee <letsme@gmail.com> wrote:
>>>>>
>>>>>> Yes. you are right. I also already knew that 32bit match with mask
>>>>>> type works well.
>>>>>> My point is 32bit match with 'range type' doesn't work in some case.
>>>>>>
>>>>>>
>>>>>> On Wed, Jun 21, 2017 at 6:46 PM, Anupam Kapoor <
>>>>>> anupam.kapoor@gmail.com> wrote:
>>>>>>
>>>>>>>
>>>>>>> On Wed, Jun 21, 2017 at 11:36 AM, Doohwan Lee <letsme@gmail.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> DPDK ACL library uses multi-bit trie with 8-bit stride.
>>>>>>>> I guess that implementation of the trie doesn't support 32bit range
>>>>>>>> matching.
>>>>>>>>
>>>>>>>
>>>>>>> well, you _can_ have address wildcard matches e.g. an address+mask
>>>>>>> combination of 1.2.3.0/24 would match all addresses 1.2.3.[0..255]
>>>>>>>
>>>>>>> --
>>>>>>> kind regards
>>>>>>> anupam
>>>>>>>
>>>>>>> In the beginning was the lambda, and the lambda was with Emacs, and
>>>>>>> Emacs was the lambda.
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>
next prev parent reply other threads:[~2017-06-22 6:58 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-06-20 8:27 이두환
2017-06-20 8:58 ` Shyam Shrivastav
2017-06-21 0:50 ` 이두환
2017-06-21 5:11 ` Shyam Shrivastav
2017-06-21 6:06 ` Doohwan Lee
2017-06-21 9:46 ` Anupam Kapoor
2017-06-21 11:24 ` Doohwan Lee
2017-06-21 12:09 ` Shyam Shrivastav
2017-06-22 2:27 ` Doohwan Lee
2017-06-22 4:26 ` Shyam Shrivastav
2017-06-22 5:58 ` Doohwan Lee
2017-06-22 6:12 ` Anupam Kapoor
2017-06-22 6:27 ` Shyam Shrivastav
2017-06-22 6:58 ` Doohwan Lee [this message]
2017-06-22 7:12 ` Shyam Shrivastav
2017-06-22 7:27 ` Doohwan Lee
2017-06-22 8:31 ` Shyam Shrivastav
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAG5unGy+vkW4KY5yKUu4jec8S2REZ2De9DfT29UxgWt2HnOoVw@mail.gmail.com \
--to=letsme@gmail.com \
--cc=anupam.kapoor@gmail.com \
--cc=shrivastav.shyam@gmail.com \
--cc=users@dpdk.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).