Browse Source

base-files: disable ipv6 on bridge ports, this prevents stray RA assigned and link local addresses on bridge member devices

SVN-Revision: 24194
Jo-Philipp Wich 15 years ago
parent
commit
ca829e805b
1 changed files with 13 additions and 8 deletions
  1. 13 8
      package/base-files/files/lib/network/config.sh

+ 13 - 8
package/base-files/files/lib/network/config.sh

@@ -3,6 +3,12 @@
 
 # DEBUG="echo"
 
+do_sysctl() {
+	[ -n "$2" ] && \
+		sysctl -n -e -w "$1=$2" >/dev/null || \
+		sysctl -n -e "$1"
+}
+
 find_config() {
 	local iftype device iface ifaces ifn
 	for ifn in $interfaces; do
@@ -164,14 +170,10 @@ prepare_interface() {
 			local macaddr
 			config_get macaddr "$config" macaddr
 			[ -x /usr/sbin/brctl ] && {
-				# Remove IPv6 link local addr before adding the iface to the bridge
-				local llv6="$(ifconfig "$iface")"
-				case "$llv6" in
-					*fe80:*/64*)
-						llv6="${llv6#* fe80:}"
-						ifconfig "$iface" del "fe80:${llv6%% *}"
-					;;
-				esac
+				# Disable IPv6 for bridge ports
+				do_sysctl net.ipv6.conf.$iface.disable_ipv6 1
+				[ "${iface##wlan}" != "$iface" ] && \
+					do_sysctl net.ipv6.conf.mon.$iface.disable_ipv6 1
 
 				ifconfig "br-$config" 2>/dev/null >/dev/null && {
 					local newdevs devices
@@ -411,6 +413,9 @@ unbridge() {
 
 		for brdev in $(brctl show | awk '$2 ~ /^[0-9].*\./ { print $1 }'); do
 			brctl delif "$brdev" "$dev" 2>/dev/null >/dev/null
+			do_sysctl net.ipv6.conf.$dev.disable_ipv6 0
+			[ "${dev##wlan}" != "$dev" ] && \
+				do_sysctl net.ipv6.conf.mon.$dev.disable_ipv6 0
 		done
 	}
 }