diff --git a/usr.sbin/dhcp/client/scripts/netbsd b/usr.sbin/dhcp/client/scripts/netbsd index 3c2f9ae8a1f3..4cb206b89e3b 100644 --- a/usr.sbin/dhcp/client/scripts/netbsd +++ b/usr.sbin/dhcp/client/scripts/netbsd @@ -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