From e4577d2e68ab8943375e719204a680cbbe3bd561 Mon Sep 17 00:00:00 2001
From: Hans Dedecker <dedeckeh@gmail.com>
Date: Mon, 4 Jun 2018 17:00:32 +0200
Subject: [PATCH] map: make tunnel encapsulation limit support configurable
 (FS#1501)

Be compatible with ISPs which don't support the destination option header containing
the tunnel encapsulation limit as reported in FS#1501.
Setting the uci parameter encaplimit to ignore; allows to disable the insertion
of the destination option header in the map-e packets.
Otherwise the tunnel encapsulation limit value can be set to a value from 0 till 255
by setting the encaplimit uci parameter accordingly.
If no encaplimit value is specified the default value is 4 as before.

Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
---
 package/network/ipv6/map/Makefile     |  2 +-
 package/network/ipv6/map/files/map.sh | 16 +++++++++-------
 2 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/package/network/ipv6/map/Makefile b/package/network/ipv6/map/Makefile
index 77967042b3..cfb7c4ac35 100644
--- a/package/network/ipv6/map/Makefile
+++ b/package/network/ipv6/map/Makefile
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=map
 PKG_VERSION:=4
-PKG_RELEASE:=10
+PKG_RELEASE:=11
 PKG_LICENSE:=GPL-2.0
 
 include $(INCLUDE_DIR)/package.mk
diff --git a/package/network/ipv6/map/files/map.sh b/package/network/ipv6/map/files/map.sh
index 42050183ce..5f4add36eb 100755
--- a/package/network/ipv6/map/files/map.sh
+++ b/package/network/ipv6/map/files/map.sh
@@ -28,9 +28,9 @@ proto_map_setup() {
 	# uncomment for legacy MAP0 mode
 	#export LEGACY=1
 
-	local type mtu ttl tunlink zone
+	local type mtu ttl tunlink zone encaplimit
 	local rule ipaddr ip4prefixlen ip6prefix ip6prefixlen peeraddr ealen psidlen psid offset
-	json_get_vars type mtu ttl tunlink zone
+	json_get_vars type mtu ttl tunlink zone encaplimit
 	json_get_vars rule ipaddr ip4prefixlen ip6prefix ip6prefixlen peeraddr ealen psidlen psid offset
 
 	[ -z "$zone" ] && zone="wan"
@@ -84,9 +84,9 @@ proto_map_setup() {
 		json_add_string local $(eval "echo \$RULE_${k}_IPV6ADDR")
 		json_add_string remote $(eval "echo \$RULE_${k}_BR")
 		json_add_string link $(eval "echo \$RULE_${k}_PD6IFACE")
-
-		if [ "$type" = "map-e" ]; then
-			json_add_object "data"
+		json_add_object "data"
+			json_add_string encaplimit "${encaplimit:-4}"
+			if [ "$type" = "map-e" ]; then
 				json_add_array "fmrs"
 				for i in $(seq $RULE_COUNT); do
 					[ "$(eval "echo \$RULE_${i}_FMR")" != 1 ] && continue
@@ -98,8 +98,9 @@ proto_map_setup() {
 					json_close_object
 				done
 				json_close_array
-			json_close_object
-		fi
+			fi
+		json_close_object
+
 
 		proto_close_tunnel
 	elif [ "$type" = "map-t" -a -f "/proc/net/nat46/control" ]; then
@@ -229,6 +230,7 @@ proto_map_init_config() {
 	proto_config_add_int "mtu"
 	proto_config_add_int "ttl"
 	proto_config_add_string "zone"
+	proto_config_add_string "encaplimit"
 }
 
 [ -n "$INCLUDE_ONLY" ] || {
-- 
2.30.2