map: fix portsets starting with 0 and use regular NAT for 1:1 MAP
Signed-off-by: Steven Barth <steven@midlink.org> SVN-Revision: 42741
This commit is contained in:
parent
2fa8a656a6
commit
def69a96e9
3 changed files with 31 additions and 19 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue