aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/nat/pnat/pnat.h5
-rw-r--r--src/plugins/nat/pnat/pnat_cli.c4
-rw-r--r--src/plugins/nat/test/test_pnat.py4
-rw-r--r--src/tools/vppapigen/vppapigen_c.py2
4 files changed, 7 insertions, 8 deletions
diff --git a/src/plugins/nat/pnat/pnat.h b/src/plugins/nat/pnat/pnat.h
index c5869ce3ca6..af64fceb4d1 100644
--- a/src/plugins/nat/pnat/pnat.h
+++ b/src/plugins/nat/pnat/pnat.h
@@ -109,12 +109,11 @@ static inline void
pnat_calc_key(u32 sw_if_index, pnat_attachment_point_t attachment,
ip4_address_t src, ip4_address_t dst, u8 protocol, u16 sport,
u16 dport, pnat_mask_fast_t mask, clib_bihash_kv_16_8_t *kv) {
- kv->key[0] = kv->key[1] = 0;
kv->key[0] = (u64)src.as_u32 << 32 | dst.as_u32;
kv->key[0] &= mask.as_u64[0];
- kv->key[1] |=
+ kv->key[1] =
(u64)protocol << 56 | (u64)sw_if_index << 36 | (u64)attachment << 32;
- kv->key[1] |= sport << 16 | dport;
+ kv->key[1] |= (u32)sport << 16 | dport;
kv->key[1] &= mask.as_u64[1];
}
diff --git a/src/plugins/nat/pnat/pnat_cli.c b/src/plugins/nat/pnat/pnat_cli.c
index 2d389013c08..84dfd8d5fc4 100644
--- a/src/plugins/nat/pnat/pnat_cli.c
+++ b/src/plugins/nat/pnat/pnat_cli.c
@@ -97,12 +97,12 @@ uword unformat_pnat_5tuple(unformat_input_t *input, va_list *args) {
else if (unformat(input, "dst %U", unformat_ip4_address, &t->dst))
t->mask |= PNAT_DA;
else if (unformat(input, "sport %d", &sport)) {
- if (sport < 0 || sport > 65535)
+ if (sport == 0 || sport > 65535)
return 0;
t->mask |= PNAT_SPORT;
t->sport = sport;
} else if (unformat(input, "dport %d", &dport)) {
- if (dport < 0 || dport > 65535)
+ if (dport == 0 || dport > 65535)
return 0;
t->mask |= PNAT_DPORT;
t->dport = dport;
diff --git a/src/plugins/nat/test/test_pnat.py b/src/plugins/nat/test/test_pnat.py
index 5e52fa9f135..d5b60050691 100644
--- a/src/plugins/nat/test/test_pnat.py
+++ b/src/plugins/nat/test/test_pnat.py
@@ -93,10 +93,10 @@ class TestPNAT(VppTestCase):
'rewrite': {'mask': 0xa, 'dst': self.pg1.remote_ip4,
'dport': 5555},
'send': (IP(src=self.pg0.remote_ip4, dst='10.10.10.10') /
- UDP(dport=6871)),
+ UDP(sport=65530, dport=6871)),
'reply': (IP(src=self.pg0.remote_ip4,
dst=self.pg1.remote_ip4) /
- UDP(dport=5555))
+ UDP(sport=65530, dport=5555))
},
{
'input': PNAT_IP4_INPUT,
diff --git a/src/tools/vppapigen/vppapigen_c.py b/src/tools/vppapigen/vppapigen_c.py
index 0798e9aca26..1886c98d6be 100644
--- a/src/tools/vppapigen/vppapigen_c.py
+++ b/src/tools/vppapigen/vppapigen_c.py
@@ -367,7 +367,7 @@ class FromJSON():
write(' {msgvar} = {t}_fromjson({msgvar}, '
'{msgsize}, item, &a->{n});\n'
.format(t=t, n=o.fieldname, msgvar=msgvar, msgsize=msgsize))
- write(' if (!{msgvar}) return 0;\n'.format(msgvar=msgvar))
+ write(' if (!{msgvar}) {{ free(a); return 0;}} \n'.format(msgvar=msgvar))
write(' // end field {}\n'.format(o.fieldname))