From patchwork Tue Jul 25 15:38:32 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Ahern X-Patchwork-Id: 793506 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="FZQ/7HNM"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3xH2VS5dqRz9rxm for ; Wed, 26 Jul 2017 01:39:44 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752799AbdGYPjn (ORCPT ); Tue, 25 Jul 2017 11:39:43 -0400 Received: from mail-pf0-f194.google.com ([209.85.192.194]:33511 "EHLO mail-pf0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752734AbdGYPiv (ORCPT ); Tue, 25 Jul 2017 11:38:51 -0400 Received: by mail-pf0-f194.google.com with SMTP id k72so9809044pfj.0 for ; Tue, 25 Jul 2017 08:38:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=TVE1/aoWZdeLfUweWGZMjVyp7nISvb0SKr27bTd36tE=; b=FZQ/7HNMFtJAd3sk8gtm/pYW1LHFpL5S7jYpE7cQTXdlh3J6wF3u/BJXfq8bMOaN0U 9zA9PrKwuRy+pA/NN5yHikDFjjSwI9pyOYIiWFE1B92xlpWigHGy0UEl7yOpraHPSqa3 g8sBsfMOMRPOsyWXLPOeWn3kRd+7QvBfHfg+BVvWTQqtcUcXklz95+f9tFU3G/qLuOHG 2DLsdho+tlUXjgpR4B1KINrU/JqGbeE8QSwig8pty13KECIeqS0XascicaXcJ94eaXc7 NPhfDubVWbKTl6oBF516MeJX+IHtc4bx5EXMccUM1CCwD85U+/19xfuO2xbIKZTjCVRS nEow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=TVE1/aoWZdeLfUweWGZMjVyp7nISvb0SKr27bTd36tE=; b=YE7MeowheHPNJMVU9fkwLW7HRgldfJRCn3iQKlkV8RtfLaHkQVlSBCbOovDNKAj7sL 50YwSy29E6JTGIr93ilPGe0qIHwoBNQUcjUpRMtli/e+svRz8slkrF3OgTlGuJAOf0Vp kVB60jSZAa/KA5DHcsEQ0V3KZmTMu6O/h1teVS+n59VppeVtDSp+nsPr4eHBFs6/XUC5 JMGDt2GZplDUMelUr+THL0OxQKJe1t+FTJSJcOYLdMXOiazqzEVqqEopT/KCV+P/UENM WOHLCqN2uPyEIfKICP4i6dVA1TMl9IBa6N7G1YAWYztSqZ2M72X9PAXmBUBg2wwpQm+V djhw== X-Gm-Message-State: AIVw1106j42Aixq+Y0Z5tmsmpr/wQziJSMQgNbF1R7PG55k8a84u1k7Y wnHq2S2ElNOJMZMV X-Received: by 10.98.202.73 with SMTP id n70mr1535801pfg.168.1500997130979; Tue, 25 Jul 2017 08:38:50 -0700 (PDT) Received: from kenny.it.cumulusnetworks.com. (fw.cumulusnetworks.com. [216.129.126.126]) by smtp.googlemail.com with ESMTPSA id 124sm26400230pgj.57.2017.07.25.08.38.50 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 25 Jul 2017 08:38:50 -0700 (PDT) From: David Ahern To: netdev@vger.kernel.org Cc: David Ahern Subject: [RFC PATCH 01/10] net: Add sk_lookup struct and helper Date: Tue, 25 Jul 2017 08:38:32 -0700 Message-Id: <1500997121-3218-2-git-send-email-dsahern@gmail.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1500997121-3218-1-git-send-email-dsahern@gmail.com> References: <1500997121-3218-1-git-send-email-dsahern@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Consolidate the socket lookup args into a struct. Add helper that compares sk_bound_dev_if for a socket to the lookup parameters. Signed-off-by: David Ahern --- include/net/sock.h | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/include/net/sock.h b/include/net/sock.h index 7c0632c7e870..a2db5fd30192 100644 --- a/include/net/sock.h +++ b/include/net/sock.h @@ -491,6 +491,44 @@ enum sk_pacing { #define rcu_dereference_sk_user_data(sk) rcu_dereference(__sk_user_data((sk))) #define rcu_assign_sk_user_data(sk, ptr) rcu_assign_pointer(__sk_user_data((sk)), ptr) +/* used for socket lookups */ +struct sk_lookup { + union { + const struct in6_addr *ipv6; + __be32 ipv4; + } saddr; + union { + const struct in6_addr *ipv6; + __be32 ipv4; + } daddr; + + __be16 sport; + __be16 dport; + unsigned short hnum; + + int dif; + bool exact_dif; +}; + +/* Compare sk_bound_dev_if to socket lookup dif + * Returns: + * -1 exact dif required and not met + * 0 sk_bound_dev_if is either not set or does not match + * 1 sk_bound_dev_if is set and matches dif + */ +static inline int sk_lookup_device_cmp(const struct sock *sk, + const struct sk_lookup *params) +{ + /* exact_dif true == l3mdev case */ + if (params->exact_dif && sk->sk_bound_dev_if != params->dif) + return -1; + + if (sk->sk_bound_dev_if && sk->sk_bound_dev_if == params->dif) + return 1; + + return 0; +} + /* * SK_CAN_REUSE and SK_NO_REUSE on a socket mean that the socket is OK * or not whether his port will be reused by someone else. SK_FORCE_REUSE