* [PATCH 3/3] [bonding 2.6] Use the per-bond values of all remaining parameters
@ 2004-01-05 15:30 Amir Noam
0 siblings, 0 replies; only message in thread
From: Amir Noam @ 2004-01-05 15:30 UTC (permalink / raw)
To: Jeff Garzik, Jay Vosburgh; +Cc: bonding-devel, netdev
Change usage of the all remaining global parameters to the per-bond
values.
diff -Nuarp a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
--- a/drivers/net/bonding/bond_main.c Mon Jan 5 17:17:39 2004
+++ b/drivers/net/bonding/bond_main.c Mon Jan 5 17:17:40 2004
@@ -458,6 +458,9 @@
* - Fixed: Releasing the original active slave causes mac address duplication.
* - Add support for slaves that use ethtool_ops.
* Set version to 2.5.3.
+ *
+ * 2004/01/05 - Amir Noam <amir.noam at intel dot com>
+ * - Save bonding parameters per bond instead of using the global values.
*/
//#define BONDING_DEBUG 1
@@ -699,14 +702,14 @@ verify:
* It'd be nice if there was a good way to tell if a driver supports
* netif_carrier, but there really isn't.
*/
-static int bond_check_dev_link(struct net_device *slave_dev, int reporting)
+static int bond_check_dev_link(struct bonding *bond, struct net_device *slave_dev, int reporting)
{
static int (* ioctl)(struct net_device *, struct ifreq *, int);
struct ifreq ifr;
struct mii_ioctl_data *mii;
struct ethtool_value etool;
- if (use_carrier) {
+ if (bond->params.use_carrier) {
return netif_carrier_ok(slave_dev) ? BMSR_LSTATUS : 0;
}
@@ -994,7 +997,7 @@ static struct slave *bond_find_best_slav
{
struct slave *new_active, *old_active;
struct slave *bestslave = NULL;
- int mintime;
+ int mintime = bond->params.updelay;
int i;
new_active = old_active = bond->curr_active_slave;
@@ -1007,15 +1010,13 @@ static struct slave *bond_find_best_slav
}
}
- mintime = updelay;
-
/* first try the primary link; if arping, a link must tx/rx traffic
* before it can be considered the curr_active_slave - also, we would skip
* slaves between the curr_active_slave and primary_slave that may be up
* and able to arp
*/
if ((bond->primary_slave) &&
- (!arp_interval) &&
+ (!bond->params.arp_interval) &&
(IS_UP(bond->primary_slave->dev))) {
new_active = bond->primary_slave;
}
@@ -1070,7 +1071,7 @@ static void bond_change_active_slave(str
": %s: making interface %s the new "
"active one %d ms earlier.\n",
bond->dev->name, new_active->dev->name,
- (updelay - new_active->delay) * miimon);
+ (bond->params.updelay - new_active->delay) * bond->params.miimon);
}
new_active->delay = 0;
@@ -1374,10 +1375,10 @@ static int bond_enslave(struct net_devic
new_slave->delay = 0;
new_slave->link_failure_count = 0;
- if (miimon && !use_carrier) {
- link_reporting = bond_check_dev_link(slave_dev, 1);
+ if (bond->params.miimon && !bond->params.use_carrier) {
+ link_reporting = bond_check_dev_link(bond, slave_dev, 1);
- if ((link_reporting == -1) && !arp_interval) {
+ if ((link_reporting == -1) && !bond->params.arp_interval) {
/*
* miimon is set but a bonded network driver
* does not support ETHTOOL/MII and
@@ -1407,13 +1408,13 @@ static int bond_enslave(struct net_devic
}
/* check for initial state */
- if (!miimon ||
- (bond_check_dev_link(slave_dev, 0) == BMSR_LSTATUS)) {
- if (updelay) {
+ if (!bond->params.miimon ||
+ (bond_check_dev_link(bond, slave_dev, 0) == BMSR_LSTATUS)) {
+ if (bond->params.updelay) {
dprintk("Initial state of slave_dev is "
"BOND_LINK_BACK\n");
new_slave->link = BOND_LINK_BACK;
- new_slave->delay = updelay;
+ new_slave->delay = bond->params.updelay;
} else {
dprintk("Initial state of slave_dev is "
"BOND_LINK_UP\n");
@@ -1441,9 +1442,9 @@ static int bond_enslave(struct net_devic
}
}
- if (USES_PRIMARY(bond->params.mode) && primary) {
+ if (USES_PRIMARY(bond->params.mode) && bond->params.primary[0]) {
/* if there is a primary slave, remember it */
- if (strcmp(primary, new_slave->dev->name) == 0) {
+ if (strcmp(bond->params.primary, new_slave->dev->name) == 0) {
bond->primary_slave = new_slave;
}
}
@@ -1482,7 +1483,7 @@ static int bond_enslave(struct net_devic
* can be called only after the mac address of the bond is set
*/
bond_3ad_initialize(bond, 1000/AD_TIMER_INTERVAL,
- lacp_fast);
+ bond->params.lacp_fast);
} else {
SLAVE_AD_INFO(new_slave).id =
SLAVE_AD_INFO(new_slave->prev).id + 1;
@@ -1958,7 +1959,7 @@ static int bond_info_query(struct net_de
struct bonding *bond = bond_dev->priv;
info->bond_mode = bond->params.mode;
- info->miimon = miimon;
+ info->miimon = bond->params.miimon;
read_lock_bh(&bond->lock);
info->num_slaves = bond->slave_cnt;
@@ -2008,11 +2009,13 @@ static void bond_mii_monitor(struct net_
struct bonding *bond = bond_dev->priv;
struct slave *slave, *oldcurrent;
int do_failover = 0;
- int delta_in_ticks = (miimon * HZ) / 1000;
+ int delta_in_ticks;
int i;
read_lock(&bond->lock);
+ delta_in_ticks = (bond->params.miimon * HZ) / 1000;
+
if (bond->kill_timers) {
goto out;
}
@@ -2037,7 +2040,7 @@ static void bond_mii_monitor(struct net_
u16 old_speed = slave->speed;
u8 old_duplex = slave->duplex;
- link_state = bond_check_dev_link(slave_dev, 0);
+ link_state = bond_check_dev_link(bond, slave_dev, 0);
switch (slave->link) {
case BOND_LINK_UP: /* the link was up */
@@ -2046,13 +2049,13 @@ static void bond_mii_monitor(struct net_
break;
} else { /* link going down */
slave->link = BOND_LINK_FAIL;
- slave->delay = downdelay;
+ slave->delay = bond->params.downdelay;
if (slave->link_failure_count < UINT_MAX) {
slave->link_failure_count++;
}
- if (downdelay) {
+ if (bond->params.downdelay) {
printk(KERN_INFO DRV_NAME
": %s: link status down for %s "
"interface %s, disabling it in "
@@ -2065,7 +2068,7 @@ static void bond_mii_monitor(struct net_
: "")
: "idle ",
slave_dev->name,
- downdelay * miimon);
+ bond->params.downdelay * bond->params.miimon);
}
}
/* no break ! fall through the BOND_LINK_FAIL test to
@@ -2117,7 +2120,7 @@ static void bond_mii_monitor(struct net_
": %s: link status up again after %d "
"ms for interface %s.\n",
bond_dev->name,
- (downdelay - slave->delay) * miimon,
+ (bond->params.downdelay - slave->delay) * bond->params.miimon,
slave_dev->name);
}
break;
@@ -2127,9 +2130,9 @@ static void bond_mii_monitor(struct net_
break;
} else { /* link going up */
slave->link = BOND_LINK_BACK;
- slave->delay = updelay;
+ slave->delay = bond->params.updelay;
- if (updelay) {
+ if (bond->params.updelay) {
/* if updelay == 0, no need to
advertise about a 0 ms delay */
printk(KERN_INFO DRV_NAME
@@ -2138,7 +2141,7 @@ static void bond_mii_monitor(struct net_
"in %d ms.\n",
bond_dev->name,
slave_dev->name,
- updelay * miimon);
+ bond->params.updelay * bond->params.miimon);
}
}
/* no break ! fall through the BOND_LINK_BACK state in
@@ -2153,7 +2156,7 @@ static void bond_mii_monitor(struct net_
": %s: link status down again after %d "
"ms for interface %s.\n",
bond_dev->name,
- (updelay - slave->delay) * miimon,
+ (bond->params.updelay - slave->delay) * bond->params.miimon,
slave_dev->name);
} else {
/* link stays up */
@@ -2235,17 +2238,20 @@ static void bond_mii_monitor(struct net_
}
re_arm:
- mod_timer(&bond->mii_timer, jiffies + delta_in_ticks);
+ if (bond->params.miimon) {
+ mod_timer(&bond->mii_timer, jiffies + delta_in_ticks);
+ }
out:
read_unlock(&bond->lock);
}
-static void bond_arp_send_all(struct slave *slave)
+static void bond_arp_send_all(struct bonding *bond, struct slave *slave)
{
int i;
+ u32 *targets = bond->params.arp_targets;
- for (i = 0; (i < BOND_MAX_ARP_TARGETS) && arp_target[i]; i++) {
- arp_send(ARPOP_REQUEST, ETH_P_ARP, arp_target[i], slave->dev,
+ for (i = 0; (i < BOND_MAX_ARP_TARGETS) && targets[i]; i++) {
+ arp_send(ARPOP_REQUEST, ETH_P_ARP, targets[i], slave->dev,
my_ip, NULL, slave->dev->dev_addr,
NULL);
}
@@ -2263,11 +2269,13 @@ static void bond_loadbalance_arp_mon(str
struct bonding *bond = bond_dev->priv;
struct slave *slave, *oldcurrent;
int do_failover = 0;
- int delta_in_ticks = (arp_interval * HZ) / 1000;
+ int delta_in_ticks;
int i;
read_lock(&bond->lock);
+ delta_in_ticks = (bond->params.arp_interval * HZ) / 1000;
+
if (bond->kill_timers) {
goto out;
}
@@ -2352,7 +2360,7 @@ static void bond_loadbalance_arp_mon(str
* to be unstable during low/no traffic periods
*/
if (IS_UP(slave->dev)) {
- bond_arp_send_all(slave);
+ bond_arp_send_all(bond, slave);
}
}
@@ -2372,7 +2380,9 @@ static void bond_loadbalance_arp_mon(str
}
re_arm:
- mod_timer(&bond->arp_timer, jiffies + delta_in_ticks);
+ if (bond->params.arp_interval) {
+ mod_timer(&bond->arp_timer, jiffies + delta_in_ticks);
+ }
out:
read_unlock(&bond->lock);
}
@@ -2396,11 +2406,13 @@ static void bond_activebackup_arp_mon(st
{
struct bonding *bond = bond_dev->priv;
struct slave *slave;
- int delta_in_ticks = (arp_interval * HZ) / 1000;
+ int delta_in_ticks;
int i;
read_lock(&bond->lock);
+ delta_in_ticks = (bond->params.arp_interval * HZ) / 1000;
+
if (bond->kill_timers) {
goto out;
}
@@ -2559,7 +2571,7 @@ static void bond_activebackup_arp_mon(st
* rx traffic
*/
if (slave && my_ip) {
- bond_arp_send_all(slave);
+ bond_arp_send_all(bond, slave);
}
}
@@ -2580,7 +2592,7 @@ static void bond_activebackup_arp_mon(st
if (IS_UP(slave->dev)) {
slave->link = BOND_LINK_BACK;
bond_set_slave_active_flags(slave);
- bond_arp_send_all(slave);
+ bond_arp_send_all(bond, slave);
slave->jiffies = jiffies;
bond->current_arp_slave = slave;
break;
@@ -2612,7 +2624,9 @@ static void bond_activebackup_arp_mon(st
}
re_arm:
- mod_timer(&bond->arp_timer, jiffies + delta_in_ticks);
+ if (bond->params.arp_interval) {
+ mod_timer(&bond->arp_timer, jiffies + delta_in_ticks);
+ }
out:
read_unlock(&bond->lock);
}
@@ -2683,22 +2697,27 @@ static void bond_info_show_master(struct
bond_mode_name(bond->params.mode));
if (USES_PRIMARY(bond->params.mode)) {
- if (curr) {
- seq_printf(seq,
- "Currently Active Slave: %s\n",
- curr->dev->name);
- }
+ seq_printf(seq, "Primary Slave: %s\n",
+ (bond->params.primary[0]) ?
+ bond->params.primary : "None");
+
+ seq_printf(seq, "Currently Active Slave: %s\n",
+ (curr) ? curr->dev->name : "None");
}
seq_printf(seq, "MII Status: %s\n", (curr) ? "up" : "down");
- seq_printf(seq, "MII Polling Interval (ms): %d\n", miimon);
- seq_printf(seq, "Up Delay (ms): %d\n", updelay * miimon);
- seq_printf(seq, "Down Delay (ms): %d\n", downdelay * miimon);
+ seq_printf(seq, "MII Polling Interval (ms): %d\n", bond->params.miimon);
+ seq_printf(seq, "Up Delay (ms): %d\n",
+ bond->params.updelay * bond->params.miimon);
+ seq_printf(seq, "Down Delay (ms): %d\n",
+ bond->params.downdelay * bond->params.miimon);
if (bond->params.mode == BOND_MODE_8023AD) {
struct ad_info ad_info;
seq_puts(seq, "\n802.3ad info\n");
+ seq_printf(seq, "LACP rate: %s\n",
+ (bond->params.lacp_fast) ? "fast" : "slow");
if (bond_3ad_get_active_agg_info(bond, &ad_info)) {
seq_printf(seq, "bond %s has no active aggregator\n",
@@ -3057,7 +3076,7 @@ static int bond_open(struct net_device *
add_timer(alb_timer);
}
- if (miimon) { /* link check interval, in milliseconds. */
+ if (bond->params.miimon) { /* link check interval, in milliseconds. */
init_timer(mii_timer);
mii_timer->expires = jiffies + 1;
mii_timer->data = (unsigned long)bond_dev;
@@ -3065,7 +3084,7 @@ static int bond_open(struct net_device *
add_timer(mii_timer);
}
- if (arp_interval) { /* arp interval, in milliseconds. */
+ if (bond->params.arp_interval) { /* arp interval, in milliseconds. */
init_timer(arp_timer);
arp_timer->expires = jiffies + 1;
arp_timer->data = (unsigned long)bond_dev;
@@ -3114,11 +3133,11 @@ static int bond_close(struct net_device
* because a running timer might be trying to hold it too
*/
- if (miimon) { /* link check interval, in milliseconds. */
+ if (bond->params.miimon) { /* link check interval, in milliseconds. */
del_timer_sync(&bond->mii_timer);
}
- if (arp_interval) { /* arp interval, in milliseconds. */
+ if (bond->params.arp_interval) { /* arp interval, in milliseconds. */
del_timer_sync(&bond->arp_timer);
}
@@ -3601,7 +3620,7 @@ static int bond_xmit_activebackup(struct
/* if we are sending arp packets, try to at least
identify our own ip address */
- if (arp_interval && !my_ip &&
+ if (bond->params.arp_interval && !my_ip &&
(skb->protocol == __constant_htons(ETH_P_ARP))) {
char *the_ip = (char *)skb->data +
sizeof(struct ethhdr) +
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2004-01-05 15:30 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-01-05 15:30 [PATCH 3/3] [bonding 2.6] Use the per-bond values of all remaining parameters Amir Noam
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).