From 796dcb6b2ea7bc246b6e31024ab2f0f8c14338ca Mon Sep 17 00:00:00 2001 From: jow Date: Wed, 2 Jun 2010 00:22:13 +0000 Subject: [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 --- .../base-files/files/etc/hotplug.d/iface/10-routes | 3 ++- package/base-files/files/lib/network/config.sh | 25 +++++++++++++++++++--- 2 files changed, 24 insertions(+), 4 deletions(-) (limited to 'package/base-files') 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'" -- cgit v1.2.3