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:
parent
f0492abe53
commit
a775b3feee
|
@ -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 [ 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
|
||||
if [ ! -z "$alias_subnet_mask" ]; then
|
||||
alias_subnet_arg="netmask $alias_subnet_mask"
|
||||
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
|
||||
case "$reason" in
|
||||
MEDIUM)
|
||||
eval "ifconfig $interface $medium"
|
||||
eval "ifconfig $interface inet -alias 0.0.0.0 $medium" >/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
|
||||
sleep 1
|
||||
|
||||
exit_with_hooks 0
|
||||
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 [ \( ! -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 [ \( ! -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
|
||||
|
||||
delete_old_routes
|
||||
fi
|
||||
|
||||
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
|
||||
|
|
Loading…
Reference in New Issue