Merge net.OS into net
This commit is contained in:
101
net/bonding.sh
Normal file
101
net/bonding.sh
Normal file
@@ -0,0 +1,101 @@
|
||||
# Copyright 2007-2008 Roy Marples <roy@marples.name>
|
||||
# All rights reserved. Released under the 2-clause BSD license.
|
||||
|
||||
bonding_depend()
|
||||
{
|
||||
before interface macchanger
|
||||
program /sbin/ifenslave
|
||||
}
|
||||
|
||||
_config_vars="$_config_vars slaves"
|
||||
|
||||
_is_bond()
|
||||
{
|
||||
[ -f "/proc/net/bonding/${IFACE}" ]
|
||||
}
|
||||
|
||||
bonding_pre_start()
|
||||
{
|
||||
local s= slaves="$(_get_array "slaves_${IFVAR}")"
|
||||
|
||||
[ -z "${slaves}" ] && return 0
|
||||
|
||||
# Load the kernel module if required
|
||||
if [ ! -d /proc/net/bonding ]; then
|
||||
if ! modprobe bonding; then
|
||||
eerror "Cannot load the bonding module"
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# We can create the interface name we like now, but this
|
||||
# requires sysfs
|
||||
if ! _exists && [ -d /sys/class/net ]; then
|
||||
echo "+${IFACE}" > /sys/class/net/bonding_masters
|
||||
fi
|
||||
_exists true || return 1
|
||||
|
||||
if ! _is_bond; then
|
||||
eerror "${IFACE} is not capable of bonding"
|
||||
return 1
|
||||
fi
|
||||
|
||||
ebegin "Adding slaves to ${IFACE}"
|
||||
eindent
|
||||
einfo "${slaves}"
|
||||
|
||||
# Check that our slaves exist
|
||||
(
|
||||
for IFACE in ${slaves}; do
|
||||
_exists true || return 1
|
||||
done
|
||||
|
||||
# Must force the slaves to a particular state before adding them
|
||||
for IFACE in ${slaves}; do
|
||||
_delete_addresses
|
||||
_up
|
||||
done
|
||||
)
|
||||
|
||||
# now force the master to up
|
||||
_up
|
||||
|
||||
# finally add in slaves
|
||||
eoutdent
|
||||
/sbin/ifenslave "${IFACE}" ${slaves} >/dev/null
|
||||
eend $?
|
||||
|
||||
return 0 #important
|
||||
}
|
||||
|
||||
bonding_stop()
|
||||
{
|
||||
_is_bond || return 0
|
||||
|
||||
local slaves= s=
|
||||
slaves=$( \
|
||||
sed -n -e 's/^Slave Interface: //p' "/proc/net/bonding/${IFACE}" \
|
||||
| tr '\n' ' ' \
|
||||
)
|
||||
[ -z "${slaves}" ] && return 0
|
||||
|
||||
# remove all slaves
|
||||
ebegin "Removing slaves from ${IFACE}"
|
||||
eindent
|
||||
einfo "${slaves}"
|
||||
eoutdent
|
||||
/sbin/ifenslave -d "${IFACE}" ${slaves}
|
||||
|
||||
# reset all slaves
|
||||
(
|
||||
for IFACE in ${slaves}; do
|
||||
if _exists; then
|
||||
_delete_addresses
|
||||
_down
|
||||
fi
|
||||
done
|
||||
)
|
||||
|
||||
eend 0
|
||||
return 0
|
||||
}
|
||||
Reference in New Issue
Block a user