Return to openbsd CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / dhcp / client / scripts |
1.1 ! misho 1: #!/bin/sh ! 2: ! 3: make_resolv_conf() { ! 4: if [ x"$new_domain_name_servers" != x ]; then ! 5: cat /dev/null > /etc/resolv.conf.dhclient ! 6: if [ x"$new_domain_search" != x ]; then ! 7: echo search $new_domain_search >> /etc/resolv.conf.dhclient ! 8: elif [ x"$new_domain_name" != x ]; then ! 9: # Note that the DHCP 'Domain Name Option' is really just a domain ! 10: # name, and that this practice of using the domain name option as ! 11: # a search path is both nonstandard and deprecated. ! 12: echo search $new_domain_name >> /etc/resolv.conf.dhclient ! 13: fi ! 14: for nameserver in $new_domain_name_servers; do ! 15: echo nameserver $nameserver >>/etc/resolv.conf.dhclient ! 16: done ! 17: ! 18: mv /etc/resolv.conf.dhclient /etc/resolv.conf ! 19: elif [ "x${new_dhcp6_name_servers}" != x ] ; then ! 20: cat /dev/null > /etc/resolv.conf.dhclient6 ! 21: chmod 644 /etc/resolv.conf.dhclient6 ! 22: ! 23: if [ "x${new_dhcp6_domain_search}" != x ] ; then ! 24: echo search ${new_dhcp6_domain_search} >> /etc/resolv.conf.dhclient6 ! 25: fi ! 26: for nameserver in ${new_dhcp6_name_servers} ; do ! 27: # If the nameserver has a link-local address ! 28: # add a <zone_id> (interface name) to it. ! 29: case $nameserver in ! 30: fe80:*) zone_id="%$interface";; ! 31: FE80:*) zone_id="%$interface";; ! 32: *) zone_id='';; ! 33: esac ! 34: echo nameserver ${nameserver}$zone_id >> /etc/resolv.conf.dhclient6 ! 35: done ! 36: ! 37: mv /etc/resolv.conf.dhclient6 /etc/resolv.conf ! 38: fi ! 39: } ! 40: ! 41: # Must be used on exit. Invokes the local dhcp client exit hooks, if any. ! 42: exit_with_hooks() { ! 43: exit_status=$1 ! 44: if [ -f /etc/dhclient-exit-hooks ]; then ! 45: . /etc/dhclient-exit-hooks ! 46: fi ! 47: # probably should do something with exit status of the local script ! 48: exit $exit_status ! 49: } ! 50: ! 51: # Invoke the local dhcp client enter hooks, if they exist. ! 52: if [ -f /etc/dhclient-enter-hooks ]; then ! 53: exit_status=0 ! 54: . /etc/dhclient-enter-hooks ! 55: # allow the local script to abort processing of this state ! 56: # local script must set exit_status variable to nonzero. ! 57: if [ $exit_status -ne 0 ]; then ! 58: exit $exit_status ! 59: fi ! 60: fi ! 61: ! 62: if [ x$new_network_number != x ]; then ! 63: echo New Network Number: $new_network_number ! 64: fi ! 65: ! 66: if [ x$new_broadcast_address != x ]; then ! 67: echo New Broadcast Address: $new_broadcast_address ! 68: new_broadcast_arg="broadcast $new_broadcast_address" ! 69: fi ! 70: if [ x$old_broadcast_address != x ]; then ! 71: old_broadcast_arg="broadcast $old_broadcast_address" ! 72: fi ! 73: if [ x$new_subnet_mask != x ]; then ! 74: new_netmask_arg="netmask $new_subnet_mask" ! 75: fi ! 76: if [ x$old_subnet_mask != x ]; then ! 77: old_netmask_arg="netmask $old_subnet_mask" ! 78: fi ! 79: if [ x$alias_subnet_mask != x ]; then ! 80: alias_subnet_arg="netmask $alias_subnet_mask" ! 81: fi ! 82: ! 83: if [ x$reason = xMEDIUM ]; then ! 84: eval "ifconfig $interface $medium" ! 85: eval "ifconfig $interface inet -alias 0.0.0.0 $medium" >/dev/null 2>&1 ! 86: sleep 1 ! 87: exit_with_hooks 0 ! 88: fi ! 89: ! 90: ### ! 91: ### DHCPv4 Handlers ! 92: ### ! 93: ! 94: if [ x$reason = xPREINIT ]; then ! 95: if [ x$alias_ip_address != x ]; then ! 96: ifconfig $interface inet -alias $alias_ip_address > /dev/null 2>&1 ! 97: route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1 ! 98: fi ! 99: ifconfig $interface inet 0.0.0.0 netmask 0.0.0.0 \ ! 100: broadcast 255.255.255.255 up ! 101: exit_with_hooks 0 ! 102: fi ! 103: ! 104: if [ x$reason = xARPCHECK ] || [ x$reason = xARPSEND ]; then ! 105: exit_with_hooks 0; ! 106: fi ! 107: ! 108: if [ x$reason = xBOUND ] || [ x$reason = xRENEW ] || \ ! 109: [ x$reason = xREBIND ] || [ x$reason = xREBOOT ]; then ! 110: current_hostname=`hostname` ! 111: if [ x$current_hostname = x ] || \ ! 112: [ x$current_hostname = x$old_host_name ]; then ! 113: if [ x$current_hostname = x ] || \ ! 114: [ x$new_host_name != x$old_host_name ]; then ! 115: hostname $new_host_name ! 116: fi ! 117: fi ! 118: ! 119: if [ x$old_ip_address != x ] && [ x$alias_ip_address != x ] && \ ! 120: [ x$alias_ip_address != x$old_ip_address ]; then ! 121: ifconfig $interface inet -alias $alias_ip_address > /dev/null 2>&1 ! 122: route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1 ! 123: fi ! 124: if [ x$old_ip_address != x ] && [ x$old_ip_address != x$new_ip_address ] ! 125: then ! 126: eval "ifconfig $interface inet -alias $old_ip_address $medium" ! 127: route delete $old_ip_address 127.1 >/dev/null 2>&1 ! 128: for router in $old_routers; do ! 129: route delete default $router >/dev/null 2>&1 ! 130: done ! 131: if [ "$old_static_routes" != "" ]; then ! 132: set $old_static_routes ! 133: while [ $# -gt 1 ]; do ! 134: route delete $1 $2 ! 135: shift; shift ! 136: done ! 137: fi ! 138: arp -n -a | sed -n -e 's/^.*(\(.*\)) at .*$/arp -n -d \1/p' |sh ! 139: fi ! 140: if [ x$old_ip_address = x ] || [ x$old_ip_address != x$new_ip_address ] || \ ! 141: [ x$reason = xBOUND ] || [ x$reason = xREBOOT ]; then ! 142: eval "ifconfig $interface inet $new_ip_address $new_netmask_arg \ ! 143: $new_broadcast_arg $medium" ! 144: route add $new_ip_address 127.1 >/dev/null 2>&1 ! 145: for router in $new_routers; do ! 146: route add default $router >/dev/null 2>&1 ! 147: done ! 148: if [ "$new_static_routes" != "" ]; then ! 149: set $new_static_routes ! 150: while [ $# -gt 1 ]; do ! 151: route add $1 $2 ! 152: shift; shift ! 153: done ! 154: fi ! 155: else ! 156: # we haven't changed the address, have we changed other options ! 157: # that we wish to update? ! 158: if [ x$new_routers != x ] && [ x$new_routers != x$old_routers ] ; then ! 159: # if we've changed routers delete the old and add the new. ! 160: $LOGGER "New Routers: $new_routers" ! 161: for router in $old_routers; do ! 162: route delete default $router >/dev/null 2>&1 ! 163: done ! 164: for router in $new_routers; do ! 165: route add default $router >/dev/null 2>&1 ! 166: done ! 167: fi ! 168: fi ! 169: if [ x$new_ip_address != x$alias_ip_address ] && [ x$alias_ip_address != x ]; ! 170: then ! 171: ifconfig $interface inet alias $alias_ip_address $alias_subnet_arg ! 172: route add $alias_ip_address 127.0.0.1 ! 173: fi ! 174: make_resolv_conf ! 175: exit_with_hooks 0 ! 176: fi ! 177: ! 178: if [ x$reason = xEXPIRE ] || [ x$reason = xFAIL ] || [ x$reason = xRELEASE ] \ ! 179: || [ x$reason = xSTOP ]; then ! 180: if [ x$alias_ip_address != x ]; then ! 181: ifconfig $interface inet -alias $alias_ip_address > /dev/null 2>&1 ! 182: route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1 ! 183: fi ! 184: if [ x$old_ip_address != x ]; then ! 185: eval "ifconfig $interface inet -alias $old_ip_address $medium" ! 186: route delete $old_ip_address 127.1 >/dev/null 2>&1 ! 187: for router in $old_routers; do ! 188: route delete default $router >/dev/null 2>&1 ! 189: done ! 190: if [ "$old_static_routes" != "" ]; then ! 191: set $old_static_routes ! 192: while [ $# -gt 1 ]; do ! 193: route delete $1 $2 ! 194: shift; shift ! 195: done ! 196: fi ! 197: arp -n -a | sed -n -e 's/^.*(\(.*\)) at .*$/arp -n -d \1/p' \ ! 198: |sh >/dev/null 2>&1 ! 199: fi ! 200: if [ x$alias_ip_address != x ]; then ! 201: ifconfig $interface inet alias $alias_ip_address $alias_subnet_arg ! 202: route add $alias_ip_address 127.0.0.1 ! 203: fi ! 204: exit_with_hooks 0 ! 205: fi ! 206: ! 207: if [ x$reason = xTIMEOUT ]; then ! 208: if [ x$alias_ip_address != x ]; then ! 209: ifconfig $interface inet -alias $alias_ip_address > /dev/null 2>&1 ! 210: route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1 ! 211: fi ! 212: eval "ifconfig $interface inet $new_ip_address $new_netmask_arg \ ! 213: $new_broadcast_arg $medium" ! 214: sleep 1 ! 215: if [ "$new_routers" != "" ]; then ! 216: set $new_routers ! 217: if ping -q -c 1 -w 1 $1; then ! 218: if [ x$new_ip_address != x$alias_ip_address ] && \ ! 219: [ x$alias_ip_address != x ]; then ! 220: ifconfig $interface inet alias $alias_ip_address $alias_subnet_arg ! 221: route add $alias_ip_address 127.0.0.1 ! 222: fi ! 223: route add $new_ip_address 127.1 >/dev/null 2>&1 ! 224: for router in $new_routers; do ! 225: route add default $router >/dev/null 2>&1 ! 226: done ! 227: set $new_static_routes ! 228: while [ $# -gt 1 ]; do ! 229: route add $0 $1 ! 230: shift; shift ! 231: done ! 232: make_resolv_conf ! 233: exit_with_hooks 0 ! 234: fi ! 235: fi ! 236: eval "ifconfig $interface inet -alias $new_ip_address $medium" ! 237: for router in $old_routers; do ! 238: route delete default $router >/dev/null 2>&1 ! 239: done ! 240: if [ "$old_static_routes" != "" ]; then ! 241: set $old_static_routes ! 242: while [ $# -gt 1 ]; do ! 243: route delete $1 $2 ! 244: shift; shift ! 245: done ! 246: fi ! 247: arp -n -a | sed -n -e 's/^.*(\(.*\)) at .*$/arp -n -d \1/p' \ ! 248: |sh >/dev/null 2>&1 ! 249: exit_with_hooks 1 ! 250: fi ! 251: ! 252: ### ! 253: ### DHCPv6 Handlers ! 254: ### ! 255: ! 256: if [ ${reason} = PREINIT6 ] ; then ! 257: # Ensure interface is up. ! 258: ifconfig ${interface} up ! 259: ! 260: # XXX: Remove any stale addresses from aborted clients. ! 261: ! 262: exit_with_hooks 0 ! 263: fi ! 264: ! 265: if [ x${old_ip6_prefix} != x ] || [ x${new_ip6_prefix} != x ] ; then ! 266: echo Prefix ${reason} old=${old_ip6_prefix} new=${new_ip6_prefix} ! 267: ! 268: exit_with_hooks 0 ! 269: fi ! 270: ! 271: if [ ${reason} = BOUND6 ] ; then ! 272: if [ x${new_ip6_address} = x ] || [ x${new_ip6_prefixlen} = x ] ; then ! 273: exit_with_hooks 2; ! 274: fi ! 275: ! 276: ifconfig ${interface} inet6 add ${new_ip6_address}/${new_ip6_prefixlen} ! 277: ! 278: # Check for nameserver options. ! 279: make_resolv_conf ! 280: ! 281: exit_with_hooks 0 ! 282: fi ! 283: ! 284: if [ ${reason} = RENEW6 ] || [ ${reason} = REBIND6 ] ; then ! 285: # Make sure nothing has moved around on us. ! 286: ! 287: # Nameservers/domains/etc. ! 288: if [ "x${new_dhcp6_name_servers}" != "x${old_dhcp6_name_servers}" ] || ! 289: [ "x${new_dhcp6_domain_search}" != "x${old_dhcp6_domain_search}" ] ; then ! 290: make_resolv_conf ! 291: fi ! 292: ! 293: exit_with_hooks 0 ! 294: fi ! 295: ! 296: if [ ${reason} = DEPREF6 ] ; then ! 297: if [ x${new_ip6_prefixlen} = x ] ; then ! 298: exit_with_hooks 2; ! 299: fi ! 300: ! 301: # XXX: ! 302: # There doesn't appear to be a way to update an addr to indicate ! 303: # preference. ! 304: ! 305: exit_with_hooks 0 ! 306: fi ! 307: ! 308: if [ ${reason} = EXPIRE6 -o ${reason} = RELEASE6 -o ${reason} = STOP6 ] ; then ! 309: if [ x${old_ip6_address} = x ] || [ x${old_ip6_prefixlen} = x ] ; then ! 310: exit_with_hooks 2; ! 311: fi ! 312: ! 313: ifconfig ${interface} inet6 delete ${old_ip6_address}/${old_ip6_prefixlen} ! 314: ! 315: exit_with_hooks 0 ! 316: fi ! 317: ! 318: exit_with_hooks 0