From patchwork Wed Dec 2 20:07:41 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 551716 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id E7EDB1402DE for ; Thu, 3 Dec 2015 07:09:03 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=resnulli-us.20150623.gappssmtp.com header.i=@resnulli-us.20150623.gappssmtp.com header.b=BTkcesYM; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756016AbbLBUIX (ORCPT ); Wed, 2 Dec 2015 15:08:23 -0500 Received: from mail-wm0-f45.google.com ([74.125.82.45]:33689 "EHLO mail-wm0-f45.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755946AbbLBUIS (ORCPT ); Wed, 2 Dec 2015 15:08:18 -0500 Received: by wmec201 with SMTP id c201so270759985wme.0 for ; Wed, 02 Dec 2015 12:08:17 -0800 (PST) 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=JKUbLZLHQbp/yyLONFMz7ObULZA5fI4W23XuCBt9IEc=; b=BTkcesYMWDA3G1F/u5zs13jTPeY8FuPpCk6YzScVaKgQfKFglI7gK8B7WJ3o7I5okj h5jBVPONx+C6MOTtOAmhLj6IXKPj0/uolCQoQqbt7wiMh6I6z/RYB57QOIb1IVa9Vq7v uBvtmNywKpXYvEOriqwfAWiT5igR7l6v3fcCx1dF82/HSO6nplLMaEX5z5jh7C+wBQKR TGdZsRo/pORquIuZnzuWJhGtjpq0vJCdT03lNlNfN9Lw1Bbwq8XPy3K0fuNnST5OzaJt YKDT77x5EgcjJdLAneuwY/dWU29LR5cd7q8uAAgWKpjMWwfU0WG/CPsGfdHh6iN5KfvU 9pCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=JKUbLZLHQbp/yyLONFMz7ObULZA5fI4W23XuCBt9IEc=; b=Qkvmv9D0Tj8rsXbYgdJBMxultHpx0PpPZlTcQXOMfxpHX2Iye0jBMaPPXh2i2gjRYZ vn4LE1URml2p3otEyEqmDMW3FhooP+bSjF4+QtrWbNBySWIvPZH3f8UEglFPXYLeXyYe yguk0r2Q1nbQSQr2ITiuUSQfB7RsZA2vdbtadQRgvmz/7HdezeiMYXJv4Cg2j0V7Glkt 8g6rVv15v2Hth6jtBThdItJDg+v0PI8o/qHKLupelcMBluWDfhoesdb8fQKJ8+KNvIIg 3p92Q7qRxKjABYaf3GT3i+/lEXgy8hwqLwCOujQIu7gQIRTTKiZ+Cw3i5XjNTOaCTN8A G8pQ== X-Gm-Message-State: ALoCoQlBubs31K8x3oPBQw9kEEFpx57pdT5TIoMAr3tH29Mi8DjWB88g/KRuClMY6CDKLyMRVpHn X-Received: by 10.194.7.230 with SMTP id m6mr6811602wja.124.1449086897232; Wed, 02 Dec 2015 12:08:17 -0800 (PST) Received: from localhost (ip-94-113-120-24.net.upcbroadband.cz. [94.113.120.24]) by smtp.gmail.com with ESMTPSA id q77sm4654522wmd.22.2015.12.02.12.08.16 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Dec 2015 12:08:16 -0800 (PST) From: Jiri Pirko To: netdev@vger.kernel.org Cc: davem@davemloft.net, idosch@mellanox.com, eladr@mellanox.com, yotamg@mellanox.com, ogerlitz@mellanox.com, j.vosburgh@gmail.com, vfalico@gmail.com, gospo@cumulusnetworks.com, dsa@cumulusnetworks.com, nikolay@cumulusnetworks.com, pjonnala@broadcom.com, f.fainelli@gmail.com, sfeldma@gmail.com, john.fastabend@gmail.com, roopa@cumulusnetworks.com, andrew@lunn.ch Subject: [patch net-next v2 18/28] bonding: implement lower state change propagation Date: Wed, 2 Dec 2015 21:07:41 +0100 Message-Id: <1449086871-19911-19-git-send-email-jiri@resnulli.us> X-Mailer: git-send-email 1.9.3 In-Reply-To: <1449086871-19911-1-git-send-email-jiri@resnulli.us> References: <1449086871-19911-1-git-send-email-jiri@resnulli.us> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Jiri Pirko Let netdev notifier listeners know about link and slave state change. Signed-off-by: Jiri Pirko --- drivers/net/bonding/bond_main.c | 10 ++++++++++ include/net/bonding.h | 7 +++++++ 2 files changed, 17 insertions(+) diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 7695490..2f11450 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c @@ -1317,6 +1317,16 @@ void bond_queue_slave_event(struct slave *slave) queue_delayed_work(slave->bond->wq, &nnw->work, 0); } +void bond_lower_state_changed(struct slave *slave) +{ + struct netdev_lag_lower_state_info info; + + info.link_up = slave->link == BOND_LINK_UP || + slave->link == BOND_LINK_FAIL; + info.tx_enabled = bond_is_active_slave(slave); + netdev_lower_state_changed(slave->dev, &info); +} + /* enslave device to bond device */ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev) { diff --git a/include/net/bonding.h b/include/net/bonding.h index 1df4377..ee6c520 100644 --- a/include/net/bonding.h +++ b/include/net/bonding.h @@ -247,6 +247,7 @@ struct bonding { ((struct slave *) rtnl_dereference(dev->rx_handler_data)) void bond_queue_slave_event(struct slave *slave); +void bond_lower_state_changed(struct slave *slave); struct bond_vlan_tag { __be16 vlan_proto; @@ -328,6 +329,7 @@ static inline void bond_set_active_slave(struct slave *slave) if (slave->backup) { slave->backup = 0; bond_queue_slave_event(slave); + bond_lower_state_changed(slave); rtmsg_ifinfo(RTM_NEWLINK, slave->dev, 0, GFP_ATOMIC); } } @@ -337,6 +339,7 @@ static inline void bond_set_backup_slave(struct slave *slave) if (!slave->backup) { slave->backup = 1; bond_queue_slave_event(slave); + bond_lower_state_changed(slave); rtmsg_ifinfo(RTM_NEWLINK, slave->dev, 0, GFP_ATOMIC); } } @@ -349,6 +352,7 @@ static inline void bond_set_slave_state(struct slave *slave, slave->backup = slave_state; if (notify) { + bond_lower_state_changed(slave); rtmsg_ifinfo(RTM_NEWLINK, slave->dev, 0, GFP_ATOMIC); bond_queue_slave_event(slave); slave->should_notify = 0; @@ -380,6 +384,7 @@ static inline void bond_slave_state_notify(struct bonding *bond) bond_for_each_slave(bond, tmp, iter) { if (tmp->should_notify) { + bond_lower_state_changed(tmp); rtmsg_ifinfo(RTM_NEWLINK, tmp->dev, 0, GFP_ATOMIC); tmp->should_notify = 0; } @@ -514,6 +519,7 @@ static inline void bond_set_slave_link_state(struct slave *slave, int state, slave->link = state; if (notify) { bond_queue_slave_event(slave); + bond_lower_state_changed(slave); slave->should_notify_link = 0; } else { if (slave->should_notify_link) @@ -531,6 +537,7 @@ static inline void bond_slave_link_notify(struct bonding *bond) bond_for_each_slave(bond, tmp, iter) { if (tmp->should_notify_link) { bond_queue_slave_event(tmp); + bond_lower_state_changed(tmp); tmp->should_notify_link = 0; } }