aboutsummaryrefslogtreecommitdiffstats
path: root/main/bonding/bonding.up
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2012-03-15 13:35:48 +0000
committerNatanael Copa <ncopa@alpinelinux.org>2012-03-15 13:35:48 +0000
commit86c2c6527c68246b409ecb163074dafc1a222551 (patch)
treed8c126d990c904785bb74cdb8d2f8bb6c5c860cb /main/bonding/bonding.up
parent9146859d63fb9bc88018664950a7d70086ec51eb (diff)
downloadaports-86c2c6527c68246b409ecb163074dafc1a222551.tar.bz2
aports-86c2c6527c68246b409ecb163074dafc1a222551.tar.xz
main/bonding: moved from testing
Diffstat (limited to 'main/bonding/bonding.up')
-rwxr-xr-xmain/bonding/bonding.up45
1 files changed, 45 insertions, 0 deletions
diff --git a/main/bonding/bonding.up b/main/bonding/bonding.up
new file mode 100755
index 000000000..7f27421cd
--- /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