summaryrefslogtreecommitdiffstats
path: root/package/base-files
diff options
context:
space:
mode:
authorjow <jow@3c298f89-4303-0410-b956-a3cf2f4a3e73>2010-06-02 00:22:13 +0000
committerjow <jow@3c298f89-4303-0410-b956-a3cf2f4a3e73>2010-06-02 00:22:13 +0000
commit796dcb6b2ea7bc246b6e31024ab2f0f8c14338ca (patch)
tree63074f28f107485b0e23d336682726c404117d51 /package/base-files
parent76b64a8176c4ab20392d2e16549756657499b1a1 (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-routes3
-rwxr-xr-xpackage/base-files/files/lib/network/config.sh25
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'"