aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/bonding/bonding.h
diff options
context:
space:
mode:
authorAndy Gospodarek <andy@greyhouse.net>2010-06-02 04:39:21 -0400
committerDavid S. Miller <davem@davemloft.net>2010-06-05 05:23:17 -0400
commitebd8e4977a87cb81d93c62a9bff0102a9713722f (patch)
treec91a15f48f3156a5ff6d60fd879a97b7e789fe8a /drivers/net/bonding/bonding.h
parentb78462ebc6a4ef9074aa80abebcdd470dc5f0ce0 (diff)
bonding: add all_slaves_active parameter
v2: changed parameter name from 'keep_all' to 'all_slaves_active' and skipped setting slaves to inactive rather than creating a new flag at Jay's suggestion. In an effort to suppress duplicate frames on certain bonding modes (specifically the modes that do not require additional configuration on the switch or switches connected to the host), code was added in the generic receive patch in 2.6.16. The current behavior works quite well for most users, but there are some times it would be nice to restore old functionality and allow all frames to make their way up the stack. This patch adds support for a new module option and sysfs file called 'all_slaves_active' that will restore pre-2.6.16 functionality if the user desires. The default value is '0' and retains existing behavior, but the user can set it to '1' and allow all frames up if desired. Signed-off-by: Andy Gospodarek <andy@greyhouse.net> Signed-off-by: Jay Vosburgh <fubar@us.ibm.com> Signed-off-by: Neil Horman <nhorman@tuxdriver.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/bonding/bonding.h')
-rw-r--r--drivers/net/bonding/bonding.h4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/net/bonding/bonding.h b/drivers/net/bonding/bonding.h
index da809645c483..cecdea2a629f 100644
--- a/drivers/net/bonding/bonding.h
+++ b/drivers/net/bonding/bonding.h
@@ -131,6 +131,7 @@ struct bond_params {
131 char primary[IFNAMSIZ]; 131 char primary[IFNAMSIZ];
132 int primary_reselect; 132 int primary_reselect;
133 __be32 arp_targets[BOND_MAX_ARP_TARGETS]; 133 __be32 arp_targets[BOND_MAX_ARP_TARGETS];
134 int all_slaves_active;
134}; 135};
135 136
136struct bond_parm_tbl { 137struct bond_parm_tbl {
@@ -290,7 +291,8 @@ static inline void bond_set_slave_inactive_flags(struct slave *slave)
290 struct bonding *bond = netdev_priv(slave->dev->master); 291 struct bonding *bond = netdev_priv(slave->dev->master);
291 if (!bond_is_lb(bond)) 292 if (!bond_is_lb(bond))
292 slave->state = BOND_STATE_BACKUP; 293 slave->state = BOND_STATE_BACKUP;
293 slave->dev->priv_flags |= IFF_SLAVE_INACTIVE; 294 if (!bond->params.all_slaves_active)
295 slave->dev->priv_flags |= IFF_SLAVE_INACTIVE;
294 if (slave_do_arp_validate(bond, slave)) 296 if (slave_do_arp_validate(bond, slave))
295 slave->dev->priv_flags |= IFF_SLAVE_NEEDARP; 297 slave->dev->priv_flags |= IFF_SLAVE_NEEDARP;
296} 298}