Ignore:
Timestamp:
2010-06-02T22:39:26+02:00 (6 years ago)
Author:
jow
Message:

[backfire] merge network config fixes: r21641, r21652, r21655, r21659 and r21661

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/backfire/package/base-files/files/lib/network/config.sh

    r21639 r21662  
    165165                        config_get macaddr "$config" macaddr 
    166166                        [ -x /usr/sbin/brctl ] && { 
     167                                # Remove IPv6 link local addr before adding the iface to the bridge 
     168                                local llv6="$(ifconfig "$iface")" 
     169                                case "$llv6" in 
     170                                        *fe80:*/64*) 
     171                                                llv6="${llv6#* fe80:}" 
     172                                                ifconfig "$iface" del "fe80:${llv6%% *}" 
     173                                        ;; 
     174                                esac 
     175 
    167176                                ifconfig "br-$config" 2>/dev/null >/dev/null && { 
    168177                                        local newdevs devices 
     
    247256        [ "$parent" == "$cfg" ] || return 0 
    248257 
     258        # parent device and ifname 
     259        local p_device p_type 
     260        config_get p_device "$cfg" device 
     261        config_get p_type   "$cfg" type 
     262 
     263        # select alias ifname 
     264        local layer use_iface 
     265        config_get layer "$config" layer 2 
     266        case "$layer:$p_type" in 
     267                # layer 3: e.g. pppoe-wan or pptp-vpn 
     268                3:*)      use_iface="$iface" ;; 
     269 
     270                # layer 2 and parent is bridge: e.g. br-wan 
     271                2:bridge) use_iface="br-$cfg" ;; 
     272 
     273                # layer 1: e.g. eth0 or ath0 
     274                *)        use_iface="$p_device" ;; 
     275        esac 
     276 
    249277        # alias counter 
    250278        local ctr 
     
    259287        config_set "$parent" aliases "$list" 
    260288 
    261         iface="$iface:$ctr" 
    262         set_interface_ifname "$config" "$iface" 
     289        use_iface="$use_iface:$ctr" 
     290        set_interface_ifname "$config" "$use_iface" 
    263291 
    264292        local proto 
     
    266294        case "${proto}" in 
    267295                static) 
    268                         setup_interface_static "$iface" "$config" 
     296                        setup_interface_static "$use_iface" "$config" 
    269297                ;; 
    270298                *) 
     
    276304 
    277305setup_interface() { 
    278         local iface_main="$1" 
     306        local iface="$1" 
    279307        local config="$2" 
    280308        local proto="$3" 
    281309        local vifmac="$4" 
    282         local ip6addr_main= 
    283310 
    284311        [ -n "$config" ] || { 
    285                 config=$(find_config "$iface_main") 
     312                config=$(find_config "$iface") 
    286313                [ "$?" = 0 ] || return 1 
    287314        } 
    288315 
    289         prepare_interface "$iface_main" "$config" "$vifmac" || return 0 
    290  
    291         [ "$iface_main" = "br-$config" ] && { 
     316        prepare_interface "$iface" "$config" "$vifmac" || return 0 
     317 
     318        [ "$iface" = "br-$config" ] && { 
    292319                # need to bring up the bridge and wait a second for 
    293320                # it to switch to the 'forwarding' state, otherwise 
    294321                # it will lose its routes... 
    295                 ifconfig "$iface_main" up 
     322                ifconfig "$iface" up 
    296323                sleep 1 
    297324        } 
    298325 
    299326        # Interface settings 
    300         grep "$iface_main:" /proc/net/dev > /dev/null && { 
     327        grep "$iface:" /proc/net/dev > /dev/null && { 
    301328                local mtu macaddr 
    302329                config_get mtu "$config" mtu 
    303330                config_get macaddr "$config" macaddr 
    304                 [ -n "$macaddr" ] && $DEBUG ifconfig "$iface_main" down 
    305                 $DEBUG ifconfig "$iface_main" ${macaddr:+hw ether "$macaddr"} ${mtu:+mtu $mtu} up 
    306         } 
    307         set_interface_ifname "$config" "$iface_main" 
     331                [ -n "$macaddr" ] && $DEBUG ifconfig "$iface" down 
     332                $DEBUG ifconfig "$iface" ${macaddr:+hw ether "$macaddr"} ${mtu:+mtu $mtu} up 
     333        } 
     334        set_interface_ifname "$config" "$iface" 
    308335 
    309336        [ -n "$proto" ] || config_get proto "$config" proto 
    310337        case "$proto" in 
    311338                static) 
    312                         config_get ip6addr_main "$config" ip6addr 
    313                         setup_interface_static "$iface_main" "$config" 
     339                        setup_interface_static "$iface" "$config" 
    314340                ;; 
    315341                dhcp) 
    316                         local lockfile="/var/lock/dhcp-$iface_main" 
     342                        local lockfile="/var/lock/dhcp-$iface" 
    317343                        lock "$lockfile" 
    318344 
    319345                        # prevent udhcpc from starting more than once 
    320                         local pidfile="/var/run/dhcp-${iface_main}.pid" 
     346                        local pidfile="/var/run/dhcp-${iface}.pid" 
    321347                        local pid="$(cat "$pidfile" 2>/dev/null)" 
    322348                        if [ -d "/proc/$pid" ] && grep -qs udhcpc "/proc/${pid}/cmdline"; then 
    323349                                lock -u "$lockfile" 
    324350                        else 
    325                                 local ipaddr netmask hostname proto1 clientid 
     351                                local ipaddr netmask hostname proto1 clientid broadcast 
    326352                                config_get ipaddr "$config" ipaddr 
    327353                                config_get netmask "$config" netmask 
     
    329355                                config_get proto1 "$config" proto 
    330356                                config_get clientid "$config" clientid 
     357                                config_get_bool broadcast "$config" broadcast 0 
    331358 
    332359                                [ -z "$ipaddr" ] || \ 
    333                                         $DEBUG ifconfig "$iface_main" "$ipaddr" ${netmask:+netmask "$netmask"} 
     360                                        $DEBUG ifconfig "$iface" "$ipaddr" ${netmask:+netmask "$netmask"} 
    334361 
    335362                                # don't stay running in background if dhcp is not the main proto on the interface (e.g. when using pptp) 
    336363                                local dhcpopts 
    337364                                [ ."$proto1" != ."$proto" ] && dhcpopts="-n -q" 
    338                                 $DEBUG eval udhcpc -t 0 -i "$iface_main" ${ipaddr:+-r $ipaddr} ${hostname:+-H $hostname} ${clientid:+-c $clientid} -b -p "$pidfile" ${dhcpopts:- -O rootpath -R &} 
     365                                [ "$broadcast" = 1 ] && broadcast="-O broadcast" || broadcast= 
     366 
     367                                $DEBUG eval udhcpc -t 0 -i "$iface" \ 
     368                                        ${ipaddr:+-r $ipaddr} \ 
     369                                        ${hostname:+-H $hostname} \ 
     370                                        ${clientid:+-c $clientid} \ 
     371                                        -b -p "$pidfile" $broadcast \ 
     372                                        ${dhcpopts:- -O rootpath -R &} 
     373 
    339374                                lock -u "$lockfile" 
    340375                        fi 
    341376                ;; 
    342377                none) 
    343                         setup_interface_none "$iface_main" "$config" 
     378                        setup_interface_none "$iface" "$config" 
    344379                ;; 
    345380                *) 
    346381                        if ( eval "type setup_interface_$proto" ) >/dev/null 2>/dev/null; then 
    347                                 eval "setup_interface_$proto '$iface_main' '$config' '$proto'" 
     382                                eval "setup_interface_$proto '$iface' '$config' '$proto'" 
    348383                        else 
    349384                                echo "Interface type $proto not supported." 
     
    352387                ;; 
    353388        esac 
    354         [ "$proto" = none ] || { 
    355                 for ifn in `ifconfig | grep "^$iface_main:" | awk '{print $1}'`; do 
    356                         ifconfig "$ifn" down 
    357                 done 
    358         } 
    359  
    360         local aliases 
    361         config_set "$config" aliases "" 
    362         config_set "$config" alias_count 0 
    363         config_foreach setup_interface_alias alias "$config" "$iface_main" 
    364         config_get aliases "$config" aliases 
    365         [ -z "$aliases" ] || uci_set_state network "$config" aliases "$aliases" 
    366  
    367         # put the ip6addr back to the beginning to become the main ip again 
    368         [ -z "$ip6addr_main" ] || { 
    369                 $DEBUG ifconfig "$iface_main" del "$ip6addr_main" 
    370                 $DEBUG ifconfig "$iface_main" add "$ip6addr_main" 
    371         } 
    372389} 
    373390 
Note: See TracChangeset for help on using the changeset viewer.