general cleanup:

1. Use standard shell indentation
2. Use [ expr -a expr ] instead of [ expr ] && [ expr ] (same with -o and ||)
3. Cleanup 0 length string tests
4. Factor out the routing code
5. Use a large switch statement based on $reason instead of the endless
   if elif's
6. Use variables for filenames used
7. Test in all cases for the existance of domainname and hostname
8. No need for individual command redirections in structured statements.

Thanks to kleink for testing and fixing my typos!
This commit is contained in:
christos 2001-04-11 21:22:53 +00:00
parent f0492abe53
commit a775b3feee
1 changed files with 226 additions and 200 deletions

View File

@ -1,230 +1,256 @@
#!/bin/sh
#
# $NetBSD: netbsd,v 1.12 2001/04/02 23:45:54 mellon Exp $
# $NetBSD: netbsd,v 1.13 2001/04/11 21:22:53 christos Exp $
ENTERHOOKS=/etc/dhclient-enter-hooks
EXITHOOKS=/etc/dhclient-exit-hooks
RESOLV=/etc/resolv.conf
make_resolv_conf() {
echo search $new_domain_name >/etc/resolv.conf
for nameserver in $new_domain_name_servers; do
echo nameserver $nameserver >>/etc/resolv.conf
done
echo search $new_domain_name > $RESOLV
for nameserver in $new_domain_name_servers; do
echo nameserver $nameserver >> $RESOLV
done
}
# Must be used on exit. Invokes the local dhcp client exit hooks, if any.
exit_with_hooks() {
exit_status=$1
if [ -x /etc/dhclient-exit-hooks ]; then
. /etc/dhclient-exit-hooks
fi
# probably should do something with exit status of the local script
exit $exit_status
exit_status=$1
if [ -x "$EXITHOOKS" ]; then
. "$EXITHOOKS"
fi
# probably should do something with exit status of the local script
exit $exit_status
}
add_new_routes() {
for router in $new_routers; do
route add default $router
done >/dev/null 2>&1
set -- $new_static_routes
while [ $# -gt 1 ]; do
route add $0 $1
shift; shift
done
}
delete_old_routes() {
for router in $old_routers; do
route delete default $router >/dev/null 2>&1
done
if [ ! -z "$old_static_routes" ]; then
set -- $old_static_routes
while [ $# -gt 1 ]; do
route delete $1 $2
shift; shift
done
fi
arp -n -a | sed -n -e 's/^.*(\(.*\)) at .*$/arp -n -d \1/p' | sh
}
# Invoke the local dhcp client enter hooks, if they exist.
if [ -x /etc/dhclient-enter-hooks ]; then
exit_status=0
. /etc/dhclient-enter-hooks
# allow the local script to abort processing of this state
# local script must set exit_status variable to nonzero.
if [ $exit_status -ne 0 ]; then
exit $exit_status
fi
if [ -x $ENTERHOOKS ]; then
exit_status=0
. $ENTERHOOKS
# allow the local script to abort processing of this state
# local script must set exit_status variable to nonzero.
if [ $exit_status -ne 0 ]; then
exit $exit_status
fi
fi
if [ x$new_host_name != x ]; then
echo New Host Name: $new_host_name
if [ ! -z "$new_host_name" ]; then
echo New Host Name: $new_host_name
fi
if [ x$new_nis_domain != x ]; then
echo New NIS Domain: $new_nis_domain
if [ ! -z "$new_nis_domain" ]; then
echo New NIS Domain: $new_nis_domain
fi
if [ x$new_network_number != x ]; then
echo New Network Number: $new_network_number
if [ ! -z "$new_network_number" ]; then
echo New Network Number: $new_network_number
fi
if [ x$new_broadcast_address != x ]; then
echo New Broadcast Address: $new_broadcast_address
new_broadcast_arg="broadcast $new_broadcast_address"
fi
if [ x$old_broadcast_address != x ]; then
old_broadcast_arg="broadcast $old_broadcast_address"
fi
if [ x$new_subnet_mask != x ]; then
new_netmask_arg="netmask $new_subnet_mask"
fi
if [ x$old_subnet_mask != x ]; then
old_netmask_arg="netmask $old_subnet_mask"
fi
if [ x$alias_subnet_mask != x ]; then
alias_subnet_arg="netmask $alias_subnet_mask"
if [ ! -z "$new_broadcast_address" ]; then
echo New Broadcast Address: $new_broadcast_address
new_broadcast_arg="broadcast $new_broadcast_address"
fi
if [ x$reason = xMEDIUM ]; then
eval "ifconfig $interface $medium"
eval "ifconfig $interface inet -alias 0.0.0.0 $medium" >/dev/null 2>&1
sleep 1
exit_with_hooks 0
if [ ! -z "$old_broadcast_address" ]; then
old_broadcast_arg="broadcast $old_broadcast_address"
fi
if [ x$reason = xPREINIT ]; then
if [ x$alias_ip_address != x ]; then
ifconfig $interface inet -alias $alias_ip_address > /dev/null 2>&1
route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1
fi
ifconfig $interface inet 0.0.0.0 netmask 0.0.0.0 \
broadcast 255.255.255.255 up
exit_with_hooks 0
if [ ! -z "$new_subnet_mask" ]; then
new_netmask_arg="netmask $new_subnet_mask"
fi
if [ x$reason = xARPCHECK ] || [ x$reason = xARPSEND ]; then
exit_with_hooks 0
if [ ! -z "$old_subnet_mask" ]; then
old_netmask_arg="netmask $old_subnet_mask"
fi
if [ x$reason = xBOUND ] || [ x$reason = xRENEW ] || \
[ x$reason = xREBIND ] || [ x$reason = xREBOOT ]; then
if type domainname > /dev/null 2>&1; then
if [ x$new_nis_domain != x ]; then
domainname $new_nis_domain
fi
fi
if type hostname > /dev/null 2>&1; then
current_hostname=`hostname`
if [ x$current_hostname = x ] || \
[ x$current_hostname = x$old_host_name ]; then
if [ x$current_hostname = x ] || \
[ x$new_host_name != x$old_host_name ]; then
hostname $new_host_name
fi
fi
fi
if [ ! -z "$alias_subnet_mask" ]; then
alias_subnet_arg="netmask $alias_subnet_mask"
fi
case "$reason" in
MEDIUM)
eval "ifconfig $interface $medium"
eval "ifconfig $interface inet -alias 0.0.0.0 $medium" >/dev/null 2>&1
sleep 1
exit_with_hooks 0
;;
PREINIT)
if [ ! -z "$alias_ip_address" ]; then
ifconfig $interface inet \
-alias $alias_ip_address >/dev/null 2>&1
route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1
fi
ifconfig $interface inet 0.0.0.0 netmask 0.0.0.0 \
broadcast 255.255.255.255 up
exit_with_hooks 0
;;
ARPCHECK|ARPSEND)
exit_with_hooks 0
;;
BOUND|RENEW|REBIND|REBOOT)
if [ ! -z "$new_nis_domain" ]; then
if type domainname > /dev/null 2>&1; then
domainname $new_nis_domain
fi
fi
if type hostname > /dev/null 2>&1; then
if [ \( -z "$current_hostname" \) -o \
\( "x$new_host_name" = "x$old_hostname" \) ]; then
current_hostname=`hostname`
fi
if [ \( -z $current_hostname \) -o \
\( "x$new_host_name" != "x$old_hostname" \) ]; then
hostname $new_host_name
fi
fi
if [ x$old_ip_address != x ] && [ x$alias_ip_address != x ] && \
[ x$alias_ip_address != x$old_ip_address ]; then
ifconfig $interface inet -alias $alias_ip_address > /dev/null 2>&1
route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1
fi
if [ x$old_ip_address != x ] && [ x$old_ip_address != x$new_ip_address ]
then
eval "ifconfig $interface inet -alias $old_ip_address $medium"
route delete $old_ip_address 127.1 >/dev/null 2>&1
for router in $old_routers; do
route delete default $router >/dev/null 2>&1
done
if [ "$old_static_routes" != "" ]; then
set $old_static_routes
while [ $# -gt 1 ]; do
route delete $1 $2
shift; shift
done
fi
arp -n -a | sed -n -e 's/^.*(\(.*\)) at .*$/arp -n -d \1/p' |sh
fi
if [ x$old_ip_address = x ] || [ x$old_ip_address != x$new_ip_address ] || \
[ x$reason = xBOUND ] || [ x$reason = xREBOOT ]; then
eval "ifconfig $interface inet $new_ip_address $new_netmask_arg \
$new_broadcast_arg $medium"
route add $new_ip_address 127.1 >/dev/null 2>&1
for router in $new_routers; do
route add default $router >/dev/null 2>&1
done
if [ "$new_static_routes" != "" ]; then
set $new_static_routes
while [ $# -gt 1 ]; do
route add $1 $2
shift; shift
done
fi
fi
if [ x$new_ip_address != x$alias_ip_address ] && [ x$alias_ip_address != x ];
then
ifconfig $interface inet alias $alias_ip_address $alias_subnet_arg
route add $alias_ip_address 127.0.0.1
fi
make_resolv_conf
exit_with_hooks 0
fi
if [ \( ! -z "$old_ip_address" \) -a \( ! -z "$alias_ip_address" \) -a \
\( "x$alias_ip_address" != "x$old_ip_address" \) ]; then
ifconfig $interface inet \
-alias $alias_ip_address > /dev/null 2>&1
route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1
fi
if [ x$reason = xEXPIRE ] || [ x$reason = xFAIL ]; then
if [ x$old_nis_domain != x ]; then
# delete the old nis domain name
domainname ""
fi
if [ x$alias_ip_address != x ]; then
ifconfig $interface inet -alias $alias_ip_address > /dev/null 2>&1
route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1
fi
if [ x$old_ip_address != x ]; then
eval "ifconfig $interface inet -alias $old_ip_address $medium"
route delete $old_ip_address 127.1 >/dev/null 2>&1
for router in $old_routers; do
route delete default $router >/dev/null 2>&1
done
if [ "$old_static_routes" != "" ]; then
set $old_static_routes
while [ $# -gt 1 ]; do
route delete $1 $2
shift; shift
done
fi
arp -n -a | sed -n -e 's/^.*(\(.*\)) at .*$/arp -n -d \1/p' \
|sh >/dev/null 2>&1
fi
if [ x$alias_ip_address != x ]; then
ifconfig $interface inet alias $alias_ip_address $alias_subnet_arg
route add $alias_ip_address 127.0.0.1
fi
exit_with_hooks 0
fi
if [ \( ! -z "$old_ip_address" \) -a \
\( "x$old_ip_address" != "x$new_ip_address" \) ]; then
eval "ifconfig $interface inet -alias $old_ip_address $medium"
route delete $old_ip_address 127.0.0.1 >/dev/null 2>&1
if [ x$reason = xTIMEOUT ]; then
if [ x$alias_ip_address != x ]; then
ifconfig $interface inet -alias $alias_ip_address > /dev/null 2>&1
route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1
fi
if [ x$new_host_name != x ]; then
hostname $new_host_name
fi
if [ x$new_nis_domain != x ]; then
domainname $new_nis_domain
fi
eval "ifconfig $interface inet $new_ip_address $new_netmask_arg \
$new_broadcast_arg $medium"
sleep 1
if [ "$new_routers" != "" ]; then
set $new_routers
if ping -n -q -c 1 -w 1 $1; then
if [ x$new_ip_address != x$alias_ip_address ] && \
[ x$alias_ip_address != x ]; then
ifconfig $interface inet alias $alias_ip_address $alias_subnet_arg
route add $alias_ip_address 127.0.0.1
fi
route add $new_ip_address 127.1 >/dev/null 2>&1
for router in $new_routers; do
route add default $router >/dev/null 2>&1
done
set $new_static_routes
while [ $# -gt 1 ]; do
route add $0 $1
shift; shift
done
make_resolv_conf
exit_with_hooks 0
fi
fi
eval "ifconfig $interface inet -alias $new_ip_address $medium"
for router in $old_routers; do
route delete default $router >/dev/null 2>&1
done
if [ "$old_static_routes" != "" ]; then
set $old_static_routes
while [ $# -gt 1 ]; do
route delete $1 $2
shift; shift
done
fi
arp -n -a | sed -n -e 's/^.*(\(.*\)) at .*$/arp -n -d \1/p' \
|sh >/dev/null 2>&1
exit_with_hooks 1
fi
delete_old_routes
fi
exit_with_hooks 0
if [ \( -z "$old_ip_address" \) -o \
\( "x$old_ip_address" != "x$new_ip_address" \) -o \
\( "x$reason" = "xBOUND" \) -o \( "x$reason" = "xREBOOT" \) ]; then
eval "ifconfig $interface inet $new_ip_address \
$new_netmask_arg $new_broadcast_arg $medium"
route add $new_ip_address 127.0.0.1 >/dev/null 2>&1
add_new_routes
fi
if [ \( ! -z "$alias_ip_address" \) -a \
\( "x$new_ip_address" != "x$alias_ip_address" \) ]; then
ifconfig $interface inet alias $alias_ip_address \
$alias_subnet_arg
route add $alias_ip_address 127.0.0.1
fi
make_resolv_conf
exit_with_hooks 0
;;
EXPIRE|FAIL)
if [ ! -z "$old_nis_domain" ]; then
if type domainname > /dev/null 2>&1; then
# delete the old nis domain name
domainname ""
fi
fi
if [ ! -z "$alias_ip_address" ]; then
ifconfig $interface inet -alias $alias_ip_address
route delete $alias_ip_address 127.0.0.1
fi > /dev/null 2>&1
if [ ! -z "$old_ip_address" ]; then
eval "ifconfig $interface inet -alias $old_ip_address $medium"
route delete $old_ip_address 127.0.0.1 >/dev/null 2>&1
delete_old_routes
fi
if [ ! -z "$alias_ip_address" ]; then
ifconfig $interface inet alias $alias_ip_address \
$alias_subnet_arg
route add $alias_ip_address 127.0.0.1
fi
exit_with_hooks 0
;;
TIMEOUT)
if [ ! -z "$alias_ip_address" ]; then
ifconfig $interface inet -alias $alias_ip_address
route delete $alias_ip_address 127.0.0.1
fi > /dev/null 2>&1
if [ ! -z "$new_host_name" ]; then
if type hostname > /dev/null 2>&1; then
hostname $new_host_name
fi
fi
if [ ! -z "$new_nis_domain" ]; then
if type domainname > /dev/null 2>&1; then
domainname $new_nis_domain
fi
fi
eval "ifconfig $interface inet $new_ip_address $new_netmask_arg \
$new_broadcast_arg $medium"
sleep 1
if [ ! -z "$new_routers" ]; then
set -- $new_routers
if ping -n -q -c 1 -w 1 $1; then
if [ \( ! -z "$alias_ip_address" \) -a \
\( "x$new_ip_address" != "x$alias_ip_address" \) ]
then
ifconfig $interface inet alias \
$alias_ip_address $alias_subnet_arg
route add $alias_ip_address 127.0.0.1
fi
route add $new_ip_address 127.0.0.1 >/dev/null 2>&1
add_new_routes
make_resolv_conf
exit_with_hooks 0
fi
fi
eval "ifconfig $interface inet -alias $new_ip_address $medium"
delete_old_routes
exit_with_hooks 1
;;
*)
exit_with_hooks 0
;;
esac