blob: 5b62d8b9238692b5dfae2c04180e4dfd38d4c1aa (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
#!/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
|