AA: add ipv6-support for transitioning between IPv6-stacks
authorSteven Barth <cyrus@openwrt.org>
Fri, 24 May 2013 13:03:59 +0000 (13:03 +0000)
committerSteven Barth <cyrus@openwrt.org>
Fri, 24 May 2013 13:03:59 +0000 (13:03 +0000)
SVN-Revision: 36712

package/ipv6-support/Makefile [new file with mode: 0644]
package/ipv6-support/files/ipv6-boot [new file with mode: 0755]
package/ipv6-support/files/network-enable-ipv6.defaults [new file with mode: 0755]

diff --git a/package/ipv6-support/Makefile b/package/ipv6-support/Makefile
new file mode 100644 (file)
index 0000000..efa2fb0
--- /dev/null
@@ -0,0 +1,50 @@
+#
+# Copyright (C) 2010-2012 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=ipv6-support
+PKG_VERSION:=2013-05-23
+PKG_RELEASE:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/ipv6-support
+  SECTION:=ipv6
+  CATEGORY:=IPv6
+  DEPENDS:=+kmod-ipv6 +6relayd +odhcp6c +ip6tables
+  TITLE:=Basic IPv6-support for Customer Edge Routers
+  MAINTAINER:=Steven Barth <steven@midlink.org>
+  PKGARCH:=all
+endef
+
+define Package/ipv6-support/description
+This package provides basic IPv6 support including Router Discovery,
+DHCPv6 (client & server), prefix delegation and distribution.
+endef
+
+define Build/Compile
+endef
+
+define Build/Configure
+endef
+
+define Package/ipv6-support/postinst
+#!/bin/sh
+[ -n "$${IPKG_INSTROOT}" ] || /etc/init.d/ipv6-boot start || true
+[ -n "$${IPKG_INSTROOT}" ] || /etc/uci-defaults/10_network-enable-ipv6 || true
+[ -n "$${IPKG_INSTROOT}" ] || rm -f /etc/uci-defaults/10_network-enable-ipv6 || true
+endef
+
+define Package/ipv6-support/install
+       $(INSTALL_DIR) $(1)/etc/uci-defaults
+       $(INSTALL_DIR) $(1)/etc/init.d
+       $(INSTALL_BIN) ./files/network-enable-ipv6.defaults $(1)/etc/uci-defaults/10_network-enable-ipv6
+       $(INSTALL_BIN) ./files/ipv6-boot $(1)/etc/init.d/ipv6-boot
+endef
+
+$(eval $(call BuildPackage,ipv6-support))
diff --git a/package/ipv6-support/files/ipv6-boot b/package/ipv6-support/files/ipv6-boot
new file mode 100755 (executable)
index 0000000..a0d3856
--- /dev/null
@@ -0,0 +1,15 @@
+#!/bin/sh /etc/rc.common
+START=11
+STOP=97
+
+start() {
+       # early sysctl to avoid networking races
+       if [ -d /proc/sys/net/ipv6/conf ]; then
+               for i in /proc/sys/net/ipv6/conf/*/accept_ra; do
+                       echo 0 > $i
+               done
+
+               echo 1 > /proc/sys/net/ipv6/conf/default/forwarding
+               echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
+       fi
+}
diff --git a/package/ipv6-support/files/network-enable-ipv6.defaults b/package/ipv6-support/files/network-enable-ipv6.defaults
new file mode 100755 (executable)
index 0000000..7bde742
--- /dev/null
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+# Remove conflicting sysctl-handler
+rm -f /etc/hotplug.d/iface/10-sysctl
+
+# Don't override existing settings
+uci get network.globals && exit 0
+
+# Sometimes results are empty, therefore try until it works...          
+local r1 r2 r3
+while [ -z "$r1" -o -z "$r2" -o -z "$r3" ]; do
+       r1=$(printf "%02x" $(($(</dev/urandom tr -dc 0-9 | dd bs=9 count=1) % 256)))
+       r2=$(printf "%01x" $(($(</dev/urandom tr -dc 0-9 | dd bs=9 count=1) % 65536)))
+       r3=$(printf "%01x" $(($(</dev/urandom tr -dc 0-9 | dd bs=9 count=1) % 65536)))
+done
+
+
+uci -q batch <<-EOF >/dev/null
+       set network.globals=globals
+       set network.globals.ula_prefix=fd$r1:$r2:$r3::/48
+       set network.wan6=interface
+       set network.wan6.proto=dhcpv6
+       set network.wan6.ifname=@wan
+       set network.lan.ip6assign=64
+       set network.wan.ipv6=1
+       commit network
+EOF