Upgrade isc-dhcp, e.g. dhclient.
[dragonfly.git] / contrib / isc-dhcp / client / scripts / freebsd
1 #!/bin/sh
2 #
3 # $Id: freebsd,v 1.13.2.5 2003/04/27 19:44:01 dhankins Exp $
4 # $FreeBSD: src/contrib/isc-dhcp/client/scripts/freebsd,v 1.26 2003/09/15 15:48:12 mbr Exp $
5 # $DragonFly: src/contrib/isc-dhcp/client/scripts/Attic/freebsd,v 1.3 2003/10/11 21:14:15 dillon Exp $
6
7 if [ -x /usr/bin/logger ]; then
8         LOGGER="/usr/bin/logger -s -p user.notice -t dhclient"
9 else
10         LOGGER=echo
11 fi
12
13 make_resolv_conf() {
14   if [ x"$new_domain_name_servers" != x ]; then
15     if [ "x$new_domain_name" != x ]; then
16       ( echo search $new_domain_name >/etc/resolv.conf )
17       exit_status=$?
18     else
19       ( rm /etc/resolv.conf )
20       exit_status=$?
21     fi
22     if [ $exit_status -ne 0 ]; then
23       $LOGGER "WARNING: Unable to update resolv.conf: Error $exit_status"
24     else
25       for nameserver in $new_domain_name_servers; do
26        ( echo nameserver $nameserver >>/etc/resolv.conf )
27       done
28     fi
29   fi
30 }
31
32 # Must be used on exit.   Invokes the local dhcp client exit hooks, if any.
33 exit_with_hooks() {
34   exit_status=$1
35   if [ -f /etc/dhclient-exit-hooks ]; then
36     . /etc/dhclient-exit-hooks
37   fi
38 # probably should do something with exit status of the local script
39   exit $exit_status
40 }
41
42 # Invoke the local dhcp client enter hooks, if they exist.
43 if [ -f /etc/dhclient-enter-hooks ]; then
44   exit_status=0
45   . /etc/dhclient-enter-hooks
46   # allow the local script to abort processing of this state
47   # local script must set exit_status variable to nonzero.
48   if [ $exit_status -ne 0 ]; then
49     exit $exit_status
50   fi
51 fi
52
53 if [ x$new_broadcast_address != x ]; then
54   new_broadcast_arg="broadcast $new_broadcast_address"
55 fi
56 if [ x$old_broadcast_address != x ]; then
57   old_broadcast_arg="broadcast $old_broadcast_address"
58 fi
59 if [ x$new_subnet_mask != x ]; then
60   new_netmask_arg="netmask $new_subnet_mask"
61 fi
62 if [ x$old_subnet_mask != x ]; then
63   old_netmask_arg="netmask $old_subnet_mask"
64 fi
65 if [ x$alias_subnet_mask != x ]; then
66   alias_subnet_arg="netmask $alias_subnet_mask"
67 fi
68
69 # Get the interface to which our default route is bound to.
70 if [ -x /usr/bin/netstat ]; then
71         if_defaultroute=`/usr/bin/netstat -rn \
72                 | /usr/bin/grep "^default" \
73                 | /usr/bin/awk '{print $6}'`
74 else
75         if_defaultroute="x"
76 fi
77
78 if [ x$reason = xMEDIUM ]; then
79   eval "ifconfig $interface $medium"
80   eval "ifconfig $interface inet -alias 0.0.0.0 $medium" >/dev/null 2>&1
81   sleep 1
82   exit_with_hooks 0
83 fi
84
85 if [ x$reason = xPREINIT ]; then
86   if [ x$alias_ip_address != x ]; then
87     ifconfig $interface inet -alias $alias_ip_address > /dev/null 2>&1
88     route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1
89   fi
90   ifconfig $interface inet 0.0.0.0 netmask 0.0.0.0 \
91                 broadcast 255.255.255.255 up
92   exit_with_hooks 0
93 fi
94
95 if [ x$reason = xARPCHECK ] || [ x$reason = xARPSEND ]; then
96   exit_with_hooks 0;
97 fi
98   
99 if [ x$reason = xBOUND ] || [ x$reason = xRENEW ] || \
100    [ x$reason = xREBIND ] || [ x$reason = xREBOOT ]; then
101   current_hostname=`/bin/hostname`
102   if [ x$current_hostname = x ] || \
103      [ x$current_hostname = x$old_host_name ]; then
104     if [ x$current_hostname = x ] || \
105        [ x$new_host_name != x$old_host_name ]; then
106       $LOGGER "New Hostname: $new_host_name"
107       hostname $new_host_name
108     fi
109   fi
110   if [ x$old_ip_address != x ] && [ x$alias_ip_address != x ] && \
111                 [ x$alias_ip_address != x$old_ip_address ]; then
112     ifconfig $interface inet -alias $alias_ip_address > /dev/null 2>&1
113     route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1
114   fi
115   if [ x$old_ip_address != x ] && [ x$old_ip_address != x$new_ip_address ]
116    then
117     eval "ifconfig $interface inet -alias $old_ip_address $medium"
118     route delete $old_ip_address 127.1 >/dev/null 2>&1
119     for router in $old_routers; do
120       route delete default $router >/dev/null 2>&1
121     done
122     if [ -n "$old_static_routes" ]; then
123       set -- $old_static_routes
124       while [ $# -gt 1 ]; do
125         route delete $1 $2
126         shift; shift
127       done
128     fi
129     arp -n -a | sed -n -e 's/^.*(\(.*\)) at .*$/arp -d \1/p' |sh
130   fi
131   if [ x$old_ip_address = x ] || [ x$old_ip_address != x$new_ip_address ] || \
132      [ x$reason = xBOUND ] || [ x$reason = xREBOOT ]; then
133     eval "ifconfig $interface inet $new_ip_address $new_netmask_arg \
134                                         $new_broadcast_arg $medium"
135     $LOGGER "New IP Address ($interface): $new_ip_address"
136     $LOGGER "New Subnet Mask ($interface): $new_subnet_mask"
137     $LOGGER "New Broadcast Address ($interface): $new_broadcast_address"
138     if [ -n "$new_routers" ]; then
139       $LOGGER "New Routers: $new_routers"
140     fi
141     route add $new_ip_address 127.1 >/dev/null 2>&1
142     for router in $new_routers; do
143       route add default $router >/dev/null 2>&1
144     done
145     if [ -n "$new_static_routes" ]; then
146       $LOGGER "New Static Routes: $new_static_routes"
147       set -- $new_static_routes
148       while [ $# -gt 1 ]; do
149         route add $1 $2
150         shift; shift
151       done
152     fi
153   fi
154   if [ x$new_ip_address != x$alias_ip_address ] && [ x$alias_ip_address != x ];
155    then
156     ifconfig $interface inet alias $alias_ip_address $alias_subnet_arg
157     route add $alias_ip_address 127.0.0.1
158   fi
159   make_resolv_conf
160   exit_with_hooks 0
161 fi
162
163 if [ x$reason = xEXPIRE ] || [ x$reason = xFAIL ] || [ x$reason = xRELEASE ] \
164    || [ x$reason = xSTOP ]; then
165   if [ x$alias_ip_address != x ]; then
166     ifconfig $interface inet -alias $alias_ip_address > /dev/null 2>&1
167     route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1
168   fi
169   if [ x$old_ip_address != x ]; then
170     eval "ifconfig $interface inet -alias $old_ip_address $medium"
171     route delete $old_ip_address 127.1 >/dev/null 2>&1
172     for router in $old_routers; do
173       if [ $if_defaultroute = x ] || [ $if_defaultroute = $interface ]; then
174               route delete default $router >/dev/null 2>&1
175       fi
176     done
177     if [ -n "$old_static_routes" ]; then
178       set -- $old_static_routes
179       while [ $# -gt 1 ]; do
180         route delete $1 $2
181         shift; shift
182       done
183     fi
184     arp -n -a | sed -n -e 's/^.*(\(.*\)) at .*$/arp -d \1/p' \
185                                                 |sh >/dev/null 2>&1
186   fi
187   if [ x$alias_ip_address != x ]; then
188     ifconfig $interface inet alias $alias_ip_address $alias_subnet_arg
189     route add $alias_ip_address 127.0.0.1
190   fi
191   exit_with_hooks 0
192 fi
193
194 if [ x$reason = xTIMEOUT ]; then
195   if [ x$alias_ip_address != x ]; then
196     ifconfig $interface inet -alias $alias_ip_address > /dev/null 2>&1
197     route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1
198   fi
199   eval "ifconfig $interface inet $new_ip_address $new_netmask_arg \
200                                         $new_broadcast_arg $medium"
201   $LOGGER "New IP Address ($interface): $new_ip_address"
202   $LOGGER "New Subnet Mask ($interface): $new_subnet_mask"
203   $LOGGER "New Broadcast Address ($interface): $new_broadcast_address"
204   sleep 1
205   if [ -n "$new_routers" ]; then
206     $LOGGER "New Routers: $new_routers"
207     set -- $new_routers
208     if ping -q -c 1 $1; then
209       if [ x$new_ip_address != x$alias_ip_address ] && \
210                         [ x$alias_ip_address != x ]; then
211         ifconfig $interface inet alias $alias_ip_address $alias_subnet_arg
212         route add $alias_ip_address 127.0.0.1
213       fi
214       route add $new_ip_address 127.1 >/dev/null 2>&1
215       for router in $new_routers; do
216         route add default $router >/dev/null 2>&1
217       done
218       set -- $new_static_routes
219       while [ $# -gt 1 ]; do
220         route add $1 $2
221         shift; shift
222       done
223       make_resolv_conf
224       exit_with_hooks 0
225     fi
226   fi
227   eval "ifconfig $interface inet -alias $new_ip_address $medium"
228   for router in $old_routers; do
229     route delete default $router >/dev/null 2>&1
230   done
231   if [ -n "$old_static_routes" ]; then
232     set -- $old_static_routes
233     while [ $# -gt 1 ]; do
234       route delete $1 $2
235       shift; shift
236     done
237   fi
238   arp -n -a | sed -n -e 's/^.*(\(.*\)) at .*$/arp -d \1/p' \
239                                                         |sh >/dev/null 2>&1
240   exit_with_hooks 1
241 fi
242
243 exit_with_hooks 0