Annotation of embedaddon/dhcp/client/scripts/openbsd, revision 1.1.1.1

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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>