summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Barach <dave@barachs.net>2020-04-23 16:56:15 -0400
committerDave Barach <dave@barachs.net>2020-04-23 16:56:51 -0400
commita90ba644b2c5463b89a91d019b3c22780242acc3 (patch)
treec5159f64b36fa7e1d052a6e76bb4917c0e65343d
parent843ea7c3e356b6e9353f9f275976f2fee23beeac (diff)
nat: add/del ed_ext_ports only if the table is instantiated
Add a suitable ASSERT in the bihash template in case this happens again. Type: fix Signed-off-by: Dave Barach <dave@barachs.net> Change-Id: Ib370d4238f6bae2995bc30fd17fad5c41053c3d1
-rwxr-xr-xsrc/plugins/nat/nat.c10
-rw-r--r--src/vppinfra/bihash_template.c3
2 files changed, 9 insertions, 4 deletions
diff --git a/src/plugins/nat/nat.c b/src/plugins/nat/nat.c
index 8ba276bc9b4..30238f9d62f 100755
--- a/src/plugins/nat/nat.c
+++ b/src/plugins/nat/nat.c
@@ -330,8 +330,9 @@ nat_free_session_data (snat_main_t * sm, snat_session_t * s, u32 thread_index,
bihash_key.k.src_address = s->out2in.addr.as_u32;
bihash_key.k.src_port = s->out2in.port;
bihash_key.k.protocol = s->out2in.protocol;
- clib_bihash_add_del_16_8 (&sm->ed_ext_ports, &bihash_key.kv,
- 0 /* is_add */ );
+ if (sm->ed_ext_ports.instantiated)
+ clib_bihash_add_del_16_8 (&sm->ed_ext_ports, &bihash_key.kv,
+ 0 /* is_add */ );
snat_free_outside_address_and_port (sm->addresses, thread_index,
&s->out2in);
@@ -465,8 +466,9 @@ nat44_free_session_data (snat_main_t * sm, snat_session_t * s,
bihash_key.k.src_address = s->out2in.addr.as_u32;
bihash_key.k.src_port = s->out2in.port;
bihash_key.k.protocol = s->out2in.protocol;
- clib_bihash_add_del_16_8 (&sm->ed_ext_ports, &bihash_key.kv,
- 0 /* is_add */ );
+ if (sm->ed_ext_ports.instantiated)
+ clib_bihash_add_del_16_8 (&sm->ed_ext_ports, &bihash_key.kv,
+ 0 /* is_add */ );
// should be called for every dynamic session
snat_free_outside_address_and_port (sm->addresses, thread_index,
diff --git a/src/vppinfra/bihash_template.c b/src/vppinfra/bihash_template.c
index f7d88073418..47e9bd0113d 100644
--- a/src/vppinfra/bihash_template.c
+++ b/src/vppinfra/bihash_template.c
@@ -568,6 +568,9 @@ static_always_inline int BV (clib_bihash_add_del_inline_with_hash)
BV (clib_bihash_instantiate) (h);
BV (clib_bihash_alloc_unlock) (h);
}
+#else
+ /* Debug image: make sure the table has been instantiated */
+ ASSERT (h->instantiated != 0);
#endif
b = BV (clib_bihash_get_bucket) (h, hash);