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

1.1       misho       1: #!/bin/sh
                      2: 
                      3: make_resolv_conf() {
                      4:   if [ "x$new_domain_name" != x ] && [ 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:  if [ x$new_interface_mtu != x ]; then
                     83:    mtu_arg="mtu $new_interface_mtu"
                     84:  fi
                     85: if [ x$IF_METRIC != x ]; then
                     86:   metric_arg="metric $IF_METRIC"
                     87: fi
                     88: 
                     89: if [ x$reason = xMEDIUM ]; then
                     90:   eval "ifconfig $interface $medium"
                     91:   eval "ifconfig $interface inet -alias 0.0.0.0 $medium" >/dev/null 2>&1
                     92:   sleep 1
                     93:   exit_with_hooks 0
                     94: fi
                     95: 
                     96: ###
                     97: ### DHCPv4 Handlers
                     98: ###
                     99: 
                    100: if [ x$reason = xPREINIT ]; then
                    101:   if [ x$alias_ip_address != x ]; then
                    102:     ifconfig $interface inet -alias $alias_ip_address > /dev/null 2>&1
                    103:     route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1
                    104:   fi
                    105:   ifconfig $interface inet 0.0.0.0 netmask 0.0.0.0 \
                    106:                broadcast 255.255.255.255 up
                    107:   exit_with_hooks 0
                    108: fi
                    109: 
                    110: if [ x$reason = xARPCHECK ] || [ x$reason = xARPSEND ]; then
                    111:   exit_with_hooks 0
                    112: fi
                    113:   
                    114: if [ x$reason = xBOUND ] || [ x$reason = xRENEW ] || \
                    115:    [ x$reason = xREBIND ] || [ x$reason = xREBOOT ]; then
                    116:   current_hostname=`hostname`
                    117:   if [ x$current_hostname = x ] || \
                    118:      [ x$current_hostname = x$old_host_name ]; then
                    119:     if [ x$current_hostname = x ] || \
                    120:        [ x$new_host_name != x$old_host_name ]; then
                    121:       hostname $new_host_name
                    122:     fi
                    123:   fi
                    124:     
                    125:   if [ x$old_ip_address != x ] && [ x$alias_ip_address != x ] && \
                    126:                [ x$alias_ip_address != x$old_ip_address ]; then
                    127:     ifconfig $interface inet -alias $alias_ip_address > /dev/null 2>&1
                    128:     route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1
                    129:   fi
                    130:   if [ x$old_ip_address != x ] && [ x$old_ip_address != x$new_ip_address ]
                    131:    then
                    132:     eval "ifconfig $interface inet -alias $old_ip_address $medium"
                    133:     route delete $old_ip_address 127.1 >/dev/null 2>&1
                    134:     for router in $old_routers; do
                    135:       route delete default $router >/dev/null 2>&1
                    136:     done
                    137:     if [ "$old_static_routes" != "" ]; then
                    138:       set $old_static_routes
                    139:       while [ $# -gt 1 ]; do
                    140:        route delete $1 $2
                    141:        shift; shift
                    142:       done
                    143:     fi
                    144:     arp -n -a | sed -n -e 's/^.*(\(.*\)) at .*$/arp -n -d \1/p' |sh
                    145:   fi
                    146:   if [ x$old_ip_address = x ] || [ x$old_ip_address != x$new_ip_address ] || \
                    147:      [ x$reason = xBOUND ] || [ x$reason = xREBOOT ]; then
                    148:     eval "ifconfig $interface inet $new_ip_address $new_netmask_arg \
                    149:                        $new_broadcast_arg $mtu_arg $metric_arg $medium"
                    150:     route add $new_ip_address 127.1 >/dev/null 2>&1
                    151:     for router in $new_routers; do
                    152:       route add default $router >/dev/null 2>&1
                    153:     done
                    154:     if [ "$new_static_routes" != "" ]; then
                    155:       set $new_static_routes
                    156:       while [ $# -gt 1 ]; do
                    157:        route add $1 $2
                    158:        shift; shift
                    159:       done
                    160:     fi
                    161:   else                                                                        
                    162:     # we haven't changed the address, have we changed other options           
                    163:     # that we wish to update?
                    164:     if [ x$new_routers != x ] && [ x$new_routers != x$old_routers ] ; then
                    165:       # if we've changed routers delete the old and add the new.
                    166:       $LOGGER "New Routers: $new_routers"
                    167:       for router in $old_routers; do
                    168:         route delete default $router >/dev/null 2>&1
                    169:       done
                    170:       for router in $new_routers; do
                    171:         route add default $router >/dev/null 2>&1
                    172:       done
                    173:     fi
                    174:   fi
                    175:   if [ x$new_ip_address != x$alias_ip_address ] && [ x$alias_ip_address != x ];
                    176:    then
                    177:     ifconfig $interface inet alias $alias_ip_address $alias_subnet_arg
                    178:     route add $alias_ip_address 127.0.0.1
                    179:   fi
                    180:   make_resolv_conf
                    181:   exit_with_hooks 0
                    182: fi
                    183: 
                    184: if [ x$reason = xEXPIRE ] || [ x$reason = xFAIL ] || [ x$reason = xRELEASE ] \
                    185:    || [ x$reason = xSTOP ]; then
                    186:   if [ x$alias_ip_address != x ]; then
                    187:     ifconfig $interface inet -alias $alias_ip_address > /dev/null 2>&1
                    188:     route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1
                    189:   fi
                    190:   if [ x$old_ip_address != x ]; then
                    191:     eval "ifconfig $interface inet -alias $old_ip_address $medium"
                    192:     route delete $old_ip_address 127.1 >/dev/null 2>&1
                    193:     for router in $old_routers; do
                    194:       route delete default $router >/dev/null 2>&1
                    195:     done
                    196:     if [ "$old_static_routes" != "" ]; then
                    197:       set $old_static_routes
                    198:       while [ $# -gt 1 ]; do
                    199:        route delete $1 $2
                    200:        shift; shift
                    201:       done
                    202:     fi
                    203:     arp -n -a | sed -n -e 's/^.*(\(.*\)) at .*$/arp -n -d \1/p' \
                    204:                                                |sh >/dev/null 2>&1
                    205:   fi
                    206:   if [ x$alias_ip_address != x ]; then
                    207:     ifconfig $interface inet alias $alias_ip_address $alias_subnet_arg
                    208:     route add $alias_ip_address 127.0.0.1
                    209:   fi
                    210:   exit_with_hooks 0
                    211: fi
                    212: 
                    213: if [ x$reason = xTIMEOUT ]; then
                    214:   if [ x$alias_ip_address != x ]; then
                    215:     ifconfig $interface inet -alias $alias_ip_address > /dev/null 2>&1
                    216:     route delete $alias_ip_address 127.0.0.1 > /dev/null 2>&1
                    217:   fi
                    218:   eval "ifconfig $interface inet $new_ip_address $new_netmask_arg \
                    219:                        $new_broadcast_arg $mtu_arg $metric_arg $medium"
                    220:   sleep 1
                    221:   if [ "$new_routers" != "" ]; then
                    222:     set $new_routers
                    223:     if ping -q -c 1 -w 1 $1; then
                    224:       if [ x$new_ip_address != x$alias_ip_address ] && \
                    225:                        [ x$alias_ip_address != x ]; then
                    226:        ifconfig $interface inet alias $alias_ip_address $alias_subnet_arg
                    227:        route add $alias_ip_address 127.0.0.1
                    228:       fi
                    229:       route add $new_ip_address 127.1 >/dev/null 2>&1
                    230:       for router in $new_routers; do
                    231:        route add default $router >/dev/null 2>&1
                    232:       done
                    233:       set $new_static_routes
                    234:       while [ $# -gt 1 ]; do
                    235:        route add $0 $1
                    236:        shift; shift
                    237:       done
                    238:       make_resolv_conf
                    239:       exit_with_hooks 0
                    240:     fi
                    241:   fi
                    242:   eval "ifconfig $interface inet -alias $new_ip_address $medium"
                    243:   for router in $old_routers; do
                    244:     route delete default $router >/dev/null 2>&1
                    245:   done
                    246:   if [ "$old_static_routes" != "" ]; then
                    247:     set $old_static_routes
                    248:     while [ $# -gt 1 ]; do
                    249:       route delete $1 $2
                    250:       shift; shift
                    251:     done
                    252:   fi
                    253:   arp -n -a | sed -n -e 's/^.*(\(.*\)) at .*$/arp -n -d \1/p' \
                    254:                                                        |sh >/dev/null 2>&1
                    255:   exit_with_hooks 1
                    256: fi
                    257: 
                    258: ###
                    259: ### DHCPv6 Handlers
                    260: ###
                    261: 
                    262: if [ ${reason} = PREINIT6 ] ; then
                    263:   # Ensure interface is up.
                    264:   ifconfig ${interface} up
                    265: 
                    266:   # XXX: Remove any stale addresses from aborted clients.
                    267: 
                    268:   exit_with_hooks 0
                    269: fi
                    270: 
                    271: if [ x${old_ip6_prefix} != x ] || [ x${new_ip6_prefix} != x ] ; then
                    272:     echo Prefix ${reason} old=${old_ip6_prefix} new=${new_ip6_prefix}
                    273: 
                    274:     exit_with_hooks 0
                    275: fi
                    276: 
                    277: if [ ${reason} = BOUND6 ] ; then
                    278:   if [ x${new_ip6_address} = x ] || [ x${new_ip6_prefixlen} = x ] ; then
                    279:     exit_with_hooks 2;
                    280:   fi
                    281: 
                    282:   ifconfig ${interface} inet6 add ${new_ip6_address}/${new_ip6_prefixlen}
                    283: 
                    284:   # Check for nameserver options.
                    285:   make_resolv_conf
                    286: 
                    287:   exit_with_hooks 0
                    288: fi
                    289: 
                    290: if [ ${reason} = RENEW6 ] || [ ${reason} = REBIND6 ] ; then
                    291:   # Make sure nothing has moved around on us.
                    292: 
                    293:   # Nameservers/domains/etc.
                    294:   if [ "x${new_dhcp6_name_servers}" != "x${old_dhcp6_name_servers}" ] ||
                    295:      [ "x${new_dhcp6_domain_search}" != "x${old_dhcp6_domain_search}" ] ; then
                    296:     make_resolv_conf
                    297:   fi
                    298: 
                    299:   exit_with_hooks 0
                    300: fi
                    301: 
                    302: if [ ${reason} = DEPREF6 ] ; then
                    303:   if [ x${new_ip6_prefixlen} = x ] ; then
                    304:     exit_with_hooks 2;
                    305:   fi
                    306: 
                    307:   # XXX:
                    308:   # There doesn't appear to be a way to update an addr to indicate
                    309:   # preference.
                    310: 
                    311:   exit_with_hooks 0
                    312: fi
                    313: 
                    314: if [ ${reason} = EXPIRE6 -o ${reason} = RELEASE6 -o ${reason} = STOP6 ] ; then
                    315:   if [ x${old_ip6_address} = x ] || [ x${old_ip6_prefixlen} = x ] ; then
                    316:     exit_with_hooks 2;
                    317:   fi
                    318: 
                    319:   ifconfig ${interface} inet6 delete ${old_ip6_address}/${old_ip6_prefixlen}
                    320: 
                    321:   exit_with_hooks 0
                    322: fi
                    323: 
                    324: exit_with_hooks 0

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