X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fplugins%2Fnat%2Fdslite_in2out.c;h=e7a3028f28acc9359c428c2453073039abfc9e03;hb=82b2776e314f91a0b0b503bade9720cbb47d87a9;hp=ab0055cfee243e09de76a74ac5a96e16d0bfa2ff;hpb=229c1aaf7501afa95c3768702bb1e76beb59384c;p=vpp.git diff --git a/src/plugins/nat/dslite_in2out.c b/src/plugins/nat/dslite_in2out.c index ab0055cfee2..e7a3028f28a 100644 --- a/src/plugins/nat/dslite_in2out.c +++ b/src/plugins/nat/dslite_in2out.c @@ -45,7 +45,6 @@ slow_path (dslite_main_t * dm, dslite_session_key_t * in2out_key, u32 oldest_index; dslite_session_t *s; snat_session_key_t out2in_key; - u32 address_index; out2in_key.protocol = in2out_key->proto; out2in_key.fib_index = 0; @@ -57,7 +56,7 @@ slow_path (dslite_main_t * dm, dslite_session_key_t * in2out_key, (&dm->per_thread_data[thread_index].b4_hash, &b4_kv, &b4_value)) { pool_get (dm->per_thread_data[thread_index].b4s, b4); - memset (b4, 0, sizeof (*b4)); + clib_memset (b4, 0, sizeof (*b4)); b4->addr.as_u64[0] = in2out_key->softwire_id.as_u64[0]; b4->addr.as_u64[1] = in2out_key->softwire_id.as_u64[1]; @@ -103,27 +102,24 @@ slow_path (dslite_main_t * dm, dslite_session_key_t * in2out_key, clib_bihash_add_del_8_8 (&dm->per_thread_data[thread_index].out2in, &out2in_kv, 0); snat_free_outside_address_and_port (dm->addr_pool, thread_index, - &s->out2in, - s->outside_address_index); - s->outside_address_index = ~0; + &s->out2in); if (snat_alloc_outside_address_and_port (dm->addr_pool, 0, thread_index, &out2in_key, - &s->outside_address_index, dm->port_per_thread, thread_index)) + dm->port_per_thread, thread_index)) ASSERT (0); } else { if (snat_alloc_outside_address_and_port - (dm->addr_pool, 0, thread_index, &out2in_key, &address_index, + (dm->addr_pool, 0, thread_index, &out2in_key, dm->port_per_thread, thread_index)) { *error = DSLITE_ERROR_OUT_OF_PORTS; return DSLITE_IN2OUT_NEXT_DROP; } pool_get (dm->per_thread_data[thread_index].sessions, s); - memset (s, 0, sizeof (*s)); - s->outside_address_index = address_index; + clib_memset (s, 0, sizeof (*s)); b4->nsessions++; pool_get (dm->per_thread_data[thread_index].list_pool, elt); @@ -228,7 +224,7 @@ dslite_in2out_node_fn_inline (vlib_main_t * vm, vlib_node_runtime_t * node, dslite_in2out_next_t next_index; u32 node_index; vlib_node_runtime_t *error_node; - u32 thread_index = vlib_get_thread_index (); + u32 thread_index = vm->thread_index; f64 now = vlib_time_now (vm); dslite_main_t *dm = &dslite_main; @@ -378,6 +374,7 @@ dslite_in2out_node_fn_inline (vlib_main_t * vm, vlib_node_runtime_t * node, sum0 = ip_csum_update (sum0, old_port0, new_port0, ip4_header_t, length); + mss_clamping (&snat_main, tcp0, &sum0); tcp0->checksum = ip_csum_fold (sum0); } else