Changeset 15638


Ignore:
Timestamp:
2009-05-06T18:31:24+02:00 (9 years ago)
Author:
jow
Message:

merge r15635 to 8.09

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/8.09/package/base-files/files/usr/share/udhcpc/default.script

    r15324 r15638  
    11#!/bin/sh 
    22[ -z "$1" ] && echo "Error: should be run by udhcpc" && exit 1 
     3 
    34. /etc/functions.sh 
    45include /lib/network 
    5  
    66RESOLV_CONF="/tmp/resolv.conf.auto" 
    77 
    8 hotplug_event() { 
    9         scan_interfaces 
    10         for ifc in $interfaces; do 
    11                 config_get ifname $ifc ifname 
    12                 [ "$ifname" = "$interface" ] || continue 
    13  
    14                 config_get proto $ifc proto 
    15                 [ "$proto" = "dhcp" ] || continue 
    16                 [ ifup = "$1" ] && { 
    17                         config_get userdns "$ifc" dns 
    18                         [ -n "$userdns" ] && { 
    19                                 for i in $userdns; do 
    20                                         echo "custom dns $i" 
    21                                         echo "nameserver $i" >> "${RESOLV_CONF}.tmp" 
    22                                 done 
    23                                 dns="$userdns" 
    24                         } 
    25                         uci_set_state network "$ifc" ipaddr "$ip" 
    26                         uci_set_state network "$ifc" netmask "${subnet:-255.255.255.0}" 
    27                         uci_set_state network "$ifc" dnsdomain "$domain" 
    28                         uci_set_state network "$ifc" dns "$dns" 
    29                         uci_set_state network "$ifc" gateway "$router" 
    30                 } 
    31                  
    32                 env -i ACTION="$1" INTERFACE="$ifc" DEVICE="$ifname" PROTO=dhcp /sbin/hotplug-call iface 
    33         done 
     8change_state () { 
     9        uci_revert_state "$1" "$2" "$3" "$4" 
     10        uci_set_state "$1" "$2" "$3" "$4" 
    3411} 
    3512 
    36 case "$1" in 
    37         deconfig) 
    38                 ifconfig $interface 0.0.0.0 
    39                 hotplug_event ifdown 
    40         ;; 
    41         renew|bound) 
    42                 ifconfig $interface $ip \ 
    43                 netmask ${subnet:-255.255.255.0} \ 
    44                 broadcast ${broadcast:-+} 
     13uci_get() { 
     14        uci -P /dev/null get "$1" 2>/dev/null 
     15} 
    4516 
    46                 [ -n "$router" ] && { 
    47                         for i in $router ; do 
    48                                 echo "adding router $i" 
    49                                 route add default gw $i dev $interface 
    50                                 valid="$valid|$i" 
     17setup_interface () { 
     18        local old_ip 
     19        local old_broadcast 
     20        local old_subnet 
     21        local old_router 
     22        local old_dns 
     23        local user_dns 
     24        local user_router 
    5125 
    52                         done 
     26        config_get old_ip        "$ifc" ipaddr 
     27        config_get old_broadcast "$ifc" broadcast 
     28        config_get old_subnet    "$ifc" netmask 
    5329 
    54                         echo "deleting old routes" 
    55                         $(route -n | awk '/^0.0.0.0\W{9}('$valid')\W/ {next} /^0.0.0.0/ {print "route del -net "$1" gw "$2";"}') 
    56                 } 
     30        [ "$ip" != "$old_ip" ] \ 
     31        || [ "${broadcast:-+}" != "$old_broadcast" ] \ 
     32        || [ "${subnet:-255.255.255.0}" != "$old_subnet" ] && { 
     33                echo "udhcpc: ifconfig $interface $ip netmask ${subnet:-255.255.255.0} broadcast ${broadcast:-+}" 
     34                ifconfig $interface $ip netmask ${subnet:-255.255.255.0} broadcast ${broadcast:-+} 
    5735 
    58                 [ -n "$dns" ] && \ 
    59                         echo -n > "${RESOLV_CONF}.tmp" 
     36                change_state network "$ifc" ipaddr "$ip" 
     37                change_state network "$ifc" broadcast "${broadcast:-+}" 
     38                change_state network "$ifc" netmask "${subnet:-255.255.255.0}" 
     39        } 
     40 
     41 
     42        # Default Route 
     43        change_state network "$ifc" lease_gateway "$router" 
     44        config_get old_router "$ifc" gateway 
     45        user_router=$(uci_get "network.$ifc.gateway") 
     46        [ -n "$user_router" ] && router="$user_router" 
     47 
     48        [ -n "$router" ] && [ "$router" != "0.0.0.0" ] && [ "$router" != "$old_router" ] && { 
     49                echo "udhcpc: setting default routers: $router" 
     50 
     51                local valid_gw="" 
     52                for i in $router ; do 
     53                        route add default gw $i dev $interface 
     54                        valid_gw="${valid_gw:+$valid_gw|}$i" 
     55                done 
    6056                 
    61                 if [ "$1" = "renew" ]; then 
    62                         hotplug_event update 
    63                 else 
    64                         hotplug_event ifup 
    65                 fi 
    66                  
    67                 [ -n "$dns" ] && { 
    68                         [ -s "${RESOLV_CONF}.tmp" ] || { 
    69                                 for i in $dns ; do 
    70                                         echo "adding dns $i" 
    71                                         echo "nameserver $i" >> "${RESOLV_CONF}.tmp" 
    72                                 done 
    73                         } 
     57                eval $(route -n | awk ' 
     58                        /^0.0.0.0\W{9}('$valid_gw')\W/ {next} 
     59                        /^0.0.0.0/ {print "route del -net "$1" gw "$2";"} 
     60                ') 
    7461 
    75                         ${domain:+echo search $domain} >> "${RESOLV_CONF}.tmp" 
     62                change_state network "$ifc" gateway "$router" 
     63        } 
    7664 
    77                         mv "${RESOLV_CONF}.tmp" "$RESOLV_CONF" 
    78                 } 
    79                  
    80                 # user rules 
    81                 [ -f /etc/udhcpc.user ] && . /etc/udhcpc.user 
    82         ;; 
    83 esac 
     65 
     66        # DNS 
     67        config_get old_dns "$ifc" dns 
     68        user_dns=$(uci_get "network.$ifc.dns") 
     69        [ -n "$user_dns" ] && dns="$user_dns" 
     70 
     71        [ -n "$dns" ] && [ "$dns" != "$old_dns" ] && { 
     72                echo "udhcpc: setting dns servers: $dns" 
     73                echo -n > "${RESOLV_CONF}.tmp" 
     74                for i in $dns ; do 
     75                        echo "nameserver $i" >> "${RESOLV_CONF}.tmp" 
     76                done 
     77                ${domain:+echo search $domain} >> "${RESOLV_CONF}.tmp" 
     78                mv "${RESOLV_CONF}.tmp" "$RESOLV_CONF" 
     79 
     80                change_state network "$ifc" dnsdomain "$domain" 
     81                change_state network "$ifc" dns "$dns" 
     82        } 
     83 
     84 
     85        # UCI State 
     86        change_state network "$ifc" lease_server "$serverid" 
     87        change_state network "$ifc" lease_acquired "$(date '+%s')" 
     88        change_state network "$ifc" lease_lifetime "$lease" 
     89        [ -n "$ntpsrv" ] &&     change_state network "$ifc" lease_ntpsrv "$ntpsrv" 
     90        [ -n "$timesvr" ] &&    change_state network "$ifc" lease_timesrv "$timesvr" 
     91        [ -n "$hostname" ] &&   change_state network "$ifc" lease_hostname "$hostname" 
     92        [ -n "$timezone" ] &&   change_state network "$ifc" lease_timezone "$timezone" 
     93 
     94 
     95        # Hotplug 
     96        env -i ACTION="$1" INTERFACE="$ifc" DEVICE="$ifname" PROTO=dhcp /sbin/hotplug-call iface 
     97} 
     98 
     99 
     100scan_interfaces 
     101 
     102for ifc in $interfaces; do 
     103        config_get ifname "$ifc" ifname 
     104        [ "$ifname" = "$interface" ] || continue 
     105 
     106        config_get proto "$ifc" proto 
     107        [ "$proto" = "dhcp" ] || continue 
     108 
     109        case "$1" in 
     110                deconfig) 
     111                        ifconfig "$interface" 0.0.0.0 
     112                        env -i ACTION="ifdown" INTERFACE="$ifc" DEVICE="$ifname" PROTO=dhcp /sbin/hotplug-call iface 
     113                        uci_revert_state network "$ifc" 
     114                ;; 
     115                renew) 
     116                        setup_interface update 
     117                ;; 
     118                bound) 
     119                        setup_interface ifup 
     120                ;; 
     121        esac 
     122 
     123        # user rules 
     124        [ -f /etc/udhcpc.user ] && . /etc/udhcpc.user 
     125done 
    84126 
    85127exit 0 
Note: See TracChangeset for help on using the changeset viewer.