PKGBUILDs/core/initscripts/network
2010-07-28 14:27:38 -05:00

278 lines
5.3 KiB
Bash
Executable file

#!/bin/bash
. /etc/rc.conf
. /etc/rc.d/functions
# wireless settings
[ -f /etc/conf.d/wireless ] && . /etc/conf.d/wireless
# ethernet bonding settings
[ -f /etc/conf.d/bonding ] && . /etc/conf.d/bonding
# bridge settings
[ -f /etc/conf.d/bridges ] && . /etc/conf.d/bridges
# dhcpcd settings
[ -f /etc/conf.d/dhcpcd ] && . /etc/conf.d/dhcpcd
ifup()
{
if [ "$1" = "" ]; then
echo "usage: $0 ifup <interface_name>"
return 1
fi
eval ifcfg="\$${1}"
# Get the name of the interface from the first token in the string
if [ "$ifcfg" = "dhcp" ]; then
ifname="$1"
else
ifname=${ifcfg%% *}
fi
/sbin/ifconfig $ifname up
wi_up $1 || return 1
if [ "$ifcfg" = "dhcp" ]; then
# remove the .pid file if it exists
/bin/rm -f /var/run/dhcpcd-${1}.pid >/dev/null 2>&1
/bin/rm -f /var/run/dhcpcd-${1}.cache >/dev/null 2>&1
/sbin/dhcpcd $DHCPCD_ARGS ${1}
else
/sbin/ifconfig $ifcfg
fi
return $?
}
wi_up()
{
eval iwcfg="\$wlan_${1}"
[ "$iwcfg" = "" ] && return 0
/usr/sbin/iwconfig $iwcfg
[[ -z "$WIRELESS_TIMEOUT" ]] && WIRELESS_TIMEOUT=2
sleep $WIRELESS_TIMEOUT
bssid=`iwgetid $1 -ra`
if [[ "$bssid" = "00:00:00:00:00:00" ]]; then
printhl "Could not associate $1 - try increasing WIRELESS_TIMEOUT and check network is WEP or has no security"
return 1
fi
return 0
}
ifdown()
{
if [ "$1" = "" ]; then
echo "usage: $0 ifdown <interface_name>"
return 1
fi
eval ifcfg="\$${1}"
if [ "$ifcfg" = "dhcp" ]; then
if [ -f /var/run/dhcpcd-${1}.pid ]; then
/bin/kill $(cat /var/run/dhcpcd-${1}.pid)
fi
fi
# Always bring the interface itself down
/sbin/ifconfig ${1} down >/dev/null 2>&1
return $?
}
iflist()
{
for ifline in ${INTERFACES[@]}; do
if [ "$ifline" = "${ifline#!}" ]; then
printf " $ifline:\t"
else
printf "$ifline:\t"
fi
eval real_ifline=\$${ifline#!}
echo $real_ifline
done
}
rtup()
{
if [ "$1" = "" ]; then
echo "usage: $0 rtup <route_name>"
return 1
fi
eval routecfg="\$${1}"
if grep -q :: <<< $routecfg; then
/sbin/route -A inet6 add $routecfg
else
/sbin/route add $routecfg
fi
return $?
}
rtdown()
{
if [ "$1" = "" ]; then
echo "usage: $0 rtdown <route_name>"
return 1
fi
eval routecfg="\$${1}"
if grep -q :: <<< $routecfg; then
/sbin/route -A inet6 del $routecfg
else
/sbin/route del $routecfg
fi
return $?
}
rtlist()
{
for rtline in ${ROUTES[@]}; do
if [ "$rtline" = "${rtline#!}" ]; then
printf " $rtline:\t"
else
printf "$rtline:\t"
fi
eval real_rtline=\$${rtline#!}
echo $real_rtline
done
}
bond_up()
{
for ifline in ${BOND_INTERFACES[@]}; do
if [ "$ifline" = "${ifline#!}" ]; then
eval bondcfg="\$bond_${ifline}"
if [ -n "${bondcfg}" ]; then
/sbin/ifenslave $ifline $bondcfg || error=1
fi
fi
done
}
bond_down()
{
for ifline in ${BOND_INTERFACES[@]}; do
if [ "$ifline" = "${ifline#!}" ]; then
eval bondcfg="\$bond_${ifline}"
/sbin/ifenslave -d $ifline $bondcfg || error=1
fi
done
}
bridge_up()
{
for br in ${BRIDGE_INTERFACES[@]}; do
if [ "$br" = "${br#!}" ]; then
# if the bridge already exists, remove it
if [ "$(/sbin/ifconfig $br 2>/dev/null)" ]; then
/sbin/ifconfig $br down
/usr/sbin/brctl delbr $br
fi
/usr/sbin/brctl addbr $br
eval brifs="\$bridge_${br}"
for brif in $brifs; do
if [ "$brif" = "${brif#!}" ]; then
for ifline in ${BOND_INTERFACES[@]}; do
if [ "$brif" = "$ifline" ] && [ "$ifline" = "${ifline#!}" ]; then
ifup $ifline
eval bondcfg="\$bond_${ifline}"
/sbin/ifenslave $ifline $bondcfg || error=1
unset bond_${ifline}
fi
done
/usr/sbin/brctl addif $br $brif || error=1
fi
done
fi
done
}
bridge_down()
{
for br in ${BRIDGE_INTERFACES[@]}; do
if [ "$br" = "${br#!}" ]; then
/usr/sbin/brctl delbr $br
fi
done
}
case "$1" in
start)
if ! ck_daemon network; then
echo "Network is already running. Try 'network restart'"
exit
fi
stat_busy "Starting Network"
error=0
# bring up bridge interfaces
bridge_up
# bring up ethernet interfaces
for ifline in ${INTERFACES[@]}; do
if [ "$ifline" = "${ifline#!}" ]; then
ifup $ifline || error=1
fi
done
# bring up bond interfaces
bond_up
# bring up routes
for rtline in "${ROUTES[@]}"; do
if [ "$rtline" = "${rtline#!}" ]; then
rtup $rtline || error=1
fi
done
if [ $error -eq 0 ]; then
add_daemon network
stat_done
else
stat_fail
fi
;;
stop)
#if ck_daemon network; then
# echo "Network is not running. Try 'network start'"
# exit
#fi
if [ "${NETWORK_PERSIST}" = "yes" -o "${NETWORK_PERSIST}" = "YES" ]; then
status "Skipping Network Shutdown" true
exit 0
fi
stat_busy "Stopping Network"
rm_daemon network
error=0
for rtline in "${ROUTES[@]}"; do
if [ "$rtline" = "${rtline#!}" ]; then
rtdown $rtline || error=1
fi
done
# bring down bond interfaces
bond_down
for ifline in ${INTERFACES[@]}; do
if [ "$ifline" = "${ifline#!}" ]; then
ifdown $ifline || error=1
fi
done
# bring down bridge interfaces
bridge_down
if [ $error -eq 0 ]; then
stat_done
else
stat_fail
fi
;;
restart)
$0 stop
/bin/sleep 2
$0 start
;;
ifup|ifdown|iflist|rtup|rtdown|rtlist)
$1 $2
;;
*)
echo "usage: $0 {start|stop|restart}"
echo " $0 {ifup|ifdown|iflist|rtup|rtdown|rtlist}"
esac
# vim: set ts=2 noet: