You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
2.1 KiB
76 lines
2.1 KiB
#!/bin/sh |
|
# |
|
# Format: |
|
# bond=<bondname>[:<bondslaves>[:<options>[:<mtu>]]] |
|
# |
|
# bondslaves is a comma-separated list of physical (ethernet) interfaces |
|
# options is a comma-separated list on bonding options (modinfo bonding for details) in format compatible with initscripts |
|
# if options include multi-valued arp_ip_target option, then its values should be separated by semicolon. |
|
# |
|
# bond without parameters assumes bond=bond0:eth0,eth1:mode=balance-rr |
|
# |
|
# if the mtu is specified, it will be set on the bond master |
|
# |
|
|
|
# We translate list of slaves to space-separated here to make it easier to loop over them in ifup |
|
# Ditto for bonding options |
|
parsebond() { |
|
local v=${1}: |
|
set -- |
|
while [ -n "$v" ]; do |
|
set -- "$@" "${v%%:*}" |
|
v=${v#*:} |
|
done |
|
|
|
case $# in |
|
0) |
|
bondname=bond0 |
|
bondslaves="eth0 eth1" |
|
;; |
|
1) |
|
bondname=$1 |
|
bondslaves="eth0 eth1" |
|
;; |
|
2) |
|
bondname=$1 |
|
bondslaves=$(str_replace "$2" "," " ") |
|
;; |
|
3) |
|
bondname=$1 |
|
bondslaves=$(str_replace "$2" "," " ") |
|
bondoptions=$(str_replace "$3" "," " ") |
|
;; |
|
4) |
|
bondname=$1 |
|
bondslaves=$(str_replace "$2" "," " ") |
|
bondoptions=$(str_replace "$3" "," " ") |
|
bondmtu=$4 |
|
;; |
|
*) die "bond= requires zero to four parameters" ;; |
|
esac |
|
} |
|
|
|
# Parse bond for bondname, bondslaves, bondmode, bondoptions and bondmtu |
|
for bond in $(getargs bond=); do |
|
unset bondname |
|
unset bondslaves |
|
unset bondoptions |
|
unset bondmtu |
|
if [ "$bond" != "bond" ]; then |
|
parsebond "$bond" |
|
fi |
|
# Simple default bond |
|
if [ -z "$bondname" ]; then |
|
bondname=bond0 |
|
bondslaves="eth0 eth1" |
|
fi |
|
# Make it suitable for initscripts export |
|
bondoptions=$(str_replace "$bondoptions" ";" ",") |
|
|
|
{ |
|
echo "bondname=$bondname" |
|
echo "bondslaves=\"$bondslaves\"" |
|
echo "bondoptions=\"$bondoptions\"" |
|
echo "bondmtu=\"$bondmtu\"" |
|
} > "/tmp/bond.${bondname}.info" |
|
done
|
|
|