[{"id":1772706,"web_url":"http://patchwork.ozlabs.org/comment/1772706/","msgid":"<24470459-704b-89a2-648a-bbd4d3a1aebb@cumulusnetworks.com>","list_archive_url":null,"date":"2017-09-21T11:19:10","subject":"Re: [patch net-next 03/12] ipmr: Add FIB notification access\n\tfunctions","submitter":{"id":66448,"url":"http://patchwork.ozlabs.org/api/people/66448/","name":"Nikolay Aleksandrov","email":"nikolay@cumulusnetworks.com"},"content":"On 21/09/17 09:43, Jiri Pirko wrote:\n> From: Yotam Gigi <yotamg@mellanox.com>\n> \n> Make the ipmr module register as a FIB notifier. To do that, implement both\n> the ipmr_seq_read and ipmr_dump ops.\n> \n> The ipmr_seq_read op returns a sequence counter that is incremented on\n> every notification related operation done by the ipmr. To implement that,\n> add a sequence counter in the netns_ipv4 struct and increment it whenever a\n> new MFC route or VIF are added or deleted. The sequence operations are\n> protected by the RTNL lock.\n> \n> The ipmr_dump iterates the list of MFC routes and the list of VIF entries\n> and sends notifications about them. The entries dump is done under RCU.\n> \n> Signed-off-by: Yotam Gigi <yotamg@mellanox.com>\n> Reviewed-by: Ido Schimmel <idosch@mellanox.com>\n> Signed-off-by: Jiri Pirko <jiri@mellanox.com>\n> ---\n>  include/linux/mroute.h   |  15 ++++++\n>  include/net/netns/ipv4.h |   3 ++\n>  net/ipv4/ipmr.c          | 135 ++++++++++++++++++++++++++++++++++++++++++++++-\n>  3 files changed, 151 insertions(+), 2 deletions(-)\n> \n[snip]\n> +\n> +static int ipmr_dump(struct net *net, struct notifier_block *nb)\n> +{\n> +\tstruct mr_table *mrt;\n> +\tint err;\n> +\n> +\terr = ipmr_rules_dump(net, nb);\n> +\tif (err)\n> +\t\treturn err;\n> +\n> +\tipmr_for_each_table(mrt, net) {\n> +\t\tstruct vif_device *v = &mrt->vif_table[0];\n> +\t\tstruct mfc_cache *mfc;\n> +\t\tint vifi;\n> +\n> +\t\t/* Notifiy on table VIF entries */\n> +\t\tfor (vifi = 0; vifi < mrt->maxvif; vifi++, v++) {\n> +\t\t\tif (!v->dev)\n> +\t\t\t\tcontinue;\n> +\n> +\t\t\tcall_ipmr_vif_entry_notifier(nb, net, FIB_EVENT_VIF_ADD,\n> +\t\t\t\t\t\t     v, vifi, mrt->id);\n> +\t\t}\n\nThe VIF table is protected by mrt_lock (rwlock), here with RCU only\nyou're not guaranteed to keep v->dev. It can become NULL after the check above.\nFor details you can see vif_delete() in net/ipv4/ipmr.c. You need at least\nmrt_lock for reading.\n\n> +\n> +\t\t/* Notify on table MFC entries */\n> +\t\tlist_for_each_entry_rcu(mfc, &mrt->mfc_cache_list, list)\n> +\t\t\tcall_ipmr_mfc_entry_notifier(nb, net,\n> +\t\t\t\t\t\t     FIB_EVENT_ENTRY_ADD, mfc,\n> +\t\t\t\t\t\t     mrt->id);\n> +\t}\n> +\n> +\treturn 0;\n> +}\n> +\n> +static const struct fib_notifier_ops ipmr_notifier_ops_template = {\n> +\t.family\t\t= RTNL_FAMILY_IPMR,\n> +\t.fib_seq_read\t= ipmr_seq_read,\n> +\t.fib_dump\t= ipmr_dump,\n> +\t.owner\t\t= THIS_MODULE,\n> +};\n> +\n> +int __net_init ipmr_notifier_init(struct net *net)\n> +{\n> +\tstruct fib_notifier_ops *ops;\n> +\n> +\tnet->ipv4.ipmr_seq = 0;\n> +\n> +\tops = fib_notifier_ops_register(&ipmr_notifier_ops_template, net);\n> +\tif (IS_ERR(ops))\n> +\t\treturn PTR_ERR(ops);\n> +\tnet->ipv4.ipmr_notifier_ops = ops;\n> +\n> +\treturn 0;\n> +}\n> +\n> +static void __net_exit ipmr_notifier_exit(struct net *net)\n> +{\n> +\tfib_notifier_ops_unregister(net->ipv4.ipmr_notifier_ops);\n> +\tnet->ipv4.ipmr_notifier_ops = NULL;\n> +}\n> +\n>  /* Setup for IP multicast routing */\n>  static int __net_init ipmr_net_init(struct net *net)\n>  {\n>  \tint err;\n>  \n> +\terr = ipmr_notifier_init(net);\n> +\tif (err)\n> +\t\tgoto ipmr_notifier_fail;\n> +\n>  \terr = ipmr_rules_init(net);\n>  \tif (err < 0)\n> -\t\tgoto fail;\n> +\t\tgoto ipmr_rules_fail;\n>  \n>  #ifdef CONFIG_PROC_FS\n>  \terr = -ENOMEM;\n> @@ -3074,7 +3202,9 @@ static int __net_init ipmr_net_init(struct net *net)\n>  proc_vif_fail:\n>  \tipmr_rules_exit(net);\n>  #endif\n> -fail:\n> +ipmr_rules_fail:\n> +\tipmr_notifier_exit(net);\n> +ipmr_notifier_fail:\n>  \treturn err;\n>  }\n>  \n> @@ -3084,6 +3214,7 @@ static void __net_exit ipmr_net_exit(struct net *net)\n>  \tremove_proc_entry(\"ip_mr_cache\", net->proc_net);\n>  \tremove_proc_entry(\"ip_mr_vif\", net->proc_net);\n>  #endif\n> +\tipmr_notifier_exit(net);\n>  \tipmr_rules_exit(net);\n>  }\n>  \n>","headers":{"Return-Path":"<netdev-owner@vger.kernel.org>","X-Original-To":"patchwork-incoming@ozlabs.org","Delivered-To":"patchwork-incoming@ozlabs.org","Authentication-Results":["ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=vger.kernel.org\n\t(client-ip=209.132.180.67; helo=vger.kernel.org;\n\tenvelope-from=netdev-owner@vger.kernel.org;\n\treceiver=<UNKNOWN>)","ozlabs.org; dkim=pass (1024-bit key;\n\tunprotected) header.d=cumulusnetworks.com\n\theader.i=@cumulusnetworks.com header.b=\"ZD2/oeju\"; \n\tdkim-atps=neutral"],"Received":["from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3xyYz9621nz9t3m\n\tfor <patchwork-incoming@ozlabs.org>;\n\tThu, 21 Sep 2017 21:19:17 +1000 (AEST)","(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1751679AbdIULTP (ORCPT <rfc822;patchwork-incoming@ozlabs.org>);\n\tThu, 21 Sep 2017 07:19:15 -0400","from mail-wr0-f182.google.com ([209.85.128.182]:51289 \"EHLO\n\tmail-wr0-f182.google.com\" rhost-flags-OK-OK-OK-OK) by vger.kernel.org\n\twith ESMTP id S1751652AbdIULTO (ORCPT\n\t<rfc822;netdev@vger.kernel.org>); Thu, 21 Sep 2017 07:19:14 -0400","by mail-wr0-f182.google.com with SMTP id z39so4286412wrb.8\n\tfor <netdev@vger.kernel.org>; Thu, 21 Sep 2017 04:19:13 -0700 (PDT)","from [192.168.0.103] (46-10-142-144.ip.btc-net.bg. [46.10.142.144])\n\tby smtp.googlemail.com with ESMTPSA id\n\ty39sm1690719wry.70.2017.09.21.04.19.11\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);\n\tThu, 21 Sep 2017 04:19:11 -0700 (PDT)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=cumulusnetworks.com; s=google;\n\th=subject:to:references:cc:from:message-id:date:user-agent\n\t:mime-version:in-reply-to:content-transfer-encoding;\n\tbh=E9dE4VofvZsM7PjOzSDRWCiv66qO8YQ/CsSOcUbmMhM=;\n\tb=ZD2/oejuk86m4tbniTrPBpFec9p2Ch9knzQJNkk39r1ZVJMxlTIuPF5yeG8LVKrJZ9\n\tpt0+VRtdaBWqK1k/8LAlfU8WsFxPHOFh99lbXkxYJumfp4wZi7Sdr8Sx1wPQgmDyS658\n\tvOFPEJ/LA8TKjdmzrYj+viMPgYBdpUwFLqLcI=","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:subject:to:references:cc:from:message-id:date\n\t:user-agent:mime-version:in-reply-to:content-transfer-encoding;\n\tbh=E9dE4VofvZsM7PjOzSDRWCiv66qO8YQ/CsSOcUbmMhM=;\n\tb=EBVHqFW0N+kk86gsO3MVqF+FxeGeCNjUjmvXAoGQE29An36UKjeXirSAgyWnBq0Wqj\n\tBy4PYCIrulDSOPXN5zv1Ap7LdmCZirpSDP8Ujx9o9N9ByUj4+b96pe0uyzrmwNfeePCi\n\tboPjzO4GfW5VwgDctwvwSIVyTPT6xQbRDC9S1vQt3GQ6MwDbu0Pls/ZikwZel8dmwM9R\n\tGBQIaAhU0fIOjXk1ImJYoGRIw0jT1noEZET14hUd73k2iI6ql7tdZbk6bq2RyR1UZ47a\n\tPc57DTxiE/dNtTvJu2HA//23j2gQxRI5W8Q5BRrEQCEncnvs/1jZIBau2+ZUKYDeDGO2\n\tpjsQ==","X-Gm-Message-State":"AHPjjUiaLTB3wd0dpnIMHXLF2Cq21ZC3TZcyITVMCEPYcyNKAurr1cg7\n\tDqYq6L+ozM6iCWbkbSfifgjMB38K","X-Google-Smtp-Source":"AOwi7QBkuOW66Y8uHMUGD/R5FfjV9UnpVYlWdhwSpQtY9HLR6KYkGe1kjHSogRCWwmNioMEXY3oQ5A==","X-Received":"by 10.223.179.10 with SMTP id j10mr1754790wrd.273.1505992752667; \n\tThu, 21 Sep 2017 04:19:12 -0700 (PDT)","Subject":"Re: [patch net-next 03/12] ipmr: Add FIB notification access\n\tfunctions","To":"Jiri Pirko <jiri@resnulli.us>, netdev@vger.kernel.org","References":"<20170921064338.1282-1-jiri@resnulli.us>\n\t<20170921064338.1282-4-jiri@resnulli.us>","Cc":"davem@davemloft.net, yotamg@mellanox.com, idosch@mellanox.com,\n\tmlxsw@mellanox.com","From":"Nikolay Aleksandrov <nikolay@cumulusnetworks.com>","X-Enigmail-Draft-Status":"N1110","Message-ID":"<24470459-704b-89a2-648a-bbd4d3a1aebb@cumulusnetworks.com>","Date":"Thu, 21 Sep 2017 14:19:10 +0300","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101\n\tIcedove/45.6.0","MIME-Version":"1.0","In-Reply-To":"<20170921064338.1282-4-jiri@resnulli.us>","Content-Type":"text/plain; charset=windows-1252","Content-Transfer-Encoding":"7bit","Sender":"netdev-owner@vger.kernel.org","Precedence":"bulk","List-ID":"<netdev.vger.kernel.org>","X-Mailing-List":"netdev@vger.kernel.org"}},{"id":1773294,"web_url":"http://patchwork.ozlabs.org/comment/1773294/","msgid":"<ca295917-5a65-b9de-a818-ca446e1655b5@mellanox.com>","list_archive_url":null,"date":"2017-09-22T06:35:52","subject":"Re: [patch net-next 03/12] ipmr: Add FIB notification access\n\tfunctions","submitter":{"id":69965,"url":"http://patchwork.ozlabs.org/api/people/69965/","name":"Yotam Gigi","email":"yotamg@mellanox.com"},"content":"On 09/21/2017 02:19 PM, Nikolay Aleksandrov wrote:\n> On 21/09/17 09:43, Jiri Pirko wrote:\n>> From: Yotam Gigi <yotamg@mellanox.com>\n>>\n>> Make the ipmr module register as a FIB notifier. To do that, implement both\n>> the ipmr_seq_read and ipmr_dump ops.\n>>\n>> The ipmr_seq_read op returns a sequence counter that is incremented on\n>> every notification related operation done by the ipmr. To implement that,\n>> add a sequence counter in the netns_ipv4 struct and increment it whenever a\n>> new MFC route or VIF are added or deleted. The sequence operations are\n>> protected by the RTNL lock.\n>>\n>> The ipmr_dump iterates the list of MFC routes and the list of VIF entries\n>> and sends notifications about them. The entries dump is done under RCU.\n>>\n>> Signed-off-by: Yotam Gigi <yotamg@mellanox.com>\n>> Reviewed-by: Ido Schimmel <idosch@mellanox.com>\n>> Signed-off-by: Jiri Pirko <jiri@mellanox.com>\n>> ---\n>>  include/linux/mroute.h   |  15 ++++++\n>>  include/net/netns/ipv4.h |   3 ++\n>>  net/ipv4/ipmr.c          | 135 ++++++++++++++++++++++++++++++++++++++++++++++-\n>>  3 files changed, 151 insertions(+), 2 deletions(-)\n>>\n> [snip]\n>> +\n>> +static int ipmr_dump(struct net *net, struct notifier_block *nb)\n>> +{\n>> +\tstruct mr_table *mrt;\n>> +\tint err;\n>> +\n>> +\terr = ipmr_rules_dump(net, nb);\n>> +\tif (err)\n>> +\t\treturn err;\n>> +\n>> +\tipmr_for_each_table(mrt, net) {\n>> +\t\tstruct vif_device *v = &mrt->vif_table[0];\n>> +\t\tstruct mfc_cache *mfc;\n>> +\t\tint vifi;\n>> +\n>> +\t\t/* Notifiy on table VIF entries */\n>> +\t\tfor (vifi = 0; vifi < mrt->maxvif; vifi++, v++) {\n>> +\t\t\tif (!v->dev)\n>> +\t\t\t\tcontinue;\n>> +\n>> +\t\t\tcall_ipmr_vif_entry_notifier(nb, net, FIB_EVENT_VIF_ADD,\n>> +\t\t\t\t\t\t     v, vifi, mrt->id);\n>> +\t\t}\n> The VIF table is protected by mrt_lock (rwlock), here with RCU only\n> you're not guaranteed to keep v->dev. It can become NULL after the check above.\n> For details you can see vif_delete() in net/ipv4/ipmr.c. You need at least\n> mrt_lock for reading.\n\nHmm, that's interesting. That situation would lead the dump to be inconsistent,\nthus eventually discarded, right? So I can also just make sure that the driver\nignores dev=NULL notifications and that would be enough to solve it.\n\nI have to think about it a bit more, but anyway, maybe taking the mrt_lock for\nthe VIF dump is the right solution here.\n\nAnyway, thanks for the review!\n\n\n>> +\n>> +\t\t/* Notify on table MFC entries */\n>> +\t\tlist_for_each_entry_rcu(mfc, &mrt->mfc_cache_list, list)\n>> +\t\t\tcall_ipmr_mfc_entry_notifier(nb, net,\n>> +\t\t\t\t\t\t     FIB_EVENT_ENTRY_ADD, mfc,\n>> +\t\t\t\t\t\t     mrt->id);\n>> +\t}\n>> +\n>> +\treturn 0;\n>> +}\n>> +\n>> +static const struct fib_notifier_ops ipmr_notifier_ops_template = {\n>> +\t.family\t\t= RTNL_FAMILY_IPMR,\n>> +\t.fib_seq_read\t= ipmr_seq_read,\n>> +\t.fib_dump\t= ipmr_dump,\n>> +\t.owner\t\t= THIS_MODULE,\n>> +};\n>> +\n>> +int __net_init ipmr_notifier_init(struct net *net)\n>> +{\n>> +\tstruct fib_notifier_ops *ops;\n>> +\n>> +\tnet->ipv4.ipmr_seq = 0;\n>> +\n>> +\tops = fib_notifier_ops_register(&ipmr_notifier_ops_template, net);\n>> +\tif (IS_ERR(ops))\n>> +\t\treturn PTR_ERR(ops);\n>> +\tnet->ipv4.ipmr_notifier_ops = ops;\n>> +\n>> +\treturn 0;\n>> +}\n>> +\n>> +static void __net_exit ipmr_notifier_exit(struct net *net)\n>> +{\n>> +\tfib_notifier_ops_unregister(net->ipv4.ipmr_notifier_ops);\n>> +\tnet->ipv4.ipmr_notifier_ops = NULL;\n>> +}\n>> +\n>>  /* Setup for IP multicast routing */\n>>  static int __net_init ipmr_net_init(struct net *net)\n>>  {\n>>  \tint err;\n>>  \n>> +\terr = ipmr_notifier_init(net);\n>> +\tif (err)\n>> +\t\tgoto ipmr_notifier_fail;\n>> +\n>>  \terr = ipmr_rules_init(net);\n>>  \tif (err < 0)\n>> -\t\tgoto fail;\n>> +\t\tgoto ipmr_rules_fail;\n>>  \n>>  #ifdef CONFIG_PROC_FS\n>>  \terr = -ENOMEM;\n>> @@ -3074,7 +3202,9 @@ static int __net_init ipmr_net_init(struct net *net)\n>>  proc_vif_fail:\n>>  \tipmr_rules_exit(net);\n>>  #endif\n>> -fail:\n>> +ipmr_rules_fail:\n>> +\tipmr_notifier_exit(net);\n>> +ipmr_notifier_fail:\n>>  \treturn err;\n>>  }\n>>  \n>> @@ -3084,6 +3214,7 @@ static void __net_exit ipmr_net_exit(struct net *net)\n>>  \tremove_proc_entry(\"ip_mr_cache\", net->proc_net);\n>>  \tremove_proc_entry(\"ip_mr_vif\", net->proc_net);\n>>  #endif\n>> +\tipmr_notifier_exit(net);\n>>  \tipmr_rules_exit(net);\n>>  }\n>>  \n>>","headers":{"Return-Path":"<netdev-owner@vger.kernel.org>","X-Original-To":"patchwork-incoming@ozlabs.org","Delivered-To":"patchwork-incoming@ozlabs.org","Authentication-Results":["ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=vger.kernel.org\n\t(client-ip=209.132.180.67; helo=vger.kernel.org;\n\tenvelope-from=netdev-owner@vger.kernel.org;\n\treceiver=<UNKNOWN>)","ozlabs.org; dkim=pass (1024-bit key;\n\tunprotected) header.d=Mellanox.com header.i=@Mellanox.com\n\theader.b=\"MUTZZ8d0\"; dkim-atps=neutral","spf=none (sender IP is )\n\tsmtp.mailfrom=yotamg@mellanox.com; "],"Received":["from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3xz3dx6kgwz9sNc\n\tfor <patchwork-incoming@ozlabs.org>;\n\tFri, 22 Sep 2017 16:36:05 +1000 (AEST)","(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1751852AbdIVGgC (ORCPT <rfc822;patchwork-incoming@ozlabs.org>);\n\tFri, 22 Sep 2017 02:36:02 -0400","from mail-eopbgr40082.outbound.protection.outlook.com\n\t([40.107.4.82]:9568\n\t\"EHLO EUR03-DB5-obe.outbound.protection.outlook.com\"\n\trhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP\n\tid S1751637AbdIVGgB (ORCPT <rfc822;netdev@vger.kernel.org>);\n\tFri, 22 Sep 2017 02:36:01 -0400","from localhost.localdomain (79.181.49.40) by\n\tDB6PR0502MB2967.eurprd05.prod.outlook.com (2603:10a6:4:97::13) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.77.7;\n\tFri, 22 Sep 2017 06:35:57 +0000"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com;\n\ts=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version;\n\tbh=l1ho9rXlOvUJe1BnUdXL3aXwunYNq9S5JUxHjQtBzxA=;\n\tb=MUTZZ8d0WPHp/R+Wpk4YiNoe3hsOsgxjxeKfgRtggm1xDBLCjln+YAuFfkWTADSm8mRfdXGYrdyvIZccKG90mhgvlnxtZB57OLHpS48xPoeSdHI9ft5bhkJYwClgIY2+SQccqRcv2XbRAQ2X5EzLaXbaow2zypxgrOpd5nUGSn4=","Subject":"Re: [patch net-next 03/12] ipmr: Add FIB notification access\n\tfunctions","To":"Nikolay Aleksandrov <nikolay@cumulusnetworks.com>,\n\tJiri Pirko <jiri@resnulli.us>, netdev@vger.kernel.org","Cc":"davem@davemloft.net, idosch@mellanox.com, mlxsw@mellanox.com","References":"<20170921064338.1282-1-jiri@resnulli.us>\n\t<20170921064338.1282-4-jiri@resnulli.us>\n\t<24470459-704b-89a2-648a-bbd4d3a1aebb@cumulusnetworks.com>","From":"Yotam Gigi <yotamg@mellanox.com>","Message-ID":"<ca295917-5a65-b9de-a818-ca446e1655b5@mellanox.com>","Date":"Fri, 22 Sep 2017 09:35:52 +0300","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101\n\tThunderbird/52.2.1","MIME-Version":"1.0","In-Reply-To":"<24470459-704b-89a2-648a-bbd4d3a1aebb@cumulusnetworks.com>","Content-Type":"text/plain; charset=windows-1252","Content-Transfer-Encoding":"7bit","Content-Language":"en-US","X-Originating-IP":"[79.181.49.40]","X-ClientProxiedBy":"VI1PR08CA0109.eurprd08.prod.outlook.com\n\t(2603:10a6:800:d4::11) To DB6PR0502MB2967.eurprd05.prod.outlook.com\n\t(2603:10a6:4:97::13)","X-MS-PublicTrafficType":"Email","X-MS-Office365-Filtering-Correlation-Id":"00b3c4a0-6093-445b-f1ec-08d501842f7e","X-MS-Office365-Filtering-HT":"Tenant","X-Microsoft-Antispam":"UriScan:; BCL:0; PCL:0;\n\tRULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(48565401081)(300000503095)(300135400095)(2017052603199)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);\n\tSRVR:DB6PR0502MB2967; ","X-Microsoft-Exchange-Diagnostics":["1; DB6PR0502MB2967;\n\t3:8akK4CrxRtcEB8+JYMOUjORoly5KN6TSQYzvZ7p7ntGhcw7DAzCK3ojgadhqinbFJIQkiuRbqB+vjW6rmCxWsidnc2uKdPHcJek6vcGWfJ7QaNWY216P7m52qJcCg4/Zui/8qnhRtKtVRebC7a0w7WIunYeHkoigvRp3k4Ha1HmjQYOZ9UpSnG9Agp/XPjdsS4Z0D3S3s80PppXt/Fn3R9wyREedS+YhU60xKBdcvuwu4SVtlNGPyFKdZBRjbD5j;\n\t25:LhtYwJvTduxko3jURqhG2ziNpvvuIy2kpaKAq/48BBeCcOHodwSVwnWNy429fgqXMJCFVj14l3J6vQlzEu1OPDmjIwX7vqrpAJImTeCbKF552uFqvbH4xan6yU4QPSJ6eF/J+SlCl1ye6IZr/dhS1vtAfD6zcG7M84ram3JSHCvgQYukFOZyLk52MgJU+jO9O96oX2BIqEQx90pVK8TlZyKXpn8he4iXLc06jfjwIkNMFqTSmTRjelSZuFBaaVnQmd/RSAeaazXMJl6T63Hd3aepOKTSape9UZlvJf3S8V+PAqe3s4jfBiC6J4/CHav2WMTMDvQ9bnj9P0lMu8ufiA==;\n\t31:5sfxNbK7B/XGA2l+GHn3zI8tfGjO/tcLv7ML30iPTqTqn50yQSFhzZuCgnxTj7BbVlTVv3l02hCNfr1FS+SY5GlHOLU7O4o7YU6EluKdErWSo33sSCbJmAoguUJBmbnHcY9RyZyvKeUZcG2ikQDAnSUZJYRkhCAjDKBfGIJ5MHNQ2oJQCb4cLqXLYGD+kdnVr5LdnBDX7HJmSncaB9h34RpN89flvOESMkHDNUIW0Is=","1; DB6PR0502MB2967;\n\t20:90JaUggCSdpCp8qypcqD+/LeT+h1tV7j0L0nmPbs/Y4PivEX2Ow01i1EUq1hliuuTRhUPG26qlEiI0bvK+t1a9KIX6K3AcqucY/aKxQA6vt+tOat5YrYCWhovlZk383+ryNahyr/XHyMG60kwmlbeBFVCwlydtm3mbfTbl8T66PZ7/h6+EG9PneLHZAzQTRr0hvyFbkSmyNyQL9yxh3nsF9vLvlaUy/wnbDS2k8wXrUGlLz0nRdy2W5E2jYdlHXrjrl70mbAHpxUrNAje+DNSjfs355HaYVyrnntW9mKSbkMnTFxlf2EuzhLTRJHd3CjjrZd2JzshKGLX2hsx/0ahuVe/JUnFNHbodKXa4dViFcUFklCE3muHJaL4IXD2PzJAt2IxVA0Q8cmHyW+Dmq3mnm2TbQCOL+Zo9oWK3udMikvYkMApDSfMZCvsjBSLWAPokmP4WlUAWVPR7GaALMngrWS3G3pkRxuFBFk80vr712IDtNxhMw0lHKU9j7QCxjS;\n\t4:WI1+1NSIZIp4SKdHTA37DtZI54RPDfwziflSA6wciAgBjTGQTaKp8EXsrqYLU3a2VoOUa6aj0OiiUKd76GAMMC76wzASyFL0hNDcekEnqikQuD35hBLCx8/0FDNFhoB5DVNiV2Pyp1OSmExzedZrQucRCrh+cTHKi8UqbZm/wTT1F0kIGt2petQqfdBLOoEFHwVkvfT2eZe2d/XtcpFwqARgbkGjsNNoNWun/aO3pYpqVcKcL2Rp+wzHNF8Dtipm","=?windows-1252?q?1=3BDB6PR0502MB2967=3B?=\n\t=?windows-1252?q?23=3ADezfXBTw53PnOnNugmhXiVx2FAV9ADlwu3qVmAWNtdGp?=\n\t=?windows-1252?q?PcCzsFuCrXphkroRMX3A2C7SJwhqm/WjnW+7u3ocTb8cYCV6Z?=\n\t=?windows-1252?q?zVau0hWM1DHJ2A+X45vCjoswu867H9qQHfxgyPURKvW6bzmW+?=\n\t=?windows-1252?q?vIGaxpEn5AVck3eorayLvR+mchkp0ezT6mph1L0idW7+uT2uV?=\n\t=?windows-1252?q?obGNcViq7/9+JYjnzoD5qHdIpcdDXNk/fzH3r7/AuVgTZ/NxH?=\n\t=?windows-1252?q?8vaOdbdSv4mzwrVfjp9zWKfEnfvklA3iTgURvBt8BPRO/HLmv?=\n\t=?windows-1252?q?MsEgi/oK/q1lnFyL26Yw8R+1VvJ7FHqYAFO8Ai43mtocoIWuT?=\n\t=?windows-1252?q?ta+UJ+/1J0gTIgn7n0fAHsqAcjAWasa2Jisi3toDv3nvaxb8t?=\n\t=?windows-1252?q?UzdhTVfDysjweWSY95dISjut1Pwt6ySt1E+SoMrntXrSJZ/f+?=\n\t=?windows-1252?q?50UcUPDIoQAWkC5T3P58oltDM4/5xMOiQ7yDaF+bU/s70YfTz?=\n\t=?windows-1252?q?5+z/m/e0+HuFlBGqiLGettsm4D91p3hNXIXjxeOX/fajyIBxu?=\n\t=?windows-1252?q?WtTjDMhEZ//f2MyxNfpQoK5OjijUQJu0CaAyRTMoVYLrscLiK?=\n\t=?windows-1252?q?NuCeZgUjoR5dg+7NxeuqfBRODtiEkBs/rUQv5z2DEK2d7HZ/A?=\n\t=?windows-1252?q?as5z1Tk3gGUpp0JrAiuMrmbLRq+fHXGMRFMN/TKY7QIzlTlIT?=\n\t=?windows-1252?q?umNpKN62NE/5anqHqVXi5D9+Au0cD81qI9o8PUgoHkRYdbLr5?=\n\t=?windows-1252?q?C3SWs81MaPAx3dS55OzG9nfWi/aolLMwaN7k29d3jspL3ZO8W?=\n\t=?windows-1252?q?MX9rD29E8k01fmbTCEnBLEYwysyLLmQP/kdfn9/KVOeWQ7N+3?=\n\t=?windows-1252?q?+h0lwQd+sF4GvEHcUxU9vis8RSyXTxyvZ+96TgYbFslW4e/aa?=\n\t=?windows-1252?q?AfUKjiGLuBUvE0xNwxh7b/v9Ttkhzh91GQRqfPuWBc/xgTwWc?=\n\t=?windows-1252?q?H0UoeiS5pHBmUIdbZe4YzMcLKUaTQdTmeVOtC7EeTv0PTMG8v?=\n\t=?windows-1252?q?k/jIydNVJFn8sshYTYOKGFERJYMUPmrO6gz2K32SEBoJD2xof?=\n\t=?windows-1252?q?CnX6fEU+NXzJLgwE/UqmMQqUphwNwb44S4r7UxR/TMJOWnn80?=\n\t=?windows-1252?q?TKXoSO0cfsa8pESz0FEdsk4qvKFv61D05qPK3jzeiHLyr407a?=\n\t=?windows-1252?q?fGEQ3LkA0HGlWku/yfbL2XezDXHbR2oaJBf3Z2yQMBIuz0Clp?=\n\t=?windows-1252?q?Nx0UnlTQfwQ+GO2m9QDliLEGn4Z+xeA/LOEb1Gc8d58M87/Dw?=\n\t=?windows-1252?q?qXVvR8WoOmHkYSzILGzHB+KQLqVAs9+E1tVru0D1VMkrvOQcf?=\n\t=?windows-1252?q?RbqyFaLT3T0/WBeMd0912feCNcmQ/8RO6mrJiQ5uKOn6tkSMa?=\n\t=?windows-1252?q?C5rrM0xPoJw7vUfXF/ewXh4l47F/bxU2Ra8SmqgXg96M5qUbB?=\n\t=?windows-1252?q?6EZSzj8KFyVjJwoiUpT6t8nX18g4OqrrAG+vmvl+XFR4slOiO?=\n\t=?windows-1252?q?9WOgR6hgFQv2AbvcR9J+svwjkvJ+o++aTD6ZsUYR0rH1mI13N?=\n\t=?windows-1252?q?v89ynP0?=","1; DB6PR0502MB2967;\n\t6:4MpMUbRu6YvXdREXCl+LT7pWPmyP/A/a7PHtsWZgaOhwaM7KBAbzujZ1YRnGkh/7NwF4ZINb4uAsoLggDPVMy8/1OZRQ45aJZ1E6bwNDzDWInNBXKsp0zckQPkkfNONlsIohu+o1wOs1cuwFGxYsYMi7BbNecombV2Yjo11BHrkzKh1XREzWcNV0I2EDEmtzqBAJSijjVFnnObpj+5U5d4mPki1vlXgMH1GfH/3/8Q7QoVVDse+4DWe/BNgbO2vyfxtYt2CA4dTJf4hPh6J08VFfwlbOpUISGx/WwMI3N9jfwHAegE8PuKQ/g0pD5bSwst6OdIj22v/8KldoPgU39A==;\n\t5:oMUyW8JNJV5E+4WBWTuddx0ciLzJfHnrRPF8qb0NdUGTjP6FHSUkY/rs9PMh9Ck/IBL4QBcKkKNu84s/Q/wzZxUbLem/H8FMk4I70QH6yqgzbNFwaptqzwI0nD6fZ4w9coFctIO682nr8FfniXCmJQ==;\n\t24:1QP/yOmC1n24sE9BEb2V6MnHO62u2tCkW6MT7Atv0m6JKiuyGVGWPN0r5pmg7N4xzQnCRQ+exI0GShhGQFK+UnFc3t4pkP4NZuwff7uAPj4=;\n\t7:cdgffYpYS9uZnvEIjFiCRih1ZvfUq3agchQ1tUIPdvo2eJ1hZ+zNPqytQ1VWBytJGECvxlvL5s0zGNJY9ROkA9C2UoyhCtoVFKsZig8gxJZu9kN658W5OgBhHeiSLwb4/dgZourxw0rDJLZCAwEhaM4hG/cOxVTZUpuqKFb/7AlYfExyrt2o3F374rjY9or6CYnBALneIdMcthS2x9VJTLeNTw2QvOzDNkAUahe4p5w="],"X-MS-TrafficTypeDiagnostic":"DB6PR0502MB2967:","X-Exchange-Antispam-Report-Test":"UriScan:;","X-Microsoft-Antispam-PRVS":"<DB6PR0502MB2967CC4C12634087425F292DAC670@DB6PR0502MB2967.eurprd05.prod.outlook.com>","X-Exchange-Antispam-Report-CFA-Test":"BCL:0; PCL:0;\n\tRULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(5005006)(8121501046)(100000703101)(100105400095)(93006095)(93001095)(10201501046)(3002001)(6055026)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123555025)(20161123564025)(20161123558100)(20161123562025)(20161123560025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);\n\tSRVR:DB6PR0502MB2967; BCL:0; PCL:0;\n\tRULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);\n\tSRVR:DB6PR0502MB2967; ","X-Forefront-PRVS":"0438F90F17","X-Forefront-Antispam-Report":"SFV:NSPM;\n\tSFS:(10009020)(6009001)(6069001)(346002)(376002)(39860400002)(189002)(52314003)(24454002)(377454003)(199003)(51914003)(65806001)(97736004)(86362001)(8676002)(81156014)(50466002)(31696002)(23746002)(64126003)(101416001)(31686004)(47776003)(81166006)(66066001)(36756003)(50986999)(5660300001)(15650500001)(68736007)(65826007)(25786009)(2950100002)(83506001)(76176999)(54356999)(305945005)(2906002)(65956001)(478600001)(7736002)(3846002)(229853002)(6506006)(6666003)(6486002)(316002)(4326008)(6116002)(6246003)(16526017)(230700001)(107886003)(106356001)(110136005)(105586002)(8936002)(33646002)(189998001)(53936002)(53546010)(6512007)(58126008);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:DB6PR0502MB2967;\n\tH:localhost.localdomain; FPR:; SPF:None; PTR:InfoNoRecords;\n\tMX:1; A:1; LANG:en; ","Received-SPF":"None (protection.outlook.com: mellanox.com does not designate\n\tpermitted sender hosts)","SpamDiagnosticOutput":"1:99","SpamDiagnosticMetadata":"NSPM","X-OriginatorOrg":"Mellanox.com","X-MS-Exchange-CrossTenant-OriginalArrivalTime":"22 Sep 2017 06:35:57.6015\n\t(UTC)","X-MS-Exchange-CrossTenant-FromEntityHeader":"Hosted","X-MS-Exchange-CrossTenant-Id":"a652971c-7d2e-4d9b-a6a4-d149256f461b","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"DB6PR0502MB2967","Sender":"netdev-owner@vger.kernel.org","Precedence":"bulk","List-ID":"<netdev.vger.kernel.org>","X-Mailing-List":"netdev@vger.kernel.org"}}]