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

SVN-Revision: 35168
This commit is contained in:
Steven Barth 2013-01-15 13:07:51 +00:00
parent 06890959d1
commit 847cd984b9
4 changed files with 51 additions and 1 deletions

View 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

View 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

View file

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

View 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()
{