1*83ee113eSDavid van Moolenbroek#!/bin/sh 2*83ee113eSDavid van Moolenbroek# 3*83ee113eSDavid van Moolenbroek# $NetBSD: dhclient-script,v 1.2 2015/02/26 09:59:55 roy Exp $ 4*83ee113eSDavid van Moolenbroek 5*83ee113eSDavid van MoolenbroekENTERHOOKS=/etc/dhclient-enter-hooks 6*83ee113eSDavid van MoolenbroekEXITHOOKS=/etc/dhclient-exit-hooks 7*83ee113eSDavid van MoolenbroekRESOLV=/etc/resolv.conf 8*83ee113eSDavid van MoolenbroekSIGNATURE="# Created by dhclient from" 9*83ee113eSDavid van MoolenbroekINTSIG="$SIGNATURE $interface" 10*83ee113eSDavid van Moolenbroek 11*83ee113eSDavid van Moolenbroekecho_resolv_conf() { 12*83ee113eSDavid van Moolenbroek echo "$INTSIG" 13*83ee113eSDavid van Moolenbroek echo search $new_domain_name 14*83ee113eSDavid van Moolenbroek for nameserver in $new_domain_name_servers; do 15*83ee113eSDavid van Moolenbroek echo nameserver $nameserver 16*83ee113eSDavid van Moolenbroek done 17*83ee113eSDavid van Moolenbroek} 18*83ee113eSDavid van Moolenbroek 19*83ee113eSDavid van Moolenbroekmake_resolv_conf() { 20*83ee113eSDavid van Moolenbroek if [ ! -z "$new_domain_name_servers" ]; then 21*83ee113eSDavid van Moolenbroek if [ -x /sbin/resolvconf ]; then 22*83ee113eSDavid van Moolenbroek echo_resolv_conf | /sbin/resolvconf -a $interface 23*83ee113eSDavid van Moolenbroek else 24*83ee113eSDavid van Moolenbroek if [ -f $RESOLV ]; then 25*83ee113eSDavid van Moolenbroek while read line; do 26*83ee113eSDavid van Moolenbroek case $line in 27*83ee113eSDavid van Moolenbroek "$SIGNATURE"*) 28*83ee113eSDavid van Moolenbroek ;; 29*83ee113eSDavid van Moolenbroek *) 30*83ee113eSDavid van Moolenbroek mv $RESOLV $RESOLV.save;; 31*83ee113eSDavid van Moolenbroek esac 32*83ee113eSDavid van Moolenbroek break 33*83ee113eSDavid van Moolenbroek done < $RESOLV 34*83ee113eSDavid van Moolenbroek fi 35*83ee113eSDavid van Moolenbroek echo_resolv_conf > $RESOLV 36*83ee113eSDavid van Moolenbroek fi 37*83ee113eSDavid van Moolenbroek fi 38*83ee113eSDavid van Moolenbroek} 39*83ee113eSDavid van Moolenbroek 40*83ee113eSDavid van Moolenbroekrestore_resolv_conf() { 41*83ee113eSDavid van Moolenbroek if [ -x /sbin/resolvconf ]; then 42*83ee113eSDavid van Moolenbroek /sbin/resolvconf -d $interface 43*83ee113eSDavid van Moolenbroek elif [ -f $RESOLV.save -a -f $RESOLV ]; then 44*83ee113eSDavid van Moolenbroek while read line; do 45*83ee113eSDavid van Moolenbroek case $line in 46*83ee113eSDavid van Moolenbroek "$INTSIG"*) 47*83ee113eSDavid van Moolenbroek mv $RESOLV.save $RESOLV;; 48*83ee113eSDavid van Moolenbroek esac 49*83ee113eSDavid van Moolenbroek break 50*83ee113eSDavid van Moolenbroek done < $RESOLV 51*83ee113eSDavid van Moolenbroek fi 52*83ee113eSDavid van Moolenbroek} 53*83ee113eSDavid van Moolenbroek 54*83ee113eSDavid van Moolenbroek# Must be used on exit. Invokes the local dhcp client exit hooks, if any. 55*83ee113eSDavid van Moolenbroekexit_with_hooks() { 56*83ee113eSDavid van Moolenbroek exit_status=$1 57*83ee113eSDavid van Moolenbroek if [ -f "$EXITHOOKS" ]; then 58*83ee113eSDavid van Moolenbroek . "$EXITHOOKS" 59*83ee113eSDavid van Moolenbroek fi 60*83ee113eSDavid van Moolenbroek # probably should do something with exit status of the local script 61*83ee113eSDavid van Moolenbroek exit $exit_status 62*83ee113eSDavid van Moolenbroek} 63*83ee113eSDavid van Moolenbroek 64*83ee113eSDavid van Moolenbroek 65*83ee113eSDavid van Moolenbroekadd_new_routes() { 66*83ee113eSDavid van Moolenbroek for router in $new_routers; do 67*83ee113eSDavid van Moolenbroek route add default $router 68*83ee113eSDavid van Moolenbroek done >/dev/null 2>&1 69*83ee113eSDavid van Moolenbroek 70*83ee113eSDavid van Moolenbroek set -- $new_static_routes 71*83ee113eSDavid van Moolenbroek while [ $# -gt 1 ]; do 72*83ee113eSDavid van Moolenbroek route add $1 $2 73*83ee113eSDavid van Moolenbroek shift; shift 74*83ee113eSDavid van Moolenbroek done 75*83ee113eSDavid van Moolenbroek} 76*83ee113eSDavid van Moolenbroek 77*83ee113eSDavid van Moolenbroekdelete_old_routes() { 78*83ee113eSDavid van Moolenbroek for router in $old_routers; do 79*83ee113eSDavid van Moolenbroek route delete default $router 80*83ee113eSDavid van Moolenbroek done >/dev/null 2>&1 81*83ee113eSDavid van Moolenbroek 82*83ee113eSDavid van Moolenbroek set -- $old_static_routes 83*83ee113eSDavid van Moolenbroek while [ $# -gt 1 ]; do 84*83ee113eSDavid van Moolenbroek route delete $1 $2 85*83ee113eSDavid van Moolenbroek shift; shift 86*83ee113eSDavid van Moolenbroek done 87*83ee113eSDavid van Moolenbroek 88*83ee113eSDavid van Moolenbroek route -n flush -inet -llinfo -host 89*83ee113eSDavid van Moolenbroek} 90*83ee113eSDavid van Moolenbroek 91*83ee113eSDavid van Moolenbroek# Invoke the local dhcp client enter hooks, if they exist. 92*83ee113eSDavid van Moolenbroekif [ -f $ENTERHOOKS ]; then 93*83ee113eSDavid van Moolenbroek exit_status=0 94*83ee113eSDavid van Moolenbroek . $ENTERHOOKS 95*83ee113eSDavid van Moolenbroek # allow the local script to abort processing of this state 96*83ee113eSDavid van Moolenbroek # local script must set exit_status variable to nonzero. 97*83ee113eSDavid van Moolenbroek if [ $exit_status -ne 0 ]; then 98*83ee113eSDavid van Moolenbroek exit $exit_status 99*83ee113eSDavid van Moolenbroek fi 100*83ee113eSDavid van Moolenbroekfi 101*83ee113eSDavid van Moolenbroek 102*83ee113eSDavid van Moolenbroek#if [ ! -z "$new_host_name" ]; then 103*83ee113eSDavid van Moolenbroek# echo New Host Name: $new_host_name 104*83ee113eSDavid van Moolenbroek#fi 105*83ee113eSDavid van Moolenbroek# 106*83ee113eSDavid van Moolenbroek#if [ ! -z "$new_nis_domain" ]; then 107*83ee113eSDavid van Moolenbroek# echo New NIS Domain: $new_nis_domain 108*83ee113eSDavid van Moolenbroek#fi 109*83ee113eSDavid van Moolenbroek# 110*83ee113eSDavid van Moolenbroek#if [ ! -z "$new_network_number" ]; then 111*83ee113eSDavid van Moolenbroek# echo New Network Number: $new_network_number 112*83ee113eSDavid van Moolenbroek#fi 113*83ee113eSDavid van Moolenbroek 114*83ee113eSDavid van Moolenbroekif [ ! -z "$new_broadcast_address" ]; then 115*83ee113eSDavid van Moolenbroek# echo New Broadcast Address: $new_broadcast_address 116*83ee113eSDavid van Moolenbroek new_broadcast_arg="broadcast $new_broadcast_address" 117*83ee113eSDavid van Moolenbroekfi 118*83ee113eSDavid van Moolenbroek 119*83ee113eSDavid van Moolenbroekif [ ! -z "$old_broadcast_address" ]; then 120*83ee113eSDavid van Moolenbroek old_broadcast_arg="broadcast $old_broadcast_address" 121*83ee113eSDavid van Moolenbroekfi 122*83ee113eSDavid van Moolenbroek 123*83ee113eSDavid van Moolenbroekif [ ! -z "$new_subnet_mask" ]; then 124*83ee113eSDavid van Moolenbroek new_netmask_arg="netmask $new_subnet_mask" 125*83ee113eSDavid van Moolenbroekfi 126*83ee113eSDavid van Moolenbroek 127*83ee113eSDavid van Moolenbroekif [ ! -z "$old_subnet_mask" ]; then 128*83ee113eSDavid van Moolenbroek old_netmask_arg="netmask $old_subnet_mask" 129*83ee113eSDavid van Moolenbroekfi 130*83ee113eSDavid van Moolenbroek 131*83ee113eSDavid van Moolenbroekif [ ! -z "$alias_subnet_mask" ]; then 132*83ee113eSDavid van Moolenbroek alias_subnet_arg="netmask $alias_subnet_mask" 133*83ee113eSDavid van Moolenbroekfi 134*83ee113eSDavid van Moolenbroek 135*83ee113eSDavid van Moolenbroekcase "$reason" in 136*83ee113eSDavid van MoolenbroekMEDIUM) 137*83ee113eSDavid van Moolenbroek test -z "$medium" && exit_with_hooks 0 138*83ee113eSDavid van Moolenbroek eval "ifconfig $interface $medium" 139*83ee113eSDavid van Moolenbroek eval "ifconfig $interface inet -alias 0.0.0.0 $medium" >/dev/null 2>&1 140*83ee113eSDavid van Moolenbroek 141*83ee113eSDavid van Moolenbroek sleep 1 142*83ee113eSDavid van Moolenbroek 143*83ee113eSDavid van Moolenbroek exit_with_hooks 0 144*83ee113eSDavid van Moolenbroek ;; 145*83ee113eSDavid van Moolenbroek 146*83ee113eSDavid van MoolenbroekPREINIT) 147*83ee113eSDavid van Moolenbroek if [ ! -z "$alias_ip_address" ]; then 148*83ee113eSDavid van Moolenbroek ifconfig $interface inet \ 149*83ee113eSDavid van Moolenbroek -alias $alias_ip_address >/dev/null 2>&1 150*83ee113eSDavid van Moolenbroek fi 151*83ee113eSDavid van Moolenbroek 152*83ee113eSDavid van Moolenbroek ifconfig $interface inet 0.0.0.0 netmask 0.0.0.0 \ 153*83ee113eSDavid van Moolenbroek broadcast 255.255.255.255 up 154*83ee113eSDavid van Moolenbroek 155*83ee113eSDavid van Moolenbroek exit_with_hooks 0 156*83ee113eSDavid van Moolenbroek ;; 157*83ee113eSDavid van Moolenbroek 158*83ee113eSDavid van MoolenbroekARPCHECK|ARPSEND) 159*83ee113eSDavid van Moolenbroek exit_with_hooks 0 160*83ee113eSDavid van Moolenbroek ;; 161*83ee113eSDavid van Moolenbroek 162*83ee113eSDavid van MoolenbroekBOUND|RENEW|REBIND|REBOOT) 163*83ee113eSDavid van Moolenbroek if [ ! -z "$new_nis_domain" ]; then 164*83ee113eSDavid van Moolenbroek if type domainname > /dev/null 2>&1; then 165*83ee113eSDavid van Moolenbroek domainname $new_nis_domain 166*83ee113eSDavid van Moolenbroek fi 167*83ee113eSDavid van Moolenbroek fi 168*83ee113eSDavid van Moolenbroek 169*83ee113eSDavid van Moolenbroek if type hostname > /dev/null 2>&1; then 170*83ee113eSDavid van Moolenbroek if [ \( -z "$current_hostname" \) -o \ 171*83ee113eSDavid van Moolenbroek \( "x$new_host_name" = "x$old_hostname" \) ]; then 172*83ee113eSDavid van Moolenbroek current_hostname=`hostname` 173*83ee113eSDavid van Moolenbroek fi 174*83ee113eSDavid van Moolenbroek if [ \( -z "$current_hostname" \) -o \ 175*83ee113eSDavid van Moolenbroek \( "x$new_host_name" != "x$old_hostname" \) ]; then 176*83ee113eSDavid van Moolenbroek hostname $new_host_name 177*83ee113eSDavid van Moolenbroek fi 178*83ee113eSDavid van Moolenbroek fi 179*83ee113eSDavid van Moolenbroek 180*83ee113eSDavid van Moolenbroek if [ \( ! -z "$old_ip_address" \) -a \( ! -z "$alias_ip_address" \) -a \ 181*83ee113eSDavid van Moolenbroek \( "x$alias_ip_address" != "x$old_ip_address" \) ]; then 182*83ee113eSDavid van Moolenbroek ifconfig $interface inet \ 183*83ee113eSDavid van Moolenbroek -alias $alias_ip_address > /dev/null 2>&1 184*83ee113eSDavid van Moolenbroek fi 185*83ee113eSDavid van Moolenbroek 186*83ee113eSDavid van Moolenbroek if [ \( ! -z "$old_ip_address" \) -a \ 187*83ee113eSDavid van Moolenbroek \( "x$old_ip_address" != "x$new_ip_address" \) ]; then 188*83ee113eSDavid van Moolenbroek eval "ifconfig $interface inet -alias $old_ip_address $medium" 189*83ee113eSDavid van Moolenbroek delete_old_routes 190*83ee113eSDavid van Moolenbroek fi 191*83ee113eSDavid van Moolenbroek 192*83ee113eSDavid van Moolenbroek if [ \( -z "$old_ip_address" \) -o \ 193*83ee113eSDavid van Moolenbroek \( "x$old_ip_address" != "x$new_ip_address" \) -o \ 194*83ee113eSDavid van Moolenbroek \( "x$reason" = "xBOUND" \) -o \( "x$reason" = "xREBOOT" \) ]; then 195*83ee113eSDavid van Moolenbroek eval "ifconfig $interface inet $new_ip_address \ 196*83ee113eSDavid van Moolenbroek $new_netmask_arg $new_broadcast_arg $medium" 197*83ee113eSDavid van Moolenbroek add_new_routes 198*83ee113eSDavid van Moolenbroek fi 199*83ee113eSDavid van Moolenbroek 200*83ee113eSDavid van Moolenbroek if [ \( ! -z "$alias_ip_address" \) -a \ 201*83ee113eSDavid van Moolenbroek \( "x$new_ip_address" != "x$alias_ip_address" \) ]; then 202*83ee113eSDavid van Moolenbroek ifconfig $interface inet alias $alias_ip_address \ 203*83ee113eSDavid van Moolenbroek $alias_subnet_arg 204*83ee113eSDavid van Moolenbroek fi 205*83ee113eSDavid van Moolenbroek make_resolv_conf 206*83ee113eSDavid van Moolenbroek exit_with_hooks 0 207*83ee113eSDavid van Moolenbroek ;; 208*83ee113eSDavid van Moolenbroek 209*83ee113eSDavid van MoolenbroekEXPIRE|FAIL|RELEASE|STOP) 210*83ee113eSDavid van Moolenbroek if [ ! -z "$old_nis_domain" ]; then 211*83ee113eSDavid van Moolenbroek if type domainname > /dev/null 2>&1; then 212*83ee113eSDavid van Moolenbroek # delete the old nis domain name 213*83ee113eSDavid van Moolenbroek domainname "" 214*83ee113eSDavid van Moolenbroek fi 215*83ee113eSDavid van Moolenbroek fi 216*83ee113eSDavid van Moolenbroek 217*83ee113eSDavid van Moolenbroek if [ ! -z "$alias_ip_address" ]; then 218*83ee113eSDavid van Moolenbroek ifconfig $interface inet -alias $alias_ip_address 219*83ee113eSDavid van Moolenbroek fi > /dev/null 2>&1 220*83ee113eSDavid van Moolenbroek 221*83ee113eSDavid van Moolenbroek if [ ! -z "$old_ip_address" ]; then 222*83ee113eSDavid van Moolenbroek eval "ifconfig $interface inet -alias $old_ip_address $medium" 223*83ee113eSDavid van Moolenbroek delete_old_routes 224*83ee113eSDavid van Moolenbroek 225*83ee113eSDavid van Moolenbroek fi 226*83ee113eSDavid van Moolenbroek 227*83ee113eSDavid van Moolenbroek if [ ! -z "$alias_ip_address" ]; then 228*83ee113eSDavid van Moolenbroek ifconfig $interface inet alias $alias_ip_address \ 229*83ee113eSDavid van Moolenbroek $alias_subnet_arg 230*83ee113eSDavid van Moolenbroek fi 231*83ee113eSDavid van Moolenbroek 232*83ee113eSDavid van Moolenbroek restore_resolv_conf 233*83ee113eSDavid van Moolenbroek exit_with_hooks 0 234*83ee113eSDavid van Moolenbroek ;; 235*83ee113eSDavid van Moolenbroek 236*83ee113eSDavid van MoolenbroekTIMEOUT) 237*83ee113eSDavid van Moolenbroek if [ ! -z "$alias_ip_address" ]; then 238*83ee113eSDavid van Moolenbroek ifconfig $interface inet -alias $alias_ip_address 239*83ee113eSDavid van Moolenbroek fi > /dev/null 2>&1 240*83ee113eSDavid van Moolenbroek 241*83ee113eSDavid van Moolenbroek if [ ! -z "$new_host_name" ]; then 242*83ee113eSDavid van Moolenbroek if type hostname > /dev/null 2>&1; then 243*83ee113eSDavid van Moolenbroek hostname $new_host_name 244*83ee113eSDavid van Moolenbroek fi 245*83ee113eSDavid van Moolenbroek fi 246*83ee113eSDavid van Moolenbroek 247*83ee113eSDavid van Moolenbroek if [ ! -z "$new_nis_domain" ]; then 248*83ee113eSDavid van Moolenbroek if type domainname > /dev/null 2>&1; then 249*83ee113eSDavid van Moolenbroek domainname $new_nis_domain 250*83ee113eSDavid van Moolenbroek fi 251*83ee113eSDavid van Moolenbroek fi 252*83ee113eSDavid van Moolenbroek 253*83ee113eSDavid van Moolenbroek eval "ifconfig $interface inet $new_ip_address $new_netmask_arg \ 254*83ee113eSDavid van Moolenbroek $new_broadcast_arg $medium" 255*83ee113eSDavid van Moolenbroek sleep 1 256*83ee113eSDavid van Moolenbroek 257*83ee113eSDavid van Moolenbroek if [ ! -z "$new_routers" ]; then 258*83ee113eSDavid van Moolenbroek set -- $new_routers 259*83ee113eSDavid van Moolenbroek if ping -n -q -c 1 -w 1 $1; then 260*83ee113eSDavid van Moolenbroek if [ \( ! -z "$alias_ip_address" \) -a \ 261*83ee113eSDavid van Moolenbroek \( "x$new_ip_address" != "x$alias_ip_address" \) ] 262*83ee113eSDavid van Moolenbroek then 263*83ee113eSDavid van Moolenbroek ifconfig $interface inet alias \ 264*83ee113eSDavid van Moolenbroek $alias_ip_address $alias_subnet_arg 265*83ee113eSDavid van Moolenbroek fi 266*83ee113eSDavid van Moolenbroek 267*83ee113eSDavid van Moolenbroek add_new_routes 268*83ee113eSDavid van Moolenbroek make_resolv_conf 269*83ee113eSDavid van Moolenbroek exit_with_hooks 0 270*83ee113eSDavid van Moolenbroek fi 271*83ee113eSDavid van Moolenbroek fi 272*83ee113eSDavid van Moolenbroek 273*83ee113eSDavid van Moolenbroek eval "ifconfig $interface inet -alias $new_ip_address $medium" 274*83ee113eSDavid van Moolenbroek 275*83ee113eSDavid van Moolenbroek delete_old_routes 276*83ee113eSDavid van Moolenbroek 277*83ee113eSDavid van Moolenbroek exit_with_hooks 1 278*83ee113eSDavid van Moolenbroek ;; 279*83ee113eSDavid van Moolenbroek*) 280*83ee113eSDavid van Moolenbroek exit_with_hooks 0 281*83ee113eSDavid van Moolenbroek ;; 282*83ee113eSDavid van Moolenbroekesac 283