From patchwork Thu Nov 2 16:14:05 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 833417 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=resnulli-us.20150623.gappssmtp.com header.i=@resnulli-us.20150623.gappssmtp.com header.b="lBXzKocp"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3ySVXk6JW8z9t2r for ; Fri, 3 Nov 2017 03:14:46 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934073AbdKBQOp (ORCPT ); Thu, 2 Nov 2017 12:14:45 -0400 Received: from mail-wm0-f68.google.com ([74.125.82.68]:50835 "EHLO mail-wm0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933567AbdKBQOO (ORCPT ); Thu, 2 Nov 2017 12:14:14 -0400 Received: by mail-wm0-f68.google.com with SMTP id s66so4191wmf.5 for ; Thu, 02 Nov 2017 09:14:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=resnulli-us.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=bVh0y1EtQ9fkky1igMLPK3N9jNy91yCbCLrloocFCFY=; b=lBXzKocpe5FhJ5K1BoY/I6s+YY2wUa0CfuuIBsw2nUU3P34yt7cDU6fYFUhYruDXkA v6zr+pWx4DK48hyihlGvgZUqLMTwPm+f7OPtqgFaJ8NwETCRbwi4TafJOLzi/s+QhgNu /abFr+1hXDxjdCh8keeK+F7hVEJH3orDduXMw2zFN5/1NiJp2SLObGv0d+ulM4TjYdRR QtjyoD5U4dwuJnANj479snBGT+q6WbtaOOSVL2Bxbt7fYJ9GLs5oTOi2fbqEW3mUyVkZ TO2YRoU0OzmgKWzbdZeAx+JIW8XK6l4U4a13T2BA6BfWOHOLyTbOqEIElNVtGNt/dMJE bKDw== 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=bVh0y1EtQ9fkky1igMLPK3N9jNy91yCbCLrloocFCFY=; b=sVgR1TDRn9fPFLFl5XRZSZobI6emNmh3LGp2SyFNcofcxmgakTEnfPldF4zn9uqXs3 vk/+dQoO1H8+wjV8CHdW0inDQGaPty/z8E2MsAqKqL5gA9cYda+bVPzZzLjXkeTur7xy i2IeMmKx7eKjZD4HYI5oX9Z8C7Xh7RxSwUEEALbL3aR6BSwK4KeTXCVpRpfdl91oE7X8 5rIbZAN41fhTlwBiI2RRlN07ZF9hK05dUoQ1KSDB4fBMU1at5TcD8Bj8ztscfMzroDMD 5qMx6H0Nwusof0QNCEH0+GJePC4m6CdhY6C2vY0EUT1Yal6I2iGzRt9qFo2r3B96zWzl 5adQ== X-Gm-Message-State: AJaThX6ZN6K07EcOs+I2DtdcMmOXmgf55CFfw2Ynk9FDjCpqpJPoi4TV 0GF69uSDD9NwneivHbJOiZRnvpjJ X-Google-Smtp-Source: ABhQp+RR+LQDJXxqk5cbMQ9GGF/sTYIL3KwlnnBVX2Syo3Sl/e5KsMTZcCRIcv3CggFjx6Ie9ud2kQ== X-Received: by 10.28.211.15 with SMTP id k15mr2021551wmg.33.1509639253327; Thu, 02 Nov 2017 09:14:13 -0700 (PDT) Received: from localhost (ip-94-113-127-32.net.upcbroadband.cz. [94.113.127.32]) by smtp.gmail.com with ESMTPSA id k69sm5255061wmg.45.2017.11.02.09.14.12 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 02 Nov 2017 09:14:12 -0700 (PDT) From: Jiri Pirko To: netdev@vger.kernel.org Cc: davem@davemloft.net, idosch@mellanox.com, mlxsw@mellanox.com, dsahern@gmail.com Subject: [patch net-next 1/6] ipv4: Send a netevent whenever multipath hash policy is changed Date: Thu, 2 Nov 2017 17:14:05 +0100 Message-Id: <20171102161410.12171-2-jiri@resnulli.us> X-Mailer: git-send-email 2.9.5 In-Reply-To: <20171102161410.12171-1-jiri@resnulli.us> References: <20171102161410.12171-1-jiri@resnulli.us> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Ido Schimmel Devices performing IPv4 forwarding need to update their multipath hash policy whenever it is changed. Inform these devices by generating a netevent. Signed-off-by: Ido Schimmel Reviewed-by: Petr Machata Signed-off-by: Jiri Pirko Acked-by: David Ahern --- include/net/netevent.h | 1 + net/ipv4/sysctl_net_ipv4.c | 20 +++++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/include/net/netevent.h b/include/net/netevent.h index f440df1..e3f0e8f 100644 --- a/include/net/netevent.h +++ b/include/net/netevent.h @@ -25,6 +25,7 @@ enum netevent_notif_type { NETEVENT_NEIGH_UPDATE = 1, /* arg is struct neighbour ptr */ NETEVENT_REDIRECT, /* arg is struct netevent_redirect ptr */ NETEVENT_DELAY_PROBE_TIME_UPDATE, /* arg is struct neigh_parms ptr */ + NETEVENT_MULTIPATH_HASH_UPDATE, /* arg is struct net ptr */ }; int register_netevent_notifier(struct notifier_block *nb); diff --git a/net/ipv4/sysctl_net_ipv4.c b/net/ipv4/sysctl_net_ipv4.c index 4602af6..8dcc2b1 100644 --- a/net/ipv4/sysctl_net_ipv4.c +++ b/net/ipv4/sysctl_net_ipv4.c @@ -25,6 +25,7 @@ #include #include #include +#include static int zero; static int one = 1; @@ -385,6 +386,23 @@ static int proc_tcp_available_ulp(struct ctl_table *ctl, return ret; } +#ifdef CONFIG_IP_ROUTE_MULTIPATH +static int proc_fib_multipath_hash_policy(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, + loff_t *ppos) +{ + struct net *net = container_of(table->data, struct net, + ipv4.sysctl_fib_multipath_hash_policy); + int ret; + + ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos); + if (write && ret == 0) + call_netevent_notifiers(NETEVENT_MULTIPATH_HASH_UPDATE, net); + + return ret; +} +#endif + static struct ctl_table ipv4_table[] = { { .procname = "tcp_max_orphans", @@ -907,7 +925,7 @@ static struct ctl_table ipv4_net_table[] = { .data = &init_net.ipv4.sysctl_fib_multipath_hash_policy, .maxlen = sizeof(int), .mode = 0644, - .proc_handler = proc_dointvec_minmax, + .proc_handler = proc_fib_multipath_hash_policy, .extra1 = &zero, .extra2 = &one, }, From patchwork Thu Nov 2 16:14:06 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 833412 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=resnulli-us.20150623.gappssmtp.com header.i=@resnulli-us.20150623.gappssmtp.com header.b="zM3fSbAq"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3ySVXD6LkJz9t2r for ; Fri, 3 Nov 2017 03:14:20 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934120AbdKBQOR (ORCPT ); Thu, 2 Nov 2017 12:14:17 -0400 Received: from mail-wm0-f68.google.com ([74.125.82.68]:51472 "EHLO mail-wm0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934094AbdKBQOP (ORCPT ); Thu, 2 Nov 2017 12:14:15 -0400 Received: by mail-wm0-f68.google.com with SMTP id b9so69351wmh.0 for ; Thu, 02 Nov 2017 09:14:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=resnulli-us.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=lZiy5RK6qfZyRuYCpp8IC0PZ1cgoY3Rwlof7Hu4JhUo=; b=zM3fSbAqOXYBa5nY7smGaaXF1Iz6LXJCFisUvZT7GpxWqJ6+F9JUib4VQga5ej+x6F tQEebQJg1I6cMi5I59eChz1F4AoYbJxw0W7jzYifyaLDeMgWQmLoqhTCq2kpFmDODjK/ 2E6lQ/TBOsyd4322UvnlpQjC2l1ZzD310qlaWOlCZOquG5yyMN6KtR57plaZtvLOsg1g DDzKtaazNCPnzD4btK+RT1qQLYbuto8VhA5uA1o3oRBT71tnGQAtjtcFrlMCAGzy1S6G sW72g9Oe6Cicz+cumzZb+bfOAykqxGxflQxfwqjuVq3pfvn4CvCP2sv9HgfK1cGyAB/4 MT2g== 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=lZiy5RK6qfZyRuYCpp8IC0PZ1cgoY3Rwlof7Hu4JhUo=; b=WdDe2IskENhwy49ONIh+NU2UAiteTva9vR4gVmPAPDHEvBd9WzWxG6e+W52HBkcvaJ 92YWCq+x9PYAZyt6qy38mMh8tNwyq0vOoOtT1uVFDahsuCw+V27V6UZufyH79Lx+Nr1n CSA1mWwMbsdOh7euL7JETjUgKSFUcsnnenQIaq3DvEUhpraa8YzlOX/f+5xJNdBjz7WO njbBKZYG7k77pYn1Z5/hqd2Ey/bV4d7TYKH3az/ByvjoVqtz1graC24ho4aSof9NW0YY d2IY+cUT5kTo+wDiRKuwu5WKuDHAv+9qxcm/niKTnFuf17fyLnMHLUmbH79eHvPxCE9g tlPw== X-Gm-Message-State: AMCzsaWxgQeb5x/ENNtmdryfGr8IFVqZQKj2qjtcCwJE86rcQNtEl3s5 qJ+Qqgnfwi7sk9PXvnKD+zo+VQmZ X-Google-Smtp-Source: ABhQp+RY/GJ2AuyZDJbQGpfFJyJnSvRPXdQzSKYCnvJ6sxTwAGp60AMHpKzviCpFgoV4FORRtVv2ig== X-Received: by 10.28.47.144 with SMTP id v138mr2325262wmv.11.1509639254506; Thu, 02 Nov 2017 09:14:14 -0700 (PDT) Received: from localhost (ip-94-113-127-32.net.upcbroadband.cz. [94.113.127.32]) by smtp.gmail.com with ESMTPSA id q3sm2857232wrd.78.2017.11.02.09.14.13 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 02 Nov 2017 09:14:13 -0700 (PDT) From: Jiri Pirko To: netdev@vger.kernel.org Cc: davem@davemloft.net, idosch@mellanox.com, mlxsw@mellanox.com, dsahern@gmail.com Subject: [patch net-next 2/6] mlxsw: spectrum_router: Embed netevent notifier block in router struct Date: Thu, 2 Nov 2017 17:14:06 +0100 Message-Id: <20171102161410.12171-3-jiri@resnulli.us> X-Mailer: git-send-email 2.9.5 In-Reply-To: <20171102161410.12171-1-jiri@resnulli.us> References: <20171102161410.12171-1-jiri@resnulli.us> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Ido Schimmel We are going to need to respond to netevents notifying us about multipath hash updates by configuring the device's hash parameters. Embed the netevent notifier in the router struct so that we could retrieve it upon notifications and use it to configure the device. Signed-off-by: Ido Schimmel Reviewed-by: Petr Machata Signed-off-by: Jiri Pirko --- drivers/net/ethernet/mellanox/mlxsw/spectrum.c | 7 ------- drivers/net/ethernet/mellanox/mlxsw/spectrum.h | 2 -- drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c | 14 ++++++++++++-- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c index 3f4be95..52f38b4 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c @@ -4574,10 +4574,6 @@ static struct notifier_block mlxsw_sp_inet6addr_nb __read_mostly = { .notifier_call = mlxsw_sp_inet6addr_event, }; -static struct notifier_block mlxsw_sp_router_netevent_nb __read_mostly = { - .notifier_call = mlxsw_sp_router_netevent_event, -}; - static const struct pci_device_id mlxsw_sp_pci_id_table[] = { {PCI_VDEVICE(MELLANOX, PCI_DEVICE_ID_MELLANOX_SPECTRUM), 0}, {0, }, @@ -4596,7 +4592,6 @@ static int __init mlxsw_sp_module_init(void) register_inetaddr_notifier(&mlxsw_sp_inetaddr_nb); register_inet6addr_validator_notifier(&mlxsw_sp_inet6addr_valid_nb); register_inet6addr_notifier(&mlxsw_sp_inet6addr_nb); - register_netevent_notifier(&mlxsw_sp_router_netevent_nb); err = mlxsw_core_driver_register(&mlxsw_sp_driver); if (err) @@ -4611,7 +4606,6 @@ static int __init mlxsw_sp_module_init(void) err_pci_driver_register: mlxsw_core_driver_unregister(&mlxsw_sp_driver); err_core_driver_register: - unregister_netevent_notifier(&mlxsw_sp_router_netevent_nb); unregister_inet6addr_notifier(&mlxsw_sp_inet6addr_nb); unregister_inet6addr_validator_notifier(&mlxsw_sp_inet6addr_valid_nb); unregister_inetaddr_notifier(&mlxsw_sp_inetaddr_nb); @@ -4623,7 +4617,6 @@ static void __exit mlxsw_sp_module_exit(void) { mlxsw_pci_driver_unregister(&mlxsw_sp_pci_driver); mlxsw_core_driver_unregister(&mlxsw_sp_driver); - unregister_netevent_notifier(&mlxsw_sp_router_netevent_nb); unregister_inet6addr_notifier(&mlxsw_sp_inet6addr_nb); unregister_inet6addr_validator_notifier(&mlxsw_sp_inet6addr_valid_nb); unregister_inetaddr_notifier(&mlxsw_sp_inetaddr_nb); diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.h b/drivers/net/ethernet/mellanox/mlxsw/spectrum.h index aa0cefb..b2393bb8 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.h +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.h @@ -385,8 +385,6 @@ static inline void mlxsw_sp_port_dcb_fini(struct mlxsw_sp_port *mlxsw_sp_port) /* spectrum_router.c */ int mlxsw_sp_router_init(struct mlxsw_sp *mlxsw_sp); void mlxsw_sp_router_fini(struct mlxsw_sp *mlxsw_sp); -int mlxsw_sp_router_netevent_event(struct notifier_block *unused, - unsigned long event, void *ptr); int mlxsw_sp_netdevice_router_port_event(struct net_device *dev); int mlxsw_sp_inetaddr_event(struct notifier_block *unused, unsigned long event, void *ptr); diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c index 9fe4cdb..d49c1c9 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c @@ -96,6 +96,7 @@ struct mlxsw_sp_router { struct list_head ipip_list; bool aborted; struct notifier_block fib_nb; + struct notifier_block netevent_nb; const struct mlxsw_sp_rif_ops **rif_ops_arr; const struct mlxsw_sp_ipip_ops **ipip_ops_arr; }; @@ -2076,8 +2077,8 @@ static void mlxsw_sp_router_neigh_event_work(struct work_struct *work) kfree(neigh_work); } -int mlxsw_sp_router_netevent_event(struct notifier_block *unused, - unsigned long event, void *ptr) +static int mlxsw_sp_router_netevent_event(struct notifier_block *unused, + unsigned long event, void *ptr) { struct mlxsw_sp_neigh_event_work *neigh_work; struct mlxsw_sp_port *mlxsw_sp_port; @@ -6720,6 +6721,12 @@ int mlxsw_sp_router_init(struct mlxsw_sp *mlxsw_sp) if (err) goto err_neigh_init; + mlxsw_sp->router->netevent_nb.notifier_call = + mlxsw_sp_router_netevent_event; + err = register_netevent_notifier(&mlxsw_sp->router->netevent_nb); + if (err) + goto err_register_netevent_notifier; + mlxsw_sp->router->fib_nb.notifier_call = mlxsw_sp_router_fib_event; err = register_fib_notifier(&mlxsw_sp->router->fib_nb, mlxsw_sp_router_fib_dump_flush); @@ -6729,6 +6736,8 @@ int mlxsw_sp_router_init(struct mlxsw_sp *mlxsw_sp) return 0; err_register_fib_notifier: + unregister_netevent_notifier(&mlxsw_sp->router->netevent_nb); +err_register_netevent_notifier: mlxsw_sp_neigh_fini(mlxsw_sp); err_neigh_init: mlxsw_sp_vrs_fini(mlxsw_sp); @@ -6754,6 +6763,7 @@ int mlxsw_sp_router_init(struct mlxsw_sp *mlxsw_sp) void mlxsw_sp_router_fini(struct mlxsw_sp *mlxsw_sp) { unregister_fib_notifier(&mlxsw_sp->router->fib_nb); + unregister_netevent_notifier(&mlxsw_sp->router->netevent_nb); mlxsw_sp_neigh_fini(mlxsw_sp); mlxsw_sp_vrs_fini(mlxsw_sp); mlxsw_sp_mr_fini(mlxsw_sp); From patchwork Thu Nov 2 16:14:07 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 833413 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=resnulli-us.20150623.gappssmtp.com header.i=@resnulli-us.20150623.gappssmtp.com header.b="MRXhHkqw"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3ySVXG4263z9t2r for ; Fri, 3 Nov 2017 03:14:22 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934129AbdKBQOT (ORCPT ); Thu, 2 Nov 2017 12:14:19 -0400 Received: from mail-wr0-f196.google.com ([209.85.128.196]:56592 "EHLO mail-wr0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933418AbdKBQOR (ORCPT ); Thu, 2 Nov 2017 12:14:17 -0400 Received: by mail-wr0-f196.google.com with SMTP id r79so26269wrb.13 for ; Thu, 02 Nov 2017 09:14:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=resnulli-us.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Pp0O6XkHSTClCDWR792ROQajF7DH7g8xbeEVuQielnk=; b=MRXhHkqwQBWxL87MBVnnFRq8zyz+VnFJ9a2cPqpREoLBNkNzisRD9NyN3jE7dKRscR CvrB8LNTQ/QT4QHmzaRkppcg3eC/DWwvk4RFP/llmZy/zI5Ee9VcCBJIJSnqLCqb6h6x oyjFWQy7Ok6WV9hArz3Yae9o0lrxvKK2MypNBGprLaJnW8LTLDygTihY+ASISaAsRHC5 93xjZ35nALuwIXZP6uZt5hpQNf1WbMpHLZXAufOrvY9LmOu99iMJOZc+Pvcyj4z5wZf1 lWUeutoaCWWWKIS7lTrWMuE4vmcV8ppafO9Gj6xzkVZHMTnNFfev58MiLxU2ksKDFLby V8Dg== 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=Pp0O6XkHSTClCDWR792ROQajF7DH7g8xbeEVuQielnk=; b=llW98pB0BkVAi0lvjmfwcOqzjTrIr/DRtxCQMPEL3bxcN2KqEh4WTgOjd6e7cKdcXY J32rOpcx0+PznUVsLy9iOWW8BPc1BR2It7vTiV/Z+r1O3wVJZCkPoorMH+027zLpXF1g j2Np9ewp/A6PNQaWV5VetpfhH/JC0QZQTZlGUJmLCVn3mSbLa13HArmuRHV+0FEHq6nF ki21FwrSBFfnNh1XwvN17HAaIRsdpCiPjjwoz5d3bztw5zVvw0ZVD9dMg7QBJq5i+ZRG z3GrC1KtUHNfXLa43nXDy3Q3dNeJFzC0xv/6O7fHJSqzoQ6fg+8K3nmVAhO7Na2Q+6Yj EyIQ== X-Gm-Message-State: AMCzsaUlxI618Wlr/vpY5F1w7JejbYEMp2wcmxwromfTy2d83EJn4iqb yAwAP3TI1tfqt/zu0YKxbdewUh7k X-Google-Smtp-Source: ABhQp+RJXPBGxQM7RAR+HsjwaABTces56wMFMcdhziXkRafNmhN9A+saBHTfjIvMd82lZAJDE1JKCQ== X-Received: by 10.223.146.197 with SMTP id 63mr3191061wrn.180.1509639255809; Thu, 02 Nov 2017 09:14:15 -0700 (PDT) Received: from localhost (ip-94-113-127-32.net.upcbroadband.cz. [94.113.127.32]) by smtp.gmail.com with ESMTPSA id i12sm3906608wra.40.2017.11.02.09.14.14 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 02 Nov 2017 09:14:15 -0700 (PDT) From: Jiri Pirko To: netdev@vger.kernel.org Cc: davem@davemloft.net, idosch@mellanox.com, mlxsw@mellanox.com, dsahern@gmail.com Subject: [patch net-next 3/6] mlxsw: spectrum_router: Properly name netevent work struct Date: Thu, 2 Nov 2017 17:14:07 +0100 Message-Id: <20171102161410.12171-4-jiri@resnulli.us> X-Mailer: git-send-email 2.9.5 In-Reply-To: <20171102161410.12171-1-jiri@resnulli.us> References: <20171102161410.12171-1-jiri@resnulli.us> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Ido Schimmel The struct containing the work item queued from the netevent handler is named after the only event it is currently used for, which is neighbour updates. Use a more appropriate name for the struct, as we are going to use it for more events. Signed-off-by: Ido Schimmel Reviewed-by: Petr Machata Signed-off-by: Jiri Pirko --- .../net/ethernet/mellanox/mlxsw/spectrum_router.c | 26 +++++++++++----------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c index d49c1c9..d5094b8 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c @@ -2026,7 +2026,7 @@ mlxsw_sp_neigh_entry_counter_update(struct mlxsw_sp *mlxsw_sp, mlxsw_sp_neigh_entry_update(mlxsw_sp, neigh_entry, true); } -struct mlxsw_sp_neigh_event_work { +struct mlxsw_sp_netevent_work { struct work_struct work; struct mlxsw_sp *mlxsw_sp; struct neighbour *n; @@ -2034,11 +2034,11 @@ struct mlxsw_sp_neigh_event_work { static void mlxsw_sp_router_neigh_event_work(struct work_struct *work) { - struct mlxsw_sp_neigh_event_work *neigh_work = - container_of(work, struct mlxsw_sp_neigh_event_work, work); - struct mlxsw_sp *mlxsw_sp = neigh_work->mlxsw_sp; + struct mlxsw_sp_netevent_work *net_work = + container_of(work, struct mlxsw_sp_netevent_work, work); + struct mlxsw_sp *mlxsw_sp = net_work->mlxsw_sp; struct mlxsw_sp_neigh_entry *neigh_entry; - struct neighbour *n = neigh_work->n; + struct neighbour *n = net_work->n; unsigned char ha[ETH_ALEN]; bool entry_connected; u8 nud_state, dead; @@ -2074,13 +2074,13 @@ static void mlxsw_sp_router_neigh_event_work(struct work_struct *work) out: rtnl_unlock(); neigh_release(n); - kfree(neigh_work); + kfree(net_work); } static int mlxsw_sp_router_netevent_event(struct notifier_block *unused, unsigned long event, void *ptr) { - struct mlxsw_sp_neigh_event_work *neigh_work; + struct mlxsw_sp_netevent_work *net_work; struct mlxsw_sp_port *mlxsw_sp_port; struct mlxsw_sp *mlxsw_sp; unsigned long interval; @@ -2119,22 +2119,22 @@ static int mlxsw_sp_router_netevent_event(struct notifier_block *unused, if (!mlxsw_sp_port) return NOTIFY_DONE; - neigh_work = kzalloc(sizeof(*neigh_work), GFP_ATOMIC); - if (!neigh_work) { + net_work = kzalloc(sizeof(*net_work), GFP_ATOMIC); + if (!net_work) { mlxsw_sp_port_dev_put(mlxsw_sp_port); return NOTIFY_BAD; } - INIT_WORK(&neigh_work->work, mlxsw_sp_router_neigh_event_work); - neigh_work->mlxsw_sp = mlxsw_sp_port->mlxsw_sp; - neigh_work->n = n; + INIT_WORK(&net_work->work, mlxsw_sp_router_neigh_event_work); + net_work->mlxsw_sp = mlxsw_sp_port->mlxsw_sp; + net_work->n = n; /* Take a reference to ensure the neighbour won't be * destructed until we drop the reference in delayed * work. */ neigh_clone(n); - mlxsw_core_schedule_work(&neigh_work->work); + mlxsw_core_schedule_work(&net_work->work); mlxsw_sp_port_dev_put(mlxsw_sp_port); break; } From patchwork Thu Nov 2 16:14:08 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 833414 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=resnulli-us.20150623.gappssmtp.com header.i=@resnulli-us.20150623.gappssmtp.com header.b="xJdCEnTd"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3ySVXL2j4Bz9t34 for ; Fri, 3 Nov 2017 03:14:26 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934133AbdKBQOW (ORCPT ); Thu, 2 Nov 2017 12:14:22 -0400 Received: from mail-wr0-f196.google.com ([209.85.128.196]:44103 "EHLO mail-wr0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934094AbdKBQOT (ORCPT ); Thu, 2 Nov 2017 12:14:19 -0400 Received: by mail-wr0-f196.google.com with SMTP id z55so61538wrz.1 for ; Thu, 02 Nov 2017 09:14:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=resnulli-us.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=/fRTImFgmhI4imP4xqgKSlOmJwNQ0Ch9HltkCDhkSjU=; b=xJdCEnTd/6N+Hr66GbJqpK7yISMWcX8P6/MOa11v/d2+hoka9lfo/e7rwkm5KUX2A1 jlBkBS7eH9SRbKd5iyusRYmKqI1v0E25MBAZoYVDIe/QbanMgyHGv5dnBeFmW8k82lXP +Cwg7lRxaRjMLwEbsAVII970vfN4USLKI3S8L0oIVn6QvfkepXPHC6NgbPAH4s6Zi6WA 7UqC8408UaVffTnCOqs4oRApjdEFDdIFfaLoG3GaRafvQzz237Z3PG3O/gJaM4zTIyow uXKjO/flsUwc5DQcRYn0gK/RlVJW18b6nzXKlk0AgTcG/Makwu2NJnMJsA813IpDwH5Y kGgA== 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=/fRTImFgmhI4imP4xqgKSlOmJwNQ0Ch9HltkCDhkSjU=; b=gnB8BaiY37JB7BKJKTWS4Yu6fZhVswqR3vcqsjOGYoSn0tzMH/EodDfMnvClQF4e1o t/pdPZlf0SxyAqbb8pbqcyhM+oaQhgma5FviqGq03gIATl+lm8i+XLOX1jrCcby5TRtk BRFqGDsXvoZyTnptSisD2I+qiDYpEJfw9FeSsiRv/4rzbIM60SNuNmqh3QWZjpg0RUAW 4Mwwej94XSuryNHqP4bAXdd6XyxE8h+9gqKhdNZ7AZYrtgTrTQWNrXyz60mf7SLShn6d csxEJ3XOZOT1NE48K6I/Z7AWt/NnOLdeq90O5K1j6tSbT84IY5MUVxRCPRG23i5gAITo PVJA== X-Gm-Message-State: AMCzsaVmHJcrtXwzho4Nvbtyqi/QYIHjZ71IGMHLWwsCHrQOOIm8mdpZ igdLaJzJJ24P0YP3nEnv66JsO2r4 X-Google-Smtp-Source: ABhQp+RtggwE+3sPg7jYCvvotaPN6aPfm5+Z26qCmPJ6zBkl1uocLitv4/Jd8uHUUFhTC0LewwOrBA== X-Received: by 10.223.135.143 with SMTP id b15mr3134059wrb.278.1509639257722; Thu, 02 Nov 2017 09:14:17 -0700 (PDT) Received: from localhost (ip-94-113-127-32.net.upcbroadband.cz. [94.113.127.32]) by smtp.gmail.com with ESMTPSA id e71sm33744wma.13.2017.11.02.09.14.17 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 02 Nov 2017 09:14:17 -0700 (PDT) From: Jiri Pirko To: netdev@vger.kernel.org Cc: davem@davemloft.net, idosch@mellanox.com, mlxsw@mellanox.com, dsahern@gmail.com Subject: [patch net-next 4/6] mlxsw: reg: Add Router ECMP Configuration Register Version 2 Date: Thu, 2 Nov 2017 17:14:08 +0100 Message-Id: <20171102161410.12171-5-jiri@resnulli.us> X-Mailer: git-send-email 2.9.5 In-Reply-To: <20171102161410.12171-1-jiri@resnulli.us> References: <20171102161410.12171-1-jiri@resnulli.us> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Ido Schimmel The RECRv2 register is used for setting up the router's ECMP hash configuration. Signed-off-by: Ido Schimmel Reviewed-by: Petr Machata Signed-off-by: Jiri Pirko --- drivers/net/ethernet/mellanox/mlxsw/reg.h | 132 ++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) diff --git a/drivers/net/ethernet/mellanox/mlxsw/reg.h b/drivers/net/ethernet/mellanox/mlxsw/reg.h index db6cd26..5066553 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/reg.h +++ b/drivers/net/ethernet/mellanox/mlxsw/reg.h @@ -5844,6 +5844,137 @@ static inline void mlxsw_reg_rigr2_erif_entry_pack(char *payload, int index, mlxsw_reg_rigr2_erif_entry_erif_set(payload, index, erif); } +/* RECR-V2 - Router ECMP Configuration Version 2 Register + * ------------------------------------------------------ + */ +#define MLXSW_REG_RECR2_ID 0x8025 +#define MLXSW_REG_RECR2_LEN 0x38 + +MLXSW_REG_DEFINE(recr2, MLXSW_REG_RECR2_ID, MLXSW_REG_RECR2_LEN); + +/* reg_recr2_pp + * Per-port configuration + * Access: Index + */ +MLXSW_ITEM32(reg, recr2, pp, 0x00, 24, 1); + +/* reg_recr2_sh + * Symmetric hash + * Access: RW + */ +MLXSW_ITEM32(reg, recr2, sh, 0x00, 8, 1); + +/* reg_recr2_seed + * Seed + * Access: RW + */ +MLXSW_ITEM32(reg, recr2, seed, 0x08, 0, 32); + +enum { + /* Enable IPv4 fields if packet is not TCP and not UDP */ + MLXSW_REG_RECR2_IPV4_EN_NOT_TCP_NOT_UDP = 3, + /* Enable IPv4 fields if packet is TCP or UDP */ + MLXSW_REG_RECR2_IPV4_EN_TCP_UDP = 4, + /* Enable IPv6 fields if packet is not TCP and not UDP */ + MLXSW_REG_RECR2_IPV6_EN_NOT_TCP_NOT_UDP = 5, + /* Enable IPv6 fields if packet is TCP or UDP */ + MLXSW_REG_RECR2_IPV6_EN_TCP_UDP = 6, + /* Enable TCP/UDP header fields if packet is IPv4 */ + MLXSW_REG_RECR2_TCP_UDP_EN_IPV4 = 7, + /* Enable TCP/UDP header fields if packet is IPv6 */ + MLXSW_REG_RECR2_TCP_UDP_EN_IPV6 = 8, +}; + +/* reg_recr2_outer_header_enables + * Bit mask where each bit enables a specific layer to be included in + * the hash calculation. + * Access: RW + */ +MLXSW_ITEM_BIT_ARRAY(reg, recr2, outer_header_enables, 0x10, 0x04, 1); + +enum { + /* IPv4 Source IP */ + MLXSW_REG_RECR2_IPV4_SIP0 = 9, + MLXSW_REG_RECR2_IPV4_SIP3 = 12, + /* IPv4 Destination IP */ + MLXSW_REG_RECR2_IPV4_DIP0 = 13, + MLXSW_REG_RECR2_IPV4_DIP3 = 16, + /* IP Protocol */ + MLXSW_REG_RECR2_IPV4_PROTOCOL = 17, + /* IPv6 Source IP */ + MLXSW_REG_RECR2_IPV6_SIP0_7 = 21, + MLXSW_REG_RECR2_IPV6_SIP8 = 29, + MLXSW_REG_RECR2_IPV6_SIP15 = 36, + /* IPv6 Destination IP */ + MLXSW_REG_RECR2_IPV6_DIP0_7 = 37, + MLXSW_REG_RECR2_IPV6_DIP8 = 45, + MLXSW_REG_RECR2_IPV6_DIP15 = 52, + /* IPv6 Next Header */ + MLXSW_REG_RECR2_IPV6_NEXT_HEADER = 53, + /* IPv6 Flow Label */ + MLXSW_REG_RECR2_IPV6_FLOW_LABEL = 57, + /* TCP/UDP Source Port */ + MLXSW_REG_RECR2_TCP_UDP_SPORT = 74, + /* TCP/UDP Destination Port */ + MLXSW_REG_RECR2_TCP_UDP_DPORT = 75, +}; + +/* reg_recr2_outer_header_fields_enable + * Packet fields to enable for ECMP hash subject to outer_header_enable. + * Access: RW + */ +MLXSW_ITEM_BIT_ARRAY(reg, recr2, outer_header_fields_enable, 0x14, 0x14, 1); + +static inline void mlxsw_reg_recr2_ipv4_sip_enable(char *payload) +{ + int i; + + for (i = MLXSW_REG_RECR2_IPV4_SIP0; i <= MLXSW_REG_RECR2_IPV4_SIP3; i++) + mlxsw_reg_recr2_outer_header_fields_enable_set(payload, i, + true); +} + +static inline void mlxsw_reg_recr2_ipv4_dip_enable(char *payload) +{ + int i; + + for (i = MLXSW_REG_RECR2_IPV4_DIP0; i <= MLXSW_REG_RECR2_IPV4_DIP3; i++) + mlxsw_reg_recr2_outer_header_fields_enable_set(payload, i, + true); +} + +static inline void mlxsw_reg_recr2_ipv6_sip_enable(char *payload) +{ + int i = MLXSW_REG_RECR2_IPV6_SIP0_7; + + mlxsw_reg_recr2_outer_header_fields_enable_set(payload, i, true); + + i = MLXSW_REG_RECR2_IPV6_SIP8; + for (; i <= MLXSW_REG_RECR2_IPV6_SIP15; i++) + mlxsw_reg_recr2_outer_header_fields_enable_set(payload, i, + true); +} + +static inline void mlxsw_reg_recr2_ipv6_dip_enable(char *payload) +{ + int i = MLXSW_REG_RECR2_IPV6_DIP0_7; + + mlxsw_reg_recr2_outer_header_fields_enable_set(payload, i, true); + + i = MLXSW_REG_RECR2_IPV6_DIP8; + for (; i <= MLXSW_REG_RECR2_IPV6_DIP15; i++) + mlxsw_reg_recr2_outer_header_fields_enable_set(payload, i, + true); +} + +static inline void mlxsw_reg_recr2_pack(char *payload, u32 seed) +{ + MLXSW_REG_ZERO(recr2, payload); + mlxsw_reg_recr2_pp_set(payload, false); + mlxsw_reg_recr2_sh_set(payload, true); + mlxsw_reg_recr2_seed_set(payload, seed); +} + /* RMFT-V2 - Router Multicast Forwarding Table Version 2 Register * -------------------------------------------------------------- * The RMFT_V2 register is used to configure and query the multicast table. @@ -7313,6 +7444,7 @@ static const struct mlxsw_reg_info *mlxsw_reg_infos[] = { MLXSW_REG(raleu), MLXSW_REG(rauhtd), MLXSW_REG(rigr2), + MLXSW_REG(recr2), MLXSW_REG(rmft2), MLXSW_REG(mfcr), MLXSW_REG(mfsc), From patchwork Thu Nov 2 16:14:09 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 833416 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=resnulli-us.20150623.gappssmtp.com header.i=@resnulli-us.20150623.gappssmtp.com header.b="y+dcl/OM"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3ySVXR5L9lz9t34 for ; Fri, 3 Nov 2017 03:14:31 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934141AbdKBQOa (ORCPT ); Thu, 2 Nov 2017 12:14:30 -0400 Received: from mail-wr0-f193.google.com ([209.85.128.193]:44107 "EHLO mail-wr0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934125AbdKBQOU (ORCPT ); Thu, 2 Nov 2017 12:14:20 -0400 Received: by mail-wr0-f193.google.com with SMTP id z55so61600wrz.1 for ; Thu, 02 Nov 2017 09:14:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=resnulli-us.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=i1fy3p7G9U6DhdSBiq/IUZGyp8zc0DygJebo2Ljaf80=; b=y+dcl/OMhMZ/s1aPZs6IwP8rumVmm3TiLLvg+cJ0RnkiPRJh0dTBs1djdL8Ah9ORPh m2jsweDo/ANb3mZmx3zjftb8lz28tvDEgvKoVuBlqb3KYG1HQtDNWlQ0Dlzq/uNp0Iyi NZRi0o+rSbqPv7Jh6SCCD/kMNgpDzdkXdcKICQY/aKmInPLAG/D/A2a4lYckiLXt0E0l YgvzqnQ+2gKsjh9p6qU4HdsiPJCIUNLmZyaNd0uG71OQEfDz4F2U4kig9ju87nSByVCM dMLmkNOoTmY+9dTaLUYtYsfioCLEysLcOissLHtM4WQa9XDOe7D/exbUchezFw7VCXOH 2HwA== 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=i1fy3p7G9U6DhdSBiq/IUZGyp8zc0DygJebo2Ljaf80=; b=HGSEpIVNPg7X5wo1ihmQFtr3hzynfb2ysxkeWNcODDKow/Ypw85lop2r3TqoiWP0uO /TmQdVu98/8B0VO2Ph2eNd7j+ndwFich3EaGAipAs2kCrRzWNyqBFGunqDNmQyJ5/0Ou JOwe81H9g+A3NJ+aLNaCnvG8UxzwzO5rZsEOmBv5eO50YUBUSH/P1EjAXkCH5Uhc5Z5J p9ojmMcIRYigGtiLwnGEhNGbAjjSFUdJDV6P+0qzCHH+L5V7Y/yjctfbdq8CbZBewPso ZpMgf/r6UqXPzLJgM9mogq5vn5vqs1N38IbkPtC6A/2B45EeEuScFBYoeTBruQgs98XF RFsA== X-Gm-Message-State: AMCzsaVr+otKoUfFOgPtD+a37cRnoq7k/esnuZUCXudAqFuX7KTRUCaP whnjcsfjCrueGn0nnOFEkGXKHF3F X-Google-Smtp-Source: ABhQp+TvhXchIuSIHx82+joZ+XPY3234wAcUhw9Esq0cisQneF9de4S+1KLtjDgJ7GvObln7QmWSOg== X-Received: by 10.223.182.12 with SMTP id f12mr3220855wre.136.1509639258772; Thu, 02 Nov 2017 09:14:18 -0700 (PDT) Received: from localhost (ip-94-113-127-32.net.upcbroadband.cz. [94.113.127.32]) by smtp.gmail.com with ESMTPSA id 185sm17833wmq.22.2017.11.02.09.14.18 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 02 Nov 2017 09:14:18 -0700 (PDT) From: Jiri Pirko To: netdev@vger.kernel.org Cc: davem@davemloft.net, idosch@mellanox.com, mlxsw@mellanox.com, dsahern@gmail.com Subject: [patch net-next 5/6] mlxsw: spectrum_router: Align multipath hash parameters with kernel's Date: Thu, 2 Nov 2017 17:14:09 +0100 Message-Id: <20171102161410.12171-6-jiri@resnulli.us> X-Mailer: git-send-email 2.9.5 In-Reply-To: <20171102161410.12171-1-jiri@resnulli.us> References: <20171102161410.12171-1-jiri@resnulli.us> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Ido Schimmel Up until now we used the hardware's defaults for multipath hash computation. This patch aligns the hardware's multipath parameters with the kernel's. For IPv4 packets, the parameters are determined according to the 'fib_multipath_hash_policy' sysctl during module initialization. In case L3-mode is requested, only the source and destination IP addresses are used. There is no special handling of ICMP error packets. In case L4-mode is requested, a 5-tuple is used: source and destination IP addresses, source and destination ports and IP protocol. Note that the layer 4 fields are not considered for fragmented packets. For IPv6 packets, the source and destination IP addresses are used, as well as the flow label and the next header fields. Signed-off-by: Ido Schimmel Reviewed-by: Petr Machata Signed-off-by: Jiri Pirko --- .../net/ethernet/mellanox/mlxsw/spectrum_router.c | 64 ++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c index d5094b8..fe99d24 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c @@ -47,6 +47,7 @@ #include #include #include +#include #include #include #include @@ -6644,6 +6645,64 @@ static void mlxsw_sp_router_fib_dump_flush(struct notifier_block *nb) mlxsw_sp_router_fib_flush(router->mlxsw_sp); } +#ifdef CONFIG_IP_ROUTE_MULTIPATH +static void mlxsw_sp_mp_hash_header_set(char *recr2_pl, int header) +{ + mlxsw_reg_recr2_outer_header_enables_set(recr2_pl, header, true); +} + +static void mlxsw_sp_mp_hash_field_set(char *recr2_pl, int field) +{ + mlxsw_reg_recr2_outer_header_fields_enable_set(recr2_pl, field, true); +} + +static void mlxsw_sp_mp4_hash_init(char *recr2_pl) +{ + bool only_l3 = !init_net.ipv4.sysctl_fib_multipath_hash_policy; + + mlxsw_sp_mp_hash_header_set(recr2_pl, + MLXSW_REG_RECR2_IPV4_EN_NOT_TCP_NOT_UDP); + mlxsw_sp_mp_hash_header_set(recr2_pl, MLXSW_REG_RECR2_IPV4_EN_TCP_UDP); + mlxsw_reg_recr2_ipv4_sip_enable(recr2_pl); + mlxsw_reg_recr2_ipv4_dip_enable(recr2_pl); + if (only_l3) + return; + mlxsw_sp_mp_hash_header_set(recr2_pl, MLXSW_REG_RECR2_TCP_UDP_EN_IPV4); + mlxsw_sp_mp_hash_field_set(recr2_pl, MLXSW_REG_RECR2_IPV4_PROTOCOL); + mlxsw_sp_mp_hash_field_set(recr2_pl, MLXSW_REG_RECR2_TCP_UDP_SPORT); + mlxsw_sp_mp_hash_field_set(recr2_pl, MLXSW_REG_RECR2_TCP_UDP_DPORT); +} + +static void mlxsw_sp_mp6_hash_init(char *recr2_pl) +{ + mlxsw_sp_mp_hash_header_set(recr2_pl, + MLXSW_REG_RECR2_IPV6_EN_NOT_TCP_NOT_UDP); + mlxsw_sp_mp_hash_header_set(recr2_pl, MLXSW_REG_RECR2_IPV6_EN_TCP_UDP); + mlxsw_reg_recr2_ipv6_sip_enable(recr2_pl); + mlxsw_reg_recr2_ipv6_dip_enable(recr2_pl); + mlxsw_sp_mp_hash_field_set(recr2_pl, MLXSW_REG_RECR2_IPV6_FLOW_LABEL); + mlxsw_sp_mp_hash_field_set(recr2_pl, MLXSW_REG_RECR2_IPV6_NEXT_HEADER); +} + +static int mlxsw_sp_mp_hash_init(struct mlxsw_sp *mlxsw_sp) +{ + char recr2_pl[MLXSW_REG_RECR2_LEN]; + u32 seed; + + get_random_bytes(&seed, sizeof(seed)); + mlxsw_reg_recr2_pack(recr2_pl, seed); + mlxsw_sp_mp4_hash_init(recr2_pl); + mlxsw_sp_mp6_hash_init(recr2_pl); + + return mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(recr2), recr2_pl); +} +#else +static int mlxsw_sp_mp_hash_init(struct mlxsw_sp *mlxsw_sp) +{ + return 0; +} +#endif + static int __mlxsw_sp_router_init(struct mlxsw_sp *mlxsw_sp) { char rgcr_pl[MLXSW_REG_RGCR_LEN]; @@ -6727,6 +6786,10 @@ int mlxsw_sp_router_init(struct mlxsw_sp *mlxsw_sp) if (err) goto err_register_netevent_notifier; + err = mlxsw_sp_mp_hash_init(mlxsw_sp); + if (err) + goto err_mp_hash_init; + mlxsw_sp->router->fib_nb.notifier_call = mlxsw_sp_router_fib_event; err = register_fib_notifier(&mlxsw_sp->router->fib_nb, mlxsw_sp_router_fib_dump_flush); @@ -6736,6 +6799,7 @@ int mlxsw_sp_router_init(struct mlxsw_sp *mlxsw_sp) return 0; err_register_fib_notifier: +err_mp_hash_init: unregister_netevent_notifier(&mlxsw_sp->router->netevent_nb); err_register_netevent_notifier: mlxsw_sp_neigh_fini(mlxsw_sp); From patchwork Thu Nov 2 16:14:10 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 833415 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=resnulli-us.20150623.gappssmtp.com header.i=@resnulli-us.20150623.gappssmtp.com header.b="tUKZ9nvG"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3ySVXQ6Sp1z9t2r for ; Fri, 3 Nov 2017 03:14:30 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934135AbdKBQO3 (ORCPT ); Thu, 2 Nov 2017 12:14:29 -0400 Received: from mail-wr0-f194.google.com ([209.85.128.194]:46061 "EHLO mail-wr0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933418AbdKBQOU (ORCPT ); Thu, 2 Nov 2017 12:14:20 -0400 Received: by mail-wr0-f194.google.com with SMTP id y9so55787wrb.2 for ; Thu, 02 Nov 2017 09:14:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=resnulli-us.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=tQ+yxe3bGz/QaJKnFNfhhtDC+I8ueTIsgxTTURP2Y9k=; b=tUKZ9nvGGhNbFbj1KU7RE3Pi+z/L03+THm5RO1WzVtggQzEshLQDFGneqQC5MW2PRX v320cc/H5NfQs7Su9/KJXxH4tY9vyulvj6Jo4olwT83qZPq0EE5RLmAf2+AE6AogyQmx yPVuIBOgUw7gW2mY9kkPnTGyqcD2q4HvfioK+oB/LFMB39tjjiBNhWKkRX/p2sZ4o4T4 JcnotQAtrk6tdgje6+GTjv10m9YdshL/g92pIaaM2cUsYra30wMcpOT9JkROJLcykUT1 yOxnZJJiR+I9cxaBIDBHCet6dGpNhj0+rmGYAIqNeFyNLq/8Y6sbOQksQsOWK9I+NS2S wSrQ== 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=tQ+yxe3bGz/QaJKnFNfhhtDC+I8ueTIsgxTTURP2Y9k=; b=fot8FAGkuBtcUdmNKVYIkrrmEfVDC5m3BKpa/dBIaW8GrMXDDW7LBOpvEP/AZiKCX1 T5MusnUb1JuKNZbszXN6mIjp0U8WKdNAB97yQ8OtgYLgKwverDyJ6yOyqYliORWgyU9B vVL24hP3CVAvCijITf9lfmpJR1XtR9nDixL/FEPNfcCf+nlThUC6/0gDfyNbCG151OF6 b6QAKeJbrAsEhFTZqO7l/a+JRUpMXla68I7IQv4wSUCAtVDULqKgZFEeUDClZEuG/EZM EUte5ud8Uguo8yUHT1fl3taEbN/uurv4lEMmvPctAygQ6DgVcCPCTfXSLEgKxoM5Q6M8 BQ5w== X-Gm-Message-State: AMCzsaVwdUNOTULcL3nnXsk+AAawvMBD2F977ZBzs6zVJwkpRaCUxHzH 5B22OifOlCsRjy7K1vHFUQebGOQr X-Google-Smtp-Source: ABhQp+QkschJQ9Oyjv6z70gHL81gWB7jxYVQmov1N0o1T9Kmo1UGcy+4FuSTbOXGafr18iTHf9ofiw== X-Received: by 10.223.198.134 with SMTP id j6mr3191397wrg.213.1509639259569; Thu, 02 Nov 2017 09:14:19 -0700 (PDT) Received: from localhost (ip-94-113-127-32.net.upcbroadband.cz. [94.113.127.32]) by smtp.gmail.com with ESMTPSA id z192sm3281wmc.32.2017.11.02.09.14.19 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 02 Nov 2017 09:14:19 -0700 (PDT) From: Jiri Pirko To: netdev@vger.kernel.org Cc: davem@davemloft.net, idosch@mellanox.com, mlxsw@mellanox.com, dsahern@gmail.com Subject: [patch net-next 6/6] mlxsw: spectrum_router: Update multipath hash parameters upon netevents Date: Thu, 2 Nov 2017 17:14:10 +0100 Message-Id: <20171102161410.12171-7-jiri@resnulli.us> X-Mailer: git-send-email 2.9.5 In-Reply-To: <20171102161410.12171-1-jiri@resnulli.us> References: <20171102161410.12171-1-jiri@resnulli.us> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Ido Schimmel Make sure the device and the kernel are performing the multipath hash according to the same parameters by updating the device whenever the relevant netevent is generated. Signed-off-by: Ido Schimmel Reviewed-by: Petr Machata Signed-off-by: Jiri Pirko --- .../net/ethernet/mellanox/mlxsw/spectrum_router.c | 31 +++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c index fe99d24..d657f01 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c @@ -2078,15 +2078,29 @@ static void mlxsw_sp_router_neigh_event_work(struct work_struct *work) kfree(net_work); } -static int mlxsw_sp_router_netevent_event(struct notifier_block *unused, +static int mlxsw_sp_mp_hash_init(struct mlxsw_sp *mlxsw_sp); + +static void mlxsw_sp_router_mp_hash_event_work(struct work_struct *work) +{ + struct mlxsw_sp_netevent_work *net_work = + container_of(work, struct mlxsw_sp_netevent_work, work); + struct mlxsw_sp *mlxsw_sp = net_work->mlxsw_sp; + + mlxsw_sp_mp_hash_init(mlxsw_sp); + kfree(net_work); +} + +static int mlxsw_sp_router_netevent_event(struct notifier_block *nb, unsigned long event, void *ptr) { struct mlxsw_sp_netevent_work *net_work; struct mlxsw_sp_port *mlxsw_sp_port; + struct mlxsw_sp_router *router; struct mlxsw_sp *mlxsw_sp; unsigned long interval; struct neigh_parms *p; struct neighbour *n; + struct net *net; switch (event) { case NETEVENT_DELAY_PROBE_TIME_UPDATE: @@ -2138,6 +2152,21 @@ static int mlxsw_sp_router_netevent_event(struct notifier_block *unused, mlxsw_core_schedule_work(&net_work->work); mlxsw_sp_port_dev_put(mlxsw_sp_port); break; + case NETEVENT_MULTIPATH_HASH_UPDATE: + net = ptr; + + if (!net_eq(net, &init_net)) + return NOTIFY_DONE; + + net_work = kzalloc(sizeof(*net_work), GFP_ATOMIC); + if (!net_work) + return NOTIFY_BAD; + + router = container_of(nb, struct mlxsw_sp_router, netevent_nb); + INIT_WORK(&net_work->work, mlxsw_sp_router_mp_hash_event_work); + net_work->mlxsw_sp = router->mlxsw_sp; + mlxsw_core_schedule_work(&net_work->work); + break; } return NOTIFY_DONE;