From patchwork Mon Jan 5 21:56:16 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Herbert X-Patchwork-Id: 425431 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 1D38F14009B for ; Tue, 6 Jan 2015 08:56:46 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754560AbbAEV4k (ORCPT ); Mon, 5 Jan 2015 16:56:40 -0500 Received: from mail-ig0-f177.google.com ([209.85.213.177]:45259 "EHLO mail-ig0-f177.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753214AbbAEV4i (ORCPT ); Mon, 5 Jan 2015 16:56:38 -0500 Received: by mail-ig0-f177.google.com with SMTP id z20so3221485igj.10 for ; Mon, 05 Jan 2015 13:56:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=from:to:subject:date:message-id:in-reply-to:references; bh=k7J/Y0QYpcgLwEBHbK6xK7i5Lg/9zluGVJb0VxHDtXs=; b=N/oPp8BV36Fq6mWTFncXQHmNTiakizAdX20NNEa7gce59MnIGN7JebN1navp8v0+oL +ng4R4x2s1uNKGOdBwo8t1GvRrrjXVKPbbAVg02mu5q/fxNbXzctpDzUJbYAV6e7AKxG HPsTYrDOPpisBsx29vDM4NDfc7ca+Dqh0uF3kXuDnHazGr01q4VDKbi81G3mV0/wta4k OxP1egh7r45dbdlCBJyM48LjGCxEEVaAy5KBwsNislLctdCiJzB4Q7IwMBfRxgQfWSzG 1n0FIxTJTl1RHez3pmwbuvWWffyHJIsl4q7q8P/IsOL+3igSVPWSFPEQMF6foFY1FlXO oVrw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=k7J/Y0QYpcgLwEBHbK6xK7i5Lg/9zluGVJb0VxHDtXs=; b=Yt7ZjVWz+HlgAR+bbDmpMP6Bd0+LDT73DKAB0ScyDWBB64TSvHEGDhnHadKc/bTNiL Y0y+/8U5b1aY6tUfFKdUWXTGH4UVLa7Sm7Vvj5uGXxdYU/22Tc6b9Hch3eVFy3huoq3b j2xhxRsZsxu8/LQiz7OTkG2D1KUyE4vPPwDn8o8xn2vXoUXUY23OB5z9VtHl01jSmQEG LBIoagzGUqnVwosuc0KG0XFHZhyahuf3sn24rwIv4cI9rqdOTh3iJU5nucHp6ZiEdPQn xf6n6B0kkjHdpZoFkdTuGvKQxcid7QQaQTEAmJWayB3CDlPEJokh1LAKAawR2dEsf0jA nDSQ== X-Gm-Message-State: ALoCoQk9j+ZC8Rbw+L+BEsfpMd18Bz0vblbMNFE6Pk4jy5uOJuMA3b0OwKZwwHycsDSFchOuNF7C X-Received: by 10.43.106.147 with SMTP id du19mr57804528icc.22.1420494997588; Mon, 05 Jan 2015 13:56:37 -0800 (PST) Received: from tomh.mtv.corp.google.com ([172.18.117.126]) by mx.google.com with ESMTPSA id s10sm4142575igr.2.2015.01.05.13.56.37 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 05 Jan 2015 13:56:37 -0800 (PST) From: Tom Herbert To: davem@davemloft.net, netdev@vger.kernel.org Subject: [PATCH net-next v3 3/4] ip: Add offset parameter to ip_cmsg_recv Date: Mon, 5 Jan 2015 13:56:16 -0800 Message-Id: <1420494977-15026-4-git-send-email-therbert@google.com> X-Mailer: git-send-email 2.2.0.rc0.207.ga3a616c In-Reply-To: <1420494977-15026-1-git-send-email-therbert@google.com> References: <1420494977-15026-1-git-send-email-therbert@google.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Add ip_cmsg_recv_offset function which takes an offset argument that indicates the starting offset in skb where data is being received from. This will be useful in the case of UDP and provided checksum to user space. ip_cmsg_recv is an inline call to ip_cmsg_recv_offset with offset of zero. Signed-off-by: Tom Herbert --- include/net/ip.h | 7 ++++++- net/ipv4/ip_sockglue.c | 5 +++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/include/net/ip.h b/include/net/ip.h index 0bb6207..0e5a0ba 100644 --- a/include/net/ip.h +++ b/include/net/ip.h @@ -537,7 +537,7 @@ int ip_options_rcv_srr(struct sk_buff *skb); */ void ipv4_pktinfo_prepare(const struct sock *sk, struct sk_buff *skb); -void ip_cmsg_recv(struct msghdr *msg, struct sk_buff *skb); +void ip_cmsg_recv_offset(struct msghdr *msg, struct sk_buff *skb, int offset); int ip_cmsg_send(struct net *net, struct msghdr *msg, struct ipcm_cookie *ipc, bool allow_ipv6); int ip_setsockopt(struct sock *sk, int level, int optname, char __user *optval, @@ -557,6 +557,11 @@ void ip_icmp_error(struct sock *sk, struct sk_buff *skb, int err, __be16 port, void ip_local_error(struct sock *sk, int err, __be32 daddr, __be16 dport, u32 info); +static inline void ip_cmsg_recv(struct msghdr *msg, struct sk_buff *skb) +{ + ip_cmsg_recv_offset(msg, skb, 0); +} + bool icmp_global_allow(void); extern int sysctl_icmp_msgs_per_sec; extern int sysctl_icmp_msgs_burst; diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c index 80f7856..513d506 100644 --- a/net/ipv4/ip_sockglue.c +++ b/net/ipv4/ip_sockglue.c @@ -136,7 +136,8 @@ static void ip_cmsg_recv_dstaddr(struct msghdr *msg, struct sk_buff *skb) put_cmsg(msg, SOL_IP, IP_ORIGDSTADDR, sizeof(sin), &sin); } -void ip_cmsg_recv(struct msghdr *msg, struct sk_buff *skb) +void ip_cmsg_recv_offset(struct msghdr *msg, struct sk_buff *skb, + int offset) { struct inet_sock *inet = inet_sk(skb->sk); unsigned int flags = inet->cmsg_flags; @@ -194,7 +195,7 @@ void ip_cmsg_recv(struct msghdr *msg, struct sk_buff *skb) ip_cmsg_recv_dstaddr(msg, skb); } -EXPORT_SYMBOL(ip_cmsg_recv); +EXPORT_SYMBOL(ip_cmsg_recv_offset); int ip_cmsg_send(struct net *net, struct msghdr *msg, struct ipcm_cookie *ipc, bool allow_ipv6)