From 875ff445925ff10df5bf7c491c007de661248003 Mon Sep 17 00:00:00 2001
From: Jo-Philipp Wich <jow@openwrt.org>
Date: Fri, 11 Feb 2011 00:39:11 +0000
Subject: [PATCH] base-files: - properly disable IPv6 on bridge ports -
 introduce accept_ra option, defaults to true for dhcp interfaces, false for
 others - introduce send_rs option, defaults to true for static interfaces,
 false for others

SVN-Revision: 25454
---
 package/base-files/Makefile                   |  2 +-
 .../files/etc/hotplug.d/iface/10-routes       | 27 +++++++++++++++++++
 .../base-files/files/lib/network/config.sh    |  7 ++---
 3 files changed, 30 insertions(+), 6 deletions(-)

diff --git a/package/base-files/Makefile b/package/base-files/Makefile
index 68d9e18ed2..90a65d61de 100644
--- a/package/base-files/Makefile
+++ b/package/base-files/Makefile
@@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk
 include $(INCLUDE_DIR)/kernel.mk
 
 PKG_NAME:=base-files
-PKG_RELEASE:=65
+PKG_RELEASE:=66
 
 PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/
 PKG_BUILD_DEPENDS:=opkg/host
diff --git a/package/base-files/files/etc/hotplug.d/iface/10-routes b/package/base-files/files/etc/hotplug.d/iface/10-routes
index 3e0bebbbe3..76a4062846 100644
--- a/package/base-files/files/etc/hotplug.d/iface/10-routes
+++ b/package/base-files/files/etc/hotplug.d/iface/10-routes
@@ -90,6 +90,33 @@ case "$ACTION" in
 			ifconfig "$DEVICE" del "$ip6addr"
 			ifconfig "$DEVICE" add "$ip6addr"
 		}
+		
+		# Setup sysctls
+		local proto accept_ra send_rs
+		
+		config_get proto "$INTERFACE" proto
+		if [ "$proto" = dhcp ]; then
+			accept_ra=1
+			send_rs=0
+		else
+			accept_ra=0
+			send_rs=1
+		fi
+
+		config_get_bool accept_ra "$INTERFACE" accept_ra $accept_ra
+		[ $accept_ra -eq 0 ] || {
+			logger -t ifup "Allowing Router Advertisements on $INTERFACE ($DEVICE)"
+			accept_ra=2
+		}
+		do_sysctl "net.ipv6.conf.$INTERFACE.accept_ra" $accept_ra
+
+		config_get_bool send_rs "$INTERFACE" send_rs $send_rs
+		[ $send_rs -eq 0 ] || {
+			logger -t ifup "Enabling Router Solicitations on $INTERFACE ($DEVICE)"
+			send_rs=2
+		}
+		do_sysctl "net.ipv6.conf.$INTERFACE.forwarding" $send_rs
+
 
 		# Setup routes
 		config_foreach "add_route" route
diff --git a/package/base-files/files/lib/network/config.sh b/package/base-files/files/lib/network/config.sh
index 4a6cb7cb47..aa90077ad9 100755
--- a/package/base-files/files/lib/network/config.sh
+++ b/package/base-files/files/lib/network/config.sh
@@ -170,11 +170,6 @@ prepare_interface() {
 			local macaddr
 			config_get macaddr "$config" macaddr
 			[ -x /usr/sbin/brctl ] && {
-				# 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
 					config_get devices "$config" device
@@ -183,6 +178,7 @@ prepare_interface() {
 					done
 					uci_set_state network "$config" device "$newdevs"
 					$DEBUG ifconfig "$iface" 0.0.0.0
+					$DEBUG do_sysctl "net.ipv6.conf.$iface.disable_ipv6" 1
 					$DEBUG brctl addif "br-$config" "$iface"
 					# Bridge existed already. No further processing necesary
 				} || {
@@ -192,6 +188,7 @@ prepare_interface() {
 					$DEBUG brctl setfd "br-$config" 0
 					$DEBUG ifconfig "br-$config" up
 					$DEBUG ifconfig "$iface" 0.0.0.0
+					$DEBUG do_sysctl "net.ipv6.conf.$iface.disable_ipv6" 1
 					$DEBUG brctl addif "br-$config" "$iface"
 					$DEBUG brctl stp "br-$config" $stp
 					# Creating the bridge here will have triggered a hotplug event, which will
-- 
GitLab