X-Git-Url: http://git.openwrt.org/?p=openwrt%2Fsvn-archive%2Farchive.git;a=blobdiff_plain;f=package%2Fbase-files%2Ffiles%2Flib%2Fnetwork%2Fconfig.sh;h=29d021af92c1ce92a5a891ec421ac25e0bfbd001;hp=cf5b197b59a0f92e6eede74d5fdfd0f52a0e2917;hb=adedc8b276b5b7feab0c4e0f1fb3391d7dc3458d;hpb=0b5053e09dc475790e12feef32f5932e123392fe diff --git a/package/base-files/files/lib/network/config.sh b/package/base-files/files/lib/network/config.sh index cf5b197b59..29d021af92 100755 --- a/package/base-files/files/lib/network/config.sh +++ b/package/base-files/files/lib/network/config.sh @@ -106,7 +106,7 @@ add_dns() { local dns local add for dns in "$@"; do - grep -qsF "nameserver $dns" /tmp/resolv.conf.auto || { + grep -qsE "^nameserver ${dns//./\\.}$" /tmp/resolv.conf.auto || { add="${add:+$add }$dns" echo "nameserver $dns" >> /tmp/resolv.conf.auto } @@ -126,7 +126,7 @@ remove_dns() { [ -f /tmp/resolv.conf.auto ] && { local dns=$(uci_get_state network "$cfg" resolv_dns) for dns in $dns; do - sed -i -e "/^nameserver $dns$/d" /tmp/resolv.conf.auto + sed -i -e "/^nameserver ${dns//./\\.}$/d" /tmp/resolv.conf.auto done } @@ -152,7 +152,7 @@ sort_list() { prepare_interface() { local iface="$1" local config="$2" - local vifmac="$3" + local macaddr="$3" # if we're called for the bridge interface itself, don't bother trying # to create any interfaces here. The scripts have already done that, otherwise @@ -166,13 +166,15 @@ prepare_interface() { # make sure the interface is removed from any existing bridge and deconfigured, # (deconfigured only if the interface is not set to proto=none) unbridge "$iface" - [ "$proto" = none ] || ifconfig "$iface" 0.0.0.0 - # Change interface MAC address if requested - [ -n "$vifmac" ] && { - ifconfig "$iface" down - ifconfig "$iface" hw ether "$vifmac" up - } + local mtu macaddr txqueuelen + config_get mtu "$config" mtu + [ -n "$macaddr" ] || config_get macaddr "$config" macaddr + config_get txqueuelen "$config" txqueuelen + [ -n "$macaddr" ] && $DEBUG ifconfig "$iface" down + $DEBUG ifconfig "$iface" ${macaddr:+hw ether "$macaddr"} ${mtu:+mtu $mtu} ${txqueuelen:+txqueuelen $txqueuelen} up + + [ "$proto" = none ] || ifconfig "$iface" 0.0.0.0 # Apply sysctl settings map_sysctls "$config" "$iface" @@ -202,8 +204,9 @@ prepare_interface() { $DEBUG brctl addif "br-$config" "$iface" # Bridge existed already. No further processing necesary } || { - local stp + local stp igmp_snooping config_get_bool stp "$config" stp 0 + config_get_bool igmp_snooping "$config" igmp_snooping 1 $DEBUG brctl addbr "br-$config" $DEBUG brctl setfd "br-$config" 0 $DEBUG ifconfig "$iface" 0.0.0.0 @@ -211,6 +214,7 @@ prepare_interface() { $DEBUG brctl addif "br-$config" "$iface" $DEBUG brctl stp "br-$config" $stp [ -z "$macaddr" ] && macaddr="$(cat /sys/class/net/$iface/address)" + echo $igmp_snooping > /sys/devices/virtual/net/br-$config/bridge/multicast_snooping 2>/dev/null $DEBUG ifconfig "br-$config" hw ether $macaddr up # Creating the bridge here will have triggered a hotplug event, which will # result in another setup_interface() call, so we simply stop processing @@ -261,9 +265,9 @@ setup_interface_static() { esac [ -z "$ipaddr" ] || $DEBUG ifconfig "$iface" "$ipaddr" netmask "$netmask" broadcast "${bcast:-+}" - [ -z "$ip6addr" ] || $DEBUG ifconfig "$iface" add "$ip6addr" + [ -z "$ip6addr" ] || $DEBUG ifconfig "${iface%:*}" add "$ip6addr" [ -z "$gateway" ] || $DEBUG route add default gw "$gateway" ${metric:+metric $metric} dev "$iface" - [ -z "$ip6gw" ] || $DEBUG route -A inet6 add default gw "$ip6gw" ${metric:+metric $metric} dev "$iface" + [ -z "$ip6gw" ] || $DEBUG route -A inet6 add default gw "$ip6gw" ${metric:+metric $metric} dev "${iface%:*}" [ -z "$dns" ] || add_dns "$config" $dns config_get type "$config" TYPE @@ -350,14 +354,6 @@ setup_interface() { } # Interface settings - grep -qE "^ *$iface:" /proc/net/dev && { - local mtu macaddr txqueuelen - config_get mtu "$config" mtu - config_get macaddr "$config" macaddr - config_get txqueuelen "$config" txqueuelen - [ -n "$macaddr" ] && $DEBUG ifconfig "$iface" down - $DEBUG ifconfig "$iface" ${macaddr:+hw ether "$macaddr"} ${mtu:+mtu $mtu} ${txqueuelen:+txqueuelen $txqueuelen} up - } set_interface_ifname "$config" "$iface" [ -n "$proto" ] || config_get proto "$config" proto