1 1.1 christos #!/bin/sh 2 1.1 christos # 3 1.1 christos # Id: freebsd,v 1.24 2011/05/18 19:55:44 sar Exp 4 1.1 christos # 5 1.1 christos # $FreeBSD$ 6 1.1 christos 7 1.1 christos if [ -x /usr/bin/logger ]; then 8 1.1 christos LOGGER="/usr/bin/logger -s -p user.notice -t dhclient" 9 1.1 christos else 10 1.1 christos LOGGER=echo 11 1.1 christos fi 12 1.1 christos 13 1.1 christos make_resolv_conf() { 14 1.1 christos if [ x"$new_domain_name_servers" != x ]; then 15 1.1 christos ( cat /dev/null > /etc/resolv.conf.dhclient ) 16 1.1 christos exit_status=$? 17 1.1 christos if [ $exit_status -ne 0 ]; then 18 1.1 christos $LOGGER "Unable to create /etc/resolv.conf.dhclient: Error $exit_status" 19 1.1 christos else 20 1.1 christos if [ "x$new_domain_search" != x ]; then 21 1.1 christos ( echo search $new_domain_search >> /etc/resolv.conf.dhclient ) 22 1.1 christos exit_status=$? 23 1.1 christos elif [ "x$new_domain_name" != x ]; then 24 1.1 christos # Note that the DHCP 'Domain Name Option' is really just a domain 25 1.1 christos # name, and that this practice of using the domain name option as 26 1.1 christos # a search path is both nonstandard and deprecated. 27 1.1 christos ( echo search $new_domain_name >> /etc/resolv.conf.dhclient ) 28 1.1 christos exit_status=$? 29 1.1 christos fi 30 1.1 christos for nameserver in $new_domain_name_servers; do 31 1.1 christos if [ $exit_status -ne 0 ]; then 32 1.1 christos break 33 1.1 christos fi 34 1.1 christos ( echo nameserver $nameserver >>/etc/resolv.conf.dhclient ) 35 1.1 christos exit_status=$? 36 1.1 christos done 37 1.1 christos 38 1.1 christos # If there were no errors, attempt to mv the new file into place. 39 1.1 christos if [ $exit_status -eq 0 ]; then 40 1.1 christos ( mv /etc/resolv.conf.dhclient /etc/resolv.conf ) 41 1.1 christos exit_status=$? 42 1.1 christos fi 43 1.1 christos 44 1.1 christos if [ $exit_status -ne 0 ]; then 45 1.1 christos $LOGGER "Error while writing new /etc/resolv.conf." 46 1.1 christos fi 47 1.1 christos fi 48 1.1 christos elif [ "x${new_dhcp6_name_servers}" != x ] ; then 49 1.1 christos ( cat /dev/null > /etc/resolv.conf.dhclient6 ) 50 1.1 christos exit_status=$? 51 1.1 christos if [ $exit_status -ne 0 ] ; then 52 1.1 christos $LOGGER "Unable to create /etc/resolv.conf.dhclient6: Error $exit_status" 53 1.1 christos else 54 1.1 christos if [ "x${new_dhcp6_domain_search}" != x ] ; then 55 1.1 christos ( echo search ${new_dhcp6_domain_search} >> /etc/resolv.conf.dhclient6 ) 56 1.1 christos exit_status=$? 57 1.1 christos fi 58 1.1 christos for nameserver in ${new_dhcp6_name_servers} ; do 59 1.1 christos if [ $exit_status -ne 0 ] ; then 60 1.1 christos break 61 1.1 christos fi 62 1.1 christos # If the nameserver has a link-local address 63 1.1 christos # add a <zone_id> (interface name) to it. 64 1.1 christos case $nameserver in 65 1.1 christos fe80:*) zone_id="%$interface";; 66 1.1 christos FE80:*) zone_id="%$interface";; 67 1.1 christos *) zone_id="";; 68 1.1 christos esac 69 1.1 christos ( echo nameserver ${nameserver}$zone_id >> /etc/resolv.conf.dhclient6 ) 70 1.1 christos exit_status=$? 71 1.1 christos done 72 1.1 christos 73 1.1 christos if [ $exit_status -eq 0 ] ; then 74 1.1 christos ( mv /etc/resolv.conf.dhclient6 /etc/resolv.conf ) 75 1.1 christos exit_status=$? 76 1.1 christos fi 77 1.1 christos 78 1.1 christos if [ $exit_status -ne 0 ] ; then 79 1.1 christos $LOGGER "Error while writing new /etc/resolv.conf." 80 1.1 christos fi 81 1.1 christos fi 82 1.1 christos fi 83 1.1 christos } 84 1.1 christos 85 1.1 christos # Must be used on exit. Invokes the local dhcp client exit hooks, if any. 86 1.1 christos exit_with_hooks() { 87 1.1 christos exit_status=$1 88 1.1 christos if [ -f /etc/dhclient-exit-hooks ]; then 89 1.1 christos . /etc/dhclient-exit-hooks 90 1.1 christos fi 91 1.1 christos # probably should do something with exit status of the local script 92 1.1 christos exit $exit_status 93 1.1 christos } 94 1.1 christos 95 1.1 christos # This function was largely borrowed from dhclient-script that 96 1.1 christos # ships with Centos, authored by Jiri Popelka and David Cantrell 97 1.1 christos # of Redhat. Thanks guys. 98 1.1 christos add_ipv6_addr_with_DAD() { 99 1.1 christos ifconfig ${interface} inet6 ${new_ip6_address}/${new_ip6_prefixlen} alias 100 1.1 christos 101 1.1 christos if [ ${dad_wait_time} -le 0 ] 102 1.1 christos then 103 1.1 christos # if we're not waiting for DAD, assume we're good 104 1.1 christos return 0 105 1.1 christos fi 106 1.1 christos 107 1.1 christos # Repeatedly test whether newly added address passed 108 1.1 christos # duplicate address detection (DAD) 109 1.1 christos for i in $(seq 1 ${dad_wait_time}); do 110 1.1 christos sleep 1 # give the DAD some time 111 1.1 christos 112 1.1 christos addr=$(ifconfig ${interface} \ 113 1.1 christos | grep "${new_ip6_address} prefixlen ${new_ip6_prefixlen}") 114 1.1 christos 115 1.1 christos # tentative flag == DAD is still not complete 116 1.1 christos tentative=$(echo "${addr}" | grep tentative) 117 1.1 christos # dadfailed flag == address is already in use somewhere else 118 1.1 christos dadfailed=$(echo "${addr}" | grep duplicated) 119 1.1 christos 120 1.1 christos if [ -n "${dadfailed}" ] ; then 121 1.1 christos # dad failed, remove the address 122 1.1 christos ifconfig ${interface} inet6 ${new_ip6_address}/${new_ip6_prefixlen} -alias 123 1.1 christos exit_with_hooks 3 124 1.1 christos fi 125 1.1 christos 126 1.1 christos if [ -z "${tentative}" ] ; then 127 1.1 christos if [ -n "${addr}" ]; then 128 1.1 christos # DAD is over 129 1.1 christos return 0 130 1.1 christos else 131 1.1 christos # address was auto-removed (or not added at all) 132 1.1 christos exit_with_hooks 3 133 1.1 christos fi 134 1.1 christos fi 135 1.1 christos done 136 1.1 christos 137 1.1 christos return 0 138 1.1 christos } 139 1.1 christos 140 1.1 christos # Invoke the local dhcp client enter hooks, if they exist. 141 1.1 christos if [ -f /etc/dhclient-enter-hooks ]; then 142 1.1 christos exit_status=0 143 1.1 christos . /etc/dhclient-enter-hooks 144 1.1 christos # allow the local script to abort processing of this state 145 1.1 christos # local script must set exit_status variable to nonzero. 146 1.1 christos if [ $exit_status -ne 0 ]; then 147 1.1 christos exit $exit_status 148 1.1 christos fi 149 1.1 christos fi 150 1.1 christos 151 1.1 christos if [ x$new_network_number != x ]; then 152 1.1 christos $LOGGER New Network Number: $new_network_number 153 1.1 christos fi 154 1.1 christos 155 1.1 christos if [ x$new_broadcast_address != x ]; then 156 1.1 christos $LOGGER New Broadcast Address: $new_broadcast_address 157 1.1 christos new_broadcast_arg="broadcast $new_broadcast_address" 158 1.1 christos fi 159 1.1 christos if [ x$old_broadcast_address != x ]; then 160 1.1 christos old_broadcast_arg="broadcast $old_broadcast_address" 161 1.1 christos fi 162 1.1 christos if [ x$new_subnet_mask != x ]; then 163 1.1 christos new_netmask_arg="netmask $new_subnet_mask" 164 1.1 christos fi 165 1.1 christos if [ x$old_subnet_mask != x ]; then 166 1.1 christos old_netmask_arg="netmask $old_subnet_mask" 167 1.1 christos fi 168 1.1 christos if [ x$alias_subnet_mask != x ]; then 169 1.1 christos alias_subnet_arg="netmask $alias_subnet_mask" 170 1.1 christos fi 171 1.1 christos if [ x$new_interface_mtu != x ]; then 172 1.1 christos mtu_arg="mtu $new_interface_mtu" 173 1.1 christos fi 174 1.1 christos if [ x$IF_METRIC != x ]; then 175 1.1 christos metric_arg="metric $IF_METRIC" 176 1.1 christos fi 177 1.1 christos 178 1.1 christos if [ x$reason = xMEDIUM ]; then 179 1.1 christos eval "ifconfig $interface $medium" 180 1.1 christos eval "ifconfig $interface inet -alias 0.0.0.0 $medium" >/dev/null 2>&1 181 1.1 christos sleep 1 182 1.1 christos exit_with_hooks 0 183 1.1 christos fi 184 1.1 christos 185 1.1 christos ### 186 1.1 christos ### DHCPv4 Handlers 187 1.1 christos ### 188 1.1 christos 189 1.1 christos if [ x$reason = xPREINIT ]; then 190 1.1 christos if [ x$alias_ip_address != x ]; then 191 1.1 christos ifconfig $interface inet -alias $alias_ip_address > /dev/null 2>&1 192 1.1 christos route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1 193 1.1 christos fi 194 1.1 christos ifconfig $interface inet 0.0.0.0 netmask 0.0.0.0 \ 195 1.1 christos broadcast 255.255.255.255 up 196 1.1 christos exit_with_hooks 0 197 1.1 christos fi 198 1.1 christos 199 1.1 christos if [ x$reason = xARPCHECK ] || [ x$reason = xARPSEND ]; then 200 1.1 christos exit_with_hooks 0; 201 1.1 christos fi 202 1.1 christos 203 1.1 christos if [ x$reason = xBOUND ] || [ x$reason = xRENEW ] || \ 204 1.1 christos [ x$reason = xREBIND ] || [ x$reason = xREBOOT ]; then 205 1.1 christos current_hostname=`/bin/hostname` 206 1.1 christos if [ x$current_hostname = x ] || \ 207 1.1 christos [ x$current_hostname = x$old_host_name ]; then 208 1.1 christos if [ x$current_hostname = x ] || \ 209 1.1 christos [ x$new_host_name != x$old_host_name ]; then 210 1.1 christos $LOGGER "New Hostname: $new_host_name" 211 1.1 christos hostname $new_host_name 212 1.1 christos fi 213 1.1 christos fi 214 1.1 christos if [ x$old_ip_address != x ] && [ x$alias_ip_address != x ] && \ 215 1.1 christos [ x$alias_ip_address != x$old_ip_address ]; then 216 1.1 christos ifconfig $interface inet -alias $alias_ip_address > /dev/null 2>&1 217 1.1 christos route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1 218 1.1 christos fi 219 1.1 christos if [ x$old_ip_address != x ] && [ x$old_ip_address != x$new_ip_address ] 220 1.1 christos then 221 1.1 christos eval "ifconfig $interface inet -alias $old_ip_address $medium" 222 1.1 christos route delete $old_ip_address 127.1 >/dev/null 2>&1 223 1.1 christos for router in $old_routers; do 224 1.1 christos route delete default $router >/dev/null 2>&1 225 1.1 christos done 226 1.1 christos if [ -n "$old_static_routes" ]; then 227 1.1 christos set -- $old_static_routes 228 1.1 christos while [ $# -gt 1 ]; do 229 1.1 christos route delete $1 $2 230 1.1 christos shift; shift 231 1.1 christos done 232 1.1 christos fi 233 1.1 christos arp -n -a | sed -n -e 's/^.*(\(.*\)) at .*$/arp -d \1/p' |sh 234 1.1 christos fi 235 1.1 christos if [ x$old_ip_address = x ] || [ x$old_ip_address != x$new_ip_address ] || \ 236 1.1 christos [ x$reason = xBOUND ] || [ x$reason = xREBOOT ]; then 237 1.1 christos eval "ifconfig $interface inet $new_ip_address $new_netmask_arg \ 238 1.1 christos $new_broadcast_arg $mtu_arg $metric_arg $medium" 239 1.1 christos $LOGGER "New IP Address ($interface): $new_ip_address" 240 1.1 christos $LOGGER "New Subnet Mask ($interface): $new_subnet_mask" 241 1.1 christos $LOGGER "New Broadcast Address ($interface): $new_broadcast_address" 242 1.1 christos if [ -n "$new_routers" ]; then 243 1.1 christos $LOGGER "New Routers: $new_routers" 244 1.1 christos fi 245 1.1 christos route add $new_ip_address 127.1 >/dev/null 2>&1 246 1.1 christos for router in $new_routers; do 247 1.1 christos # If the subnet is captive, eg the netmask is /32 but the default 248 1.1 christos # gateway is (obviously) outside of this, then we need to produce a 249 1.1 christos # host route to reach the gateway. 250 1.1 christos if [ "x$new_subnet_mask" = "x255.255.255.255" ] ; then 251 1.1 christos route add -host $router -interface $interface 252 1.1 christos fi 253 1.1 christos route add default $router >/dev/null 2>&1 254 1.1 christos done 255 1.1 christos if [ -n "$new_static_routes" ]; then 256 1.1 christos $LOGGER "New Static Routes: $new_static_routes" 257 1.1 christos set -- $new_static_routes 258 1.1 christos while [ $# -gt 1 ]; do 259 1.1 christos route add $1 $2 260 1.1 christos shift; shift 261 1.1 christos done 262 1.1 christos fi 263 1.1 christos else 264 1.1 christos # we haven't changed the address, have we changed other options 265 1.1 christos # that we wish to update? 266 1.1 christos if [ x$new_routers != x ] && [ x$new_routers != x$old_routers ] ; then 267 1.1 christos # if we've changed routers delete the old and add the new. 268 1.1 christos $LOGGER "New Routers: $new_routers" 269 1.1 christos for router in $old_routers; do 270 1.1 christos route delete default $router >/dev/null 2>&1 271 1.1 christos done 272 1.1 christos for router in $new_routers; do 273 1.1 christos # If the subnet is captive, eg the netmask is /32 but the default 274 1.1 christos # gateway is (obviously) outside of this, then we need to produce a 275 1.1 christos # host route to reach the gateway. 276 1.1 christos if [ "x$new_subnet_mask" = "x255.255.255.255" ] ; then 277 1.1 christos route add -host $router -interface $interface 278 1.1 christos fi 279 1.1 christos route add default $router >/dev/null 2>&1 280 1.1 christos done 281 1.1 christos fi 282 1.1 christos fi 283 1.1 christos if [ x$new_ip_address != x$alias_ip_address ] && [ x$alias_ip_address != x ]; 284 1.1 christos then 285 1.1 christos ifconfig $interface inet alias $alias_ip_address $alias_subnet_arg 286 1.1 christos route add $alias_ip_address 127.0.0.1 287 1.1 christos fi 288 1.1 christos make_resolv_conf 289 1.1 christos exit_with_hooks 0 290 1.1 christos fi 291 1.1 christos 292 1.1 christos if [ x$reason = xEXPIRE ] || [ x$reason = xFAIL ] || [ x$reason = xRELEASE ] \ 293 1.1 christos || [ x$reason = xSTOP ]; then 294 1.1 christos if [ x$alias_ip_address != x ]; then 295 1.1 christos ifconfig $interface inet -alias $alias_ip_address > /dev/null 2>&1 296 1.1 christos route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1 297 1.1 christos fi 298 1.1 christos if [ x$old_ip_address != x ]; then 299 1.1 christos eval "ifconfig $interface inet -alias $old_ip_address $medium" 300 1.1 christos route delete $old_ip_address 127.1 >/dev/null 2>&1 301 1.1 christos for router in $old_routers; do 302 1.1 christos route delete default $router >/dev/null 2>&1 303 1.1 christos done 304 1.1 christos if [ -n "$old_static_routes" ]; then 305 1.1 christos set -- $old_static_routes 306 1.1 christos while [ $# -gt 1 ]; do 307 1.1 christos route delete $1 $2 308 1.1 christos shift; shift 309 1.1 christos done 310 1.1 christos fi 311 1.1 christos arp -n -a | sed -n -e 's/^.*(\(.*\)) at .*$/arp -d \1/p' \ 312 1.1 christos |sh >/dev/null 2>&1 313 1.1 christos fi 314 1.1 christos if [ x$alias_ip_address != x ]; then 315 1.1 christos ifconfig $interface inet alias $alias_ip_address $alias_subnet_arg 316 1.1 christos route add $alias_ip_address 127.0.0.1 317 1.1 christos fi 318 1.1 christos exit_with_hooks 0 319 1.1 christos fi 320 1.1 christos 321 1.1 christos if [ x$reason = xTIMEOUT ]; then 322 1.1 christos if [ x$alias_ip_address != x ]; then 323 1.1 christos ifconfig $interface inet -alias $alias_ip_address > /dev/null 2>&1 324 1.1 christos route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1 325 1.1 christos fi 326 1.1 christos eval "ifconfig $interface inet $new_ip_address $new_netmask_arg \ 327 1.1 christos $new_broadcast_arg $mtu_arg $metric_arg $medium" 328 1.1 christos $LOGGER "New IP Address ($interface): $new_ip_address" 329 1.1 christos $LOGGER "New Subnet Mask ($interface): $new_subnet_mask" 330 1.1 christos $LOGGER "New Broadcast Address ($interface): $new_broadcast_address" 331 1.1 christos sleep 1 332 1.1 christos if [ -n "$new_routers" ]; then 333 1.1 christos $LOGGER "New Routers: $new_routers" 334 1.1 christos set -- $new_routers 335 1.1 christos if ping -q -c 1 $1; then 336 1.1 christos if [ x$new_ip_address != x$alias_ip_address ] && \ 337 1.1 christos [ x$alias_ip_address != x ]; then 338 1.1 christos ifconfig $interface inet alias $alias_ip_address $alias_subnet_arg 339 1.1 christos route add $alias_ip_address 127.0.0.1 340 1.1 christos fi 341 1.1 christos route add $new_ip_address 127.1 >/dev/null 2>&1 342 1.1 christos for router in $new_routers; do 343 1.1 christos if [ "x$new_subnet_mask" = "x255.255.255.255" ] ; then 344 1.1 christos route add -host $router -interface $interface 345 1.1 christos fi 346 1.1 christos route add default $router >/dev/null 2>&1 347 1.1 christos done 348 1.1 christos set -- $new_static_routes 349 1.1 christos while [ $# -gt 1 ]; do 350 1.1 christos route add $1 $2 351 1.1 christos shift; shift 352 1.1 christos done 353 1.1 christos make_resolv_conf 354 1.1 christos exit_with_hooks 0 355 1.1 christos fi 356 1.1 christos fi 357 1.1 christos eval "ifconfig $interface inet -alias $new_ip_address $medium" 358 1.1 christos for router in $old_routers; do 359 1.1 christos route delete default $router >/dev/null 2>&1 360 1.1 christos done 361 1.1 christos if [ -n "$old_static_routes" ]; then 362 1.1 christos set -- $old_static_routes 363 1.1 christos while [ $# -gt 1 ]; do 364 1.1 christos route delete $1 $2 365 1.1 christos shift; shift 366 1.1 christos done 367 1.1 christos fi 368 1.1 christos arp -n -a | sed -n -e 's/^.*(\(.*\)) at .*$/arp -d \1/p' \ 369 1.1 christos |sh >/dev/null 2>&1 370 1.1 christos exit_with_hooks 1 371 1.1 christos fi 372 1.1 christos 373 1.1 christos ### 374 1.1 christos ### DHCPv6 Handlers 375 1.1 christos ### 376 1.1 christos 377 1.1 christos if [ ${reason} = PREINIT6 ] ; then 378 1.1 christos # Ensure interface is up. 379 1.1 christos ifconfig ${interface} up 380 1.1 christos 381 1.1 christos # XXX: Remove any stale addresses from aborted clients. 382 1.1 christos 383 1.1 christos # We need to give the kernel some time to active interface 384 1.1 christos interface_up_wait_time=5 385 1.1 christos for i in $(seq 0 ${interface_up_wait_time}) 386 1.1 christos do 387 1.1 christos ifconfig ${interface} | grep inactive >/dev/null 2>&1 388 1.1 christos if [ $? -ne 0 ]; then 389 1.1 christos break; 390 1.1 christos fi 391 1.1 christos sleep 1 392 1.1 christos done 393 1.1 christos 394 1.1 christos # Wait for duplicate address detection for this interface if the 395 1.1 christos # --dad-wait-time parameter has been specified and is greater than 396 1.1 christos # zero. 397 1.1 christos if [ ${dad_wait_time} -gt 0 ]; then 398 1.1 christos # Check if any IPv6 address on this interface is marked as 399 1.1 christos # tentative. 400 1.1 christos ifconfig ${interface} | grep inet6 | grep tentative \ 401 1.1 christos >/dev/null 2>&1 402 1.1 christos if [ $? -eq 0 ]; then 403 1.1 christos # Wait for duplicate address detection to complete or for 404 1.1 christos # the timeout specified as --dad-wait-time. 405 1.1 christos for i in $(seq 0 $dad_wait_time) 406 1.1 christos do 407 1.1 christos # We're going to poll for the tentative flag every second. 408 1.1 christos sleep 1 409 1.1 christos ifconfig ${interface} | grep inet6 | grep tentative \ 410 1.1 christos >/dev/null 2>&1 411 1.1 christos if [ $? -ne 0 ]; then 412 1.1 christos break; 413 1.1 christos fi 414 1.1 christos done 415 1.1 christos fi 416 1.1 christos fi 417 1.1 christos 418 1.1 christos 419 1.1 christos exit_with_hooks 0 420 1.1 christos fi 421 1.1 christos 422 1.1 christos if [ x${old_ip6_prefix} != x ] || [ x${new_ip6_prefix} != x ] ; then 423 1.1 christos echo Prefix ${reason} old=${old_ip6_prefix} new=${new_ip6_prefix} 424 1.1 christos 425 1.1 christos exit_with_hooks 0 426 1.1 christos fi 427 1.1 christos 428 1.1 christos if [ ${reason} = BOUND6 ] ; then 429 1.1 christos if [ x${new_ip6_address} = x ] || [ x${new_ip6_prefixlen} = x ] ; then 430 1.1 christos exit_with_hooks 2; 431 1.1 christos fi 432 1.1 christos 433 1.1 christos # Add address to interface, check for DAD if dad_wait_time > 0 434 1.1 christos add_ipv6_addr_with_DAD 435 1.1 christos 436 1.1 christos # Check for nameserver options. 437 1.1 christos make_resolv_conf 438 1.1 christos 439 1.1 christos exit_with_hooks 0 440 1.1 christos fi 441 1.1 christos 442 1.1 christos if [ ${reason} = RENEW6 ] || [ ${reason} = REBIND6 ] ; then 443 1.1 christos # Make sure nothing has moved around on us. 444 1.1 christos 445 1.1 christos # Nameservers/domains/etc. 446 1.1 christos if [ "x${new_dhcp6_name_servers}" != "x${old_dhcp6_name_servers}" ] || 447 1.1 christos [ "x${new_dhcp6_domain_search}" != "x${old_dhcp6_domain_search}" ] ; then 448 1.1 christos make_resolv_conf 449 1.1 christos fi 450 1.1 christos 451 1.1 christos exit_with_hooks 0 452 1.1 christos fi 453 1.1 christos 454 1.1 christos if [ ${reason} = DEPREF6 ] ; then 455 1.1 christos if [ x${new_ip6_address} = x ] ; then 456 1.1 christos exit_with_hooks 2; 457 1.1 christos fi 458 1.1 christos 459 1.1 christos ifconfig ${interface} inet6 ${new_ip6_address} deprecated 460 1.1 christos 461 1.1 christos exit_with_hooks 0 462 1.1 christos fi 463 1.1 christos 464 1.1 christos if [ ${reason} = EXPIRE6 -o ${reason} = RELEASE6 -o ${reason} = STOP6 ] ; then 465 1.1 christos if [ x${old_ip6_address} = x ] || [ x${old_ip6_prefixlen} = x ] ; then 466 1.1 christos exit_with_hooks 2; 467 1.1 christos fi 468 1.1 christos 469 1.1 christos ifconfig ${interface} inet6 ${old_ip6_address}/${old_ip6_prefixlen} -alias 470 1.1 christos 471 1.1 christos exit_with_hooks 0 472 1.1 christos fi 473 1.1 christos 474 1.1 christos exit_with_hooks 0 475