From patchwork Fri Nov 4 12:59:31 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: nevola X-Patchwork-Id: 691253 X-Patchwork-Delegate: pablo@netfilter.org Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3t9MP52c9Dz9t1F for ; Fri, 4 Nov 2016 23:59:37 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="p5p8OjwA"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933163AbcKDM7g (ORCPT ); Fri, 4 Nov 2016 08:59:36 -0400 Received: from mail-wm0-f65.google.com ([74.125.82.65]:34166 "EHLO mail-wm0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753178AbcKDM7f (ORCPT ); Fri, 4 Nov 2016 08:59:35 -0400 Received: by mail-wm0-f65.google.com with SMTP id p190so3830744wmp.1 for ; Fri, 04 Nov 2016 05:59:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=date:from:to:subject:message-id:mime-version:content-disposition :user-agent; bh=7O9wGsIOWom0OnmM0ne0gzvwCiXz93nMV+y/Akahw08=; b=p5p8OjwAPceqMwt/JtStVBwCyUWEwzEoKzUtH14ogzNAPlbyu4LcJv4Fzom/3XWsx3 YaEdlTX+jYOgd/eu1D5vJcRpXVoQLULIM/NNM2wQqn0xmBF1oBiMI2V3SZH4pDGmKviO DzTvu0kMGNqE6UPMkAvp6//8XaTqmRJPT08JNaEo7f2f7jnJ/ie39Pl6fURouIgSK01Z G8sCzcR9qEzwM8z/sV3r0kuC1ZvSmjDCkKyCbU3rzf0lixabzM7/rgzjzf8AuG+6+D2f 64NccJNw25i3hem74gQ2qiUcPKHCgbWpgW6saBoetjhN2S+RJhXNaAqVi43GMyqA5HgM ej6Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:date:from:to:subject:message-id:mime-version :content-disposition:user-agent; bh=7O9wGsIOWom0OnmM0ne0gzvwCiXz93nMV+y/Akahw08=; b=nIeaRJZT3nqFq7cctw7lD/MyLfPmYTPnEUl1+qYRP/0okYlWQNXd6p5HbMFnSKH0Zm 7JslOVsj0Y+Ya1Gf+vLa4eFuU3bPgkNH0KTkjiu6khbiF/M3OVcoG8n6fkCnRldPF9zY 4HVHNtIpJsdb0I7DDNvRVPtatZf+K5veb+j8Oj6CTgLlStXRwQfNwNWQzKikp7X58y6J ojrCCaFSkucdadFo3HKFB38qAAvhwyxG45Je3YLkrZSOGEY9ShsD1rtYjUlXyn2Cj6NH fXtrctDYGYw1957aWt/bKuy7gld1MXSNLD/PwLZK0phdSaxpbi6OKxd8z+ulqIXrdues xL3g== X-Gm-Message-State: ABUngvdA8Wk0dUNLbnGkMTrWQ3E9kjQZN1wapWi5R2kqcLGrT8jMCGpJBNeNDXdRFJJTyA== X-Received: by 10.28.221.11 with SMTP id u11mr3243055wmg.91.1478264373833; Fri, 04 Nov 2016 05:59:33 -0700 (PDT) Received: from sonyv ([91.126.73.162]) by smtp.gmail.com with ESMTPSA id y3sm14175106wjg.3.2016.11.04.05.59.32 for (version=TLS1_2 cipher=AES128-SHA bits=128/128); Fri, 04 Nov 2016 05:59:33 -0700 (PDT) Date: Fri, 4 Nov 2016 13:59:31 +0100 From: Laura Garcia Liebana To: netfilter-devel@vger.kernel.org Subject: [PATCH v3 nft 1/4] src: make hash seed attribute optional Message-ID: <20161104125927.GA20394@sonyv> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) Sender: netfilter-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netfilter-devel@vger.kernel.org The hash expression requires a seed attribute to call the jhash operation, eg. # nft add rule x y meta mark set jhash ip saddr . ip daddr mod 2 \ seed 0xdeadbeef With this patch the seed attribute is optional and it's generated by a random function from userspace, eg. # nft add rule x y meta mark set jhash ip saddr . ip daddr mod 2 The kernel will take care of generate a random seed. Signed-off-by: Laura Garcia Liebana --- Changes in v3: - The random generation is done in kernel side. - Tests included. src/parser_bison.y | 5 +++++ tests/py/ip/hash.t | 1 + tests/py/ip/hash.t.payload | 7 +++++++ 3 files changed, 13 insertions(+) diff --git a/src/parser_bison.y b/src/parser_bison.y index 17f23c5..82fec99 100644 --- a/src/parser_bison.y +++ b/src/parser_bison.y @@ -2585,6 +2585,11 @@ hash_expr : JHASH expr MOD NUM SEED NUM $$ = hash_expr_alloc(&@$, $4, $6); $$->hash.expr = $2; } + | JHASH expr MOD NUM + { + $$ = hash_expr_alloc(&@$, $4, 0); + $$->hash.expr = $2; + } ; rt_expr : RT rt_key diff --git a/tests/py/ip/hash.t b/tests/py/ip/hash.t index 6dfa965..306ebfd 100644 --- a/tests/py/ip/hash.t +++ b/tests/py/ip/hash.t @@ -2,4 +2,5 @@ *ip;test-ip4;pre ct mark set jhash ip saddr . ip daddr mod 2 seed 0xdeadbeef;ok +ct mark set jhash ip saddr . ip daddr mod 2;ok dnat to jhash ip saddr mod 2 seed 0xdeadbeef map { 0 : 192.168.20.100, 1 : 192.168.30.100 };ok diff --git a/tests/py/ip/hash.t.payload b/tests/py/ip/hash.t.payload index d9a22eb..1188a1b 100644 --- a/tests/py/ip/hash.t.payload +++ b/tests/py/ip/hash.t.payload @@ -5,6 +5,13 @@ ip test-ip4 pre [ hash reg 1 = jhash(reg 2, 8, 0xdeadbeef) % mod 2 ] [ ct set mark with reg 1 ] +# ct mark set jhash ip saddr . ip daddr mod 2 +ip test-ip4 pre + [ payload load 4b @ network header + 12 => reg 2 ] + [ payload load 4b @ network header + 16 => reg 13 ] + [ hash reg 1 = jhash(reg 2, 8, 0x0) % mod 2 ] + [ ct set mark with reg 1 ] + # dnat to jhash ip saddr mod 2 seed 0xdeadbeef map { 0 : 192.168.20.100, 1 : 192.168.30.100 } __map%d test-ip4 b __map%d test-ip4 0