瀏覽代碼

base-files: add support for ipv6-prefixes in connection with netifd

SVN-Revision: 35168
Steven Barth 13 年之前
父節點
當前提交
847cd984b9

+ 1 - 1
package/base-files/Makefile

@@ -11,7 +11,7 @@ include $(INCLUDE_DIR)/kernel.mk
 include $(INCLUDE_DIR)/version.mk
 include $(INCLUDE_DIR)/version.mk
 
 
 PKG_NAME:=base-files
 PKG_NAME:=base-files
-PKG_RELEASE:=124
+PKG_RELEASE:=125
 
 
 PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/
 PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/
 PKG_BUILD_DEPENDS:=opkg/host
 PKG_BUILD_DEPENDS:=opkg/host

+ 2 - 0
package/base-files/files/etc/sysctl.conf

@@ -12,6 +12,8 @@ net.ipv4.tcp_timestamps=1
 net.ipv4.tcp_sack=1
 net.ipv4.tcp_sack=1
 net.ipv4.tcp_dsack=1
 net.ipv4.tcp_dsack=1
 
 
+net.ipv6.conf.all.forwarding=1
+
 net.netfilter.nf_conntrack_acct=1
 net.netfilter.nf_conntrack_acct=1
 net.netfilter.nf_conntrack_checksum=0
 net.netfilter.nf_conntrack_checksum=0
 net.netfilter.nf_conntrack_max=16384
 net.netfilter.nf_conntrack_max=16384

+ 18 - 0
package/base-files/files/etc/uci-defaults/generate-ula

@@ -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
+

+ 30 - 0
package/base-files/files/lib/functions/network.sh

@@ -57,6 +57,20 @@ __network_parse_ifstatus()
 			fi
 			fi
 		done
 		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
 		# parse routes
 		if json_is_a route array; then
 		if json_is_a route array; then
 
 
@@ -170,6 +184,22 @@ network_get_subnet()  { __network_ipaddr "$1" "$2" 4 1; }
 # 2: interface
 # 2: interface
 network_get_subnet6() { __network_ipaddr "$1" "$2" 6 1; }
 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()
 __network_gateway()
 {
 {