diff options
author | Veaceslav Falico <vfalico@redhat.com> | 2013-06-24 05:49:34 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-06-25 19:58:38 -0400 |
commit | 8599b52e14a1611dcb563289421bee76751f1d53 (patch) | |
tree | 0eddf2fc812131c8fc9f00451ef6ec24ae0f06d1 /Documentation/networking/bonding.txt | |
parent | d7d35c681fb4eae1fab3d93698e26a106ca7e79e (diff) |
bonding: add an option to fail when any of arp_ip_target is inaccessible
Currently, we fail only when all of the ips in arp_ip_target are gone.
However, in some situations we might need to fail if even one host from
arp_ip_target becomes unavailable.
All situations, obviously, rely on the idea that we need *completely*
functional network, with all interfaces/addresses working correctly.
One real world example might be:
vlans on top on bond (hybrid port). If bond and vlans have ips assigned
and we have their peers monitored via arp_ip_target - in case of switch
misconfiguration (trunk/access port), slave driver malfunction or
tagged/untagged traffic dropped on the way - we will be able to switch
to another slave.
Though any other configuration needs that if we need to have access to all
arp_ip_targets.
This patch adds this possibility by adding a new parameter -
arp_all_targets (both as a module parameter and as a sysfs knob). It can be
set to:
0 or any (the default) - which works exactly as it's working now -
the slave is up if any of the arp_ip_targets are up.
1 or all - the slave is up if all of the arp_ip_targets are up.
This parameter can be changed on the fly (via sysfs), and requires the mode
to be active-backup and arp_validate to be enabled (it obeys the
arp_validate config on which slaves to validate).
Internally it's done through:
1) Add target_last_arp_rx[BOND_MAX_ARP_TARGETS] array to slave struct. It's
an array of jiffies, meaning that slave->target_last_arp_rx[i] is the
last time we've received arp from bond->params.arp_targets[i] on this
slave.
2) If we successfully validate an arp from bond->params.arp_targets[i] in
bond_validate_arp() - update the slave->target_last_arp_rx[i] with the
current jiffies value.
3) When getting slave's last_rx via slave_last_rx(), we return the oldest
time when we've received an arp from any address in
bond->params.arp_targets[].
If the value of arp_all_targets == 0 - we still work the same way as
before.
Also, update the documentation to reflect the new parameter.
v3->v4:
Kill the forgotten rtnl_unlock(), rephrase the documentation part to be
more clear, don't fail setting arp_all_targets if arp_validate is not set -
it has no effect anyway but can be easier to set up. Also, print a warning
if the last arp_ip_target is removed while the arp_interval is on, but not
the arp_validate.
v2->v3:
Use _bh spinlock, remove useless rtnl_lock() and use jiffies for new
arp_ip_target last arp, instead of slave_last_rx(). On bond_enslave(),
use the same initialization value for target_last_arp_rx[] as is used
for the default last_arp_rx, to avoid useless interface flaps.
Also, instead of failing to remove the last arp_ip_target just print a
warning - otherwise it might break existing scripts.
v1->v2:
Correctly handle adding/removing hosts in arp_ip_target - we need to
shift/initialize all slave's target_last_arp_rx. Also, don't fail module
loading on arp_all_targets misconfiguration, just disable it, and some
minor style fixes.
Signed-off-by: Veaceslav Falico <vfalico@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'Documentation/networking/bonding.txt')
-rw-r--r-- | Documentation/networking/bonding.txt | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/Documentation/networking/bonding.txt b/Documentation/networking/bonding.txt index adee3b4a75cb..87bbcfee2e06 100644 --- a/Documentation/networking/bonding.txt +++ b/Documentation/networking/bonding.txt | |||
@@ -321,6 +321,25 @@ arp_validate | |||
321 | 321 | ||
322 | This option was added in bonding version 3.1.0. | 322 | This option was added in bonding version 3.1.0. |
323 | 323 | ||
324 | arp_all_targets | ||
325 | |||
326 | Specifies the quantity of arp_ip_targets that must be reachable | ||
327 | in order for the ARP monitor to consider a slave as being up. | ||
328 | This option affects only active-backup mode for slaves with | ||
329 | arp_validation enabled. | ||
330 | |||
331 | Possible values are: | ||
332 | |||
333 | any or 0 | ||
334 | |||
335 | consider the slave up only when any of the arp_ip_targets | ||
336 | is reachable | ||
337 | |||
338 | all or 1 | ||
339 | |||
340 | consider the slave up only when all of the arp_ip_targets | ||
341 | are reachable | ||
342 | |||
324 | downdelay | 343 | downdelay |
325 | 344 | ||
326 | Specifies the time, in milliseconds, to wait before disabling | 345 | Specifies the time, in milliseconds, to wait before disabling |