mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2025-04-19 19:36:44 +02:00
67 lines
1.8 KiB
Bash
Executable file
67 lines
1.8 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
|
|
}
|
|
|
|
sysfs_remove_all()
|
|
{
|
|
# Called with:
|
|
# $1 = target filename
|
|
read values < "/sys/class/net/$IFACE/bonding/$1"
|
|
for value in $values ; do
|
|
echo "-$value" > "/sys/class/net/$IFACE/bonding/$1"
|
|
done
|
|
}
|
|
|
|
BOND_PARAMS="/sys/class/net/$IFACE/bonding"
|
|
IFSTATE=/var/run/ifstate
|
|
|
|
# free $IFACE if it is currently enslaved to a bonding device.
|
|
if [ -f "/sys/class/net/$IFACE/master/bonding/slaves" ] ; then
|
|
echo "-$IFACE" > "/sys/class/net/$IFACE/master/bonding/slaves"
|
|
|
|
# The first slave in bond-primary found in current slaves becomes the primary.
|
|
# If no slave in bond-primary is found, then primary does not change and might be undefined if just removed.
|
|
for slave in $IF_BOND_PRIMARY ; do
|
|
if grep -sq "\\<$slave\\>" "/sys/class/net/$IFACE/master/bonding/slaves" ; then
|
|
sysfs "$slave" primary
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
|
|
# If $IFACE is not a master, exit.
|
|
[ ! -f "$BOND_PARAMS/slaves" ] && exit
|
|
|
|
# Unset multivalue sysfs entries, so that re-enabling the interface later won't cause error.
|
|
|
|
sysfs_remove_all arp_ip_target
|
|
|
|
# Remove any slaves of $IFACE.
|
|
|
|
[ "$VERBOSITY" = 1 ] && v=-v
|
|
read slaves < "$BOND_PARAMS/slaves"
|
|
for slave in $slaves ; do
|
|
# If $slave is currently up in $IFSTATE, then bring it down, to keep $IFSTATE consistent.
|
|
# This is supposed to have the side effect of freeing the interface.
|
|
grep -q "^$slave=" $IFSTATE && ifdown $v $slave
|
|
|
|
# Anyway, ensure $slave is free.
|
|
if [ -f "/sys/class/net/$slave/master/bonding/slaves" ] ; then
|
|
echo "-$slave" > "$BOND_PARAMS/slaves" 2> /dev/null
|
|
fi
|
|
done
|
|
|
|
# make sure that the link is set to down
|
|
ip link set dev $IFACE down
|