From patchwork Sun Jan 7 10:45:05 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ido Schimmel X-Patchwork-Id: 856527 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 (1024-bit key; unprotected) header.d=Mellanox.com header.i=@Mellanox.com header.b="x+X+KJNj"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zDw952Jpcz9ryr for ; Sun, 7 Jan 2018 21:47:53 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753378AbeAGKq6 (ORCPT ); Sun, 7 Jan 2018 05:46:58 -0500 Received: from mail-eopbgr00048.outbound.protection.outlook.com ([40.107.0.48]:42941 "EHLO EUR02-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753182AbeAGKqz (ORCPT ); Sun, 7 Jan 2018 05:46:55 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=w+XMmhbBRQwUOBEDGbuyx9+a1m3mMMWb2CwhCzpU/F4=; b=x+X+KJNjhYZZi+2p7M84YDsJGjYLq5C1h2zgaEdvZ4ajbjD7Le4Gy95XEK6Cl7TTv6qkjr/dB5gQE7iqJS86aYrAW2CEwhXw1nf2DnZCGxn9dvBZ0gzQFouldzC/vm5CvKnHbYoAZ8LlRhAo+GjDgkLUnnL6JlZRACCwHFndGIU= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=idosch@mellanox.com; Received: from splinter.mtl.com (79.177.48.236) by HE1PR0501MB2012.eurprd05.prod.outlook.com (2603:10a6:3:35::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.386.5; Sun, 7 Jan 2018 10:46:43 +0000 From: Ido Schimmel To: netdev@vger.kernel.org Cc: davem@davemloft.net, dsahern@gmail.com, roopa@cumulusnetworks.com, nicolas.dichtel@6wind.com, weiwan@google.com, kafai@fb.com, yoshfuji@linux-ipv6.org, mlxsw@mellanox.com, Ido Schimmel Subject: [PATCH net-next 05/18] ipv6: Set nexthop flags upon carrier change Date: Sun, 7 Jan 2018 12:45:05 +0200 Message-Id: <20180107104518.31693-6-idosch@mellanox.com> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180107104518.31693-1-idosch@mellanox.com> References: <20180107104518.31693-1-idosch@mellanox.com> MIME-Version: 1.0 X-Originating-IP: [79.177.48.236] X-ClientProxiedBy: VI1PR0701CA0039.eurprd07.prod.outlook.com (2603:10a6:800:90::25) To HE1PR0501MB2012.eurprd05.prod.outlook.com (2603:10a6:3:35::14) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 86707f07-0061-4b30-ec8b-08d555bbf28d X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(48565401081)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(5600026)(4604075)(2017052603307)(7153060)(7193020); SRVR:HE1PR0501MB2012; X-Microsoft-Exchange-Diagnostics: 1; HE1PR0501MB2012; 3:1QKbKaF3kw2zjvZC+ec/rlh+09JeyIrbX5IzYm5izVKdBEjKO9ryF8uDiKgOz770iR7ogW6x1D4Gz4lqLU7IPlGsUIGqh7g7Kn/NwK35PaKBJn+WEyA+Ui+UOJsydwROO2K2+VvI7PqoAzo56Bn8vfN8bIECfASFS1RKR9G+V9+W1Q5AARXZUV5DjqURoA47DbdSZO8DK+AJmS11oTE8ckXsvLye3JNxvBiqSynroF3dLFbWXj8/UFuRDPaTwXNm; 25:SqzxahaZFJk6GAAgPfuK5y3sdTa2ghBHGBRxOCeBoVGzZxXYzDuBWu1Rgr5iax0xACFF/GAS+5ZaPko9SiTyl17JehrWbkIG8Pi++oFmpEj/TLpVIAE0N9WroYZ5C0FqQ/K+gpD6C8SvfHEQY8gcFh8I1avpatgBJA2VQDMW3WBZANZOj7eGHhrOan80PatDxdnaAwl8mGJ4k6uvp7uXKDNb5qH0PE3NrZmCIoK4BBUqmoGC42VqxwY5GDQmNVUXWB9fPhbR4sEAZPZKnN9k/0pKTOMxpHY5VTnjWQhJrF36B8nKhQ8YLAm1F3tCDQCibriFEm/wKfvHDdZe1k5NKA==; 31:H0R79C1UJpHPBATz2sDS8JLDjxo4EQDHkd9+rpEu0mryXF7RilkkPMwSaHEHDkH9tZCjgB3m+Xt9sN0gf55eHNx0lGv+6bWPF5E4mY+UsAgOwspeAqtT6lix3kxLdUhAh89YPYEXgZod4v7CHbty6J+Q42NTrvobSQyLRJ/bD3Hz9lFvaQnA4gObH/H+gd2A2h3nrcBi4mM9of5fENIuN0/HZf79Pn0mnCcyPdOmBqc= X-MS-TrafficTypeDiagnostic: HE1PR0501MB2012: X-Microsoft-Exchange-Diagnostics: 1; HE1PR0501MB2012; 20:7+TmK3gUda3LtvtAhR/SKDZLo+FO+E4GoaExNyEknbn4DX463ge/chnIM+oqhkrWK16VsLO7EwuRNS7gwoZKeC9wiO64+zHzEQQLhacbxRIaG4CgqPXFaBqeNzGxb6Vxz538/mWEDzIjyS7NPm/6Kvz6RfyyNCptv+/lfvzNJf3Rqs93pUWF8rdbd+RT5VqSY+8WnhluWWRuCv9ZG7T8/wvEhEUE2MHzIeH/XlRmGLqTLS6XWkbjcaobzZzxgHEt4fbsyZGgE3MAO+IShDLq+8CQP8KjCi7CKyY45vp/BVPF6Lt6IgoUEb3bXdvXB/ljEjKKryuFxQCXPkBnnEDWydV/aAkPe2nKhsrXcwM646Iy9dv9oyDuIH09igY0BZcnHsmycs+PtlgLpPybJ1xqILATvpTaOP4+Latx2L+6yCrwYlndqjVW++AsfpF0Js/eRnGR34GHrribFRsmyFbbLPNw2kbUPGRVwpogVbr5Rsm93HwE1ryw7xX62PheIGuf; 4:/nvOieFjVfI9NNY88TH1bfTH6prcuB7JxVFR/Kk44lcSDe2A3vxn8FZN5QfapPvRmG0bFxVSXUhnhIV/wAGjvyH0x2Z3zBRSiiuTVDFkIuUtcNlozdhD7cSFkNBcsQOCHyLnWQq8M++RfUl10szjXApsbVZNYuh46DOPTMHgELaXvp3dSSwMhZ225Kp3EQ/WFvMLT2reFyLYGnG6NR8i4pwyHY97RBkn72qPegYXudOAWRUzeTbM4uEMbsXXYcwz46RZdKNsWLMFELNySNohNA== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040470)(2401047)(5005006)(8121501046)(93006095)(93001095)(10201501046)(3002001)(3231023)(944501075)(6055026)(6041268)(20161123564045)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(6072148)(201708071742011); SRVR:HE1PR0501MB2012; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:HE1PR0501MB2012; X-Forefront-PRVS: 0545EFAC9A X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(396003)(346002)(366004)(39380400002)(376002)(39860400002)(189003)(199004)(107886003)(106356001)(76176011)(51416003)(50466002)(86362001)(16586007)(4326008)(575784001)(8936002)(68736007)(105586002)(81166006)(1076002)(81156014)(2361001)(47776003)(6486002)(6506007)(50226002)(386003)(6512007)(66066001)(16526018)(8676002)(2351001)(5660300001)(53936002)(7736002)(36756003)(2950100002)(6916009)(305945005)(97736004)(478600001)(6666003)(2906002)(6116002)(52116002)(48376002)(25786009)(3846002)(316002)(53416004); DIR:OUT; SFP:1101; SCL:1; SRVR:HE1PR0501MB2012; H:splinter.mtl.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: 1; HE1PR0501MB2012; 23:Y8gho0wRoBCo3DW3K8z+26av2njWdR9sEon2NkX6qmpsi5aeo86sf4tjmQZ6P4RqrFziBlHM43QK+QcFQNTmhV4f/5sVwWDzfuBPGgnVqvDZ6CwKe2xiKQWYbz50PimqOlDDweVmsAdMekwXMtSaPN3AoelUfJqiipVXQl3qoQIWve2HfSopEo2LseZBItjfka/eExhzkvgtdR3dXTteOIhj0ubBYAOBpNmQtmtqZPenN0dxYzuhtf9ocoI7ukrhI/zdJS3ugSMCUDrq9AAYLoq/jFNJvh23nDkaP1nGIrW4JhZK3oQLYi/oaGJhkyWRf/3Nnbvrr3kQp+G7zAP2cca3pqrtnt8qM7QIh/YyOLadlJlMUbNiveIZ2dFpgE6efv3Wb6ADtxzxWhjKTFJqC3/i4BCkca0Mpu+a4JQrnGUPFJ8LFDsPt2Q2I0pLkJgWoGF4BNCJiEFi8xZfkZGz7ZRmt4QWbA4ehKga11nAirg/YAB4DfrbSrYioRL62dgSPZzufb/uSb0UoJRv2NmrWBMi3nvA04vvIUxFi04cLmXGALtEbgfqzAjWqcj1bPHlGcX0c8tC1Yx7p/3gV6py27+sbahsRF6jG+uDBbq0IPWqu/33d96QhIOZGEQjfM9qxgVgfacEczHN90imLk/zx+fB+gOSDGrXEBoav2fSlNeF3/+fGRPQSFnb70lSYjS6se5Z1MHtcPDRErMD+N+upYFSmfMPrBvhhkS/+NI5r0uC+14gqTUOFshlUQ5mwdo56LGnar8T/fBVT2WCH6+Svw63ts6j1zOSbbaFBnRlEt3jBAeofG6NwDTIjGHE3cVdRhmwORyJKNgDOOHNHeKKQ+lQXhdupT3mH1VhPVAGRWqSJXCWr0TEDO6FWG574PyMlp/7hBT3i17/FMeoVJO4jYQZCZhWmINZ3mttmcz9OChJNhgcc2W5cNuabmlVonjwvqJR2/CHtOOtcVt8FaFtZosAUFzjsL+Cpr1Tqgy2y88LBxxPNe2zYJW6xGXrMXIryMaOms7SffhuoT2AFHtN8uh90D4YpDhZtHK453oF345oYnhOIvL4ZQJ9GIJYZZ81FHIQ/oRbWfZitZ126ooEFahE85RW6NUR+ax0BJVr1ncbHxsWqDLmVNUXNQxWhPPQT2OQi6KwyRiIB71U7z0wSROnxxjtjesTaYOqKbyGg2Q= X-Microsoft-Exchange-Diagnostics: 1; HE1PR0501MB2012; 6:kJJY4xDoKgcZFlrIhYtWRiwbdekVm/hFMj1EwniGoE5ezjDIDCX0EJBE8yQ3vXA+WuouCxt+LSjLDqjmR8utrRffgy/hqpsn6z6os2qD3rtI5LSH+WcFSa0yJh82nPKMAYav9aT2e+jBnrcPN3IsNKf9WB/AjawuDFtHowQIoOkXtF4fL9kXHUHLfe/cf5o769by/LpqjjJhh7393dPLu0MI1iA5nnEh9hgvDUByqeEVMvFUI0LzGPlb8cNLmUSyhu3/JH2ws3EEs+Z7LwbWu0a6LyVO1Sf1TaqiD/qY5Y1+CMfAXmJl6aRxDmAKuGZQItHwoVJ5Q6fbSWPDlf1eYAMBMhlpfeGEqGAjaL/Rwt0=; 5:8DgYyyiTL0aQ28bx3q3qlqsuU7niWfRMAtRLb4yJ1UlxANjvEoUIf4eep7X5z3AAlvLQfEO9Bzdc/Yak73fOa0uEUP9nY8ZWI+e79p3x7SNC8Uz39iYFjdz5YFjV5uWZmXtkPfl7URgq3Jxz9sGkH5wfB/Glhasdk3gn3jXcdGM=; 24:IrNeAhwsGSDZQ3Oxkeuuu8ypcCGjLUE8BsVHF8fh81FRuuQwtZHhXfUkdSOGX1DaTs+9a8ky85y4KE/gilmUtekrfaZYgzDKDaMdlyZBHig=; 7:MfRtn7/yd1l9/F3GWZtz2x+bE2GdsYOVthuzMCTtGmpiZBaUx6tUgI79+ANFeCB/Uz7xTWFuV+7FetCJF9olMzPmbSIzxYf0GP+vn3Odvv4mlb9Hp0hWN8oONMib9tQQBZBQ5XEVkNx9mkEKKgsR4HAkYyuM1QwB1ylW2S02MIyh1UfUgRG5eA0U1CsJMn7CDi+VN6rSPlj+hHxmObWg/n2TV4Rt34SHcfUHLMRLciKliw9PTTniPBFizphL9vTR SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jan 2018 10:46:43.5362 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 86707f07-0061-4b30-ec8b-08d555bbf28d X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0501MB2012 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Similar to IPv4, when the carrier of a netdev changes we should toggle the 'linkdown' flag on all the nexthops using it as their nexthop device. This will later allow us to test for the presence of this flag during route lookup and dump. Up until commit 4832c30d5458 ("net: ipv6: put host and anycast routes on device with address") host and anycast routes used the loopback netdev as their nexthop device and thus were not marked with the 'linkdown' flag. The patch preserves this behavior and allows one to ping the local address even when the nexthop device does not have a carrier and the 'ignore_routes_with_linkdown' sysctl is set. Signed-off-by: Ido Schimmel Acked-by: David Ahern --- include/net/ip6_route.h | 1 + net/ipv6/addrconf.c | 2 ++ net/ipv6/route.c | 23 +++++++++++++++++------ 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/include/net/ip6_route.h b/include/net/ip6_route.h index 6a2f80cbdf65..34cd3b0c6ded 100644 --- a/include/net/ip6_route.h +++ b/include/net/ip6_route.h @@ -170,6 +170,7 @@ void rt6_remove_prefsrc(struct inet6_ifaddr *ifp); void rt6_clean_tohost(struct net *net, struct in6_addr *gateway); void rt6_sync_up(struct net_device *dev, unsigned int nh_flags); void rt6_disable_ip(struct net_device *dev, unsigned long event); +void rt6_sync_down_dev(struct net_device *dev, unsigned long event); static inline const struct rt6_info *skb_rt6_info(const struct sk_buff *skb) { diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index a13e1ffe87ec..2435f7ab070b 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c @@ -3438,6 +3438,7 @@ static int addrconf_notify(struct notifier_block *this, unsigned long event, } else if (event == NETDEV_CHANGE) { if (!addrconf_link_ready(dev)) { /* device is still not ready. */ + rt6_sync_down_dev(dev, event); break; } @@ -3449,6 +3450,7 @@ static int addrconf_notify(struct notifier_block *this, unsigned long event, * multicast snooping switches */ ipv6_mc_up(idev); + rt6_sync_up(dev, RTNH_F_LINKDOWN); break; } idev->if_flags |= IF_READY; diff --git a/net/ipv6/route.c b/net/ipv6/route.c index 194fe9d9cd85..2fd36c7dd143 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c @@ -3498,18 +3498,29 @@ static int fib6_ifdown(struct rt6_info *rt, void *p_arg) const struct net_device *dev = arg->dev; const struct net *net = dev_net(dev); - if (rt->dst.dev == dev && - rt != net->ipv6.ip6_null_entry && - (rt->rt6i_nsiblings == 0 || netdev_unregistering(dev) || - !rt->rt6i_idev->cnf.ignore_routes_with_linkdown)) { - rt->rt6i_nh_flags |= (RTNH_F_DEAD | RTNH_F_LINKDOWN); + if (rt->dst.dev != dev || rt == net->ipv6.ip6_null_entry) + return 0; + + switch (arg->event) { + case NETDEV_UNREGISTER: return -1; + case NETDEV_DOWN: + if (rt->rt6i_nsiblings == 0 || + !rt->rt6i_idev->cnf.ignore_routes_with_linkdown) + return -1; + rt->rt6i_nh_flags |= RTNH_F_DEAD; + /* fall through */ + case NETDEV_CHANGE: + if (rt->rt6i_flags & (RTF_LOCAL | RTF_ANYCAST)) + break; + rt->rt6i_nh_flags |= RTNH_F_LINKDOWN; + break; } return 0; } -static void rt6_sync_down_dev(struct net_device *dev, unsigned long event) +void rt6_sync_down_dev(struct net_device *dev, unsigned long event) { struct arg_netdev_event arg = { .dev = dev,