From: Jiri Pirko <jiri@resnulli.us>
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 v3 13/28] net: introduce change lower state notifier
Date: Thu, 3 Dec 2015 12:12:15 +0100 [thread overview]
Message-ID: <1449141150-8172-14-git-send-email-jiri@resnulli.us> (raw)
In-Reply-To: <1449141150-8172-1-git-send-email-jiri@resnulli.us>
From: Jiri Pirko <jiri@mellanox.com>
When lower device like bonding slave, team/bridge port, etc changes its
state, it is useful for others to notice this change. Currently this is
implemented specificly for bonding as NETDEV_BONDING_INFO notifier. This
patch aims to replace this specific usage and make this more generic to
be used for all upper-lower devices.
Introduce NETDEV_CHANGELOWERSTATE netdev notifier type and
netdev_lower_state_changed() helper.
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
---
include/linux/netdevice.h | 8 ++++++++
net/core/dev.c | 20 ++++++++++++++++++++
2 files changed, 28 insertions(+)
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 0461f86..a392d0f 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -2156,6 +2156,7 @@ struct netdev_lag_upper_info {
#define NETDEV_CHANGEINFODATA 0x0018
#define NETDEV_BONDING_INFO 0x0019
#define NETDEV_PRECHANGEUPPER 0x001A
+#define NETDEV_CHANGELOWERSTATE 0x001B
int register_netdevice_notifier(struct notifier_block *nb);
int unregister_netdevice_notifier(struct notifier_block *nb);
@@ -2177,6 +2178,11 @@ struct netdev_notifier_changeupper_info {
void *upper_info; /* upper dev info */
};
+struct netdev_notifier_changelowerstate_info {
+ struct netdev_notifier_info info; /* must be first */
+ void *lower_state_info; /* is lower dev state */
+};
+
static inline void netdev_notifier_info_init(struct netdev_notifier_info *info,
struct net_device *dev)
{
@@ -3638,6 +3644,8 @@ void netdev_upper_dev_unlink(struct net_device *dev,
void netdev_adjacent_rename_links(struct net_device *dev, char *oldname);
void *netdev_lower_dev_get_private(struct net_device *dev,
struct net_device *lower_dev);
+void netdev_lower_state_changed(struct net_device *lower_dev,
+ void *lower_state_info);
/* RSS keys are 40 or 52 bytes long */
#define NETDEV_RSS_KEY_LEN 52
diff --git a/net/core/dev.c b/net/core/dev.c
index 8ed8866..d1706e8 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -5756,6 +5756,26 @@ int dev_get_nest_level(struct net_device *dev,
}
EXPORT_SYMBOL(dev_get_nest_level);
+/**
+ * netdev_lower_change - Dispatch event about lower device state change
+ * @lower_dev: device
+ * @lower_state_info: state to dispatch
+ *
+ * Send NETDEV_CHANGELOWERSTATE to netdev notifiers with info.
+ * The caller must hold the RTNL lock.
+ */
+void netdev_lower_state_changed(struct net_device *lower_dev,
+ void *lower_state_info)
+{
+ struct netdev_notifier_changelowerstate_info changelowerstate_info;
+
+ ASSERT_RTNL();
+ changelowerstate_info.lower_state_info = lower_state_info;
+ call_netdevice_notifiers_info(NETDEV_CHANGELOWERSTATE, lower_dev,
+ &changelowerstate_info.info);
+}
+EXPORT_SYMBOL(netdev_lower_state_changed);
+
static void dev_change_rx_flags(struct net_device *dev, int flags)
{
const struct net_device_ops *ops = dev->netdev_ops;
--
1.9.3
next prev parent reply other threads:[~2015-12-03 11:12 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-03 11:12 [patch net-next v3 00/28] bonding/team offload + mlxsw implementation Jiri Pirko
2015-12-03 11:12 ` [patch net-next v3 01/28] net: Check CHANGEUPPER notifier return value Jiri Pirko
2015-12-03 11:12 ` [patch net-next v3 02/28] net: Add support for CHANGEUPPER notifier error injection Jiri Pirko
2015-12-03 11:12 ` [patch net-next v3 03/28] bonding: add 802.3ad support for 100G speeds Jiri Pirko
2015-12-03 11:12 ` [patch net-next v3 04/28] net: add netif_is_team_master helper Jiri Pirko
2015-12-03 12:46 ` Eric Dumazet
2015-12-03 13:49 ` Jiri Pirko
2015-12-03 11:12 ` [patch net-next v3 05/28] net: add netif_is_team_port helper Jiri Pirko
2015-12-03 11:12 ` [patch net-next v3 06/28] net: add netif_is_lag_master helper Jiri Pirko
2015-12-03 11:12 ` [patch net-next v3 07/28] net: add netif_is_lag_port helper Jiri Pirko
2015-12-03 11:12 ` [patch net-next v3 08/28] net: propagate upper priv via netdev_master_upper_dev_link Jiri Pirko
2015-12-03 11:12 ` [patch net-next v3 09/28] net: add possibility to pass information about upper device via notifier Jiri Pirko
2015-12-03 11:12 ` [patch net-next v3 10/28] net: add info struct for LAG changeupper Jiri Pirko
2015-12-03 11:12 ` [patch net-next v3 11/28] team: fill-up LAG changeupper info struct and pass it along Jiri Pirko
2015-12-03 11:12 ` [patch net-next v3 12/28] bonding: " Jiri Pirko
2015-12-03 11:12 ` Jiri Pirko [this message]
2015-12-03 11:12 ` [patch net-next v3 14/28] net: introduce lower state changed info structure for LAG lowers Jiri Pirko
2015-12-03 11:12 ` [patch net-next v3 15/28] team: rtnl_lock for options set Jiri Pirko
2015-12-03 11:12 ` [patch net-next v3 16/28] team: implement lower state change propagation Jiri Pirko
2015-12-03 11:12 ` [patch net-next v3 17/28] bonding: allow notifications for bond_set_slave_link_state Jiri Pirko
2015-12-03 11:12 ` [patch net-next v3 18/28] bonding: implement lower state change propagation Jiri Pirko
2015-12-03 11:12 ` [patch net-next v3 19/28] bonding: set inactive flags on release Jiri Pirko
2015-12-03 11:12 ` [patch net-next v3 20/28] mlxsw: spectrum: Add set_rx_mode ndo stub Jiri Pirko
2015-12-03 11:12 ` [patch net-next v3 21/28] mlxsw: core: Add support for packets received from LAG port Jiri Pirko
2015-12-03 11:12 ` [patch net-next v3 22/28] mlxsw: pci: Implement LAG processing for received packets Jiri Pirko
2015-12-03 11:12 ` [patch net-next v3 23/28] mlxsw: reg: Add link aggregation configuration registers definitions Jiri Pirko
2015-12-03 11:12 ` [patch net-next v3 24/28] mlxsw: reg: Add definition of LAG unicast record for SFD register Jiri Pirko
2015-12-03 11:12 ` [patch net-next v3 25/28] mlxsw: reg: Add definition of LAG unicast record for SFN register Jiri Pirko
2015-12-03 11:12 ` [patch net-next v3 26/28] mlxsw: spectrum: Implement LAG port join/leave Jiri Pirko
2015-12-03 11:12 ` [patch net-next v3 27/28] mlxsw: spectrum: Implement FDB add/remove/dump for LAG Jiri Pirko
2015-12-03 11:12 ` [patch net-next v3 28/28] mlxsw: spectrum: Implement LAG tx enabled lower state change Jiri Pirko
2015-12-03 16:51 ` [patch net-next v3 00/28] bonding/team offload + mlxsw implementation David Miller
2015-12-03 16:54 ` Jiri Pirko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1449141150-8172-14-git-send-email-jiri@resnulli.us \
--to=jiri@resnulli.us \
--cc=andrew@lunn.ch \
--cc=davem@davemloft.net \
--cc=dsa@cumulusnetworks.com \
--cc=eladr@mellanox.com \
--cc=f.fainelli@gmail.com \
--cc=gospo@cumulusnetworks.com \
--cc=idosch@mellanox.com \
--cc=j.vosburgh@gmail.com \
--cc=john.fastabend@gmail.com \
--cc=netdev@vger.kernel.org \
--cc=nikolay@cumulusnetworks.com \
--cc=ogerlitz@mellanox.com \
--cc=pjonnala@broadcom.com \
--cc=roopa@cumulusnetworks.com \
--cc=sfeldma@gmail.com \
--cc=vfalico@gmail.com \
--cc=yotamg@mellanox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox