diff options
author | Jo-Philipp Wich <jow@openwrt.org> | 2010-06-02 00:22:13 +0000 |
---|---|---|
committer | Jo-Philipp Wich <jow@openwrt.org> | 2010-06-02 00:22:13 +0000 |
commit | 94db91519605235e347672a3e0f9615936e10e98 (patch) | |
tree | 4dee3fbd6ffbfd45d8b7af0adcb38775929cc16d /package/base-files/files | |
parent | 8e39b122c94276383078ae49ee2c46a5a9364f39 (diff) | |
download | upstream-94db91519605235e347672a3e0f9615936e10e98.tar.gz upstream-94db91519605235e347672a3e0f9615936e10e98.tar.bz2 upstream-94db91519605235e347672a3e0f9615936e10e98.zip |
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
SVN-Revision: 21655
Diffstat (limited to 'package/base-files/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 118c1a665d..14fb75eec2 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 a31e83688f..2ca04faeb9 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'" |