diff options
author | Natanael Copa <ncopa@alpinelinux.org> | 2012-03-15 13:35:48 +0000 |
---|---|---|
committer | Natanael Copa <ncopa@alpinelinux.org> | 2012-03-15 13:35:48 +0000 |
commit | 86c2c6527c68246b409ecb163074dafc1a222551 (patch) | |
tree | d8c126d990c904785bb74cdb8d2f8bb6c5c860cb /main/bonding/bonding.up | |
parent | 9146859d63fb9bc88018664950a7d70086ec51eb (diff) | |
download | aports-86c2c6527c68246b409ecb163074dafc1a222551.tar.bz2 aports-86c2c6527c68246b409ecb163074dafc1a222551.tar.xz |
main/bonding: moved from testing
Diffstat (limited to 'main/bonding/bonding.up')
-rwxr-xr-x | main/bonding/bonding.up | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/main/bonding/bonding.up b/main/bonding/bonding.up new file mode 100755 index 0000000000..7f27421cd9 --- /dev/null +++ b/main/bonding/bonding.up @@ -0,0 +1,45 @@ +#!/bin/sh + +[ "$VERBOSITY" = 1 ] && set -x + +sysfs() +{ + # Called with : + # $1 = value to write. Won't write if $1 is empty. + # $2 = basename of the file in bonding/ to write to. + if [ "$1" ] ; then + echo "$1" > "/sys/class/net/$IFACE/master/bonding/$2" + return $? + fi + return 0 +} + +# If the stanza bond-give-a-chance is set for a slave interface, +# then force $IFACE to be the primary for some time, then restore primary to it previous value. + +# This stanza is designed to workaround a bug in wpa_supplicant, when used with bonding : + +# wpa_supplicant expect wifi authentication packets on the bond interface, but also send wifi authentication packets on the bond interface. +# If the active interface is not the wifi interface at the time wpa_supplicant try to authenticate, the wifi AP won't receive anything, causing the authentication to fail. + +# In order for the wifi authentication to succeed, one need to give a chance to the wifi interface to send authentication packets. +# "bond-give-a-chance 10" will set the wifi interface as the primary interface for 10 seconds, then restore the previous primary interface. +# This is supposed to be enought to give a chance to wifi to authenticate properly. + +if [ "$IF_BOND_GIVE_A_CHANCE" ] ; then + read primary < "/sys/class/net/$IFACE/master/bonding/primary" + # Set the temporary primary. + sysfs "$IFACE" primary + + # Wait for the link to be setup, but not longer that $IF_BOND_GIVE_A_CHANGE seconds. + while [ "$IF_BOND_GIVE_A_CHANCE" -gt 0 ] ; do + if ip link show $IFACE | grep -sq 'state UP'; then + break + fi + sleep 1 + IF_BOND_GIVE_A_CHANCE=`expr $IF_BOND_GIVE_A_CHANCE - 1` + done + + # Restore the previous primary. + sysfs "$primary" primary +fi |