ASR_BASE

Change-Id: Icf3719cc0afe3eeb3edc7fa80a2eb5199ca9dda1
diff --git a/external/subpack/net/eoip/files/eoip.config b/external/subpack/net/eoip/files/eoip.config
new file mode 100644
index 0000000..cdac57e
--- /dev/null
+++ b/external/subpack/net/eoip/files/eoip.config
@@ -0,0 +1,6 @@
+config eoip
+	option enabled 0
+	option name 0
+	option idtun      123
+	option dst     '192.168.99.100'
+	option dynamic 1
diff --git a/external/subpack/net/eoip/files/eoip.init b/external/subpack/net/eoip/files/eoip.init
new file mode 100644
index 0000000..37c401e
--- /dev/null
+++ b/external/subpack/net/eoip/files/eoip.init
@@ -0,0 +1,105 @@
+#!/bin/sh /etc/rc.common
+
+START=99
+USE_PROCD=1
+INDEX=0
+
+append_bool() {
+	local section="$1"
+	local option="$2"
+	local value="$3"
+	local _val
+	config_get_bool _val "$section" "$option" '0'
+	[ "$_val" -gt 0 ] && append args "$3"
+}
+
+append_string() {
+	local section="$1"
+	local option="$2"
+	local value="$3"
+	local _val
+	config_get _val "$section" "$option"
+	[ -n "$_val" ] && append args "$3$_val"
+}
+
+service_triggers () {
+	procd_open_trigger
+	procd_add_reload_trigger "eoip"
+	procd_add_config_trigger "config.change" "eoip" /etc/init.d/eoip restart
+	procd_add_config_trigger "config.change" "/etc/config/eoip" /etc/init.d/eoip restart
+	procd_close_trigger
+}
+
+start_service() {
+	config_load "eoip"
+	echo "" > /etc/eoip.cfg
+	echo "#!/bin/sh" > /etc/afterStart.sh
+	echo "chkCount=0">> /etc/afterStart.sh
+	echo "while [ \$chkCount -le 10 ];do">> /etc/afterStart.sh
+	echo "  chkStarted=\$(ip a | grep zeoip | wc -l)">> /etc/afterStart.sh
+	echo "  if [ \$chkStarted -eq 0 ]; then">> /etc/afterStart.sh
+	echo "          chkCount=\$((chkCount+1))">> /etc/afterStart.sh
+	echo "          sleep 2">> /etc/afterStart.sh
+	echo "  else">> /etc/afterStart.sh
+	echo "          chkCount=11">> /etc/afterStart.sh
+	echo "  fi">> /etc/afterStart.sh
+	echo "done">> /etc/afterStart.sh
+	echo "now=\$(ip a | grep \"@zeoip\" | awk '{print \$2}' | sed 's/.$//' | cut -d \"@\" -f 1)" >> /etc/afterStart.sh
+	echo "IFS=\$'\n'" >> /etc/afterStart.sh
+	echo "for s in \$now ; do" >> /etc/afterStart.sh
+	echo "   ip link delete link dev \$s" >> /etc/afterStart.sh
+	echo "done" >> /etc/afterStart.sh
+	echo "rm /etc/afterStart.sh" >> /etc/afterStart.sh
+	chmod +x /etc/afterStart.sh
+	config_foreach start_eoip eoip
+	config_foreach start_eoip_vlan eoip
+	if [ "$(cat /etc/eoip.cfg | grep zeoip)" != '' ]; then
+		/etc/afterStart.sh&
+		procd_open_instance
+		args=" /etc/eoip.cfg"
+		procd_set_param command /usr/bin/eoip $args
+		procd_close_instance
+	else
+		rm /etc/afterStart.sh
+	fi
+}
+
+stop_service() {
+	killall eoip
+}
+
+start_eoip() {
+	local section="$1" runas_root
+	config_get_bool enabled "$section" enabled
+	if [ "$enabled" -gt 0 ]; then
+		config_get name "$section" name
+		config_get idtun "$section" idtun
+		config_get dst "$section" dst
+		config_get_bool dynamic "$section" dynamic 0
+		if [ "${name}" != '' ] && [ "${dst}" != '' ] && [ "${idtun}" != '' ]; then
+			cnt=$(cat /etc/eoip.cfg | grep "zeoip${name}" | wc -l)
+			if [ $cnt -eq 0 ]; then
+				echo "[zeoip${name}]" >>/etc/eoip.cfg
+				echo "id=${idtun}" >>/etc/eoip.cfg
+				echo "dst=${dst}" >>/etc/eoip.cfg
+				[ "$dynamic" -gt 0 ] && echo "dynamic=${dynamic}" >>/etc/eoip.cfg
+				INDEX=$((INDEX+1))
+			else
+				result=$(uci delete /etc/config/eoip.@eoip[$INDEX])
+				INDEX=$((INDEX+1))
+			fi 
+		fi
+	fi
+}
+
+start_eoip_vlan() {
+	local section="$1" runas_root
+	config_get name "$section" name
+	config_list_foreach "$section" vlan handle_vlan ${name}
+}
+
+handle_vlan() {
+	local value="$1"
+	local name="$2"
+	echo "ip link add link zeoip${name} name zeoip${name}.${value} type vlan id ${value}" >> /etc/afterStart.sh
+}