[dpdk-dev] ACL Issue with single field rule and rest with wild card entry

Ananyev, Konstantin konstantin.ananyev at intel.com
Mon Feb 9 17:28:43 CET 2015


Hi Varun,

> -----Original Message-----
> From: Rapelly, Varun [mailto:vrapelly at sonusnet.com]
> Sent: Friday, February 06, 2015 4:58 PM
> To: Ananyev, Konstantin
> Subject: FW: [dpdk-dev] ACL Issue with single field rule and rest with wild card entry
> 
> Sorry for too many mails. :)
> 
> I tried with DPDK 1.7 also, but got the same different results as 1.6.0 :(

I just tried with v1.7.0-rc4.
For me results are absolutely the same for both cases:
rte_acl_classify() returns 0 , res[0]=11

That's on HSW, fedora 20, gcc 4.8.3.
Same for IVB, fedora 16 with gcc 4.6
RTE_TARGET=x86_64-native-linuxapp-gcc

Not sure why you are getting different results then me with DPDK 1.7.
I suppose you didn't modify ACL library in any way?

BTW, do you realise that in you test you specify 'size = sizeof (uint8_t)' for all your fields?
It doesn't really matter for that particular test case, as all fields except the very first one are wildcards,
but in real app, it shouldn't be that way.

Konstantin

> 
> Regards,
> Varun
> -----Original Message-----
> From: Rapelly, Varun
> Sent: Friday, February 06, 2015 10:24 PM
> To: 'Ananyev, Konstantin'
> Subject: FW: [dpdk-dev] ACL Issue with single field rule and rest with wild card entry
> 
> Hi Konstantin,
> 
> FYI: I'm using DPDK 1.6.0
> 
> -----Original Message-----
> From: Rapelly, Varun
> Sent: Friday, February 06, 2015 10:08 PM
> To: 'Ananyev, Konstantin'
> Subject: RE: [dpdk-dev] ACL Issue with single field rule and rest with wild card entry
> 
> Hi Konstantin,
> 
> Thanks for your quick response.
> 
> I'm getting different results:
> 
> With 118-125 lines commented:
> 
> ACL: Gen phase for ACL "ACL_example":
> runtime memory footprint on socket -1:
> single nodes/bytes used: 0/0
> quad nodes/bytes used: 0/0
> DFA nodes/bytes used: 1/2048
> match nodes/bytes used: 4/512
> total: 4960 bytes
> ACL: Build phase for ACL "ACL_example":
> memory consumed: 8388615
> ACL: trie 0: number of rules: 4
> rte_acl_classify() returns 0
> , res[0]=0
> 
> With uncommented:
> ACL: Gen phase for ACL "ACL_example":
> runtime memory footprint on socket -1:
> single nodes/bytes used: 12/96
> quad nodes/bytes used: 4/96
> DFA nodes/bytes used: 1/2048
> match nodes/bytes used: 4/512
> total: 5152 bytes
> ACL: Build phase for ACL "ACL_example":
> memory consumed: 8388615
> ACL: trie 0: number of rules: 4
> rte_acl_classify() returns 0
> , res[0]=11
> 
> Please let me know, is it depends on any other environment variables or what?
> 
> Regards,
> Varun
> 
> -----Original Message-----
> From: Ananyev, Konstantin [mailto:konstantin.ananyev at intel.com]
> Sent: Friday, February 06, 2015 5:15 PM
> To: Rapelly, Varun; dev at dpdk.org
> Subject: RE: [dpdk-dev] ACL Issue with single field rule and rest with wild card entry
> 
> Hi Varun,
> 
> > -----Original Message-----
> > From: dev [mailto:dev-bounces at dpdk.org] On Behalf Of Rapelly, Varun
> > Sent: Friday, February 06, 2015 7:25 AM
> > To: dev at dpdk.org
> > Subject: [dpdk-dev] ACL Issue with single field rule and rest with
> > wild card entry
> >
> > Hi,
> >
> > struct ipv6_5tuple {
> >    uint8_t proto;         /* Protocol, next header. */
> >    uint32_t src_addr0;  /* IP address of source host. */
> >    uint32_t src_addr1;  /* IP address of source host. */
> >    uint32_t src_addr2;  /* IP address of source host. */
> >    uint32_t src_addr3;  /* IP address of source host. */ };
> >
> > enum {
> >    PROTO_FIELD_IPV6,
> >    SRC_FIELD0_IPV6,
> >    SRC_FIELD1_IPV6,
> >    SRC_FIELD2_IPV6,
> >    SRC_FIELD3_IPV6,
> >    NUM_FIELDS_IPV6
> > };
> >
> >
> > I'm using the above data to insert in to ACL trie.
> >
> > If I'm inserting rules with only different proto fields, [I'm expecting others fields as wild card entries]  then the rules are not
> matching.
> >
> > But if I insert one rule with dummy entries [in the attached file line num 118-125], then the above issue is resolved.
> 
> Hmm, it is strange...
> I took your source code compiled it, then commented out lines 118-125 and recompiled it.
> Both binaries produce valid result for me:
> 
> 1. original code:
> ACL: Gen phase for ACL "ACL_example":
> runtime memory footprint on socket -1:
> single nodes/bytes used: 0/0
> quad nodes/vectors/bytes used: 0/0/0
> DFA nodes/group64/bytes used: 1/4/4104
> match nodes/bytes used: 4/512
> total: 6816 bytes
> max limit: 18446744073709551615 bytes
> ACL: Build phase for ACL "ACL_example":
> node limit for tree split: 2048
> nodes created: 5
> memory consumed: 8388615
> ACL: trie 0: number of rules: 4, indexes: 1
> rte_acl_classify() returns 0
> , res[0]=11
> 
> 
> 2. code with lines 118-125 commented out:
> ACL: Gen phase for ACL "ACL_example":
> runtime memory footprint on socket -1:
> single nodes/bytes used: 0/0
> quad nodes/vectors/bytes used: 0/0/0
> DFA nodes/group64/bytes used: 1/4/4104
> match nodes/bytes used: 3/384
> total: 6688 bytes
> max limit: 18446744073709551615 bytes
> ACL: Build phase for ACL "ACL_example":
> node limit for tree split: 2048
> nodes created: 4
> memory consumed: 8388615
> ACL: trie 0: number of rules: 3, indexes: 1
> rte_acl_classify() returns 0
> , res[0]=11
> 
> Wonder what results are you getting for both cases?
> 
> Konstantin
> 
> >
> > Please let me know:
> >
> >
> > 1.       Can we have rules with only one entry and others as wild card entries?
> >
> > 2.       Is there any other way to match wild card entries in a rule?
> >
> > Regards,
> > Varun



More information about the dev mailing list