From patchwork Sat Aug 12 00:11:15 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Ahern X-Patchwork-Id: 800787 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="habIeEW3"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3xTj352Lsfz9t2K for ; Sat, 12 Aug 2017 10:11:29 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752113AbdHLAL0 (ORCPT ); Fri, 11 Aug 2017 20:11:26 -0400 Received: from mail-pf0-f196.google.com ([209.85.192.196]:35214 "EHLO mail-pf0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751863AbdHLALX (ORCPT ); Fri, 11 Aug 2017 20:11:23 -0400 Received: by mail-pf0-f196.google.com with SMTP id j68so4656998pfc.2 for ; Fri, 11 Aug 2017 17:11:23 -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=K6JWuxUgKVRbRC59NkihJNe/UBF88XRSLpaX/F5lfwI=; b=habIeEW31T0gIHzEkL0bVuGtEku8jeKVd/EyhydzVewMoLLe/rG9TUuVNqGXtUB29j 2Kc9DOtd6BSiOGpqED6Y9GIl2Q9UAmH0+PSiRfqNwJzp2epFrOmPdBmBJFibTBy5gUGr k4ylYo7RgQi6dy4sqMOm/5or6r+vhqhLq8LcmWZ39rL/X2ZMErfcE9/pQqatdAiFQSm2 WRvwQ9OQEqN1sW9SR5Xf1BfEowRawnMVBJynZ9JafOABEhLs0eLZOOgiO3si/Yq+xUQK 1oZ3pi3cuz+brw0qmoVYvXHXeO7lYkVg1xujmsw0FGYxdKexDw1uSdhk3kWigE1M7iC5 GcYA== 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=K6JWuxUgKVRbRC59NkihJNe/UBF88XRSLpaX/F5lfwI=; b=Rm/Op8fdPsznaGojr+cApXppHw5PXaYDLCmKNRb5sDmyvSq61r2FWRfQQ/1H/Do0zO ttionVgVtjc+vbMum7Nt9XGnuqxqTDs1luSUpzJ0h7BKsjHdJagLAl79lLBJNcmrPSMV G68z/PyEimavuJG91orwGCo25ur5DPqXz515fLi8Dp1f6FcKOyFjjWWWexKEmNv59Y2Y FnfMyTA9bQY0+2FgVZPOCdG8Azicy4b9A4d61UNpO8M8BesBa9ir6dZEzsEjJeWNJ2QE lZglm15sQU4xodWg5BrHCBz8fvLKCdC6g4rb3VwnOi7qTayQdI9UZ3xYJ8NhvlX426x0 KWPw== X-Gm-Message-State: AHYfb5icl9RIJWDEoGY5LLXHDcjBXflirxpSKOrorcyWb/UYz9pZqgb7 4xAKfaeDTjIdqvlQ X-Received: by 10.84.224.4 with SMTP id r4mr19944136plj.442.1502496682614; Fri, 11 Aug 2017 17:11:22 -0700 (PDT) Received: from kenny.it.cumulusnetworks.com. (fw.cumulusnetworks.com. [216.129.126.126]) by smtp.googlemail.com with ESMTPSA id r86sm4763375pfi.161.2017.08.11.17.11.21 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 11 Aug 2017 17:11:22 -0700 (PDT) From: David Ahern To: netdev@vger.kernel.org Cc: David Ahern Subject: [PATCH net-next 2/2] net: ipv4: add check for l3slave for index returned in IP_PKTINFO Date: Fri, 11 Aug 2017 17:11:15 -0700 Message-Id: <1502496675-13349-3-git-send-email-dsahern@gmail.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1502496675-13349-1-git-send-email-dsahern@gmail.com> References: <1502496675-13349-1-git-send-email-dsahern@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Similar to the loopback device, for packets sent through a VRF device the index returned in ipi_ifindex needs to be the saved index in rt_iif. Signed-off-by: David Ahern --- net/ipv4/ip_sockglue.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c index dd68a9ed5e40..e558e4f9597b 100644 --- a/net/ipv4/ip_sockglue.c +++ b/net/ipv4/ip_sockglue.c @@ -1207,6 +1207,7 @@ static int do_ip_setsockopt(struct sock *sk, int level, void ipv4_pktinfo_prepare(const struct sock *sk, struct sk_buff *skb) { struct in_pktinfo *pktinfo = PKTINFO_SKB_CB(skb); + bool l3slave = ipv4_l3mdev_skb(IPCB(skb)->flags); bool prepare = (inet_sk(sk)->cmsg_flags & IP_CMSG_PKTINFO) || ipv6_sk_rxinfo(sk); @@ -1220,7 +1221,7 @@ void ipv4_pktinfo_prepare(const struct sock *sk, struct sk_buff *skb) * (e.g., process binds socket to eth0 for Tx which is * redirected to loopback in the rtable/dst). */ - if (pktinfo->ipi_ifindex == LOOPBACK_IFINDEX) + if (pktinfo->ipi_ifindex == LOOPBACK_IFINDEX || l3slave) pktinfo->ipi_ifindex = inet_iif(skb); pktinfo->ipi_spec_dst.s_addr = fib_compute_spec_dst(skb);