X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fplugins%2Fnat%2Fnat.h;h=187e351d31883fd6d3bf922b9bf7db8774b9ad2d;hb=61717cc38f321df3e28464336ac4e570aa47b490;hp=fde6a0a7308842d0551fce7125c7f3dd52326627;hpb=26c9d4b0cd9c53054d1174bc15aaf8c07e9a8f93;p=vpp.git diff --git a/src/plugins/nat/nat.h b/src/plugins/nat/nat.h index fde6a0a7308..187e351d318 100644 --- a/src/plugins/nat/nat.h +++ b/src/plugins/nat/nat.h @@ -31,6 +31,7 @@ #include #include #include +#include /* default session timeouts */ #define SNAT_UDP_TIMEOUT 300 @@ -319,6 +320,10 @@ typedef CLIB_PACKED(struct u32 per_user_index; u32 per_user_list_head_index; + /* index in global LRU list */ + u32 global_lru_index; + f64 last_lru_update; + /* Last heard timer */ f64 last_heard; @@ -368,7 +373,7 @@ typedef struct #define _(N, i, n, s) \ u16 busy_##n##_ports; \ u16 * busy_##n##_ports_per_thread; \ - uword * busy_##n##_port_bitmap; + u32 busy_##n##_port_refcounts[65535]; foreach_snat_protocol #undef _ /* *INDENT-ON* */ @@ -520,6 +525,10 @@ typedef struct /* Pool of doubly-linked list elements */ dlist_elt_t *list_pool; + /* LRU session list - head is stale, tail is fresh */ + dlist_elt_t *global_lru_pool; + u32 global_lru_head_index; + /* NAT thread index */ u32 snat_thread_index; @@ -567,6 +576,28 @@ typedef int (nat_alloc_out_addr_and_port_function_t) (snat_address_t * u16 port_per_thread, u32 snat_thread_index); +typedef struct ed_bihash_key_s +{ + u32 src_address; + u32 dst_address; + u16 src_port; + u16 dst_port; + u8 protocol; +} ed_bihash_key_t; + +typedef struct ed_bihash_kv_s +{ + union + { + ed_bihash_key_t k; + clib_bihash_kv_16_8_t kv; + }; +} ed_bihash_kv_t; + +STATIC_ASSERT (STRUCT_SIZE_OF (ed_bihash_kv_t, k) <= + STRUCT_SIZE_OF (ed_bihash_kv_t, kv.key), + "ed key needs to fit in bihash key"); + typedef struct snat_main_s { /* ICMP session match functions */ @@ -680,10 +711,10 @@ typedef struct snat_main_s u8 out2in_dpo; u8 endpoint_dependent; u32 translation_buckets; - u32 translation_memory_size; + uword translation_memory_size; u32 max_translations; u32 user_buckets; - u32 user_memory_size; + uword user_memory_size; u32 max_translations_per_user; u32 outside_vrf_id; u32 outside_fib_index; @@ -723,6 +754,7 @@ typedef struct snat_main_s ip_lookup_main_t *ip4_lookup_main; api_main_t *api_main; + clib_bihash_16_8_t ed_ext_ports; } snat_main_t; typedef struct