aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/plugins/nat/in2out_ed.c24
1 files changed, 5 insertions, 19 deletions
diff --git a/src/plugins/nat/in2out_ed.c b/src/plugins/nat/in2out_ed.c
index f0bbe0b656e..21ef75c820c 100644
--- a/src/plugins/nat/in2out_ed.c
+++ b/src/plugins/nat/in2out_ed.c
@@ -296,7 +296,6 @@ slow_path_ed (snat_main_t * sm,
nat_outside_fib_t *outside_fib;
fib_node_index_t fei = FIB_NODE_INDEX_INVALID;
clib_bihash_kv_16_8_t out2in_ed_kv;
- bool out2in_ed_inserted = false;
ip4_address_t allocated_addr;
u16 allocated_port;
u8 identity_nat;
@@ -346,7 +345,7 @@ slow_path_ed (snat_main_t * sm,
{
nat_elog_warn ("create NAT session failed");
b->error = node->errors[NAT_IN2OUT_ED_ERROR_MAX_USER_SESS_EXCEEDED];
- goto drop;
+ return NAT_NEXT_DROP;
}
switch (vec_len (sm->outside_fibs))
{
@@ -384,10 +383,10 @@ slow_path_ed (snat_main_t * sm,
{
nat_elog_notice ("addresses exhausted");
b->error = node->errors[NAT_IN2OUT_ED_ERROR_OUT_OF_PORTS];
- goto drop;
+ nat_free_session_data (sm, s, thread_index, 0);
+ nat44_ed_delete_session (sm, s, thread_index, 1);
+ return NAT_NEXT_DROP;
}
-
- out2in_ed_inserted = true;
key1.addr = allocated_addr;
key1.port = allocated_port;
}
@@ -403,7 +402,7 @@ slow_path_ed (snat_main_t * sm,
{
nat_elog_warn ("create NAT session failed");
b->error = node->errors[NAT_IN2OUT_ED_ERROR_MAX_USER_SESS_EXCEEDED];
- goto drop;
+ return NAT_NEXT_DROP;
}
switch (vec_len (sm->outside_fibs))
{
@@ -441,7 +440,6 @@ slow_path_ed (snat_main_t * sm,
(&tsm->out2in_ed, &out2in_ed_kv, nat44_o2i_ed_is_idle_session_cb,
&ctx))
nat_elog_notice ("out2in-ed key add failed");
- out2in_ed_inserted = true;
}
if (lb)
@@ -487,18 +485,6 @@ slow_path_ed (snat_main_t * sm,
thread_index, 0);
return next;
-drop:
- if (out2in_ed_inserted)
- {
- if (clib_bihash_add_del_16_8 (&tsm->out2in_ed, &out2in_ed_kv, 0))
- nat_elog_notice ("out2in-ed key del failed");
- }
- if (s)
- {
- nat_free_session_data (sm, s, thread_index, 0);
- nat44_ed_delete_session (sm, s, thread_index, 1);
- }
- return NAT_NEXT_DROP;
}
static_always_inline int