X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fplugins%2Fnat%2Fnat.h;h=710c86fc8d92417a37ac6460f424ae281947d885;hb=25fd8ad03;hp=2d16507df7a4c2bb1b2bc5055af336d494bffa88;hpb=5f4f2081c47a5d86c9c96b7de23a2b0147c737d8;p=vpp.git diff --git a/src/plugins/nat/nat.h b/src/plugins/nat/nat.h index 2d16507df7a..710c86fc8d9 100644 --- a/src/plugins/nat/nat.h +++ b/src/plugins/nat/nat.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016 Cisco and/or its affiliates. + * Copyright (c) 2020 Cisco and/or its affiliates. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: @@ -36,12 +36,6 @@ #include #include -/* default session timeouts */ -#define SNAT_UDP_TIMEOUT 300 -#define SNAT_TCP_TRANSITORY_TIMEOUT 240 -#define SNAT_TCP_ESTABLISHED_TIMEOUT 7440 -#define SNAT_ICMP_TIMEOUT 60 - /* number of worker handoff frame queue elements */ #define NAT_FQ_NELTS 64 @@ -76,11 +70,9 @@ typedef struct /* maximum number of users */ u32 users; - u32 user_memory; /* maximum number of sessions */ u32 sessions; - u32 session_memory; /* maximum number of ssessions per user */ u32 user_sessions; @@ -616,6 +608,9 @@ typedef struct snat_main_s u32 ed_hairpin_dst_node_index; u32 ed_hairpin_src_node_index; + nat44_config_t rconfig; + //nat44_config_t cconfig; + /* If forwarding is enabled */ u8 forwarding_enabled; @@ -631,12 +626,10 @@ typedef struct snat_main_s u8 translation_memory_size_set; u32 translation_buckets; - uword translation_memory_size; u32 max_translations_per_thread; u32 *max_translations_per_fib; u32 max_users_per_thread; u32 user_buckets; - uword user_memory_size; u32 max_translations_per_user; u32 outside_vrf_id; @@ -644,11 +637,7 @@ typedef struct snat_main_s u32 inside_vrf_id; u32 inside_fib_index; - /* values of various timeouts */ - u32 udp_timeout; - u32 tcp_transitory_timeout; - u32 tcp_established_timeout; - u32 icmp_timeout; + nat_timeouts_t timeouts; /* TCP MSS clamping */ u16 mss_clamping; @@ -724,6 +713,9 @@ typedef struct snat_main_s ip4_main_t *ip4_main; ip_lookup_main_t *ip4_lookup_main; + fib_source_t fib_src_hi; + fib_source_t fib_src_low; + /* nat44 plugin enabled */ u8 enabled; @@ -1246,7 +1238,7 @@ int nat44_lb_static_mapping_add_del_local (ip4_address_t e_addr, u16 e_port, nat_protocol_t proto, u32 vrf_id, u8 probability, u8 is_add); -clib_error_t *snat_api_init (vlib_main_t * vm, snat_main_t * sm); +clib_error_t *nat44_api_hookup (vlib_main_t * vm); /** * @brief Set NAT plugin workers @@ -1350,16 +1342,6 @@ int nat44_set_session_limit (u32 session_limit, u32 vrf_id); * @return 0 on success, non-zero value otherwise */ int nat44_update_session_limit (u32 session_limit, u32 vrf_id); -/** - * @brief Free NAT44 ED session data (lookup keys, external address port) - * - * @param s NAT session - * @param thread_index thread index - * @param is_ha is HA event - */ -void -nat44_free_session_data (snat_main_t * sm, snat_session_t * s, - u32 thread_index, u8 is_ha); /** * @brief Initialize NAT44 data @@ -1375,6 +1357,17 @@ void nat44_db_init (snat_main_per_thread_data_t * tsm); */ void nat44_db_free (snat_main_per_thread_data_t * tsm); +/** + * @brief Delete specific NAT44 EI user and his sessions + * + * @param addr IPv4 address + * @param fib_index FIB table index + */ +int nat44_ei_user_del (ip4_address_t * addr, u32 fib_index); + +/** + * @brief Free all NAT44 sessions + */ void nat44_sessions_clear (); /** @@ -1512,6 +1505,46 @@ int snat_static_mapping_match (snat_main_t * sm, void snat_add_del_addr_to_fib (ip4_address_t * addr, u8 p_len, u32 sw_if_index, int is_add); +void +nat_ha_sadd_cb (ip4_address_t * in_addr, u16 in_port, + ip4_address_t * out_addr, u16 out_port, + ip4_address_t * eh_addr, u16 eh_port, + ip4_address_t * ehn_addr, u16 ehn_port, u8 proto, + u32 fib_index, u16 flags, u32 thread_index); + +void +nat_ha_sdel_cb (ip4_address_t * out_addr, u16 out_port, + ip4_address_t * eh_addr, u16 eh_port, u8 proto, u32 fib_index, + u32 ti); + +void +nat_ha_sref_cb (ip4_address_t * out_addr, u16 out_port, + ip4_address_t * eh_addr, u16 eh_port, u8 proto, u32 fib_index, + u32 total_pkts, u64 total_bytes, u32 thread_index); + +void +nat_ha_sadd_ed_cb (ip4_address_t * in_addr, u16 in_port, + ip4_address_t * out_addr, u16 out_port, + ip4_address_t * eh_addr, u16 eh_port, + ip4_address_t * ehn_addr, u16 ehn_port, u8 proto, + u32 fib_index, u16 flags, u32 thread_index); + +void +nat_ha_sdel_ed_cb (ip4_address_t * out_addr, u16 out_port, + ip4_address_t * eh_addr, u16 eh_port, u8 proto, + u32 fib_index, u32 ti); + +void +nat_ha_sdel_ed_cb (ip4_address_t * out_addr, u16 out_port, + ip4_address_t * eh_addr, u16 eh_port, u8 proto, + u32 fib_index, u32 ti); + +void +nat_ha_sref_ed_cb (ip4_address_t * out_addr, u16 out_port, + ip4_address_t * eh_addr, u16 eh_port, u8 proto, + u32 fib_index, u32 total_pkts, u64 total_bytes, + u32 thread_index); + /* * Why is this here? Because we don't need to touch this layer to * simply reply to an icmp. We need to change id to a unique