add cname section
[openwrt/svn-archive/archive.git] / package / base-files / files / lib / network / config.sh
index 5b349a7387b6f4295caccad57f58d098f90a87f0..29d021af92c1ce92a5a891ec421ac25e0bfbd001 100755 (executable)
@@ -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
@@ -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