From patchwork Mon Jan 5 21:56:15 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Herbert X-Patchwork-Id: 425430 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 D4E6214009B for ; Tue, 6 Jan 2015 08:56:40 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754558AbbAEV4g (ORCPT ); Mon, 5 Jan 2015 16:56:36 -0500 Received: from mail-ig0-f169.google.com ([209.85.213.169]:44225 "EHLO mail-ig0-f169.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754383AbbAEV4f (ORCPT ); Mon, 5 Jan 2015 16:56:35 -0500 Received: by mail-ig0-f169.google.com with SMTP id z20so3869156igj.2 for ; Mon, 05 Jan 2015 13:56:34 -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=INo/tuKFprTnDKQd4UHGTfbHcq+WhXiZ6dBEwBROZKQ=; b=FVnm+Lc6UiyOiKwIBt6u7f1Q1rxGoWUMjCCpcQApPvbT8tmWHNY3XLMJDYWKOqdX/+ FS20Dpk/vP1yyhwZwah/qiD88Cptr2zeEfNRiluAztSHMg85feBpRq6RyD9qmttQVRzz t4hsKMIpv9o86RetqDDNJxGAszofc9L1G5i4HeUtSgtWR7HrOS4uhmUgsSo/3EoqGc0S FRVvoOs42ovlkCnGXujoYuieKegD12x2G7ay6VK9y3EA2TfQyUMaQWstwCH9Rn+LaEx8 hskTaantcy+pIq93N4YMHf1jbkCbVUkKYC02UAC7MuiZ3dGVv4vSRd4+5pwzrcR5hAkA 7w2Q== 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=INo/tuKFprTnDKQd4UHGTfbHcq+WhXiZ6dBEwBROZKQ=; b=B4qCO0vRxIvUpbzwT1L+4PVu9Wb2wXOgDEW9M/mIbR+rsyGw4xM84vFj2QVKoOOVUC qdkTDMDBeovvq/bJKmvVvaTvVNbV5Vz0VsoV+MsXXiqo5990el9YdxsRM6tIa6+0SgDG /uTssnZm1WvE2YjkDbRR1eTNSISU5SRV9rTrlwLRc5wdUt0W8aLgQKHc3eWuUokW4Dmq 8qVAIrXs9/7xqk3oclH7qItgvKWiPMgYYW09ri8AghkZXqguwjPJyNE2Z+OiYchL106P m2SE+EPeNL99Hne0XsOwlFZENj6Ts1QrLbhVWWjweqmEOl+VvduRBN4knGCtOJ/pIeuC m5Aw== X-Gm-Message-State: ALoCoQmBwfyOpENK7nPr7bxqXyFmusJ5bCQ1OsQLGz8SjFQzeC7msW7ef+RREDtDMhqQS6OQCUSP X-Received: by 10.50.18.108 with SMTP id v12mr13156211igd.34.1420494994457; Mon, 05 Jan 2015 13:56:34 -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.33 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 05 Jan 2015 13:56:34 -0800 (PST) From: Tom Herbert To: davem@davemloft.net, netdev@vger.kernel.org Subject: [PATCH net-next v3 2/4] ip: IP cmsg cleanup Date: Mon, 5 Jan 2015 13:56:15 -0800 Message-Id: <1420494977-15026-3-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 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 | 11 ++++++++- net/ipv4/ip_sockglue.c | 64 ++++++++++++++++++++++++++++--------------------- 2 files changed, 47 insertions(+), 28 deletions(-) diff --git a/include/net/inet_sock.h b/include/net/inet_sock.h index 360b110..605ca42 100644 --- a/include/net/inet_sock.h +++ b/include/net/inet_sock.h @@ -16,7 +16,7 @@ #ifndef _INET_SOCK_H #define _INET_SOCK_H - +#include #include #include #include @@ -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 BIT(0) +#define IP_CMSG_TTL BIT(1) +#define IP_CMSG_TOS BIT(2) +#define IP_CMSG_RECVOPTS BIT(3) +#define IP_CMSG_RETOPTS BIT(4) +#define IP_CMSG_PASSSEC BIT(5) +#define IP_CMSG_ORIGDSTADDR BIT(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); }