From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ie0-f171.google.com (mail-ie0-f171.google.com [209.85.223.171]) by dpdk.org (Postfix) with ESMTP id 5721A9A8F for ; Wed, 20 May 2015 19:17:47 +0200 (CEST) Received: by iebgx4 with SMTP id gx4so44347660ieb.0 for ; Wed, 20 May 2015 10:17:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=eMMOUi+ZL+LKMomp9e8DDiwDb5AZvKIrandz+5mW6RI=; b=NnLVs5l9FXlWdqGHkj6M+YgKL1l6m3DfqAN0s6DRPvr1in6sjkuwF51jj4dVvqfYHk mjrZFCsQcTwahrnOaVsR8T81Oa7lJJ1PYjz5rHLBU0/zURM0VePVlgBOgDFDGjqeUWiS /5CbX9w2bTJzOt4Luy6aV05o5m5PrsbaCV1TbHTWw8AKvxyHeUswTLGfrDpIbhO4ZU/O 5+E0egiGSkWo0NnIr4Mabb/GMpH6kfBy0UIGyflf4DSHRtAwgP5rTu2IKgr/eQURImtF Hm8f0Mqoi1n5S1Gfpj7dFbHxwZujjupX+8GTr10KiNjFu5Dpo0ftbg6JjQGs38RIh0PT 5yPg== MIME-Version: 1.0 X-Received: by 10.50.66.234 with SMTP id i10mr27591528igt.22.1432142266706; Wed, 20 May 2015 10:17:46 -0700 (PDT) Received: by 10.36.125.65 with HTTP; Wed, 20 May 2015 10:17:46 -0700 (PDT) In-Reply-To: <2601191342CEEE43887BDE71AB977258214306FB@irsmsx105.ger.corp.intel.com> References: <2601191342CEEE43887BDE71AB977258214306FB@irsmsx105.ger.corp.intel.com> Date: Wed, 20 May 2015 10:17:46 -0700 Message-ID: From: Zi Hu To: "Ananyev, Konstantin" Content-Type: text/plain; charset=UTF-8 X-Content-Filtered-By: Mailman/MimeDel 2.1.15 Cc: "dev@dpdk.org" Subject: Re: [dpdk-dev] DPDK ACL bug? pkt matches the wrong ACL rule. X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 20 May 2015 17:17:47 -0000 Hi, Konstantin, The patch does fix the bug with the my test rule/trace file. I will do a little bit more test later to verify that. thanks a lot. -Zi On Wed, May 20, 2015 at 7:28 AM, Ananyev, Konstantin < konstantin.ananyev@intel.com> wrote: > > Hi Zi, > > > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Zi Hu > > Sent: Friday, May 15, 2015 1:27 AM > > To: dev@dpdk.org > > Subject: [dpdk-dev] DPDK ACL bug? pkt matches the wrong ACL rule. > > > > Hi, there, > > > > I recently noticed that sometimes packets are matched with the wrong ACL > > rules when using the DPDK ACL library. > > > > I tested it with the "testacl" under dpdk/build/app: > > Here are my rule file and trace file: > > cat test_data/rule1 > > @192.168.0.0/24 192.168.0.0/24 400 : 500 0 : 52 6/0xff > > @192.168.0.0/24 192.168.0.0/24 400 : 500 54 : 65280 6/0xff > > @192.168.0.0/24 192.168.0.0/24 400 : 500 0 : 65535 6/0xff > > > > cat test_data/trace1 > > 0xc0a80005 0xc0a80009 450 53 0x06 > > > > I run the test by: > > sudo ./testacl -n 2 -c 4 -- --rulesf=./test_data/rule1 > > --tracef=./test_data/trace1 > > > > Result: > > ..... > > acl context @0x7f5b43effac0 > > socket_id=-1 > > alg=2 > > max_rules=65536 > > rule_size=96 > > num_rules=3 > > num_categories=3 > > num_tries=1 > > ipv4_5tuple: 1, category: 0, result: 1 > > search_ip5tuples_once(1, 256, sse) returns 1 > > search_ip5tuples @lcore 2: 1 iterations, 1 pkts, 1 categories, 21812 > > cycles, 21812.000000 cycles/pkt > > > > > > The result shows that the packet matches the second rule, which is > wrong. > > The dest port of the pkt is 53, so it should match the third rule. > > How possible could it match the second rule? Anyone see similar > situation > > before? > > > > Another interesting I found is that if we make the dest port range to be > > 54 : 65279 in the second rule (only change 65280 to 65279, all other > stuff > > remains the same): > > > > cat test_data/rule1 > > @192.168.0.0/24 192.168.0.0/24 400 : 500 0 : 52 6/0xff > > @192.168.0.0/24 192.168.0.0/24 400 : 500 54 : 65279 6/0xff > > @192.168.0.0/24 192.168.0.0/24 400 : 500 0 : 65535 6/0xff > > > > Then run the test again, the packet matches the third rule as expected. > > > > > > This seems really weird to me. Anyone has an explanation for that? > > > > thanks > > -Zi > > I think I found the culprit. > Problem is that acl_merge_trie() sometimes is too aggressive in trying to > conserve some space at build time. > So didn't duplicate a node, even when it should. > Could you try a patch below? > Thanks > Konstantin > > Signed-off-by: Konstantin Ananyev > --- > lib/librte_acl/acl_bld.c | 4 +--- > 1 file changed, 1 insertion(+), 3 deletions(-) > > diff --git a/lib/librte_acl/acl_bld.c b/lib/librte_acl/acl_bld.c > index a406737..92a85df 100644 > --- a/lib/librte_acl/acl_bld.c > +++ b/lib/librte_acl/acl_bld.c > @@ -1044,9 +1044,7 @@ acl_merge_trie(struct acl_build_context *context, > * a subtree of the merging tree (node B side). Otherwise, > * just use node A. > */ > - if (level > 0 && > - node_a->subtree_id != > - (subtree_id | RTE_ACL_SUBTREE_NODE)) { > + if (level > 0) { > node_c = acl_dup_node(context, node_a); > node_c->subtree_id = subtree_id | RTE_ACL_SUBTREE_NODE; > } > -- > 1.8.5.3 > >