diff options
author | jow <jow@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2010-06-02 00:22:13 +0000 |
---|---|---|
committer | jow <jow@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2010-06-02 00:22:13 +0000 |
commit | 796dcb6b2ea7bc246b6e31024ab2f0f8c14338ca (patch) | |
tree | 63074f28f107485b0e23d336682726c404117d51 /package/base-files | |
parent | 76b64a8176c4ab20392d2e16549756657499b1a1 (diff) |
[package] base-files:
- 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
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@21655 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/base-files')
-rw-r--r-- | package/base-files/files/etc/hotplug.d/iface/10-routes | 3 | ||||
-rwxr-xr-x | package/base-files/files/lib/network/config.sh | 25 |
2 files changed, 24 insertions, 4 deletions
diff --git a/package/base-files/files/etc/hotplug.d/iface/10-routes b/package/base-files/files/etc/hotplug.d/iface/10-routes index 118c1a665..14fb75eec 100644 --- a/package/base-files/files/etc/hotplug.d/iface/10-routes +++ b/package/base-files/files/etc/hotplug.d/iface/10-routes @@ -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 ;; diff --git a/package/base-files/files/lib/network/config.sh b/package/base-files/files/lib/network/config.sh index a31e83688..2ca04faeb 100755 --- a/package/base-files/files/lib/network/config.sh +++ b/package/base-files/files/lib/network/config.sh @@ -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'" |