summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2012-03-22 22:35:49 +0100
committerNatanael Copa <ncopa@alpinelinux.org>2012-03-22 22:35:49 +0100
commit3b0ca46fbbcf5bbbb79abbc16856dfc7bd12dc76 (patch)
treec12c54726e0e3e6a920e01aa50a46a7c268928f9
parent3638145ad0c6ac3c1eff011e58b233cc5c0a7ce1 (diff)
downloadalpine-conf-3b0ca46fbbcf5bbbb79abbc16856dfc7bd12dc76.tar.bz2
alpine-conf-3b0ca46fbbcf5bbbb79abbc16856dfc7bd12dc76.tar.xz
setup-interfaces: initial bonding support
-rwxr-xr-xsetup-interfaces.in64
1 files changed, 60 insertions, 4 deletions
diff --git a/setup-interfaces.in b/setup-interfaces.in
index fc86223..042475e 100755
--- a/setup-interfaces.in
+++ b/setup-interfaces.in
@@ -131,6 +131,10 @@ config_iface() {
bridge_ports=$(echo $(cat $iface.bridge_ports))
echo "bridge_ports=\"$bridge_ports\"" >> $conf
fi
+ if [ -r "$iface.bond_slaves" ]; then
+ bond_slaves=$(echo $(cat $iface.bond_slaves))
+ echo "bond_slaves=\"$bond_slaves\"" >> $conf
+ fi
# use ipcalc to validate the address. we do accept /mask
# we are no interested in the result, only error code, so
# we send result to /dev/null
@@ -200,13 +204,17 @@ config_iface() {
}
is_bridge() {
- [ -e /sys/class/net/$1/bridge ] || [ -e $i.bridge_ports ]
+ [ -e /sys/class/net/$1/bridge ] || [ -e $1.bridge_ports ]
+}
+
+is_bond_master() {
+ [ -e $1.bond_slaves ]
}
-unconfigured_non_bridges() {
+unconfigured_available() {
local local i= iflist=
for i in $(unconfigured_list); do
- if ! is_bridge $i; then
+ if ! is_bridge $i && ! is_bond_master $i; then
iflist="${iflist}${iflist:+ }$i"
fi
done
@@ -224,7 +232,7 @@ unconfigured_all_are() {
config_bridge() {
local bridge=$1 iflist= i= ports=
while ! unconfigured_all_done; do
- set -- $(unconfigured_non_bridges)
+ set -- $(unconfigured_available)
[ $# -eq 0 ] && return 0;
ports=$(bridge_list_ports $bridge)
if [ -n "$ports" ]; then
@@ -246,6 +254,47 @@ config_bridge() {
done
}
+bond_add_slave() {
+ local master=$1 slave=
+ shift
+ for slave; do
+ echo $slave >> $master.bond_slaves
+ unconfigured_add $master
+ unconfigured_del $slave
+ done
+}
+
+bond_list_slaves() {
+ if [ -r $1.bond_slaves ]; then
+ echo $(cat $1.bond_slaves)
+ fi
+}
+
+config_bond() {
+ local master=$1 slaves=
+ while ! unconfigured_all_done; do
+ set -- $(unconfigured_available)
+ [ $# -eq 0 ] && return 0;
+ slaves=$(bond_list_slaves $master)
+ if [ -n "$slaves" ]; then
+ echo "Bond slaves in $master are: $slaves"
+ fi
+ echo "Available bond slaves are: $@"
+ ask "Which slave(s) do you want add to $master? (or 'done')" $1
+ case $resp in
+ 'abort') return 1;;
+ 'done') return 0;;
+ esac
+ for i in $resp; do
+ if unconfigured_isin $i; then
+ bond_add_slave $master $i
+ else
+ echo "$i is not valid"
+ fi
+ done
+ done
+}
+
usage() {
cat <<__EOF__
usage: setup-interfaces [-bhi] [-p ROOT]
@@ -278,6 +327,8 @@ prompt_for_interfaces() {
"done") break;;
br[0-9]*|bridge[0-9]*|virbr[0-9]*)
config_bridge $iface || continue;;
+ bond[0-9]*)
+ config_bond $iface || continue;;
*) unconfigured_isin $iface || continue;;
esac
config_iface $iface $(printf "%.3d~" $index)
@@ -292,6 +343,7 @@ prompt_for_interfaces() {
iface=`basename $i .conf`
iface=${iface#[0-9]*~}
bridge_ports=
+ bond_slaves=
address=
type=
gateway=
@@ -301,6 +353,9 @@ prompt_for_interfaces() {
if [ -n "$bridge_ports" ]; then
echo -e "\tbridge-ports $bridge_ports" >> interfaces
fi
+ if [ -n "$bond_slaves" ]; then
+ echo -e "\tbond-slaves $bond_slaves" >> interfaces
+ fi
case $type in
dhcp)
[ -n "$hostname" ] \
@@ -313,6 +368,7 @@ prompt_for_interfaces() {
&& echo -e "\tgateway $gateway" >> interfaces
;;
esac
+ echo "" >> interfaces
done
while [ "$answer" != "yes" ] && [ "$answer" != "no" ] ; do