From patchwork Thu Dec 4 00:44:27 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Herbert X-Patchwork-Id: 417597 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 174071400E2 for ; Thu, 4 Dec 2014 11:45:08 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752237AbaLDApA (ORCPT ); Wed, 3 Dec 2014 19:45:00 -0500 Received: from mail-ie0-f181.google.com ([209.85.223.181]:51570 "EHLO mail-ie0-f181.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751106AbaLDAo7 (ORCPT ); Wed, 3 Dec 2014 19:44:59 -0500 Received: by mail-ie0-f181.google.com with SMTP id tp5so14793759ieb.40 for ; Wed, 03 Dec 2014 16:44:59 -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=RBwKP8TisUfQ60OpPOOeglbUKnLUcYGPLKaGjfdvEJA=; b=j7Tn8wSi83YHgJOt6/gzyTZTaP+mZqXSkkLv99HSn7gbXmFYrx4THFjogllNBGcmL6 H+g5lhYwXalFvkZTNqHIIBFpsET6YJTT2n9rE+u9ixMDvYND95dSPIJoUtFlZyBgjpc0 M9tKaRNxkT0Ky8he6WaOpBoKjcKD2xd5FrU8P/IgG9ya751WoW0kobvcdrQRjvln1gLD hqA+CFa4lQ4VywRg5Izg3cnTSl7TSgIpfWPuVERSigdJ5QPiGpCMtG4c9IJBN601641K UfVYxKnzzj2JirEszlCwQMaie33VkTQt9W3bdwtTvmBmaArsqnfJhHZPgrx2SclqghFy 5ung== 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=RBwKP8TisUfQ60OpPOOeglbUKnLUcYGPLKaGjfdvEJA=; b=bIIXpHONv6JyuyXe8gN/nL+kyacYmCVjaESNHVD/OSBV4U0A7boODAukRLC0wfERLI gTCoLS6tvkUNy7zM0UR5+mY84/kBHHEtTjnzMWZ6oc4EH6dWIT6jhp+Si4Fb92zMU9BI a7IfduMenldS0Xg7Uad3SmoKf0QD7MU/UvA4bx+Ff5ZX+D40d7DREslZmqEdVSPwL5Vh pkcISD5HRTuZd8zCgiSUwGliVwbi0hoks880BBQ1k06r1OaCPQVH6ptpaSHqOZDdnTg2 JZB0pul82WIsOpkIJKwWg1h1xMp/3/4a91/thXxIRpUUoXh4srzmImngkc/GFHTzo8LO ujjw== X-Gm-Message-State: ALoCoQnjJoZHje78IZwfyycwqmlI5j+VC2AMxNT8XwFyjFhWgAWlytGuO2VU6JVrAeqJwc8Zl1kR X-Received: by 10.50.102.4 with SMTP id fk4mr15886115igb.28.1417653899290; Wed, 03 Dec 2014 16:44:59 -0800 (PST) Received: from tomh.mtv.corp.google.com ([172.18.117.126]) by mx.google.com with ESMTPSA id qc7sm8354103igb.5.2014.12.03.16.44.58 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 03 Dec 2014 16:44:58 -0800 (PST) From: Tom Herbert To: davem@davemloft.net, netdev@vger.kernel.org Subject: [PATCH net-next 2/3] ip: IP cmsg cleanup Date: Wed, 3 Dec 2014 16:44:27 -0800 Message-Id: <1417653868-14922-3-git-send-email-therbert@google.com> X-Mailer: git-send-email 2.2.0.rc0.207.ga3a616c In-Reply-To: <1417653868-14922-1-git-send-email-therbert@google.com> References: <1417653868-14922-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 b782657..d4406aa 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); }