ASR_BASE

Change-Id: Icf3719cc0afe3eeb3edc7fa80a2eb5199ca9dda1
diff --git a/external/subpack/net/gnunet/files/gnunet-dhtcache-heap.defaults b/external/subpack/net/gnunet/files/gnunet-dhtcache-heap.defaults
new file mode 100644
index 0000000..09172b6
--- /dev/null
+++ b/external/subpack/net/gnunet/files/gnunet-dhtcache-heap.defaults
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+uci -q get gnunet.dhtcache || uci set gnunet.dhtcache=gnunet-config
+
+uci -q batch <<EOF
+	set gnunet.dhtcache.DATABASE=heap
+	commit gnunet
+EOF
diff --git a/external/subpack/net/gnunet/files/gnunet-dhtcache-pgsql.defaults b/external/subpack/net/gnunet/files/gnunet-dhtcache-pgsql.defaults
new file mode 100644
index 0000000..eedbe24
--- /dev/null
+++ b/external/subpack/net/gnunet/files/gnunet-dhtcache-pgsql.defaults
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+uci -q get gnunet.dhtcache || uci set gnunet.dhtcache=gnunet-config
+
+uci -q batch <<EOF
+	set gnunet.dhtcache.DATABASE=postgres
+	set gnunet.datacache_postgres=gnunet-config
+	set gnunet.datacache_postgres.CONFIG=postgres://gnunet@%2Ftmp%2Frun%2Fpostgresql/gnunet
+	commit gnunet
+EOF
diff --git a/external/subpack/net/gnunet/files/gnunet-dhtcache-sqlite.defaults b/external/subpack/net/gnunet/files/gnunet-dhtcache-sqlite.defaults
new file mode 100644
index 0000000..5166052
--- /dev/null
+++ b/external/subpack/net/gnunet/files/gnunet-dhtcache-sqlite.defaults
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+uci -q get gnunet.dhtcache || uci set gnunet.dhtcache=gnunet-config
+
+uci -q batch <<EOF
+	del gnunet.datacache_sqlite
+	set gnunet.datacache_sqlite=gnunet-config
+	set gnunet.datacache_sqlite.FILENAME=/var/run/gnunet/datacache.sqlite
+	set gnunet.dhtcache.DATABASE=sqlite
+	commit gnunet
+EOF
diff --git a/external/subpack/net/gnunet/files/gnunet-fs-heap.defaults b/external/subpack/net/gnunet/files/gnunet-fs-heap.defaults
new file mode 100644
index 0000000..19b0531
--- /dev/null
+++ b/external/subpack/net/gnunet/files/gnunet-fs-heap.defaults
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+uci -q get gnunet.datastore || uci set gnunet.datastore=gnunet-config
+
+uci -q batch <<EOF
+	set gnunet.datastore.DATABASE=heap
+	commit gnunet
+EOF
diff --git a/external/subpack/net/gnunet/files/gnunet-fs-pgsql.defaults b/external/subpack/net/gnunet/files/gnunet-fs-pgsql.defaults
new file mode 100644
index 0000000..8caeb82
--- /dev/null
+++ b/external/subpack/net/gnunet/files/gnunet-fs-pgsql.defaults
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+uci -q get gnunet.datastore || uci set gnunet.datastore=gnunet-config
+
+uci -q batch <<EOF
+	set gnunet.datastore.DATABASE=postgres
+	set gnunet.datastore_postgres=gnunet-config
+	set gnunet.datastore_postgres.CONFIG=postgres://gnunet@%2Ftmp%2Frun%2Fpostgresql/gnunet
+	commit gnunet
+EOF
diff --git a/external/subpack/net/gnunet/files/gnunet-fs-sqlite.defaults b/external/subpack/net/gnunet/files/gnunet-fs-sqlite.defaults
new file mode 100644
index 0000000..ff72335
--- /dev/null
+++ b/external/subpack/net/gnunet/files/gnunet-fs-sqlite.defaults
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+uci -q get gnunet.datastore || uci set gnunet.datastore=gnunet-config
+
+uci -q batch <<EOF
+	del gnunet.datastore_sqlite
+	set gnunet.datastore_sqlite=gnunet-config
+	set gnunet.datastore_sqlite.FILENAME=/etc/gnunet/datastore.sqlite
+	set gnunet.datastore.DATABASE=sqlite
+	commit gnunet
+EOF
diff --git a/external/subpack/net/gnunet/files/gnunet-gns-flat.defaults b/external/subpack/net/gnunet/files/gnunet-gns-flat.defaults
new file mode 100644
index 0000000..a861291
--- /dev/null
+++ b/external/subpack/net/gnunet/files/gnunet-gns-flat.defaults
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+uci -q get gnunet.namestore || uci set gnunet.namestore=gnunet-config
+uci -q get gnunet.namecache || uci set gnunet.namecache=gnunet-config
+
+uci -q batch <<EOF
+	del gnunet.namestore_flat
+	set gnunet.namestore_flat=gnunet-config
+	set gnunet.namestore_flat.FILENAME=/etc/gnunet/namestore.flat
+	set gnunet.namestore.DATABASE=flat
+	del gnunet.namecache_flat
+	set gnunet.namecache_flat=gnunet-config
+	set gnunet.namecache_flat.FILENAME=/var/run/gnunet/namecache.flat
+	set gnunet.namecache.DATABASE=flat
+	commit gnunet
+EOF
diff --git a/external/subpack/net/gnunet/files/gnunet-gns-pgsql.defaults b/external/subpack/net/gnunet/files/gnunet-gns-pgsql.defaults
new file mode 100644
index 0000000..ccc9707
--- /dev/null
+++ b/external/subpack/net/gnunet/files/gnunet-gns-pgsql.defaults
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+uci -q get gnunet.namestore || uci set gnunet.namestore=gnunet-config
+uci -q get gnunet.namecache || uci set gnunet.namecache=gnunet-config
+
+uci -q batch <<EOF
+	set gnunet.namestore.DATABASE=postgres
+	set gnunet.namecache.DATABASE=postgres
+	set gnunet.namestore_postgres=gnunet-config
+	set gnunet.namestore_postgres.CONFIG=postgres://gnunet@%2Ftmp%2Frun%2Fpostgresql/gnunet
+	set gnunet.namecache_postgres=gnunet-config
+	set gnunet.namecache_postgres.CONFIG=postgres://gnunet@%2Ftmp%2Frun%2Fpostgresql/gnunet
+	commit gnunet
+EOF
diff --git a/external/subpack/net/gnunet/files/gnunet-gns-sqlite.defaults b/external/subpack/net/gnunet/files/gnunet-gns-sqlite.defaults
new file mode 100644
index 0000000..4f46818
--- /dev/null
+++ b/external/subpack/net/gnunet/files/gnunet-gns-sqlite.defaults
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+uci -q get gnunet.namestore || uci set gnunet.namestore=gnunet-config
+uci -q get gnunet.namecache || uci set gnunet.namecache=gnunet-config
+
+uci -q batch <<EOF
+	del gnunet.namestore_sqlite
+	set gnunet.namestore_sqlite=gnunet-config
+	set gnunet.namestore_sqlite.FILENAME=/etc/gnunet/namestore.sqlite
+	set gnunet.namestore.DATABASE=sqlite
+	del gnunet.namecache_sqlite
+	set gnunet.namecache_sqlite=gnunet-config
+	set gnunet.namecache_sqlite.FILENAME=/var/run/gnunet/namecache.sqlite
+	set gnunet.namecache.DATABASE=sqlite
+	commit gnunet
+EOF
diff --git a/external/subpack/net/gnunet/files/gnunet-gns.defaults b/external/subpack/net/gnunet/files/gnunet-gns.defaults
new file mode 100644
index 0000000..9363551
--- /dev/null
+++ b/external/subpack/net/gnunet/files/gnunet-gns.defaults
@@ -0,0 +1,51 @@
+#!/bin/sh
+
+uci -q batch <<EOF
+del network.gnunetdns
+set network.gnunetdns=interface
+set network.gnunetdns.ifname='gnunet-dns'
+set network.gnunetdns.proto='gnunet'
+
+del network.gndnsrtt
+set network.gndnsrtt=route
+set network.gndnsrtt.interface='gnunetdns'
+set network.gndnsrtt.table='53'
+set network.gndnsrtt.target='0.0.0.0/0'
+
+del network.gndnsrl
+set network.gndnsrl=rule
+set network.gndnsrl.mark='0x8260035'
+set network.gndnsrl.lookup='53'
+set network.gndnsrk.priority='0'
+
+commit network
+
+del firewall.gnunetdns
+set firewall.gnunetdns=zone
+set firewall.gnunetdns.name='gnunetdns'
+set firewall.gnunetdns.network='gnunetdns'
+set firewall.gnunetdns.input='ACCEPT'
+set firewall.gnunetdns.output='ACCEPT'
+set firewall.gnunetdns.forward='ACCEPT'
+
+del firewall.gndnsrl
+set firewall.gndnsrl=rule
+set firewall.gndnsrl.name='Mark-local-DNS-for-GNUnet'
+set firewall.gndnsrl.proto='udp'
+set firewall.gndnsrl.dest_port='53'
+set firewall.gndnsrl.extra='-m owner ! --gid-owner 452-453'
+set firewall.gndnsrl.target='MARK'
+set firewall.gndnsrl.set_mark='136708149'
+
+del firewall.gndnsrl2
+set firewall.gndnsrl2=rule
+set firewall.gndnsrl2.name='Mark-forwarded-DNS-for-GNUnet'
+set firewall.gndnsrl2.enabled='0'
+set firewall.gndnsrl2.src='*'
+set firewall.gndnsrl2.proto='udp'
+set firewall.gndnsrl2.dest_port='53'
+set firewall.gndnsrl2.target='MARK'
+set firewall.gndnsrl2.set_mark='136708149'
+
+commit firewall
+EOF
diff --git a/external/subpack/net/gnunet/files/gnunet-peerstore-flat.defaults b/external/subpack/net/gnunet/files/gnunet-peerstore-flat.defaults
new file mode 100644
index 0000000..3cd7e33
--- /dev/null
+++ b/external/subpack/net/gnunet/files/gnunet-peerstore-flat.defaults
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+uci -q get gnunet.peerstore || uci set gnunet.peerstore=gnunet-config
+
+uci -q batch <<EOF
+	del gnunet.peerstore_flat
+	set gnunet.peerstore_flat=gnunet-config
+	set gnunet.peerstore_flat.FILENAME=/etc/gnunet/peerstore.flat
+	set gnunet.peerstore.DATABASE=flat
+	commit gnunet
+EOF
diff --git a/external/subpack/net/gnunet/files/gnunet-peerstore-sqlite.defaults b/external/subpack/net/gnunet/files/gnunet-peerstore-sqlite.defaults
new file mode 100644
index 0000000..47298e7
--- /dev/null
+++ b/external/subpack/net/gnunet/files/gnunet-peerstore-sqlite.defaults
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+uci -q get gnunet.peerstore || uci set gnunet.peerstore=gnunet-config
+
+uci -q batch <<EOF
+	del gnunet.peerstore_sqlite
+	set gnunet.peerstore_sqlite=gnunet-config
+	set gnunet.peerstore_sqlite.FILENAME=/etc/gnunet/peerstore.sqlite
+	set gnunet.peerstore.DATABASE=sqlite
+	commit gnunet
+EOF
diff --git a/external/subpack/net/gnunet/files/gnunet-pgsql.defaults b/external/subpack/net/gnunet/files/gnunet-pgsql.defaults
new file mode 100644
index 0000000..1bb194f
--- /dev/null
+++ b/external/subpack/net/gnunet/files/gnunet-pgsql.defaults
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+uci -q batch <<EOF
+	del postgresql.gnunet
+	set postgresql.gnunet=postgres-db
+	set postgresql.gnunet.name=gnunet
+	set postgresql.gnunet.user=gnunet
+	commit postgresql
+EOF
diff --git a/external/subpack/net/gnunet/files/gnunet-proto.sh b/external/subpack/net/gnunet/files/gnunet-proto.sh
new file mode 100644
index 0000000..8883f42
--- /dev/null
+++ b/external/subpack/net/gnunet/files/gnunet-proto.sh
@@ -0,0 +1,51 @@
+#!/bin/sh
+# gnunet.sh - GNUnet proto for netifd
+# Copyright (c) 2016 OpenWrt.org
+
+[ -n "$INCLUDE_ONLY" ] || {
+	. /lib/functions.sh
+	. /lib/functions/network.sh
+	. ../netifd-proto.sh
+	init_proto "$@"
+}
+
+proto_gnunet_setup() {
+	local cfg="$1"
+	local iface="$2"
+
+	local ipv4_addr ipv6_addr prefix ipaddr ip6addr
+
+	local configfile="/var/run/gnunet/gnunet.conf"
+	local gnunet_iftype
+
+	for gnit in dns exit vpn; do
+		local i1="$(gnunet-config -c $configfile -s $gnit -o IFNAME 2>/dev/null)"
+		local i2="$(gnunet-config -c $configfile -s $gnit -o TUN_IFNAME 2>/dev/null)"
+		[ "$i1" = "$iface" -o "$i2" = "$iface" ] && gnunet_iftype="$gnit"
+	done
+
+	if [ -z "$iface" -o -z "$gnunet_iftype" ]; then
+		proto_setup_failed "$cfg"
+		return
+	fi
+
+	proto_init_update "$iface" 1
+	ipaddr="$(gnunet-config -c $configfile -s $gnunet_iftype -o IPV4ADDR 2>/dev/null)"
+	ipmask="$(gnunet-config -c $configfile -s $gnunet_iftype -o IPV4MASK 2>/dev/null)"
+	ip6addr="$(gnunet-config -c $configfile -s $gnunet_iftype -o IPV6ADDR 2>/dev/null)"
+	ip6prefix="$(gnunet-config -c $configfile -s $gnunet_iftype -o IPV6PREFIX 2>/dev/null)"
+
+	[ -n "$ipaddr" ]  && proto_add_ipv4_address "$ipaddr" "$ipmask"
+	[ -n "$ip6addr" ] && proto_add_ipv6_address "$ip6addr" "$ip6prefix"
+	proto_send_update "$cfg"
+}
+
+proto_gnunet_teardown() {
+	return
+}
+
+[ -n "$INCLUDE_ONLY" ] || {
+	add_protocol gnunet
+}
+
+
diff --git a/external/subpack/net/gnunet/files/gnunet-vpn.defaults b/external/subpack/net/gnunet/files/gnunet-vpn.defaults
new file mode 100644
index 0000000..efc9d7b
--- /dev/null
+++ b/external/subpack/net/gnunet/files/gnunet-vpn.defaults
@@ -0,0 +1,34 @@
+#!/bin/sh
+
+uci -q batch <<EOF
+del network.gnunetvpn
+set network.gnunetvpn=interface
+set network.gnunetvpn.ifname='vpn-gnunet'
+set network.gnunetvpn.proto='gnunet'
+del network.gnunetexit
+set network.gnunetexit=interface
+set network.gnunetexit.ifname='exit-gnunet'
+set network.gnunetexit.proto='gnunet'
+commit network
+
+del firewall.gnunetvpn
+set firewall.gnunetvpn=zone
+set firewall.gnunetvpn.name='gnunetvpn'
+set firewall.gnunetvpn.network='gnunetvpn'
+set firewall.gnunetvpn.input='ACCEPT'
+set firewall.gnunetvpn.output='ACCEPT'
+set firewall.gnunetvpn.forward='REJECT'
+del firewall.gnunetexit
+set firewall.gnunetexit=zone
+set firewall.gnunetexit.name='gnunetexit'
+set firewall.gnunetexit.network='gnunetexit'
+set firewall.gnunetexit.input='ACCEPT'
+set firewall.gnunetexit.output='ACCEPT'
+set firewall.gnunetexit.forward='REJECT'
+
+del firewall.gnexitfwd
+set firewall.gnexitfwd=forwarding
+set firewall.gnexitfwd.src='gnunetexit'
+set firewall.gnexitfwd.dest='wan'
+commit firewall
+EOF
diff --git a/external/subpack/net/gnunet/files/gnunet.defaults b/external/subpack/net/gnunet/files/gnunet.defaults
new file mode 100644
index 0000000..235f3b2
--- /dev/null
+++ b/external/subpack/net/gnunet/files/gnunet.defaults
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+[ -e /etc/config/gnunet ] && exit 0
+
+touch /etc/config/gnunet
+
+uci batch <<EOF
+set gnunet.nse=gnunet-config
+set gnunet.nse.WORKDELAY='500 ms'
+
+commit gnunet
+
+EOF
+
diff --git a/external/subpack/net/gnunet/files/gnunet.init b/external/subpack/net/gnunet/files/gnunet.init
new file mode 100755
index 0000000..5fad67b
--- /dev/null
+++ b/external/subpack/net/gnunet/files/gnunet.init
@@ -0,0 +1,103 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2015 OpenWrt.org
+
+START=90
+
+USE_PROCD=1
+PROG=/usr/lib/gnunet/libexec/gnunet-service-arm
+
+GNUNET_HOME=/var/run/gnunet
+# LOGFILE=$GNUNET_HOME/gnunet.log
+CONFIGFILE=$GNUNET_HOME/gnunet.conf
+
+extra_command "restart_transport" "Restart transport"
+
+prepare_config() {
+	local had_exit_service=0
+
+	if [ ! -e "$GNUNET_HOME" ]; then
+		mkdir -m 0750 -p "$GNUNET_HOME"
+		chown gnunet:gnunet "$GNUNET_HOME"
+	fi
+	touch "$CONFIGFILE"
+	chown gnunet:gnunet "$CONFIGFILE"
+	chmod 0640 "$CONFIGFILE"
+	gnunet-config -c "$CONFIGFILE" -s PATHS -o GNUNET_HOME -V "$GNUNET_HOME"
+
+	# minimal persistency in /etc/gnunet
+	[ ! -d /etc/gnunet ] && mkdir -m 0750 -p /etc/gnunet
+	chown -R gnunet:gnunet /etc/gnunet
+
+	# defaults paths for persistent files
+	gnunet-config -c "$CONFIGFILE" -s PATHS -o GNUNET_CONFIG_HOME -V /etc/gnunet
+	gnunet-config -c "$CONFIGFILE" -s PEER -o PRIVATE_KEY -V /etc/gnunet/private_key.ecc
+	gnunet-config -c "$CONFIGFILE" -s identity -o EGODIR -V /etc/gnunet/identity/egos
+	gnunet-config -c "$CONFIGFILE" -s revocation -o DATABASE -V /etc/gnunet/revocation.dat
+	gnunet-config -c "$CONFIGFILE" -s nse -o PROOFFILE -V /etc/gnunet/proof.dat
+
+	# enable all installed transport plugins
+	transport_plugins=$(gnunet-config -c "$CONFIGFILE" -s transport -o PLUGINS)
+	for transplug in /usr/lib/gnunet/libgnunet_plugin_transport_*.so; do
+		transplug="$( echo "$transplug" |
+			sed -ne 's!^.*_transport_\(.*\)\.so$!\1!p' )"
+		echo "$transport_plugins" | grep -q "$transplug" ||
+			transport_plugins="$transport_plugins $transplug"
+	done
+	gnunet-config -c "$CONFIGFILE" -s transport -o PLUGINS -V "$transport_plugins"
+
+	# do not touch sysctl, iptables and routing
+	gnunet-config -c "$CONFIGFILE" -s dns -o SKIP_ROUTING_SETUP -V YES
+	gnunet-config -c "$CONFIGFILE" -s exit -o EXIT_IFNAME -V ''
+
+	# apply config from UCI
+	_gnunet_section=""
+	config_cb()
+	{
+		# $1    "Type"
+		# $2    "Name"
+		local __TYPE="$1"
+		local __NAME="${2/_/-}"
+		[ "${__TYPE}" = "gnunet-config" ] && _gnunet_section="${__NAME}"
+		[ "${__TYPE}" = "gnunet-exit-service" ] && {
+			had_exit_service=1
+			_gnunet_section="${__NAME}.gnunet."
+		}
+	}
+	option_cb() {
+		# $1    name of variable
+		# $2    value
+		local __OPT="$1"
+		local __VAL="$2"
+		gnunet-config -c "$CONFIGFILE" -s "${_gnunet_section}" -o "${__OPT}" -V "${__VAL}"
+	}
+
+	config_load gnunet
+
+	[ "$had_exit_service" -eq 1 ] && gnunet-config -c "$CONFIGFILE" -s exit -o FORCESTART -V YES
+
+	return 0
+}
+
+restart_transport() {
+	gnunet-arm -c "$CONFIGFILE" -k transport
+	gnunet-arm -c "$CONFIGFILE" -i transport
+}
+
+start_service() {
+	prepare_config
+
+	procd_open_instance
+	procd_set_param user gnunet
+#	procd_set_param env GNUNET_LOG="dht;;;;info"
+	procd_set_param stderr 1
+	procd_set_param command "$PROG" -c "$CONFIGFILE"
+	[ "$LOGFILE" ] && procd_append_param command -l "$LOGFILE"
+	procd_set_param respawn
+	procd_close_instance
+}
+
+service_triggers()
+{
+	procd_add_reload_trigger "gnunet"
+	procd_add_raw_trigger "interface.*.up" 3000 /etc/init.d/gnunet restart_transport
+}
diff --git a/external/subpack/net/gnunet/files/gnunet.upgrade b/external/subpack/net/gnunet/files/gnunet.upgrade
new file mode 100644
index 0000000..f488957
--- /dev/null
+++ b/external/subpack/net/gnunet/files/gnunet.upgrade
@@ -0,0 +1 @@
+/etc/gnunet