Просмотр исходного кода

map: fix portsets starting with 0 and use regular NAT for 1:1 MAP

Signed-off-by: Steven Barth <[email protected]>

SVN-Revision: 42741
Steven Barth 11 лет назад
Родитель
Сommit
def69a96e9

+ 2 - 2
package/network/ipv6/map/Makefile

@@ -8,8 +8,8 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=map
-PKG_VERSION:=1
-PKG_RELEASE:=2
+PKG_VERSION:=2
+PKG_RELEASE:=1
 
 include $(INCLUDE_DIR)/package.mk
 include $(INCLUDE_DIR)/cmake.mk

+ 22 - 13
package/network/ipv6/map/files/map.sh

@@ -122,19 +122,28 @@ proto_map_setup() {
 	[ "$zone" != "-" ] && json_add_string zone "$zone"
 
 	json_add_array firewall
-	  for portset in $(eval "echo \$RULE_${k}_PORTSETS"); do
-            for proto in icmp tcp udp; do
-	      json_add_object ""
-	        json_add_string type nat
-	        json_add_string target SNAT
-	        json_add_string family inet
-	        json_add_string proto "$proto"
-                json_add_boolean connlimit_ports 1
-                json_add_string snat_ip $(eval "echo \$RULE_${k}_IPV4ADDR")
-                json_add_string snat_port "$portset"
-	      json_close_object
-            done
-	  done
+	  if [ -z "$(eval "echo \$RULE_${k}_PORTSETS")" ]; then
+	    json_add_object ""
+	      json_add_string type nat
+	      json_add_string target SNAT
+	      json_add_string family inet
+	      json_add_string snat_ip $(eval "echo \$RULE_${k}_IPV4ADDR")
+	    json_close_object
+	  else
+	    for portset in $(eval "echo \$RULE_${k}_PORTSETS"); do
+              for proto in icmp tcp udp; do
+	        json_add_object ""
+	          json_add_string type nat
+	          json_add_string target SNAT
+	          json_add_string family inet
+	          json_add_string proto "$proto"
+                  json_add_boolean connlimit_ports 1
+                  json_add_string snat_ip $(eval "echo \$RULE_${k}_IPV4ADDR")
+                  json_add_string snat_port "$portset"
+	        json_close_object
+              done
+	    done
+	  fi
 	  if [ "$type" = "map-t" ]; then
 	  	json_add_object ""
 	  		json_add_string type rule

+ 7 - 4
package/network/ipv6/map/src/mapcalc.c

@@ -343,14 +343,17 @@ int main(int argc, char *argv[])
 		}
 
 
-		if (psidlen == 0) {
-			printf("RULE_%d_PORTSETS=0-65535\n", rulecnt);
-		} else if (psid >= 0) {
+		if (psidlen > 0 && psid >= 0) {
 			printf("RULE_%d_PORTSETS='", rulecnt);
 			for (int k = (offset) ? 1 : 0; k < (1 << offset); ++k) {
 				int start = (k << (16 - offset)) | (psid >> offset);
 				int end = start + (1 << (16 - offset - psidlen)) - 1;
-				printf("%d-%d ", start, end);
+
+				if (start == 0)
+					start = 1;
+
+				if (start <= end)
+					printf("%d-%d ", start, end);
 			}
 			printf("'\n");
 		}