mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2025-04-20 18:56:47 +02:00
45 lines
1.7 KiB
Bash
Executable file
45 lines
1.7 KiB
Bash
Executable file
#!/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
|