Date:2010-06-02 22:39:26 (13 years 6 months ago)
Author:jow
Commit:5fa298d76a40cdf5f0499054af35b226bc06f0e2
Message:[backfire] merge network config fixes: r21641, r21652, r21655, r21659 and r21661

git-svn-id: svn://svn.openwrt.org/openwrt/branches/backfire@21662 3c298f89-4303-0410-b956-a3cf2f4a3e73
Files: package/base-files/Makefile (1 diff)
package/base-files/files/etc/hotplug.d/iface/10-routes (1 diff)
package/base-files/files/etc/hotplug2-common.rules (1 diff)
package/base-files/files/lib/network/config.sh (4 diffs)

Change Details

package/base-files/Makefile
1010include $(INCLUDE_DIR)/kernel.mk
1111
1212PKG_NAME:=base-files
13PKG_RELEASE:=43
13PKG_RELEASE:=43.1
1414
1515PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/
1616
package/base-files/files/etc/hotplug.d/iface/10-routes
6868    ifup)
6969        include /lib/network
7070        scan_interfaces
71
72        # Setup aliases
73        config_set "$INTERFACE" aliases ""
74        config_set "$INTERFACE" alias_count 0
75        config_foreach setup_interface_alias alias "$INTERFACE" "$DEVICE"
76
77        # Save alias references in state vars
78        local aliases
79        config_get aliases "$INTERFACE" aliases
80        [ -z "$aliases" ] || uci_set_state network "$INTERFACE" aliases "$aliases"
81
82        # Make ip6addr of parent iface the main address again
83        local ip6addr
84        config_get ip6addr "$INTERFACE" ip6addr
85        [ -z "$ip6addr" ] || {
86            ifconfig "$DEVICE" del "$ip6addr"
87            ifconfig "$DEVICE" add "$ip6addr"
88        }
89
90        # Setup routes
7191        config_foreach "add_route" route
7292        config_foreach "add_route6" route6
7393    ;;
94    ifdown)
95        # Bring down named aliases
96        local device=$(uci_get_state network "$INTERFACE" device)
97        local ifn
98        for ifn in $(ifconfig | sed -ne "s/^\(\($DEVICE${device:+\|$device}\|br-$INTERFACE\):[^[:space:]]\+\).*/\1/p"); do
99            ifconfig "$ifn" down
100        done
101    ;;
74102esac
103
package/base-files/files/etc/hotplug2-common.rules
88DEVICENAME ~~ (tun|tap[0-9]) {
99    nothrottle
1010    makedev /dev/net/%DEVICENAME% 0644
11    next
1211}
1312
1413DEVICENAME ~~ (ppp) {
package/base-files/files/lib/network/config.sh
164164            local macaddr
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
169178                    config_get devices "$config" device
...... 
246255    config_get cfg "$config" interface
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
251279    config_get ctr "$parent" alias_count 0
...... 
258286    append list "$config"
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
265293    config_get proto "$config" proto "static"
266294    case "${proto}" in
267295        static)
268            setup_interface_static "$iface" "$config"
296            setup_interface_static "$use_iface" "$config"
269297        ;;
270298        *)
271299            echo "Unsupported type '$proto' for alias config '$config'"
...... 
275303}
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
316    prepare_interface "$iface" "$config" "$vifmac" || return 0
290317
291    [ "$iface_main" = "br-$config" ] && {
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
331        [ -n "$macaddr" ] && $DEBUG ifconfig "$iface" down
332        $DEBUG ifconfig "$iface" ${macaddr:+hw ether "$macaddr"} ${mtu:+mtu $mtu} up
306333    }
307    set_interface_ifname "$config" "$iface_main"
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
328354                config_get hostname "$config" hostname
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."
350385                return 1
351386            fi
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
374391stop_interface_dhcp() {

Archive Download the corresponding diff file



interactive