Received: by 2002:a05:6a10:c604:0:0:0:0 with SMTP id y4csp2360133pxt; Sun, 8 Aug 2021 21:13:47 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzxI9I5zm3NzkmQ6TOwNwrF/9Xy+euC4FMtX3hNzlqQa0H4Gh4VtrV7wmSrVcYAE6vfKaF4 X-Received: by 2002:a17:906:a04f:: with SMTP id bg15mr21184986ejb.417.1628482427515; Sun, 08 Aug 2021 21:13:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1628482427; cv=none; d=google.com; s=arc-20160816; b=v0YTvT4ysRsZg96dLs/e3k2VVVfLLBd6qACOsJ+SFZJ5N/rw8K6x4PFIrVzH67Am3u W8/4zKlQkKE0AnQgjRhzwF/FAbDHPvz57FkeGQPHdCU1XH0BF5gnk5VzBxx3vOghOC/S Xs6T1+yfYUNsMUsGR8VSK1x1rRTKqe/qOxASGCnMeui4BKLMN0tqwE5R3aZhmLSvvoj5 onAQjotivVqy2vtjE9GbdNW+qoIdqE0aiNzCLyPNUKFjZEvol1C8m9HihmE4jbxRADDj ES13e5fZ79+FrPD0te2qMzhEZeGLhmvRKftEx2Up0HyFwveuRYhZVQrCJZAzkhYpJSEY xMbg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=vVa4Y+0GqMCnCeJxuGVwfHhQR4hYHlTSwCLmmjQY04I=; b=ilRRPGAM24OKsyNG1kks5/kQBBr8tcWk6SVO/D3dCHT24QyoR9kINzN/pYp12U8kQy WnKZA5iZXG343zwV7GPPqIR03lf1gNu171FvGRSblW0sIRtvJTdKYc8eGoP+M9SEtpEx axEgntsimxMfnQUtzYYmvvPGOqqpi9hQxb8tUFycfa3xlAS7CzP1vxETWuiYnsOwZDn3 hybQlV4q079ZvhUvkbXidT/u1YNwQ1lW73v7u8XRVn4xDCarnVOBc1UU6zoCUO7Qu3A3 rRUVJYBj/MGcjqSrahhRwTn4kJDxsJYa640F1iDxyVsfL5pLL/2OQXiZ9tl7yMBhO1Gy jdkw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@alliedtelesis.co.nz header.s=mail181024 header.b=Q+5wfASJ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=alliedtelesis.co.nz Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id h19si16198383edb.251.2021.08.08.21.13.24; Sun, 08 Aug 2021 21:13:47 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@alliedtelesis.co.nz header.s=mail181024 header.b=Q+5wfASJ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=alliedtelesis.co.nz Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230410AbhHIELV (ORCPT + 99 others); Mon, 9 Aug 2021 00:11:21 -0400 Received: from gate2.alliedtelesis.co.nz ([202.36.163.20]:50738 "EHLO gate2.alliedtelesis.co.nz" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230366AbhHIELS (ORCPT ); Mon, 9 Aug 2021 00:11:18 -0400 Received: from svr-chch-seg1.atlnz.lc (mmarshal3.atlnz.lc [10.32.18.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by gate2.alliedtelesis.co.nz (Postfix) with ESMTPS id 520A8891B0; Mon, 9 Aug 2021 16:10:56 +1200 (NZST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=alliedtelesis.co.nz; s=mail181024; t=1628482256; bh=vVa4Y+0GqMCnCeJxuGVwfHhQR4hYHlTSwCLmmjQY04I=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=Q+5wfASJucgw2e+OemCxQb8xWly9y4VclJ8jZ8Z5ePDZ3AzrIVLjmO6FzSuhW6fcR sjtIEvZGceYp81PVuZ7NnEdzioOgTecCALuCBzFN87Q+/a3UXOnT9YdDYIXvyAI1bQ ukVTihKkSjksRbLQgRrc3fRlc1rIBLqkp2JQZjWcFhPg1xc4sFYzNifcLlmvUbmIFc vOAwvyVtR5UoA2pSiYB9whtEvWv9LBvQ+1ZRxRCiAqe3y+PtZzahjyvqFinxgTtf/L gi8WlgWJ2qEipqgIwpU5WEq6aYYPFuNa476lln+i5nAFVXkEW6i7QAGVStryHBRfsr AAPuOq94qyFIA== Received: from pat.atlnz.lc (Not Verified[10.32.16.33]) by svr-chch-seg1.atlnz.lc with Trustwave SEG (v8,2,6,11305) id ; Mon, 09 Aug 2021 16:10:56 +1200 Received: from coled-dl.ws.atlnz.lc (coled-dl.ws.atlnz.lc [10.33.25.26]) by pat.atlnz.lc (Postfix) with ESMTP id 1F1A613EDC1; Mon, 9 Aug 2021 16:10:56 +1200 (NZST) Received: by coled-dl.ws.atlnz.lc (Postfix, from userid 1801) id 1B56A2428A0; Mon, 9 Aug 2021 16:10:56 +1200 (NZST) From: Cole Dishington To: pablo@netfilter.org Cc: kadlec@netfilter.org, fw@strlen.de, davem@davemloft.net, kuba@kernel.org, shuah@kernel.org, Cole.Dishington@alliedtelesis.co.nz, linux-kernel@vger.kernel.org, netfilter-devel@vger.kernel.org, coreteam@netfilter.org, netdev@vger.kernel.org, linux-kselftest@vger.kernel.org, Anthony Lineham , Scott Parlane , Blair Steven Subject: [PATCH net-next 1/3] net: netfilter: Add RFC-7597 Section 5.1 PSID support xtables API Date: Mon, 9 Aug 2021 16:10:35 +1200 Message-Id: <20210809041037.29969-2-Cole.Dishington@alliedtelesis.co.nz> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210809041037.29969-1-Cole.Dishington@alliedtelesis.co.nz> References: <20210726143729.GN9904@breakpoint.cc> <20210809041037.29969-1-Cole.Dishington@alliedtelesis.co.nz> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SEG-SpamProfiler-Analysis: v=2.3 cv=dvql9Go4 c=1 sm=1 tr=0 a=KLBiSEs5mFS1a/PbTCJxuA==:117 a=MhDmnRu9jo8A:10 a=3HDBlxybAAAA:8 a=mhPBjSskWxd-kjGSbREA:9 a=laEoCiVfU_Unz3mSdgXN:22 X-SEG-SpamProfiler-Score: 0 x-atlnz-ls: pat Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add support for revision 2 of xtables masquerade extension. Co-developed-by: Anthony Lineham Signed-off-by: Anthony Lineham Co-developed-by: Scott Parlane Signed-off-by: Scott Parlane Signed-off-by: Blair Steven Signed-off-by: Cole Dishington --- Notes: No changes. include/uapi/linux/netfilter/nf_nat.h | 3 +- net/netfilter/xt_MASQUERADE.c | 44 ++++++++++++++++++++++++--- 2 files changed, 41 insertions(+), 6 deletions(-) diff --git a/include/uapi/linux/netfilter/nf_nat.h b/include/uapi/linux/n= etfilter/nf_nat.h index a64586e77b24..660e53ffdb57 100644 --- a/include/uapi/linux/netfilter/nf_nat.h +++ b/include/uapi/linux/netfilter/nf_nat.h @@ -12,6 +12,7 @@ #define NF_NAT_RANGE_PROTO_RANDOM_FULLY (1 << 4) #define NF_NAT_RANGE_PROTO_OFFSET (1 << 5) #define NF_NAT_RANGE_NETMAP (1 << 6) +#define NF_NAT_RANGE_PSID (1 << 7) =20 #define NF_NAT_RANGE_PROTO_RANDOM_ALL \ (NF_NAT_RANGE_PROTO_RANDOM | NF_NAT_RANGE_PROTO_RANDOM_FULLY) @@ -20,7 +21,7 @@ (NF_NAT_RANGE_MAP_IPS | NF_NAT_RANGE_PROTO_SPECIFIED | \ NF_NAT_RANGE_PROTO_RANDOM | NF_NAT_RANGE_PERSISTENT | \ NF_NAT_RANGE_PROTO_RANDOM_FULLY | NF_NAT_RANGE_PROTO_OFFSET | \ - NF_NAT_RANGE_NETMAP) + NF_NAT_RANGE_NETMAP | NF_NAT_RANGE_PSID) =20 struct nf_nat_ipv4_range { unsigned int flags; diff --git a/net/netfilter/xt_MASQUERADE.c b/net/netfilter/xt_MASQUERADE.= c index eae05c178336..dc6870ca2b71 100644 --- a/net/netfilter/xt_MASQUERADE.c +++ b/net/netfilter/xt_MASQUERADE.c @@ -16,7 +16,7 @@ MODULE_AUTHOR("Netfilter Core Team "); MODULE_DESCRIPTION("Xtables: automatic-address SNAT"); =20 /* FIXME: Multiple targets. --RR */ -static int masquerade_tg_check(const struct xt_tgchk_param *par) +static int masquerade_tg_check_v0(const struct xt_tgchk_param *par) { const struct nf_nat_ipv4_multi_range_compat *mr =3D par->targinfo; =20 @@ -31,8 +31,19 @@ static int masquerade_tg_check(const struct xt_tgchk_p= aram *par) return nf_ct_netns_get(par->net, par->family); } =20 +static int masquerade_tg_check_v1(const struct xt_tgchk_param *par) +{ + const struct nf_nat_range2 *range =3D par->targinfo; + + if (range->flags & NF_NAT_RANGE_MAP_IPS) { + pr_debug("bad MAP_IPS.\n"); + return -EINVAL; + } + return nf_ct_netns_get(par->net, par->family); +} + static unsigned int -masquerade_tg(struct sk_buff *skb, const struct xt_action_param *par) +masquerade_tg_v0(struct sk_buff *skb, const struct xt_action_param *par) { struct nf_nat_range2 range; const struct nf_nat_ipv4_multi_range_compat *mr; @@ -46,6 +57,15 @@ masquerade_tg(struct sk_buff *skb, const struct xt_act= ion_param *par) xt_out(par)); } =20 +static unsigned int +masquerade_tg_v1(struct sk_buff *skb, const struct xt_action_param *par) +{ + const struct nf_nat_range2 *range =3D par->targinfo; + + return nf_nat_masquerade_ipv4(skb, xt_hooknum(par), range, + xt_out(par)); +} + static void masquerade_tg_destroy(const struct xt_tgdtor_param *par) { nf_ct_netns_put(par->net, par->family); @@ -73,6 +93,7 @@ static struct xt_target masquerade_tg_reg[] __read_most= ly =3D { { #if IS_ENABLED(CONFIG_IPV6) .name =3D "MASQUERADE", + .revision =3D 0, .family =3D NFPROTO_IPV6, .target =3D masquerade_tg6, .targetsize =3D sizeof(struct nf_nat_range), @@ -84,15 +105,28 @@ static struct xt_target masquerade_tg_reg[] __read_m= ostly =3D { }, { #endif .name =3D "MASQUERADE", + .revision =3D 0, .family =3D NFPROTO_IPV4, - .target =3D masquerade_tg, + .target =3D masquerade_tg_v0, .targetsize =3D sizeof(struct nf_nat_ipv4_multi_range_compat), .table =3D "nat", .hooks =3D 1 << NF_INET_POST_ROUTING, - .checkentry =3D masquerade_tg_check, + .checkentry =3D masquerade_tg_check_v0, .destroy =3D masquerade_tg_destroy, .me =3D THIS_MODULE, - } + }, + { + .name =3D "MASQUERADE", + .revision =3D 1, + .family =3D NFPROTO_IPV4, + .target =3D masquerade_tg_v1, + .targetsize =3D sizeof(struct nf_nat_range2), + .table =3D "nat", + .hooks =3D 1 << NF_INET_POST_ROUTING, + .checkentry =3D masquerade_tg_check_v1, + .destroy =3D masquerade_tg_destroy, + .me =3D THIS_MODULE, + }, }; =20 static int __init masquerade_tg_init(void) --=20 2.32.0