Annotation of embedaddon/dhcp/client/scripts/openwrt, 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:     chmod 644 /etc/resolv.conf.dhclient
                      7:     if [ x"$new_domain_search" != x ]; then
                      8:       echo search $new_domain_search >> /etc/resolv.conf.dhclient
                      9:     elif [ x"$new_domain_name" != x ]; then
                     10:       # Note that the DHCP 'Domain Name Option' is really just a domain
                     11:       # name, and that this practice of using the domain name option as
                     12:       # a search path is both nonstandard and deprecated.
                     13:       echo search $new_domain_name >> /etc/resolv.conf.dhclient
                     14:     fi
                     15:     for nameserver in $new_domain_name_servers; do
                     16:       echo nameserver $nameserver >>/etc/resolv.conf.dhclient
                     17:     done
                     18: 
                     19:     mv /etc/resolv.conf.dhclient /etc/resolv.conf
                     20:   elif [ "x${new_dhcp6_name_servers}" != x ] ; then
                     21:     cat /dev/null > /etc/resolv.conf.dhclient6
                     22:     chmod 644 /etc/resolv.conf.dhclient6
                     23: 
                     24:     if [ "x${new_dhcp6_domain_search}" != x ] ; then
                     25:       echo search ${new_dhcp6_domain_search} >> /etc/resolv.conf.dhclient6
                     26:     fi
                     27:     for nameserver in ${new_dhcp6_name_servers} ; do
                     28:       # If the nameserver has a link-local address
                     29:       # add a <zone_id> (interface name) to it.
                     30:       case $nameserver in
                     31:        fe80:*) zone_id="%$interface";;
                     32:        FE80:*) zone_id="%$interface";;
                     33:        *)      zone_id='';;
                     34:       esac
                     35:       echo nameserver ${nameserver}$zone_id >> /etc/resolv.conf.dhclient6
                     36:     done
                     37: 
                     38:     mv /etc/resolv.conf.dhclient6 /etc/resolv.conf
                     39:   fi
                     40: }
                     41: 
                     42: # Must be used on exit.   Invokes the local dhcp client exit hooks, if any.
                     43: exit_with_hooks() {
                     44:   exit_status=$1
                     45:   if [ -f /etc/dhclient-exit-hooks ]; then
                     46:     . /etc/dhclient-exit-hooks
                     47:   fi
                     48: # probably should do something with exit status of the local script
                     49:   exit $exit_status
                     50: }
                     51: 
                     52: # Invoke the local dhcp client enter hooks, if they exist.
                     53: if [ -f /etc/dhclient-enter-hooks ]; then
                     54:   exit_status=0
                     55:   . /etc/dhclient-enter-hooks
                     56:   # allow the local script to abort processing of this state
                     57:   # local script must set exit_status variable to nonzero.
                     58:   if [ $exit_status -ne 0 ]; then
                     59:     exit $exit_status
                     60:   fi
                     61: fi
                     62: 
                     63: ###
                     64: ### DHCPv4 Handlers
                     65: ###
                     66: 
                     67: if [ x$new_broadcast_address != x ]; then
                     68:   new_broadcast_arg="broadcast $new_broadcast_address"
                     69: fi
                     70: if [ x$new_subnet_mask != x ]; then
                     71:   new_subnet_arg="netmask $new_subnet_mask"
                     72: fi
                     73: if [ x$alias_subnet_mask != x ]; then
                     74:   alias_subnet_arg="netmask $alias_subnet_mask"
                     75: fi
                     76:  if [ x$new_interface_mtu != x ]; then
                     77:    mtu_arg="mtu $new_interface_mtu"
                     78:  fi
                     79: if [ x$IF_METRIC != x ]; then
                     80:   metric_arg="metric $IF_METRIC"
                     81: fi
                     82: 
                     83: if [ x$reason = xMEDIUM ]; then
                     84:   # Linux doesn't do mediums (ok, ok, media).
                     85:   exit_with_hooks 0
                     86: fi
                     87: 
                     88: if [ x$reason = xPREINIT ]; then
                     89:   if [ x$alias_ip_address != x ]; then
                     90:     # Bring down alias interface. Its routes will disappear too.
                     91:     ifconfig $interface:0- 0.0.0.0
                     92:   fi
                     93:   ifconfig $interface 0.0.0.0 up
                     94: 
                     95:   # We need to give the kernel some time to get the interface up.
                     96:   sleep 1
                     97: 
                     98:   exit_with_hooks 0
                     99: fi
                    100: 
                    101: if [ x$reason = xARPCHECK ] || [ x$reason = xARPSEND ]; then
                    102:   exit_with_hooks 0
                    103: fi
                    104:   
                    105: if [ x$reason = xBOUND ] || [ x$reason = xRENEW ] || \
                    106:    [ x$reason = xREBIND ] || [ x$reason = xREBOOT ]; then
                    107:   current_hostname=`hostname`
                    108:   if [ x$current_hostname = x ] || \
                    109:      [ x$current_hostname = x$old_host_name ]; then
                    110:     if [ x$current_hostname = x ] || \
                    111:        [ x$new_host_name != x$old_host_name ]; then
                    112:       hostname $new_host_name
                    113:     fi
                    114:   fi
                    115:     
                    116:   if [ x$old_ip_address != x ] && [ x$alias_ip_address != x ] && \
                    117:                [ x$alias_ip_address != x$old_ip_address ]; then
                    118:     # Possible new alias. Remove old alias.
                    119:     ifconfig $interface:0- 0.0.0.0
                    120:   fi
                    121:   if [ x$old_ip_address != x ] && [ x$old_ip_address != x$new_ip_address ]; then
                    122:     # IP address changed. Bringing down the interface will delete all routes,
                    123:     # and clear the ARP cache.
                    124:     ifconfig $interface 0.0.0.0 down
                    125: 
                    126:   fi
                    127:   if [ x$old_ip_address = x ] || [ x$old_ip_address != x$new_ip_address ] || \
                    128:      [ x$reason = xBOUND ] || [ x$reason = xREBOOT ]; then
                    129: 
                    130:     ifconfig $interface $new_ip_address $new_subnet_arg \
                    131:                                $new_broadcast_arg $mtu_arg $metric_arg
                    132:     for router in $new_routers; do
                    133:       if [ "x$new_subnet_mask" = "x255.255.255.255" ] ; then
                    134:        route add -host $router dev $interface
                    135:       fi
                    136:       route add default gw $router
                    137:     done
                    138:   else                                                                        
                    139:     # we haven't changed the address, have we changed other options           
                    140:     # that we wish to update?
                    141:     if [ x$new_routers != x ] && [ x$new_routers != x$old_routers ] ; then
                    142:       # if we've changed routers delete the old and add the new.
                    143:       $LOGGER "New Routers: $new_routers"
                    144:       for router in $old_routers; do
                    145:         route delete default $router
                    146:       done
                    147:       for router in $new_routers; do
                    148:        if [ "x$new_subnet_mask" = "x255.255.255.255" ] ; then
                    149:          route add -host $router dev $interface
                    150:        fi
                    151:        route add default gw $router
                    152:       done
                    153:     fi
                    154:   fi
                    155:   if [ x$new_ip_address != x$alias_ip_address ] && [ x$alias_ip_address != x ];
                    156:    then
                    157:     ifconfig $interface:0- 0.0.0.0
                    158:     ifconfig $interface:0 $alias_ip_address $alias_subnet_arg
                    159:     route add -host $alias_ip_address $interface:0
                    160:   fi
                    161:   make_resolv_conf
                    162:   exit_with_hooks 0
                    163: fi
                    164: 
                    165: if [ x$reason = xEXPIRE ] || [ x$reason = xFAIL ] || [ x$reason = xRELEASE ] \
                    166:    || [ x$reason = xSTOP ]; then
                    167:   if [ x$alias_ip_address != x ]; then
                    168:     # Turn off alias interface.
                    169:     ifconfig $interface:0- 0.0.0.0
                    170:   fi
                    171:   if [ x$old_ip_address != x ]; then
                    172:     # Shut down interface, which will delete routes and clear arp cache.
                    173:     ifconfig $interface 0.0.0.0 down
                    174:   fi
                    175:   if [ x$alias_ip_address != x ]; then
                    176:     ifconfig $interface:0 $alias_ip_address $alias_subnet_arg
                    177:     route add -host $alias_ip_address $interface:0
                    178:   fi
                    179:   exit_with_hooks 0
                    180: fi
                    181: 
                    182: if [ x$reason = xTIMEOUT ]; then
                    183:   if [ x$alias_ip_address != x ]; then
                    184:     ifconfig $interface:0- 0.0.0.0
                    185:   fi
                    186:   ifconfig $interface $new_ip_address $new_subnet_arg \
                    187:                                $new_broadcast_arg $mtu_arg $metric_arg
                    188:   set $new_routers
                    189:   if ping -q -c 1 $1; then
                    190:     if [ x$new_ip_address != x$alias_ip_address ] && \
                    191:                        [ x$alias_ip_address != x ]; then
                    192:       ifconfig $interface:0 $alias_ip_address $alias_subnet_arg
                    193:       route add -host $alias_ip_address dev $interface:0
                    194:     fi
                    195:     for router in $new_routers; do
                    196:       if [ "x$new_subnet_mask" = "x255.255.255.255" ] ; then
                    197:        route add -host $router dev $interface
                    198:       fi
                    199:       route add default gw $router
                    200:     done
                    201:     make_resolv_conf
                    202:     exit_with_hooks 0
                    203:   fi
                    204:   ifconfig $interface 0.0.0.0 down
                    205:   exit_with_hooks 1
                    206: fi
                    207: 
                    208: ###
                    209: ### DHCPv6 Handlers
                    210: ###
                    211: 
                    212: if [ x$reason = xPREINIT6 ]; then
                    213:   # Ensure interface is up.
                    214:   ifconfig ${interface} up
                    215: 
                    216:   # Remove any stale addresses from aborted clients.
                    217:   ip -f inet6 addr flush dev ${interface} scope global
                    218: 
                    219:   exit_with_hooks 0
                    220: fi
                    221: 
                    222: if [ x${old_ip6_prefix} != x ] || [ x${new_ip6_prefix} != x ] ; then
                    223:     echo Prefix ${reason} old=${old_ip6_prefix} new=${new_ip6_prefix}
                    224: 
                    225:     exit_with_hooks 0
                    226: fi
                    227: 
                    228: if [ x$reason = xBOUND6 ]; then
                    229:   if [ x${new_ip6_address} = x ] || [ x${new_ip6_prefixlen} = x ] ; then
                    230:     exit_with_hooks 2;
                    231:   fi
                    232: 
                    233:   ifconfig ${interface} inet6 ${new_ip6_address}/${new_ip6_prefixlen} alias
                    234: 
                    235:   # Check for nameserver options.
                    236:   make_resolv_conf
                    237: 
                    238:   exit_with_hooks 0
                    239: fi
                    240: 
                    241: if [ x$reason = xRENEW6 ] || [ x$reason = xREBIND6 ]; then
                    242:   if [ x${new_ip6_address} = x ] || [ x${new_ip6_prefixlen} = x ] ; then
                    243:     exit_with_hooks 2;
                    244:   fi
                    245: 
                    246:   ifconfig ${interface} inet6 ${new_ip6_address}/${new_ip6_prefixlen} alias
                    247: 
                    248:   # Make sure nothing has moved around on us.
                    249: 
                    250:   # Nameservers/domains/etc.
                    251:   if [ "x${new_dhcp6_name_servers}" != "x${old_dhcp6_name_servers}" ] ||
                    252:      [ "x${new_dhcp6_domain_search}" != "x${old_dhcp6_domain_search}" ] ; then
                    253:     make_resolv_conf
                    254:   fi
                    255: 
                    256:   exit_with_hooks 0
                    257: fi
                    258: 
                    259: if [ x$reason = xDEPREF6 ]; then
                    260:   if [ x${new_ip6_address} = x ] ; then
                    261:     exit_with_hooks 2;
                    262:   fi
                    263: 
                    264:   ifconfig ${interface} inet6 ${new_ip6_address} deprecated
                    265: 
                    266:   exit_with_hooks 0
                    267: fi
                    268: 
                    269: if [ x$reason = xEXPIRE6 -o x$reason = xRELEASE6 -o x$reason = xSTOP6 ]; then
                    270:   if [ x${old_ip6_address} = x ] || [ x${old_ip6_prefixlen} = x ] ; then
                    271:     exit_with_hooks 2;
                    272:   fi
                    273: 
                    274:   ifconfig ${interface} inet6 ${old_ip6_address}/${old_ip6_prefixlen} -alias
                    275: 
                    276:   exit_with_hooks 0
                    277: fi
                    278: 
                    279: exit_with_hooks 0

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