From patchwork Fri Sep 12 11:24:19 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Mietus X-Patchwork-Id: 4406 Return-Path: Delivered-To: patchwork@openvpn.net Received: by 2002:a05:7000:b149:b0:671:5a2c:6455 with SMTP id s9csp3741671maw; Fri, 12 Sep 2025 04:45:29 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCV52Sk8hRtfyXceshwvKheHeGihJHNxXCnayR2n3lRUiYJFgyZtQKVjI8Xu05wLLKcHQVFzkDIiXXc=@openvpn.net X-Google-Smtp-Source: AGHT+IGErjziv2AMIFjRbI2u5ktO51udClkpjYKGi/6e2jkG9RnsRsObDkwhv8DOaIgI/3DG0t9o X-Received: by 2002:a05:6808:152c:b0:438:236a:af8 with SMTP id 5614622812f47-43b8d91e696mr1403383b6e.17.1757677529488; Fri, 12 Sep 2025 04:45:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1757677529; cv=none; d=google.com; s=arc-20240605; b=EM9u33AbMjLllyKDyBmUYTzIr40YBh+BIywgS0wcvAT8cM3zN+CthxW1f561t63yWu 3Qj+rOrYh7RfyujkhGXHL4wmbnjXhwfApqqD/zbF+C5Hv0VLprSNzzzDuwGSeu6auUUa OKpQIl3pdnZg8t8oBmQGcHjj4GiLxxD76QOGlmpAI8kUHzt5StVgeHOVOXDxg3u5B06L /8tHsG6E12T2yO/ZYolLRHpL6LmYUlC1ecrc8P0t3110dlbI1blZaa7A1NrfcellUUZH pM1LUbGYQe+HpMW0JdXpIPp/RRPIRb45cPLALrf7fBpVtUiG+L2L04pH+f1rHmtcyF8h oj7Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=errors-to:content-transfer-encoding:cc:reply-to:from:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:dkim-signature:dkim-signature:dkim-signature:dkim-signature; bh=5GHn6ZInS490kcb3/ARlquQnrr2iX5ruYvx5hSRWR4Y=; fh=Nld6ED5MA/hilqlwqNF+z3bWNSgobxU8XeD15u7QoP0=; b=PUPb+npON2dzmNHtM6/YtC+3WTYs2GHATHyCu4scBQ6wBKMg+XrcqknSh/ppWZCe8Y zQw40ZqubCvuPyf5ixBFBRo/jw9L+IAP256dq/eHO4n8VKziwVXDyZVj+uap1ocGqby7 3nksE4lNVz/W+TFlpwFvHdE2/mFPYF96VcH/HlUfVHf3/ZS+WD/wlAqJT87Ig7j57kHq n9fLK+ULzgc8ctyHhLlk6ID0b+CXeWRzdEMDKyqjT3+PXWjh+ZZEApGEAQJw/wZHhVuz n2VFUab4Qte95XcFTYcqEwgscL82qWnrB9ARt8c0QT7/oI/LSpOTK+wkNVjlrMu/H/rK r8sQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@lists.sourceforge.net header.s=beta header.b=CkgHesMZ; dkim=neutral (body hash did not verify) header.i=@sourceforge.net header.s=x header.b=C7s1ymRQ; dkim=neutral (body hash did not verify) header.i=@sf.net header.s=x header.b=EOiq2uCs; dkim=neutral (body hash did not verify) header.i=@yahoo.com header.s=s2048 header.b=AXUTbpGx; spf=pass (google.com: domain of openvpn-devel-bounces@lists.sourceforge.net designates 216.105.38.7 as permitted sender) smtp.mailfrom=openvpn-devel-bounces@lists.sourceforge.net; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=lists.sourceforge.net Received: from lists.sourceforge.net (lists.sourceforge.net. [216.105.38.7]) by mx.google.com with ESMTPS id 5614622812f47-43b8dd9ffa8si411759b6e.193.2025.09.12.04.45.29 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 12 Sep 2025 04:45:29 -0700 (PDT) Received-SPF: pass (google.com: domain of openvpn-devel-bounces@lists.sourceforge.net designates 216.105.38.7 as permitted sender) client-ip=216.105.38.7; Authentication-Results: mx.google.com; dkim=pass header.i=@lists.sourceforge.net header.s=beta header.b=CkgHesMZ; dkim=neutral (body hash did not verify) header.i=@sourceforge.net header.s=x header.b=C7s1ymRQ; dkim=neutral (body hash did not verify) header.i=@sf.net header.s=x header.b=EOiq2uCs; dkim=neutral (body hash did not verify) header.i=@yahoo.com header.s=s2048 header.b=AXUTbpGx; spf=pass (google.com: domain of openvpn-devel-bounces@lists.sourceforge.net designates 216.105.38.7 as permitted sender) smtp.mailfrom=openvpn-devel-bounces@lists.sourceforge.net; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=lists.sourceforge.net DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.sourceforge.net; s=beta; h=Content-Transfer-Encoding:Content-Type:Cc: Reply-To:From:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:Subject:MIME-Version:References:In-Reply-To: Message-ID:Date:To:Sender:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=5GHn6ZInS490kcb3/ARlquQnrr2iX5ruYvx5hSRWR4Y=; b=CkgHesMZT2OCe1iZTqcrFp6Suq e83cEFwGeTHw+Vos8um4iupr8CWG9owvpenePJV3Y8ylSBbkZ280HGzP7ptRq6h1JpdlJhsSFQ97h sLDsUoZESh9ImxXSMWpfyBuJ1+iemNvVE7J3d5e6q/09ThTeWbsikR14VcjHyb3UQt5Y=; Received: from [127.0.0.1] (helo=sfs-ml-2.v29.lw.sourceforge.com) by sfs-ml-2.v29.lw.sourceforge.com with esmtp (Exim 4.95) (envelope-from ) id 1ux2DV-0005W4-QX; Fri, 12 Sep 2025 11:45:26 +0000 Received: from [172.30.29.66] (helo=mx.sourceforge.net) by sfs-ml-2.v29.lw.sourceforge.com with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1ux2DV-0005Vu-2m for openvpn-devel@lists.sourceforge.net; Fri, 12 Sep 2025 11:45:25 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sourceforge.net; s=x; h=Content-Transfer-Encoding:MIME-Version:References: In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=hOCx3exMi/gEZlRMsfu6f3yZal5ZMUNsmvImqwmEt+8=; b=C7s1ymRQTsKmZXviTWMQjbSFYv Enfo4I4tEQNeLxyUANaK4AqtNGYGEdWFJwKyac8hrmN42VSnd5JpWfmNNaVenPZOYovDOwN6B4LVf PpWRkswnbXRIbh7hYI1btHcJDv4ZZmkYq0hrz3o3a9ytX4+iDT/pqEFNjaSX4M82YVKI=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sf.net; s=x ; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-ID: Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=hOCx3exMi/gEZlRMsfu6f3yZal5ZMUNsmvImqwmEt+8=; b=EOiq2uCsnTJjD7Ls2F+cestdkA 9u8nMTM+m5Uy4sMN1zZSDEARBGKxN3m1f2C2VmiQ8cO0MDDDUkHXbb5DW7WwsvkA6OEoFreCHDhg3 prtJ+9axNvfSMWc5nu/2VJgor73F4uxM4uUDOQVOSBdmPG72bX4VWrkvOlsMIoDsZr0o=; Received: from sonic308-56.consmr.mail.ne1.yahoo.com ([66.163.187.31]) by sfi-mx-2.v28.lw.sourceforge.com with esmtps (TLS1.2:ECDHE-RSA-AES128-GCM-SHA256:128) (Exim 4.95) id 1ux2DV-0004Gt-7H for openvpn-devel@lists.sourceforge.net; Fri, 12 Sep 2025 11:45:25 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1757677514; bh=hOCx3exMi/gEZlRMsfu6f3yZal5ZMUNsmvImqwmEt+8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject:Reply-To; b=AXUTbpGx0siMAtt6YU689kMKfhmoRcurqE3j8wEwtlEMYef9Gr13i62HRUKzkDnTfEE64KsibFcZpINTujZkCBMNX2cpHWIoCyyJ86deBO6re8V3s5hJxl57BPHwVEwpvq7WnfR02F88MmNfljzuvy+dZeO/rkYnVRSW3S7374SnAHtLZaD9A1GWBcV6A8aP/vQJ5zPx4mZXdxzqFS8QhQdZmwOKD118I0b8XH9bBegswHmDUQNpW5LRuQll37cdWUAy+pVEm9L1PDewDqL4OBNViNbSrNcHTYC6yDvx2rnldkpocRVBXiz8YVPRRwrPxfV5s+abPHVGJkVjFJU2BA== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1757677514; bh=EIbczJs5hrLgBqXpeV0IZYiBtX11wR5HdKlRFNJY0LA=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=b45dEL0vWANkApE4LITdc4+S6p/DLAjAapKBOLQuYkwoUpABa2FH+zBL01S0aERZtNr7R97RynKgI+plozieSZrZVdHLzWDvpny9VoCz1VIzw0w8kxEwrXdPxv/hLF+De10qtVQTjWXO9tgRXEqGbpCORfHKj+YS9UYCgmOpL2nHqxeKLsScFrz80SUkSBW8kjCJSykOxNOKhMqwIrQzHjNd482MxyR2BxTPWxPjLPI/Z33sChwM8zPzs8L2PsYh2Lf8DMNqhU3iPTjYGoXftX9LNNI9qg5TPTTymxbbvPajKrGMetwgKtSJYF+3D5A/M/GKXLvdMezOU6bEezlc/A== X-YMail-OSG: JnAdo2oVM1mN0OqDLmR5gaglMmx8KeC5hCvpizUCTMjAv0EPrJsysxZ3BKjYcIz 4bOEwjTozrhvCHIXSuZbgg6muj00r3ytwu5cjlGbUGqKcgsEEAn9ZaDCMKJD.YK2N9Rg23hb9q7f WO.fQBib8ZUBUua7giPRhVc86gZhO..WNqS4sxlVPGGB6pI8fWsSCpBu.HzRCQ_EvrldpyHNIyRM ip_ukjWUa9HmncvsfwyxKBGtmc6oTjJ3y865FAIgooqj65otmvxbNQUJcc6ZxOChDzfOozKPYc9q XMO7Mpf6EzxTvy_Pe.x3Fp37z6dm4dOGST05rz5Iy3yvMITcOMnjwP3sNIDHb1q6Wpt6R5Y0OBsN YpuvDYDWJXtZDALVzTvOuUvqNGxkvHrPHpdaTYt3MF47nPhXyeEuvBLgeQm3vKeyXxzSrHBWraXi L_Fr8DOrJkOZs1K4Lp1zKR7mocyYzELA6WMXnQ3pyPoaqOMgKLsSmxr._ixEh9.qSxHHkrsUo2De z1RQCkKcI6rle8lEyDPYijc2XzwuwmggBoYVITVcfoQAqkMehPkFTID6HcJtyC8m10RUpwX7XzL. NBVyeFXDJUxgSqB2qH75Lyeb2J468PONhiGOEO7pQQPnVScNmKD3uE7Lk1aRMPQ5.gNDB_4rQi.8 ANI8zVFCVRfZ3F2V5sNgzoyCCOebsXekPXvHxKWOEzyPWtXew.xVEwMO1AKN1MxeVufwhLIY2nMJ L.xVaJpaQiBAj1ltAcEYALxzCc863HZ8qHxDyVS1eFDzcw0t_GQSk2zehKSwJsYPHH6jBgdEYscM CSBJexgUOr0SSEQlUNrN0Stfgbw9DI5P4.V2T9hkpUDQZLu8qEOFSNqTowAxo1OarepImD5C2_VI nJcIhSWfPDn4G2UjydaCzVmsezvKDnEPyHGdCSk7K5v4qFdHsiUzWXG36LnoXbAjxx7geM7jXpgh qdOOC1OnAApuV50g_7pfKeyb_crguQqt48G5KdOv5ZB9PtkunHKUV4Ezdctr9T1rHwS4hVjC0zQ0 X6LjNhYUrSnGjKphHA_cfe_qNd.iSLZZTdUMeWGmb23pCu9JdehktsEWwVGrtbRD1ES2DYSwOFHM gvMrUW_Vf5K0D5jpxj6u1SLBSjPkmWKtW1fNrjFnj12i2JaC6yMwcT6325kuMLsZlXkmgxyuREbx hQQ63Q8g9neQ9UPlthxDE_26qpxjDZf.C0DqZI0VzCulkOONxgjfUhAi7nGJ7u4Y9OeRVaqsJzwS _4T1z0pCoc9HCwkMuFMLeinv.FA8wcma1IaGrReZtsiqc.bz0WO6vCj2_3vMjSdyAcYTw9ATz.yD 1wuoxE_e9P6Dqxn66JG8CK.dGOxlv2boYssyX6QYDnlJNBZIAeqL1h_wzf9LFjY1iE3gzKa0cbgL lHYvlFAWx9P6KjAbym_WbGfsANarDsbhYjifcSkjjoNj346NeXiKf9CxVtt.YV8cuwOfov8pf1I8 9vGyzE4RouLc_TGaAAsvGmRSSLd1nV_Xu8ZEeddhpe4UhqrPJYPJM_U10aM_5VuPnJh9XlFMk0Ms 9tIMobZTy0_9C2Xcd2I.FvZJW7ZDZnRUHujXdBJSTNeHlzJoDLAcUUt9yR698MR2Rge8cJg6ZOJR .KVgHxQX3PCKXt8t1fHxQf.jxXgBCaUyX4IUHK8gshzP2oTkgfkTi25ltwCHxatJqlxFzKOkEpU. UnRUy3DDfqTvt6T.h.XgQMwf0IgqrlbLI6noTkbFw95Cf2WkKf_yF6CZvSWkvy1zOdxk3hpBoHRs jQXnK8hbuQlSAI_8N5FTY7YKc.yn49dMDwIzcPEjMf7L9AG7eeNlrNTSNroXQfWTH7bC9rQVWA0f EWR_LHbMIgvRUe7uWylSy1VhXI0sYl9m5R9tUtPRf6TDipu61f6Z76yq7skzXM2yXi9Skt7GHt4K yzooLZKGVRavykDxRbAjacp52V1Miliv.0uYBLUL9XIwLvQHOVCubfDVlVshc2pKlttam4crg_GU UtXTul4BrHRm4VT0ru95y2gkc5wZMXulGpxYRQg.z8UFm_3QjlULTVuuUN83p4peT.EAd_8Jkl7q dye2GUOAkbbX7gvhYQPUZ0x1xYWEYWyPFGfMWGRxYFyhqnq7bqobRfB7DJDsvkB.3Ii_tWuZd4tK .41i.vBcfi_bbnl0qH0B_jB1SDNRgNxGsmnY2O2QyjH8NvihwGAI- X-Sonic-MF: X-Sonic-ID: 1a3c935b-93fc-4057-a8bb-bf9bf1fce931 Received: from sonic.gate.mail.ne1.yahoo.com by sonic308.consmr.mail.ne1.yahoo.com with HTTP; Fri, 12 Sep 2025 11:45:14 +0000 Received: by hermes--production-ir2-7d8c9489f-pnggd (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID 93cda13a9625b3ea865113cded111022; Fri, 12 Sep 2025 11:24:53 +0000 (UTC) To: netdev@vger.kernel.org, antonio@openvpn.net, kuba@kernel.org Date: Fri, 12 Sep 2025 13:24:19 +0200 Message-ID: <20250912112420.4394-3-mmietus97@yahoo.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250912112420.4394-1-mmietus97@yahoo.com> References: <20250912112420.4394-1-mmietus97@yahoo.com> MIME-Version: 1.0 Content-Length: 6197 X-Spam-Score: 0.1 (/) X-Spam-Report: Spam detection software, running on the system "sfi-spamd-1.hosts.colo.sdot.me", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: In cases where udp_tunnel_xmit_skb is called inside a RCU read-side critical section, we can avoid referencing the dst_entry. Implement noref variants for udp_tunnel_xmit_skb and iptunnel_xmit to be used in noref flows. Content analysis details: (0.1 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider [mmietus97(at)yahoo.com] 0.2 FREEMAIL_ENVFROM_END_DIGIT Envelope-from freemail username ends in digit [mmietus97(at)yahoo.com] 0.0 RCVD_IN_MSPIKE_H2 RBL: Average reputation (+2) [66.163.187.31 listed in wl.mailspike.net] X-Headers-End: 1ux2DV-0004Gt-7H Subject: [Openvpn-devel] [PATCH net-next v2 2/3] net: tunnel: implement noref flows in udp_tunnel_xmit_skb X-BeenThere: openvpn-devel@lists.sourceforge.net X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Marek Mietus via Openvpn-devel From: Marek Mietus Reply-To: Marek Mietus Cc: openvpn-devel@lists.sourceforge.net Errors-To: openvpn-devel-bounces@lists.sourceforge.net X-getmail-retrieved-from-mailbox: Inbox X-GMAIL-THRID: =?utf-8?q?1843058472771219542?= X-GMAIL-MSGID: =?utf-8?q?1843058472771219542?= In cases where udp_tunnel_xmit_skb is called inside a RCU read-side critical section, we can avoid referencing the dst_entry. Implement noref variants for udp_tunnel_xmit_skb and iptunnel_xmit to be used in noref flows. Signed-off-by: Marek Mietus --- include/net/ip_tunnels.h | 3 +++ include/net/udp_tunnel.h | 4 ++++ net/ipv4/ip_tunnel_core.c | 34 +++++++++++++++++++++++++++------- net/ipv4/udp_tunnel_core.c | 29 +++++++++++++++++++++++++---- 4 files changed, 59 insertions(+), 11 deletions(-) diff --git a/include/net/ip_tunnels.h b/include/net/ip_tunnels.h index 8cf1380f3656..6dcea237bf21 100644 --- a/include/net/ip_tunnels.h +++ b/include/net/ip_tunnels.h @@ -604,6 +604,9 @@ static inline int iptunnel_pull_header(struct sk_buff *skb, int hdr_len, void iptunnel_xmit(struct sock *sk, struct rtable *rt, struct sk_buff *skb, __be32 src, __be32 dst, u8 proto, u8 tos, u8 ttl, __be16 df, bool xnet, u16 ipcb_flags); +void iptunnel_xmit_noref(struct sock *sk, struct rtable *rt, struct sk_buff *skb, + __be32 src, __be32 dst, u8 proto, + u8 tos, u8 ttl, __be16 df, bool xnet, u16 ipcb_flags); struct metadata_dst *iptunnel_metadata_reply(struct metadata_dst *md, gfp_t flags); int skb_tunnel_check_pmtu(struct sk_buff *skb, struct dst_entry *encap_dst, diff --git a/include/net/udp_tunnel.h b/include/net/udp_tunnel.h index 9acef2fbd2fd..033098ebf789 100644 --- a/include/net/udp_tunnel.h +++ b/include/net/udp_tunnel.h @@ -135,6 +135,10 @@ void udp_tunnel_xmit_skb(struct rtable *rt, struct sock *sk, struct sk_buff *skb __be32 src, __be32 dst, __u8 tos, __u8 ttl, __be16 df, __be16 src_port, __be16 dst_port, bool xnet, bool nocheck, u16 ipcb_flags); +void udp_tunnel_xmit_skb_noref(struct rtable *rt, struct sock *sk, struct sk_buff *skb, + __be32 src, __be32 dst, __u8 tos, __u8 ttl, + __be16 df, __be16 src_port, __be16 dst_port, + bool xnet, bool nocheck, u16 ipcb_flags); void udp_tunnel6_xmit_skb(struct dst_entry *dst, struct sock *sk, struct sk_buff *skb, diff --git a/net/ipv4/ip_tunnel_core.c b/net/ipv4/ip_tunnel_core.c index cc9915543637..8b03fb380397 100644 --- a/net/ipv4/ip_tunnel_core.c +++ b/net/ipv4/ip_tunnel_core.c @@ -47,10 +47,10 @@ const struct ip6_tnl_encap_ops __rcu * ip6tun_encaps[MAX_IPTUN_ENCAP_OPS] __read_mostly; EXPORT_SYMBOL(ip6tun_encaps); -void iptunnel_xmit(struct sock *sk, struct rtable *rt, struct sk_buff *skb, - __be32 src, __be32 dst, __u8 proto, - __u8 tos, __u8 ttl, __be16 df, bool xnet, - u16 ipcb_flags) +static void __iptunnel_xmit(struct sock *sk, struct rtable *rt, + struct sk_buff *skb, __be32 src, __be32 dst, + __u8 proto, __u8 tos, __u8 ttl, __be16 df, + u16 ipcb_flags) { int pkt_len = skb->len - skb_inner_network_offset(skb); struct net *net = dev_net(rt->dst.dev); @@ -58,10 +58,7 @@ void iptunnel_xmit(struct sock *sk, struct rtable *rt, struct sk_buff *skb, struct iphdr *iph; int err; - skb_scrub_packet(skb, xnet); - skb_clear_hash_if_not_l4(skb); - skb_dst_set(skb, &rt->dst); memset(IPCB(skb), 0, sizeof(*IPCB(skb))); IPCB(skb)->flags = ipcb_flags; @@ -89,8 +86,31 @@ void iptunnel_xmit(struct sock *sk, struct rtable *rt, struct sk_buff *skb, iptunnel_xmit_stats(dev, pkt_len); } } + +void iptunnel_xmit(struct sock *sk, struct rtable *rt, struct sk_buff *skb, + __be32 src, __be32 dst, __u8 proto, + __u8 tos, __u8 ttl, __be16 df, bool xnet, + u16 ipcb_flags) +{ + skb_scrub_packet(skb, xnet); + skb_dst_set(skb, &rt->dst); + + __iptunnel_xmit(sk, rt, skb, src, dst, proto, tos, ttl, df, ipcb_flags); +} EXPORT_SYMBOL_GPL(iptunnel_xmit); +void iptunnel_xmit_noref(struct sock *sk, struct rtable *rt, struct sk_buff *skb, + __be32 src, __be32 dst, __u8 proto, + __u8 tos, __u8 ttl, __be16 df, bool xnet, + u16 ipcb_flags) +{ + skb_scrub_packet(skb, xnet); + skb_dst_set_noref(skb, &rt->dst); + + __iptunnel_xmit(sk, rt, skb, src, dst, proto, tos, ttl, df, ipcb_flags); +} +EXPORT_SYMBOL_GPL(iptunnel_xmit_noref); + int __iptunnel_pull_header(struct sk_buff *skb, int hdr_len, __be16 inner_proto, bool raw_proto, bool xnet) { diff --git a/net/ipv4/udp_tunnel_core.c b/net/ipv4/udp_tunnel_core.c index fce945f23069..c0e9007cf081 100644 --- a/net/ipv4/udp_tunnel_core.c +++ b/net/ipv4/udp_tunnel_core.c @@ -170,10 +170,9 @@ void udp_tunnel_notify_del_rx_port(struct socket *sock, unsigned short type) } EXPORT_SYMBOL_GPL(udp_tunnel_notify_del_rx_port); -void udp_tunnel_xmit_skb(struct rtable *rt, struct sock *sk, struct sk_buff *skb, - __be32 src, __be32 dst, __u8 tos, __u8 ttl, - __be16 df, __be16 src_port, __be16 dst_port, - bool xnet, bool nocheck, u16 ipcb_flags) +static void udp_tunnel_add_hdr(struct sk_buff *skb, __be32 src, + __be32 dst, __be16 src_port, + __be16 dst_port, bool nocheck) { struct udphdr *uh; @@ -188,12 +187,34 @@ void udp_tunnel_xmit_skb(struct rtable *rt, struct sock *sk, struct sk_buff *skb memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt)); udp_set_csum(nocheck, skb, src, dst, skb->len); +} + +void udp_tunnel_xmit_skb(struct rtable *rt, struct sock *sk, + struct sk_buff *skb, __be32 src, __be32 dst, + __u8 tos, __u8 ttl, __be16 df, __be16 src_port, + __be16 dst_port, bool xnet, bool nocheck, + u16 ipcb_flags) +{ + udp_tunnel_add_hdr(skb, src, dst, src_port, dst_port, nocheck); iptunnel_xmit(sk, rt, skb, src, dst, IPPROTO_UDP, tos, ttl, df, xnet, ipcb_flags); } EXPORT_SYMBOL_GPL(udp_tunnel_xmit_skb); +void udp_tunnel_xmit_skb_noref(struct rtable *rt, struct sock *sk, + struct sk_buff *skb, __be32 src, __be32 dst, + __u8 tos, __u8 ttl, __be16 df, __be16 src_port, + __be16 dst_port, bool xnet, bool nocheck, + u16 ipcb_flags) +{ + udp_tunnel_add_hdr(skb, src, dst, src_port, dst_port, nocheck); + + iptunnel_xmit_noref(sk, rt, skb, src, dst, IPPROTO_UDP, tos, ttl, df, + xnet, ipcb_flags); +} +EXPORT_SYMBOL_GPL(udp_tunnel_xmit_skb_noref); + void udp_tunnel_sock_release(struct socket *sock) { rcu_assign_sk_user_data(sock->sk, NULL);