base-files: add support for ipv6-prefixes in connection with netifd
authorSteven Barth <cyrus@openwrt.org>
Tue, 15 Jan 2013 13:07:51 +0000 (13:07 +0000)
committerSteven Barth <cyrus@openwrt.org>
Tue, 15 Jan 2013 13:07:51 +0000 (13:07 +0000)
SVN-Revision: 35168

package/base-files/Makefile
package/base-files/files/etc/sysctl.conf
package/base-files/files/etc/uci-defaults/generate-ula [new file with mode: 0644]
package/base-files/files/lib/functions/network.sh

index 5bb2e25652f0ea132932e1c2e14cd95d1b29b3a7..7c9c14de9c8dd00f700a78cb66026c5e987378d3 100644 (file)
@@ -11,7 +11,7 @@ include $(INCLUDE_DIR)/kernel.mk
 include $(INCLUDE_DIR)/version.mk
 
 PKG_NAME:=base-files
-PKG_RELEASE:=124
+PKG_RELEASE:=125
 
 PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/
 PKG_BUILD_DEPENDS:=opkg/host
index ef3db4ec50d2c3b118eaf809777ae7cedad75272..4ea01bb4c9a3c07da4448b53c7fd271bba990846 100644 (file)
@@ -12,6 +12,8 @@ net.ipv4.tcp_timestamps=1
 net.ipv4.tcp_sack=1
 net.ipv4.tcp_dsack=1
 
+net.ipv6.conf.all.forwarding=1
+
 net.netfilter.nf_conntrack_acct=1
 net.netfilter.nf_conntrack_checksum=0
 net.netfilter.nf_conntrack_max=16384
diff --git a/package/base-files/files/etc/uci-defaults/generate-ula b/package/base-files/files/etc/uci-defaults/generate-ula
new file mode 100644 (file)
index 0000000..f3e4931
--- /dev/null
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+[ "$(uci get network.globals.ula_prefix)" != "auto" ] && 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.ula_prefix=fd$r1:$r2:$r3::/48
+       commit network
+EOF
+
+exit 0
+
index 424965acb57785d9bac5493f3a56eb54b25dfb0f..8f87d1d0beb6521ef10067097d4a5613222a119b 100644 (file)
@@ -57,6 +57,20 @@ __network_parse_ifstatus()
                        fi
                done
 
+               # parse prefixes
+               if json_is_a "ipv6_prefix" array; then
+                       json_select "ipv6_prefix"
+
+                       if json_is_a 1 object; then
+                               json_select 1
+                               __network_set_cache "${__key}_prefix6_address"  address
+                               __network_set_cache "${__key}_prefix6_mask"     mask
+                               json_select ".."
+                       fi
+
+                       json_select ".."
+               fi
+
                # parse routes
                if json_is_a route array; then
 
@@ -170,6 +184,22 @@ network_get_subnet()  { __network_ipaddr "$1" "$2" 4 1; }
 # 2: interface
 network_get_subnet6() { __network_ipaddr "$1" "$2" 6 1; }
 
+# determine IPv6 prefix
+network_get_prefix6() {
+       local __prefix="$1"
+       local __iface="$2"
+       local __address
+       local __mask
+
+       __network_parse_ifstatus "$__iface" || return 1
+       __network_export __address "${__iface}_prefix6_address"
+       local return="$?"
+       [ "$return" -eq 0 ] || return $?
+       __network_export __mask "${__iface}_prefix6_mask"
+       eval "$__prefix=$__address/$__mask"
+       return 0
+}
+
 
 __network_gateway()
 {