X-Git-Url: http://git.openwrt.org/?a=blobdiff_plain;f=package%2Fbase-files%2Ffiles%2Flib%2Fnetwork%2Fconfig.sh;h=0a7464495fdf152cbacf126c61441c5c0f359a1f;hb=88041b873e13572b6e71b3bd72d31f956fb27ff7;hp=611da718cd5cc88d4d60be56b3be4c363d408ef3;hpb=31f3c31d147593d0d6c1a2fb8e6adbaeffb71925;p=openwrt%2Fsvn-archive%2Farchive.git diff --git a/package/base-files/files/lib/network/config.sh b/package/base-files/files/lib/network/config.sh index 611da718cd..0a7464495f 100755 --- a/package/base-files/files/lib/network/config.sh +++ b/package/base-files/files/lib/network/config.sh @@ -40,10 +40,11 @@ scan_interfaces() { append interfaces "$CONFIG_SECTION" config_get iftype "$CONFIG_SECTION" type config_get ifname "$CONFIG_SECTION" ifname - config_set "$CONFIG_SECTION" device "$ifname" + config_get device "$CONFIG_SECTION" device + config_set "$CONFIG_SECTION" device "${device:-$ifname}" case "$iftype" in bridge) - config_set "$CONFIG_SECTION" ifnames "$ifname" + config_set "$CONFIG_SECTION" ifnames "${device:-$ifname}" config_set "$CONFIG_SECTION" ifname br-"$CONFIG_SECTION" ;; esac @@ -60,7 +61,19 @@ add_vlan() { [ "$1" = "$vif" ] || ifconfig "$1" >/dev/null 2>/dev/null || { ifconfig "$vif" up 2>/dev/null >/dev/null || add_vlan "$vif" $DEBUG vconfig add "$vif" "${1##*\.}" + return 0 } + return 1 +} + +# sort the device list, drop duplicates +sort_list() { + local arg="$*" + ( + for item in $arg; do + echo "$item" + done + ) | sort -u } # Create the interface, if necessary. @@ -83,7 +96,7 @@ prepare_interface() { } # Setup VLAN interfaces - add_vlan "$iface" + add_vlan "$iface" && return 1 ifconfig "$iface" 2>/dev/null >/dev/null || return 0 # Setup bridging @@ -93,6 +106,13 @@ prepare_interface() { bridge) [ -x /usr/sbin/brctl ] && { ifconfig "br-$config" 2>/dev/null >/dev/null && { + local newdevs= + + config_get devices "$config" device + for dev in $(sort_list "$devices" "$iface"); do + append newdevs "$dev" + done + uci_set_state network "$config" device "$newdevs" $DEBUG brctl addif "br-$config" "$iface" # Bridge existed already. No further processing necesary } || { @@ -113,6 +133,15 @@ prepare_interface() { return 0 } +set_interface_ifname() { + local config="$1" + local ifname="$2" + + config_get device "$1" device + uci_set_state network "$config" ifname "$ifname" + uci_set_state network "$config" device "$device" +} + setup_interface() { local iface="$1" local config="$2" @@ -140,7 +169,7 @@ setup_interface() { config_get macaddr "$config" macaddr grep "$iface:" /proc/net/dev > /dev/null && \ $DEBUG ifconfig "$iface" ${macaddr:+hw ether "$macaddr"} ${mtu:+mtu $mtu} up - uci_set_state network "$config" ifname "$iface" + set_interface_ifname "$config" "$iface" pidfile="/var/run/$iface.pid" case "$proto" in @@ -157,8 +186,8 @@ setup_interface() { [ -z "$ipaddr" ] || $DEBUG ifconfig "$iface" "$ipaddr" netmask "$netmask" broadcast "${bcast:-+}" [ -z "$ip6addr" ] || $DEBUG ifconfig "$iface" add "$ip6addr" - [ -z "$gateway" ] || $DEBUG route add default gw "$gateway" - [ -z "$ip6gw" ] || $DEBUG route -A inet6 add default gw "$ip6gw" + [ -z "$gateway" ] || $DEBUG route add default gw "$gateway" dev "$iface" + [ -z "$ip6gw" ] || $DEBUG route -A inet6 add default gw "$ip6gw" dev "$iface" [ -z "$dns" ] || { for ns in $dns; do grep "$ns" /tmp/resolv.conf.auto 2>/dev/null >/dev/null || {