[package] base-files:
authorJo-Philipp Wich <jow@openwrt.org>
Wed, 2 Jun 2010 00:22:13 +0000 (00:22 +0000)
committerJo-Philipp Wich <jow@openwrt.org>
Wed, 2 Jun 2010 00:22:13 +0000 (00:22 +0000)
- add aliases to device by default (not ifname)
- introduce option "layer" to select the target ifname to attach the alias to:
- 3 use tun device (tun over bridge over device) fallback to bridge or device
- 2 use bridge (bridge over device) fallback to device
- 1 use device

SVN-Revision: 21655

package/base-files/files/etc/hotplug.d/iface/10-routes
package/base-files/files/lib/network/config.sh

index 118c1a6..14fb75e 100644 (file)
@@ -93,8 +93,9 @@ case "$ACTION" in
        ;;
        ifdown)
                # Bring down named aliases
+               local device=$(uci_get_state network "$INTERFACE" device)
                local ifn
-               for ifn in $(ifconfig | sed -ne "s/^\($DEVICE:[^[:space:]]\+\).*/\1/p"); do
+               for ifn in $(ifconfig | sed -ne "s/^\(\($DEVICE${device:+\|$device}\|br-$INTERFACE\):[^[:space:]]\+\).*/\1/p"); do
                        ifconfig "$ifn" down
                done
        ;;
index a31e836..2ca04fa 100755 (executable)
@@ -246,6 +246,25 @@ setup_interface_alias() {
        config_get cfg "$config" interface
        [ "$parent" == "$cfg" ] || return 0
 
+       # parent device and ifname
+       local p_device p_type
+       config_get p_device "$cfg" device
+       config_get p_type   "$cfg" type
+
+       # select alias ifname
+       local layer use_iface
+       config_get layer "$config" layer 2
+       case "$layer:$p_type" in
+               # layer 3: e.g. pppoe-wan or pptp-vpn
+               3:*)      use_iface="$iface" ;;
+
+               # layer 2 and parent is bridge: e.g. br-wan
+               2:bridge) use_iface="br-$cfg" ;;
+
+               # layer 1: e.g. eth0 or ath0
+               *)        use_iface="$p_device" ;;
+       esac
+
        # alias counter
        local ctr
        config_get ctr "$parent" alias_count 0
@@ -258,14 +277,14 @@ setup_interface_alias() {
        append list "$config"
        config_set "$parent" aliases "$list"
 
-       iface="$iface:$ctr"
-       set_interface_ifname "$config" "$iface"
+       use_iface="$use_iface:$ctr"
+       set_interface_ifname "$config" "$use_iface"
 
        local proto
        config_get proto "$config" proto "static"
        case "${proto}" in
                static)
-                       setup_interface_static "$iface" "$config"
+                       setup_interface_static "$use_iface" "$config"
                ;;
                *)
                        echo "Unsupported type '$proto' for alias config '$config'"