aboutsummaryrefslogtreecommitdiffstats
path: root/include/net/bonding.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/net/bonding.h')
-rw-r--r--include/net/bonding.h18
1 files changed, 18 insertions, 0 deletions
diff --git a/include/net/bonding.h b/include/net/bonding.h
index 983a94b86b95..fda6feeb6c1f 100644
--- a/include/net/bonding.h
+++ b/include/net/bonding.h
@@ -150,6 +150,12 @@ struct bond_parm_tbl {
150 int mode; 150 int mode;
151}; 151};
152 152
153struct netdev_notify_work {
154 struct delayed_work work;
155 struct net_device *dev;
156 struct netdev_bonding_info bonding_info;
157};
158
153struct slave { 159struct slave {
154 struct net_device *dev; /* first - useful for panic debug */ 160 struct net_device *dev; /* first - useful for panic debug */
155 struct bonding *bond; /* our master */ 161 struct bonding *bond; /* our master */
@@ -243,6 +249,8 @@ struct bonding {
243#define bond_slave_get_rtnl(dev) \ 249#define bond_slave_get_rtnl(dev) \
244 ((struct slave *) rtnl_dereference(dev->rx_handler_data)) 250 ((struct slave *) rtnl_dereference(dev->rx_handler_data))
245 251
252void bond_queue_slave_event(struct slave *slave);
253
246struct bond_vlan_tag { 254struct bond_vlan_tag {
247 __be16 vlan_proto; 255 __be16 vlan_proto;
248 unsigned short vlan_id; 256 unsigned short vlan_id;
@@ -315,6 +323,7 @@ static inline void bond_set_active_slave(struct slave *slave)
315{ 323{
316 if (slave->backup) { 324 if (slave->backup) {
317 slave->backup = 0; 325 slave->backup = 0;
326 bond_queue_slave_event(slave);
318 rtmsg_ifinfo(RTM_NEWLINK, slave->dev, 0, GFP_ATOMIC); 327 rtmsg_ifinfo(RTM_NEWLINK, slave->dev, 0, GFP_ATOMIC);
319 } 328 }
320} 329}
@@ -323,6 +332,7 @@ static inline void bond_set_backup_slave(struct slave *slave)
323{ 332{
324 if (!slave->backup) { 333 if (!slave->backup) {
325 slave->backup = 1; 334 slave->backup = 1;
335 bond_queue_slave_event(slave);
326 rtmsg_ifinfo(RTM_NEWLINK, slave->dev, 0, GFP_ATOMIC); 336 rtmsg_ifinfo(RTM_NEWLINK, slave->dev, 0, GFP_ATOMIC);
327 } 337 }
328} 338}
@@ -336,6 +346,7 @@ static inline void bond_set_slave_state(struct slave *slave,
336 slave->backup = slave_state; 346 slave->backup = slave_state;
337 if (notify) { 347 if (notify) {
338 rtmsg_ifinfo(RTM_NEWLINK, slave->dev, 0, GFP_ATOMIC); 348 rtmsg_ifinfo(RTM_NEWLINK, slave->dev, 0, GFP_ATOMIC);
349 bond_queue_slave_event(slave);
339 slave->should_notify = 0; 350 slave->should_notify = 0;
340 } else { 351 } else {
341 if (slave->should_notify) 352 if (slave->should_notify)
@@ -490,6 +501,12 @@ static inline bool bond_is_slave_inactive(struct slave *slave)
490 return slave->inactive; 501 return slave->inactive;
491} 502}
492 503
504static inline void bond_set_slave_link_state(struct slave *slave, int state)
505{
506 slave->link = state;
507 bond_queue_slave_event(slave);
508}
509
493static inline __be32 bond_confirm_addr(struct net_device *dev, __be32 dst, __be32 local) 510static inline __be32 bond_confirm_addr(struct net_device *dev, __be32 dst, __be32 local)
494{ 511{
495 struct in_device *in_dev; 512 struct in_device *in_dev;
@@ -525,6 +542,7 @@ void bond_sysfs_slave_del(struct slave *slave);
525int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev); 542int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev);
526int bond_release(struct net_device *bond_dev, struct net_device *slave_dev); 543int bond_release(struct net_device *bond_dev, struct net_device *slave_dev);
527u32 bond_xmit_hash(struct bonding *bond, struct sk_buff *skb); 544u32 bond_xmit_hash(struct bonding *bond, struct sk_buff *skb);
545int bond_set_carrier(struct bonding *bond);
528void bond_select_active_slave(struct bonding *bond); 546void bond_select_active_slave(struct bonding *bond);
529void bond_change_active_slave(struct bonding *bond, struct slave *new_active); 547void bond_change_active_slave(struct bonding *bond, struct slave *new_active);
530void bond_create_debugfs(void); 548void bond_create_debugfs(void);