From patchwork Mon Jan 5 20:00:33 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Herbert X-Patchwork-Id: 425409 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 E1B9414009B for ; Tue, 6 Jan 2015 07:01:03 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754055AbbAEUA7 (ORCPT ); Mon, 5 Jan 2015 15:00:59 -0500 Received: from mail-ie0-f178.google.com ([209.85.223.178]:36690 "EHLO mail-ie0-f178.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753684AbbAEUA5 (ORCPT ); Mon, 5 Jan 2015 15:00:57 -0500 Received: by mail-ie0-f178.google.com with SMTP id vy18so18034381iec.23 for ; Mon, 05 Jan 2015 12:00:57 -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=k0CMjuwCe6Pc49sZKT4UzYzvwbPSRjyTHf3qXsFQEzQ=; b=QsIDvkjnyHDeeC2yY/uPXViBo7Ke30QqBwWzIY6DEkQyZ1WwUUU2TVt7tVD4tp8ICy 8k5IwGCVYt79ynQ6fcHxV7FUaA/YROSlQofH0GhucNdqtetBpar78kOPl1/6MM71STb+ BRyPBvtjF36MYD8ny/PR9bMxmYApCI1ocOjd3MVxk1AXEgZlqWr0oWN9a0ixRC59yhUk bRbJx7PNR/T4KGD4DOa5pK7zwUYgzOhzqdEihSj7wf2Er1qBek5aDyGeUAVZ+eOedJZ1 iDGmZXdsvHlFOulxTOJJevZ2Qp/z2xRTE7+af5JUDgMQ8OoTJ4qiUKciwq7HXxrcv8W5 kCOA== 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=k0CMjuwCe6Pc49sZKT4UzYzvwbPSRjyTHf3qXsFQEzQ=; b=agDkRIihZcpcAXk453PzPmY7S9hGmOG+A4y+rqZykDPxFMgnjpDPQ1Bl+gq4fODift Z461HeupNrGYSB+uEMXCVjAb9fcVonqRiPoC8M2Ri8ux5DQjA6+nkMrqZa2znkhRhmoK bDDFY6OZKWzojsDH5L9/E8JJTtyAaNqz1TJCma0TLP8BvFERAOTn9iAyM7liBnllXKLR I+hvjoCOJ5jkp0i2AsLZ79kw8sNGe3jm+s3Zl9hmNICFUD6hlcYJjoyLk/5RffiRha4l MwZO8uV9G/gl4viNemDcg+n9okMgmqGbcl3+hN1zYKbxXyKlKAg/LPxvTKfKAjtnwXgm XIJg== X-Gm-Message-State: ALoCoQmDKFskdbCy6peXm1FGLPPBRFeaEWthNK35QE9/XNXRSSjIUm9XYFQxLzETHYFUVUJkPElT X-Received: by 10.50.43.169 with SMTP id x9mr12620752igl.28.1420488056764; Mon, 05 Jan 2015 12:00:56 -0800 (PST) Received: from tomh.mtv.corp.google.com ([172.18.117.126]) by mx.google.com with ESMTPSA id h19sm25781825ioe.27.2015.01.05.12.00.55 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 05 Jan 2015 12:00:56 -0800 (PST) From: Tom Herbert To: davem@davemloft.net, netdev@vger.kernel.org Subject: [PATCH net-next 2/4] ip: IP cmsg cleanup Date: Mon, 5 Jan 2015 12:00:33 -0800 Message-Id: <1420488035-24866-3-git-send-email-therbert@google.com> X-Mailer: git-send-email 2.2.0.rc0.207.ga3a616c In-Reply-To: <1420488035-24866-1-git-send-email-therbert@google.com> References: <1420488035-24866-1-git-send-email-therbert@google.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Move the IP_CMSG_* constants from ip_sockglue.c to inet_sock.h so that they can be referenced in other source files. Restructure ip_cmsg_recv to not go through flags using shift, check for flags by 'and'. This eliminates both the shift and a conditional per flag check. Signed-off-by: Tom Herbert --- include/net/inet_sock.h | 9 +++++++ net/ipv4/ip_sockglue.c | 64 ++++++++++++++++++++++++++++--------------------- 2 files changed, 46 insertions(+), 27 deletions(-) diff --git a/include/net/inet_sock.h b/include/net/inet_sock.h index 360b110..4091fab 100644 --- a/include/net/inet_sock.h +++ b/include/net/inet_sock.h @@ -195,6 +195,15 @@ struct inet_sock { #define IPCORK_OPT 1 /* ip-options has been held in ipcork.opt */ #define IPCORK_ALLFRAG 2 /* always fragment (for ipv6 for now) */ +/* cmsg flags for inet */ +#define IP_CMSG_PKTINFO (1 << 0) +#define IP_CMSG_TTL (1 << 1) +#define IP_CMSG_TOS (1 << 2) +#define IP_CMSG_RECVOPTS (1 << 3) +#define IP_CMSG_RETOPTS (1 << 4) +#define IP_CMSG_PASSSEC (1 << 5) +#define IP_CMSG_ORIGDSTADDR (1 << 6) + static inline struct inet_sock *inet_sk(const struct sock *sk) { return (struct inet_sock *)sk; diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c index 8a89c73..80f7856 100644 --- a/net/ipv4/ip_sockglue.c +++ b/net/ipv4/ip_sockglue.c @@ -45,14 +45,6 @@ #include #include -#define IP_CMSG_PKTINFO 1 -#define IP_CMSG_TTL 2 -#define IP_CMSG_TOS 4 -#define IP_CMSG_RECVOPTS 8 -#define IP_CMSG_RETOPTS 16 -#define IP_CMSG_PASSSEC 32 -#define IP_CMSG_ORIGDSTADDR 64 - /* * SOL_IP control messages. */ @@ -150,37 +142,55 @@ void ip_cmsg_recv(struct msghdr *msg, struct sk_buff *skb) unsigned int flags = inet->cmsg_flags; /* Ordered by supposed usage frequency */ - if (flags & 1) + if (flags & IP_CMSG_PKTINFO) { ip_cmsg_recv_pktinfo(msg, skb); - if ((flags >>= 1) == 0) - return; - if (flags & 1) + flags &= ~IP_CMSG_PKTINFO; + if (!flags) + return; + } + + if (flags & IP_CMSG_TTL) { ip_cmsg_recv_ttl(msg, skb); - if ((flags >>= 1) == 0) - return; - if (flags & 1) + flags &= ~IP_CMSG_TTL; + if (!flags) + return; + } + + if (flags & IP_CMSG_TOS) { ip_cmsg_recv_tos(msg, skb); - if ((flags >>= 1) == 0) - return; - if (flags & 1) + flags &= ~IP_CMSG_TOS; + if (!flags) + return; + } + + if (flags & IP_CMSG_RECVOPTS) { ip_cmsg_recv_opts(msg, skb); - if ((flags >>= 1) == 0) - return; - if (flags & 1) + flags &= ~IP_CMSG_RECVOPTS; + if (!flags) + return; + } + + if (flags & IP_CMSG_RETOPTS) { ip_cmsg_recv_retopts(msg, skb); - if ((flags >>= 1) == 0) - return; - if (flags & 1) + flags &= ~IP_CMSG_RETOPTS; + if (!flags) + return; + } + + if (flags & IP_CMSG_PASSSEC) { ip_cmsg_recv_security(msg, skb); - if ((flags >>= 1) == 0) - return; - if (flags & 1) + flags &= ~IP_CMSG_PASSSEC; + if (!flags) + return; + } + + if (flags & IP_CMSG_ORIGDSTADDR) ip_cmsg_recv_dstaddr(msg, skb); }