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
This commit is contained in:
Jo-Philipp Wich 2010-06-02 00:22:13 +00:00
parent 8e39b122c9
commit 94db915196
2 changed files with 24 additions and 4 deletions

View file

@ -93,8 +93,9 @@ case "$ACTION" in
;; ;;
ifdown) ifdown)
# Bring down named aliases # Bring down named aliases
local device=$(uci_get_state network "$INTERFACE" device)
local ifn 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 ifconfig "$ifn" down
done done
;; ;;

View file

@ -246,6 +246,25 @@ setup_interface_alias() {
config_get cfg "$config" interface config_get cfg "$config" interface
[ "$parent" == "$cfg" ] || return 0 [ "$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 # alias counter
local ctr local ctr
config_get ctr "$parent" alias_count 0 config_get ctr "$parent" alias_count 0
@ -258,14 +277,14 @@ setup_interface_alias() {
append list "$config" append list "$config"
config_set "$parent" aliases "$list" config_set "$parent" aliases "$list"
iface="$iface:$ctr" use_iface="$use_iface:$ctr"
set_interface_ifname "$config" "$iface" set_interface_ifname "$config" "$use_iface"
local proto local proto
config_get proto "$config" proto "static" config_get proto "$config" proto "static"
case "${proto}" in case "${proto}" in
static) static)
setup_interface_static "$iface" "$config" setup_interface_static "$use_iface" "$config"
;; ;;
*) *)
echo "Unsupported type '$proto' for alias config '$config'" echo "Unsupported type '$proto' for alias config '$config'"