FD.io VPP  v19.08.1-401-g8e4ed521a
Vector Packet Processing
nat.h File Reference
+ Include dependency graph for nat.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  snat_session_key_t
 
struct  nat_ed_ses_key_t
 
struct  snat_det_out_key_t
 
struct  snat_user_key_t
 
struct  nat44_reass_trace_t
 
struct  snat_user_t
 
struct  snat_address_t
 
struct  nat_outside_fib_t
 
struct  snat_det_session_t
 
struct  snat_det_map_t
 
struct  nat44_lb_addr_port_t
 
struct  snat_static_mapping_t
 
struct  snat_interface_t
 
struct  snat_static_map_resolve_t
 
struct  snat_main_per_thread_data_t
 
struct  snat_main_s
 
struct  nat44_is_idle_session_ctx_t
 
struct  snat_runtime_t
 
struct  icmp_echo_header_t
 
struct  tcp_udp_header_t
 

Macros

#define SNAT_UDP_TIMEOUT   300
 
#define SNAT_TCP_TRANSITORY_TIMEOUT   240
 
#define SNAT_TCP_ESTABLISHED_TIMEOUT   7440
 
#define SNAT_ICMP_TIMEOUT   60
 
#define NAT_FQ_NELTS   64
 
#define SNAT_FLAG_HAIRPINNING   (1 << 0)
 
#define foreach_nat_config_flag
 
#define foreach_nat_addr_and_port_alloc_alg
 
#define foreach_snat_protocol
 
#define foreach_snat_session_state
 
#define foreach_nat_in2out_ed_error
 
#define foreach_nat_out2in_ed_error
 
#define NAT44_SES_I2O_FIN   1
 
#define NAT44_SES_O2I_FIN   2
 
#define NAT44_SES_I2O_FIN_ACK   4
 
#define NAT44_SES_O2I_FIN_ACK   8
 
#define NAT44_SES_I2O_SYN   16
 
#define NAT44_SES_O2I_SYN   32
 
#define NAT44_SES_RST   64
 
#define SNAT_SESSION_FLAG_STATIC_MAPPING   1
 
#define SNAT_SESSION_FLAG_UNKNOWN_PROTO   2
 
#define SNAT_SESSION_FLAG_LOAD_BALANCING   4
 
#define SNAT_SESSION_FLAG_TWICE_NAT   8
 
#define SNAT_SESSION_FLAG_ENDPOINT_DEPENDENT   16
 
#define SNAT_SESSION_FLAG_FWD_BYPASS   32
 
#define SNAT_SESSION_FLAG_AFFINITY   64
 
#define SNAT_SESSION_FLAG_OUTPUT_FEATURE   128
 
#define NAT_INTERFACE_FLAG_IS_INSIDE   1
 
#define NAT_INTERFACE_FLAG_IS_OUTSIDE   2
 
#define NAT_STATIC_MAPPING_FLAG_ADDR_ONLY   1
 
#define NAT_STATIC_MAPPING_FLAG_OUT2IN_ONLY   2
 
#define NAT_STATIC_MAPPING_FLAG_IDENTITY_NAT   4
 
#define NAT_STATIC_MAPPING_FLAG_LB   8
 
#define snat_is_session_static(s)   (s->flags & SNAT_SESSION_FLAG_STATIC_MAPPING)
 Check if SNAT session is created from static mapping. More...
 
#define snat_is_unk_proto_session(s)   (s->flags & SNAT_SESSION_FLAG_UNKNOWN_PROTO)
 Check if SNAT session for unknown protocol. More...
 
#define is_twice_nat_session(s)   (s->flags & SNAT_SESSION_FLAG_TWICE_NAT)
 Check if NAT session is twice NAT. More...
 
#define is_lb_session(s)   (s->flags & SNAT_SESSION_FLAG_LOAD_BALANCING)
 Check if NAT session is load-balancing. More...
 
#define is_fwd_bypass_session(s)   (s->flags & SNAT_SESSION_FLAG_FWD_BYPASS)
 Check if NAT session is forwarding bypass. More...
 
#define is_ed_session(s)   (s->flags & SNAT_SESSION_FLAG_ENDPOINT_DEPENDENT)
 Check if NAT session is endpoint dependent. More...
 
#define is_affinity_sessions(s)   (s->flags & SNAT_SESSION_FLAG_AFFINITY)
 Check if NAT session has affinity record. More...
 
#define nat_interface_is_inside(i)   i->flags & NAT_INTERFACE_FLAG_IS_INSIDE
 Check if NAT interface is inside. More...
 
#define nat_interface_is_outside(i)   i->flags & NAT_INTERFACE_FLAG_IS_OUTSIDE
 Check if NAT interface is outside. More...
 
#define nat44_is_ses_closed(s)   s->state == 0xf
 Check if NAT44 endpoint-dependent TCP session is closed. More...
 
#define is_addr_only_static_mapping(sm)   (sm->flags & NAT_STATIC_MAPPING_FLAG_ADDR_ONLY)
 Check if NAT static mapping is address only (1:1NAT). More...
 
#define is_out2in_only_static_mapping(sm)   (sm->flags & NAT_STATIC_MAPPING_FLAG_OUT2IN_ONLY)
 Check if NAT static mapping match only out2in direction. More...
 
#define is_identity_static_mapping(sm)   (sm->flags & NAT_STATIC_MAPPING_FLAG_IDENTITY_NAT)
 Check if NAT static mapping is identity NAT. More...
 
#define is_lb_static_mapping(sm)   (sm->flags & NAT_STATIC_MAPPING_FLAG_LB)
 Check if NAT static mapping is load-balancing. More...
 
#define tcp_is_init(t)   ((t->flags & TCP_FLAG_SYN) && !(t->flags & TCP_FLAG_ACK))
 Check if client initiating TCP connection (received SYN from client) More...
 
#define nat_log_err(...)   vlib_log(VLIB_LOG_LEVEL_ERR, snat_main.log_class, __VA_ARGS__)
 
#define nat_log_warn(...)   vlib_log(VLIB_LOG_LEVEL_WARNING, snat_main.log_class, __VA_ARGS__)
 
#define nat_log_notice(...)   vlib_log(VLIB_LOG_LEVEL_NOTICE, snat_main.log_class, __VA_ARGS__)
 
#define nat_log_info(...)   vlib_log(VLIB_LOG_LEVEL_INFO, snat_main.log_class, __VA_ARGS__)
 
#define nat_log_debug(...)   vlib_log(VLIB_LOG_LEVEL_DEBUG, snat_main.log_class, __VA_ARGS__)
 
#define foreach_nat_log_level
 
#define nat_elog(_level, _str)
 
#define nat_elog_addr(_level, _str, _addr)
 
#define nat_elog_debug_handoff(_str, _tid, _fib, _src, _dst)
 
#define nat_elog_debug_handoff_v2(_str, _prt, _fib, _src, _dst)
 
#define nat_elog_X1(_level, _fmt, _arg, _val1)
 
#define nat_elog_notice(nat_elog_str)   nat_elog(SNAT_LOG_INFO, "[notice] " nat_elog_str)
 
#define nat_elog_warn(nat_elog_str)   nat_elog(SNAT_LOG_WARNING, "[warning] " nat_elog_str)
 
#define nat_elog_err(nat_elog_str)   nat_elog(SNAT_LOG_ERROR, "[error] " nat_elog_str)
 
#define nat_elog_debug(nat_elog_str)   nat_elog(SNAT_LOG_DEBUG, "[debug] " nat_elog_str)
 
#define nat_elog_info(nat_elog_str)   nat_elog(SNAT_LOG_INFO, "[info] " nat_elog_str)
 
#define nat_elog_notice_X1(nat_elog_fmt_str, nat_elog_fmt_arg, nat_elog_val1)   nat_elog_X1(SNAT_LOG_NOTICE, "[notice] " nat_elog_fmt_str, nat_elog_fmt_arg, nat_elog_val1)
 
#define nat_elog_warn_X1(nat_elog_fmt_str, nat_elog_fmt_arg, nat_elog_val1)   nat_elog_X1(SNAT_LOG_WARNING, "[warning] " nat_elog_fmt_str, nat_elog_fmt_arg, nat_elog_val1)
 
#define nat_elog_err_X1(nat_elog_fmt_str, nat_elog_fmt_arg, nat_elog_val1)   nat_elog_X1(SNAT_LOG_ERROR, "[error] " nat_elog_fmt_str, nat_elog_fmt_arg, nat_elog_val1)
 
#define nat_elog_debug_X1(nat_elog_fmt_str, nat_elog_fmt_arg, nat_elog_val1)   nat_elog_X1(SNAT_LOG_DEBUG, "[debug] " nat_elog_fmt_str, nat_elog_fmt_arg, nat_elog_val1)
 
#define nat_elog_info_X1(nat_elog_fmt_str, nat_elog_fmt_arg, nat_elog_val1)   nat_elog_X1(SNAT_LOG_INFO, "[info] " nat_elog_fmt_str, nat_elog_fmt_arg, nat_elog_val1)
 

Typedefs

typedef enum nat_config_flags_t_ nat_config_flags_t
 
typedef u32() snat_icmp_match_function_t(struct snat_main_s *sm, vlib_node_runtime_t *node, u32 thread_index, vlib_buffer_t *b0, ip4_header_t *ip0, u8 *p_proto, snat_session_key_t *p_value, u8 *p_dont_translate, void *d, void *e)
 
typedef u32() snat_get_worker_function_t(ip4_header_t *ip, u32 rx_fib_index, u8 is_output)
 
typedef int() nat_alloc_out_addr_and_port_function_t(snat_address_t *addresses, u32 fib_index, u32 thread_index, snat_session_key_t *k, u16 port_per_thread, u32 snat_thread_index)
 
typedef struct snat_main_s snat_main_t
 
typedef enum nat_log_level_t_ nat_log_level_t
 

Enumerations

enum  nat_config_flags_t_ { foreach_nat_config_flag }
 
enum  nat_addr_and_port_alloc_alg_t { foreach_nat_addr_and_port_alloc_alg }
 
enum  snat_protocol_t { foreach_snat_protocol }
 
enum  snat_session_state_t { foreach_snat_session_state }
 
enum  nat_in2out_ed_error_t { NAT_IN2OUT_ED_N_ERROR }
 
enum  nat_out2in_ed_error_t { NAT_OUT2IN_ED_N_ERROR }
 
enum  twice_nat_type_t { TWICE_NAT_DISABLED, TWICE_NAT, TWICE_NAT_SELF }
 
enum  lb_nat_type_t { NO_LB_NAT, LB_NAT, AFFINITY_LB_NAT }
 
enum  nat_log_level_t_ { foreach_nat_log_level }
 

Functions

typedef CLIB_PACKED (struct { snat_session_key_t out2in;snat_session_key_t in2out;u32 flags;u32 per_user_index;u32 per_user_list_head_index;f64 last_heard;f64 ha_last_refreshed;u64 total_bytes;u32 total_pkts;ip4_address_t ext_host_addr;u16 ext_host_port;ip4_address_t ext_host_nat_addr;u16 ext_host_nat_port;u8 state;u32 i2o_fin_seq;u32 o2i_fin_seq;u32 user_index;}) snat_session_t
 
u32 icmp_match_in2out_fast (snat_main_t *sm, vlib_node_runtime_t *node, u32 thread_index, vlib_buffer_t *b0, ip4_header_t *ip0, u8 *p_proto, snat_session_key_t *p_value, u8 *p_dont_translate, void *d, void *e)
 Get address and port values to be used for ICMP packet translation. More...
 
u32 icmp_match_in2out_slow (snat_main_t *sm, vlib_node_runtime_t *node, u32 thread_index, vlib_buffer_t *b0, ip4_header_t *ip0, u8 *p_proto, snat_session_key_t *p_value, u8 *p_dont_translate, void *d, void *e)
 Get address and port values to be used for ICMP packet translation and create session if needed. More...
 
u32 icmp_match_out2in_fast (snat_main_t *sm, vlib_node_runtime_t *node, u32 thread_index, vlib_buffer_t *b0, ip4_header_t *ip0, u8 *p_proto, snat_session_key_t *p_value, u8 *p_dont_translate, void *d, void *e)
 Get address and port values to be used for ICMP packet translation. More...
 
u32 icmp_match_out2in_slow (snat_main_t *sm, vlib_node_runtime_t *node, u32 thread_index, vlib_buffer_t *b0, ip4_header_t *ip0, u8 *p_proto, snat_session_key_t *p_value, u8 *p_dont_translate, void *d, void *e)
 Get address and port values to be used for ICMP packet translation and create session if needed. More...
 
u32 icmp_match_out2in_det (snat_main_t *sm, vlib_node_runtime_t *node, u32 thread_index, vlib_buffer_t *b0, ip4_header_t *ip0, u8 *p_proto, snat_session_key_t *p_value, u8 *p_dont_translate, void *d, void *e)
 Get address and port values to be used for ICMP packet translation and create session if needed. More...
 
u32 icmp_match_in2out_det (snat_main_t *sm, vlib_node_runtime_t *node, u32 thread_index, vlib_buffer_t *b0, ip4_header_t *ip0, u8 *p_proto, snat_session_key_t *p_value, u8 *p_dont_translate, void *d, void *e)
 Get address and port values to be used for ICMP packet translation and create session if needed. More...
 
u32 icmp_match_out2in_ed (snat_main_t *sm, vlib_node_runtime_t *node, u32 thread_index, vlib_buffer_t *b0, ip4_header_t *ip0, u8 *p_proto, snat_session_key_t *p_value, u8 *p_dont_translate, void *d, void *e)
 
u32 icmp_match_in2out_ed (snat_main_t *sm, vlib_node_runtime_t *node, u32 thread_index, vlib_buffer_t *b0, ip4_header_t *ip0, u8 *p_proto, snat_session_key_t *p_value, u8 *p_dont_translate, void *d, void *e)
 
u32 icmp_in2out (snat_main_t *sm, vlib_buffer_t *b0, ip4_header_t *ip0, icmp46_header_t *icmp0, u32 sw_if_index0, u32 rx_fib_index0, vlib_node_runtime_t *node, u32 next0, u32 thread_index, void *d, void *e)
 
u32 icmp_out2in (snat_main_t *sm, vlib_buffer_t *b0, ip4_header_t *ip0, icmp46_header_t *icmp0, u32 sw_if_index0, u32 rx_fib_index0, vlib_node_runtime_t *node, u32 next0, u32 thread_index, void *d, void *e)
 
u32 snat_icmp_hairpinning (snat_main_t *sm, vlib_buffer_t *b0, ip4_header_t *ip0, icmp46_header_t *icmp0, int is_ed)
 
void nat_hairpinning_sm_unknown_proto (snat_main_t *sm, vlib_buffer_t *b, ip4_header_t *ip)
 
void nat44_ed_hairpinning_unknown_proto (snat_main_t *sm, vlib_buffer_t *b, ip4_header_t *ip)
 
int snat_hairpinning (snat_main_t *sm, vlib_buffer_t *b0, ip4_header_t *ip0, udp_header_t *udp0, tcp_header_t *tcp0, u32 proto0, int is_ed)
 
void nat44_reass_hairpinning (snat_main_t *sm, vlib_buffer_t *b0, ip4_header_t *ip0, u16 sport, u16 dport, u32 proto0, int is_ed)
 
int nat44_i2o_ed_is_idle_session_cb (clib_bihash_kv_16_8_t *kv, void *arg)
 
int nat44_o2i_ed_is_idle_session_cb (clib_bihash_kv_16_8_t *kv, void *arg)
 
int nat44_i2o_is_idle_session_cb (clib_bihash_kv_8_8_t *kv, void *arg)
 
int nat44_o2i_is_idle_session_cb (clib_bihash_kv_8_8_t *kv, void *arg)
 
void increment_v4_address (ip4_address_t *a)
 Increment IPv4 address. More...
 
int snat_add_address (snat_main_t *sm, ip4_address_t *addr, u32 vrf_id, u8 twice_nat)
 Add external address to NAT44 pool. More...
 
int snat_del_address (snat_main_t *sm, ip4_address_t addr, u8 delete_sm, u8 twice_nat)
 Delete external address from NAT44 pool. More...
 
void nat44_add_del_address_dpo (ip4_address_t addr, u8 is_add)
 Add/delete external address to FIB DPO (out2in DPO mode) More...
 
int snat_add_static_mapping (ip4_address_t l_addr, ip4_address_t e_addr, u16 l_port, u16 e_port, u32 vrf_id, int addr_only, u32 sw_if_index, snat_protocol_t proto, int is_add, twice_nat_type_t twice_nat, u8 out2in_only, u8 *tag, u8 identity_nat)
 Add/delete NAT44 static mapping. More...
 
int nat44_add_del_lb_static_mapping (ip4_address_t e_addr, u16 e_port, snat_protocol_t proto, nat44_lb_addr_port_t *locals, u8 is_add, twice_nat_type_t twice_nat, u8 out2in_only, u8 *tag, u32 affinity)
 Add/delete static mapping with load-balancing (multiple backends) More...
 
int nat44_lb_static_mapping_add_del_local (ip4_address_t e_addr, u16 e_port, ip4_address_t l_addr, u16 l_port, snat_protocol_t proto, u32 vrf_id, u8 probability, u8 is_add)
 
clib_error_tsnat_api_init (vlib_main_t *vm, snat_main_t *sm)
 
int snat_set_workers (uword *bitmap)
 Set NAT plugin workers. More...
 
int snat_interface_add_del (u32 sw_if_index, u8 is_inside, int is_del)
 Enable/disable NAT44 feature on the interface. More...
 
int snat_interface_add_del_output_feature (u32 sw_if_index, u8 is_inside, int is_del)
 Enable/disable NAT44 output feature on the interface (postrouting NAT) More...
 
int snat_add_interface_address (snat_main_t *sm, u32 sw_if_index, int is_del, u8 twice_nat)
 Add/delete NAT44 pool address from specific interfce. More...
 
int nat44_del_session (snat_main_t *sm, ip4_address_t *addr, u16 port, snat_protocol_t proto, u32 vrf_id, int is_in)
 Delete NAT44 session. More...
 
int nat44_del_ed_session (snat_main_t *sm, ip4_address_t *addr, u16 port, ip4_address_t *eh_addr, u16 eh_port, u8 proto, u32 vrf_id, int is_in)
 Delete NAT44 endpoint-dependent session. More...
 
void nat_free_session_data (snat_main_t *sm, snat_session_t *s, u32 thread_index, u8 is_ha)
 Free NAT44 session data (lookup keys, external addrres port) More...
 
snat_user_tnat_user_get_or_create (snat_main_t *sm, ip4_address_t *addr, u32 fib_index, u32 thread_index)
 Find or create NAT user. More...
 
snat_session_t * nat_session_alloc_or_recycle (snat_main_t *sm, snat_user_t *u, u32 thread_index, f64 now)
 Allocate new NAT session or recycle last used. More...
 
snat_session_t * nat_ed_session_alloc (snat_main_t *sm, snat_user_t *u, u32 thread_index, f64 now)
 Allocate NAT endpoint-dependent session. More...
 
void nat_set_alloc_addr_and_port_mape (u16 psid, u16 psid_offset, u16 psid_length)
 Set address and port assignment algorithm for MAP-E CE. More...
 
void nat_set_alloc_addr_and_port_range (u16 start_port, u16 end_port)
 Set address and port assignment algorithm for port range. More...
 
void nat_set_alloc_addr_and_port_default (void)
 Set address and port assignment algorithm to default/standard. More...
 
void snat_free_outside_address_and_port (snat_address_t *addresses, u32 thread_index, snat_session_key_t *k)
 Free outside address and port pair. More...
 
int snat_alloc_outside_address_and_port (snat_address_t *addresses, u32 fib_index, u32 thread_index, snat_session_key_t *k, u16 port_per_thread, u32 snat_thread_index)
 Alloc outside address and port. More...
 
int snat_static_mapping_match (snat_main_t *sm, snat_session_key_t match, snat_session_key_t *mapping, u8 by_external, u8 *is_addr_only, twice_nat_type_t *twice_nat, lb_nat_type_t *lb, ip4_address_t *ext_host_addr, u8 *is_identity_nat)
 Match NAT44 static mapping. More...
 
void snat_add_del_addr_to_fib (ip4_address_t *addr, u8 p_len, u32 sw_if_index, int is_add)
 Add/del NAT address to FIB. More...
 

Variables

snat_main_t snat_main
 
vlib_node_registration_t snat_in2out_node
 (constructor) VLIB_REGISTER_NODE (snat_in2out_node) More...
 
vlib_node_registration_t snat_in2out_output_node
 (constructor) VLIB_REGISTER_NODE (snat_in2out_output_node) More...
 
vlib_node_registration_t snat_out2in_node
 (constructor) VLIB_REGISTER_NODE (snat_out2in_node) More...
 
vlib_node_registration_t snat_in2out_fast_node
 (constructor) VLIB_REGISTER_NODE (snat_in2out_fast_node) More...
 
vlib_node_registration_t snat_out2in_fast_node
 (constructor) VLIB_REGISTER_NODE (snat_out2in_fast_node) More...
 
vlib_node_registration_t snat_in2out_worker_handoff_node
 (constructor) VLIB_REGISTER_NODE (snat_in2out_worker_handoff_node) More...
 
vlib_node_registration_t snat_in2out_output_worker_handoff_node
 (constructor) VLIB_REGISTER_NODE (snat_in2out_output_worker_handoff_node) More...
 
vlib_node_registration_t snat_out2in_worker_handoff_node
 (constructor) VLIB_REGISTER_NODE (snat_out2in_worker_handoff_node) More...
 
vlib_node_registration_t snat_det_in2out_node
 (constructor) VLIB_REGISTER_NODE (snat_det_in2out_node) More...
 
vlib_node_registration_t snat_det_out2in_node
 (constructor) VLIB_REGISTER_NODE (snat_det_out2in_node) More...
 
vlib_node_registration_t snat_hairpin_dst_node
 (constructor) VLIB_REGISTER_NODE (snat_hairpin_dst_node) More...
 
vlib_node_registration_t snat_hairpin_src_node
 (constructor) VLIB_REGISTER_NODE (snat_hairpin_src_node) More...
 
vlib_node_registration_t nat44_ed_in2out_node
 (constructor) VLIB_REGISTER_NODE (nat44_ed_in2out_node) More...
 
vlib_node_registration_t nat44_ed_in2out_output_node
 (constructor) VLIB_REGISTER_NODE (nat44_ed_in2out_output_node) More...
 
vlib_node_registration_t nat44_ed_out2in_node
 (constructor) VLIB_REGISTER_NODE (nat44_ed_out2in_node) More...
 
vlib_node_registration_t nat44_ed_hairpin_dst_node
 (constructor) VLIB_REGISTER_NODE (nat44_ed_hairpin_dst_node) More...
 
vlib_node_registration_t nat44_ed_hairpin_src_node
 (constructor) VLIB_REGISTER_NODE (nat44_ed_hairpin_src_node) More...
 
vlib_node_registration_t nat44_ed_in2out_worker_handoff_node
 
vlib_node_registration_t nat44_ed_in2out_output_worker_handoff_node
 
vlib_node_registration_t nat44_ed_out2in_worker_handoff_node
 
format_function_t format_snat_user
 
format_function_t format_snat_static_mapping
 
format_function_t format_snat_static_map_to_resolve
 
format_function_t format_snat_session
 
format_function_t format_det_map_ses
 
format_function_t format_snat_key
 
format_function_t format_static_mapping_key
 
format_function_t format_snat_protocol
 
format_function_t format_nat_addr_and_port_alloc_alg
 
format_function_t format_nat44_reass_trace
 
unformat_function_t unformat_snat_protocol
 

Macro Definition Documentation

◆ foreach_nat_addr_and_port_alloc_alg

#define foreach_nat_addr_and_port_alloc_alg
Value:
_(0, DEFAULT, "default") \
_(1, MAPE, "map-e") \
_(2, RANGE, "port-range")

Definition at line 133 of file nat.h.

◆ foreach_nat_config_flag

#define foreach_nat_config_flag
Value:
_(0x01, IS_TWICE_NAT) \
_(0x02, IS_SELF_TWICE_NAT) \
_(0x04, IS_OUT2IN_ONLY) \
_(0x08, IS_ADDR_ONLY) \
_(0x10, IS_OUTSIDE) \
_(0x20, IS_INSIDE) \
_(0x40, IS_STATIC) \
_(0x80, IS_EXT_HOST_VALID) \

Definition at line 115 of file nat.h.

◆ foreach_nat_in2out_ed_error

#define foreach_nat_in2out_ed_error
Value:
_(UNSUPPORTED_PROTOCOL, "unsupported protocol") \
_(IN2OUT_PACKETS, "good in2out packets processed") \
_(OUT_OF_PORTS, "out of ports") \
_(BAD_ICMP_TYPE, "unsupported ICMP type") \
_(MAX_SESSIONS_EXCEEDED, "maximum sessions exceeded") \
_(DROP_FRAGMENT, "drop fragment") \
_(MAX_REASS, "maximum reassemblies exceeded") \
_(MAX_FRAG, "maximum fragments per reassembly exceeded")\
_(NON_SYN, "non-SYN packet try to create session") \
_(TCP_PACKETS, "TCP packets") \
_(UDP_PACKETS, "UDP packets") \
_(ICMP_PACKETS, "ICMP packets") \
_(OTHER_PACKETS, "other protocol packets") \
_(FRAGMENTS, "fragments") \
_(CACHED_FRAGMENTS, "cached fragments") \
_(PROCESSED_FRAGMENTS, "processed fragments")

Definition at line 180 of file nat.h.

◆ foreach_nat_log_level

#define foreach_nat_log_level
Value:
_(0x00, LOG_NONE) \
_(0x01, LOG_ERROR) \
_(0x02, LOG_WARNING) \
_(0x03, LOG_NOTICE) \
_(0x04, LOG_INFO) \
_(0x05, LOG_DEBUG)

Definition at line 808 of file nat.h.

◆ foreach_nat_out2in_ed_error

#define foreach_nat_out2in_ed_error
Value:
_(UNSUPPORTED_PROTOCOL, "unsupported protocol") \
_(OUT2IN_PACKETS, "good out2in packets processed") \
_(OUT_OF_PORTS, "out of ports") \
_(BAD_ICMP_TYPE, "unsupported ICMP type") \
_(NO_TRANSLATION, "no translation") \
_(MAX_SESSIONS_EXCEEDED, "maximum sessions exceeded") \
_(DROP_FRAGMENT, "drop fragment") \
_(MAX_REASS, "maximum reassemblies exceeded") \
_(MAX_FRAG, "maximum fragments per reassembly exceeded")\
_(NON_SYN, "non-SYN packet try to create session") \
_(TCP_PACKETS, "TCP packets") \
_(UDP_PACKETS, "UDP packets") \
_(ICMP_PACKETS, "ICMP packets") \
_(OTHER_PACKETS, "other protocol packets") \
_(FRAGMENTS, "fragments") \
_(CACHED_FRAGMENTS, "cached fragments") \
_(PROCESSED_FRAGMENTS, "processed fragments")

Definition at line 206 of file nat.h.

◆ foreach_snat_protocol

#define foreach_snat_protocol
Value:
_(UDP, 0, udp, "udp") \
_(TCP, 1, tcp, "tcp") \
_(ICMP, 2, icmp, "icmp")

Definition at line 147 of file nat.h.

◆ foreach_snat_session_state

#define foreach_snat_session_state
Value:
_(0, UNKNOWN, "unknown") \
_(1, UDP_ACTIVE, "udp-active") \
_(2, TCP_SYN_SENT, "tcp-syn-sent") \
_(3, TCP_ESTABLISHED, "tcp-established") \
_(4, TCP_FIN_WAIT, "tcp-fin-wait") \
_(5, TCP_CLOSE_WAIT, "tcp-close-wait") \
_(6, TCP_CLOSING, "tcp-closing") \
_(7, TCP_LAST_ACK, "tcp-last-ack") \
_(8, TCP_CLOSED, "tcp-closed") \
_(9, ICMP_ACTIVE, "icmp-active")

Definition at line 161 of file nat.h.

◆ is_addr_only_static_mapping

#define is_addr_only_static_mapping (   sm)    (sm->flags & NAT_STATIC_MAPPING_FLAG_ADDR_ONLY)

Check if NAT static mapping is address only (1:1NAT).

Parameters
smNAT static mapping
Returns
1 if 1:1NAT, 0 if 1:1NAPT

Definition at line 769 of file nat.h.

◆ is_affinity_sessions

#define is_affinity_sessions (   s)    (s->flags & SNAT_SESSION_FLAG_AFFINITY)

Check if NAT session has affinity record.

Parameters
sNAT session
Returns
1 if NAT session has affinity record

Definition at line 745 of file nat.h.

◆ is_ed_session

#define is_ed_session (   s)    (s->flags & SNAT_SESSION_FLAG_ENDPOINT_DEPENDENT)

Check if NAT session is endpoint dependent.

Parameters
sNAT session
Returns
1 if NAT session is endpoint dependent

Definition at line 739 of file nat.h.

◆ is_fwd_bypass_session

#define is_fwd_bypass_session (   s)    (s->flags & SNAT_SESSION_FLAG_FWD_BYPASS)

Check if NAT session is forwarding bypass.

Parameters
sNAT session
Returns
1 if NAT session is load-balancing

Definition at line 733 of file nat.h.

◆ is_identity_static_mapping

#define is_identity_static_mapping (   sm)    (sm->flags & NAT_STATIC_MAPPING_FLAG_IDENTITY_NAT)

Check if NAT static mapping is identity NAT.

Parameters
smNAT static mapping
Returns
1 if identity NAT

Definition at line 781 of file nat.h.

◆ is_lb_session

#define is_lb_session (   s)    (s->flags & SNAT_SESSION_FLAG_LOAD_BALANCING)

Check if NAT session is load-balancing.

Parameters
sNAT session
Returns
1 if NAT session is load-balancing

Definition at line 727 of file nat.h.

◆ is_lb_static_mapping

#define is_lb_static_mapping (   sm)    (sm->flags & NAT_STATIC_MAPPING_FLAG_LB)

Check if NAT static mapping is load-balancing.

Parameters
smNAT static mapping
Returns
1 if load-balancing

Definition at line 787 of file nat.h.

◆ is_out2in_only_static_mapping

#define is_out2in_only_static_mapping (   sm)    (sm->flags & NAT_STATIC_MAPPING_FLAG_OUT2IN_ONLY)

Check if NAT static mapping match only out2in direction.

Parameters
smNAT static mapping
Returns
1 if rule match only out2in direction

Definition at line 775 of file nat.h.

◆ is_twice_nat_session

#define is_twice_nat_session (   s)    (s->flags & SNAT_SESSION_FLAG_TWICE_NAT)

Check if NAT session is twice NAT.

Parameters
sNAT session
Returns
1 if NAT session is twice NAT

Definition at line 721 of file nat.h.

◆ nat44_is_ses_closed

#define nat44_is_ses_closed (   s)    s->state == 0xf

Check if NAT44 endpoint-dependent TCP session is closed.

Parameters
sNAT session
Returns
1 if session is closed

Definition at line 763 of file nat.h.

◆ NAT44_SES_I2O_FIN

#define NAT44_SES_I2O_FIN   1

Definition at line 235 of file nat.h.

◆ NAT44_SES_I2O_FIN_ACK

#define NAT44_SES_I2O_FIN_ACK   4

Definition at line 237 of file nat.h.

◆ NAT44_SES_I2O_SYN

#define NAT44_SES_I2O_SYN   16

Definition at line 239 of file nat.h.

◆ NAT44_SES_O2I_FIN

#define NAT44_SES_O2I_FIN   2

Definition at line 236 of file nat.h.

◆ NAT44_SES_O2I_FIN_ACK

#define NAT44_SES_O2I_FIN_ACK   8

Definition at line 238 of file nat.h.

◆ NAT44_SES_O2I_SYN

#define NAT44_SES_O2I_SYN   32

Definition at line 240 of file nat.h.

◆ NAT44_SES_RST

#define NAT44_SES_RST   64

Definition at line 241 of file nat.h.

◆ nat_elog

#define nat_elog (   _level,
  _str 
)
Value:
do \
{ \
snat_main_t *sm = &snat_main; \
if (PREDICT_FALSE (sm->log_level >= _level)) \
{ \
ELOG_TYPE_DECLARE (e) = \
{ \
.format = "nat-msg " _str, \
.format_args = "", \
}; \
ELOG_DATA (&sm->vlib_main->elog_main, e); \
} \
} while (0);
#define PREDICT_FALSE(x)
Definition: clib.h:111
snat_main_t snat_main
Definition: nat.c:39

Definition at line 823 of file nat.h.

◆ nat_elog_addr

#define nat_elog_addr (   _level,
  _str,
  _addr 
)
Value:
do \
{ \
if (PREDICT_FALSE (sm->log_level >= _level)) \
{ \
ELOG_TYPE_DECLARE (e) = \
{ \
.format = "nat-msg " _str " %d.%d.%d.%d", \
.format_args = "i1i1i1i1", \
}; \
CLIB_PACKED(struct \
{ \
u8 oct1; \
u8 oct2; \
u8 oct3; \
u8 oct4; \
}) *ed; \
ed->oct4 = _addr >> 24; \
ed->oct3 = _addr >> 16; \
ed->oct2 = _addr >> 8; \
ed->oct1 = _addr; \
} \
} while (0);
vlib_main_t vlib_global_main
Definition: main.c:1940
#define ELOG_DATA(em, f)
Definition: elog.h:484
#define PREDICT_FALSE(x)
Definition: clib.h:111
elog_main_t elog_main
Definition: main.h:193

Definition at line 838 of file nat.h.

◆ nat_elog_debug

#define nat_elog_debug (   nat_elog_str)    nat_elog(SNAT_LOG_DEBUG, "[debug] " nat_elog_str)

Definition at line 969 of file nat.h.

◆ nat_elog_debug_handoff

#define nat_elog_debug_handoff (   _str,
  _tid,
  _fib,
  _src,
  _dst 
)
Value:
do \
{ \
if (PREDICT_FALSE (sm->log_level >= SNAT_LOG_DEBUG)) \
{ \
ELOG_TYPE_DECLARE (e) = \
{ \
.format = "nat-msg " _str " ip src: %d.%d.%d.%d dst: %d.%d.%d.%d" \
" tid from: %d to: %d fib: %d", \
.format_args = "i1i1i1i1i1i1i1i1i4i4i4", \
}; \
CLIB_PACKED(struct \
{ \
u8 src_oct1; \
u8 src_oct2; \
u8 src_oct3; \
u8 src_oct4; \
u8 dst_oct1; \
u8 dst_oct2; \
u8 dst_oct3; \
u8 dst_oct4; \
u32 ftid; \
u32 ttid; \
u32 fib; \
}) *ed; \
ed->src_oct1 = _src >> 24; \
ed->src_oct2 = _src >> 16; \
ed->src_oct3 = _src >> 8; \
ed->src_oct4 = _src; \
ed->dst_oct1 = _dst >> 24; \
ed->dst_oct2 = _dst >> 16; \
ed->dst_oct3 = _dst >> 8; \
ed->dst_oct4 = _dst; \
ed->ftid = vlib_get_thread_index (); \
ed->ttid = _tid; \
ed->fib = _fib; \
} \
} while (0);
vlib_main_t vlib_global_main
Definition: main.c:1940
#define ELOG_DATA(em, f)
Definition: elog.h:484
#define PREDICT_FALSE(x)
Definition: clib.h:111
static_always_inline uword vlib_get_thread_index(void)
Definition: threads.h:213
elog_main_t elog_main
Definition: main.h:193

Definition at line 863 of file nat.h.

◆ nat_elog_debug_handoff_v2

#define nat_elog_debug_handoff_v2 (   _str,
  _prt,
  _fib,
  _src,
  _dst 
)
Value:
do \
{ \
if (PREDICT_FALSE (sm->log_level >= SNAT_LOG_DEBUG)) \
{ \
ELOG_TYPE_DECLARE (e) = \
{ \
.format = "nat-msg " _str " ip_src:%d.%d.%d.%d ip_dst:%d.%d.%d.%d" \
" tid:%d prt:%d fib:%d", \
.format_args = "i1i1i1i1i1i1i1i1i4i4i4", \
}; \
CLIB_PACKED(struct \
{ \
u8 src_oct1; \
u8 src_oct2; \
u8 src_oct3; \
u8 src_oct4; \
u8 dst_oct1; \
u8 dst_oct2; \
u8 dst_oct3; \
u8 dst_oct4; \
u32 tid; \
u32 prt; \
u32 fib; \
}) *ed; \
ed->src_oct1 = _src >> 24; \
ed->src_oct2 = _src >> 16; \
ed->src_oct3 = _src >> 8; \
ed->src_oct4 = _src; \
ed->dst_oct1 = _dst >> 24; \
ed->dst_oct2 = _dst >> 16; \
ed->dst_oct3 = _dst >> 8; \
ed->dst_oct4 = _dst; \
ed->tid = vlib_get_thread_index (); \
ed->prt = _prt; \
ed->fib = _fib; \
} \
} while (0);
vlib_main_t vlib_global_main
Definition: main.c:1940
#define ELOG_DATA(em, f)
Definition: elog.h:484
#define PREDICT_FALSE(x)
Definition: clib.h:111
static_always_inline uword vlib_get_thread_index(void)
Definition: threads.h:213
elog_main_t elog_main
Definition: main.h:193

Definition at line 903 of file nat.h.

◆ nat_elog_debug_X1

#define nat_elog_debug_X1 (   nat_elog_fmt_str,
  nat_elog_fmt_arg,
  nat_elog_val1 
)    nat_elog_X1(SNAT_LOG_DEBUG, "[debug] " nat_elog_fmt_str, nat_elog_fmt_arg, nat_elog_val1)

Definition at line 980 of file nat.h.

◆ nat_elog_err

#define nat_elog_err (   nat_elog_str)    nat_elog(SNAT_LOG_ERROR, "[error] " nat_elog_str)

Definition at line 967 of file nat.h.

◆ nat_elog_err_X1

#define nat_elog_err_X1 (   nat_elog_fmt_str,
  nat_elog_fmt_arg,
  nat_elog_val1 
)    nat_elog_X1(SNAT_LOG_ERROR, "[error] " nat_elog_fmt_str, nat_elog_fmt_arg, nat_elog_val1)

Definition at line 978 of file nat.h.

◆ nat_elog_info

#define nat_elog_info (   nat_elog_str)    nat_elog(SNAT_LOG_INFO, "[info] " nat_elog_str)

Definition at line 971 of file nat.h.

◆ nat_elog_info_X1

#define nat_elog_info_X1 (   nat_elog_fmt_str,
  nat_elog_fmt_arg,
  nat_elog_val1 
)    nat_elog_X1(SNAT_LOG_INFO, "[info] " nat_elog_fmt_str, nat_elog_fmt_arg, nat_elog_val1)

Definition at line 982 of file nat.h.

◆ nat_elog_notice

#define nat_elog_notice (   nat_elog_str)    nat_elog(SNAT_LOG_INFO, "[notice] " nat_elog_str)

Definition at line 963 of file nat.h.

◆ nat_elog_notice_X1

#define nat_elog_notice_X1 (   nat_elog_fmt_str,
  nat_elog_fmt_arg,
  nat_elog_val1 
)    nat_elog_X1(SNAT_LOG_NOTICE, "[notice] " nat_elog_fmt_str, nat_elog_fmt_arg, nat_elog_val1)

Definition at line 974 of file nat.h.

◆ nat_elog_warn

#define nat_elog_warn (   nat_elog_str)    nat_elog(SNAT_LOG_WARNING, "[warning] " nat_elog_str)

Definition at line 965 of file nat.h.

◆ nat_elog_warn_X1

#define nat_elog_warn_X1 (   nat_elog_fmt_str,
  nat_elog_fmt_arg,
  nat_elog_val1 
)    nat_elog_X1(SNAT_LOG_WARNING, "[warning] " nat_elog_fmt_str, nat_elog_fmt_arg, nat_elog_val1)

Definition at line 976 of file nat.h.

◆ nat_elog_X1

#define nat_elog_X1 (   _level,
  _fmt,
  _arg,
  _val1 
)
Value:
do \
{ \
snat_main_t *sm = &snat_main; \
if (PREDICT_FALSE (sm->log_level >= _level)) \
{ \
ELOG_TYPE_DECLARE (e) = \
{ \
.format = "nat-msg " _fmt, \
.format_args = _arg, \
}; \
CLIB_PACKED(struct \
{ \
typeof (_val1) val1; \
}) *ed; \
ed = ELOG_DATA (&sm->vlib_main->elog_main, e); \
ed->val1 = _val1; \
} \
} while (0);
#define ELOG_DATA(em, f)
Definition: elog.h:484
#define PREDICT_FALSE(x)
Definition: clib.h:111
snat_main_t snat_main
Definition: nat.c:39

Definition at line 943 of file nat.h.

◆ NAT_FQ_NELTS

#define NAT_FQ_NELTS   64

Definition at line 41 of file nat.h.

◆ NAT_INTERFACE_FLAG_IS_INSIDE

#define NAT_INTERFACE_FLAG_IS_INSIDE   1

Definition at line 254 of file nat.h.

◆ NAT_INTERFACE_FLAG_IS_OUTSIDE

#define NAT_INTERFACE_FLAG_IS_OUTSIDE   2

Definition at line 255 of file nat.h.

◆ nat_interface_is_inside

#define nat_interface_is_inside (   i)    i->flags & NAT_INTERFACE_FLAG_IS_INSIDE

Check if NAT interface is inside.

Parameters
iNAT interfce
Returns
1 if inside interface

Definition at line 751 of file nat.h.

◆ nat_interface_is_outside

#define nat_interface_is_outside (   i)    i->flags & NAT_INTERFACE_FLAG_IS_OUTSIDE

Check if NAT interface is outside.

Parameters
iNAT interfce
Returns
1 if outside interface

Definition at line 757 of file nat.h.

◆ nat_log_debug

#define nat_log_debug (   ...)    vlib_log(VLIB_LOG_LEVEL_DEBUG, snat_main.log_class, __VA_ARGS__)

Definition at line 804 of file nat.h.

◆ nat_log_err

#define nat_log_err (   ...)    vlib_log(VLIB_LOG_LEVEL_ERR, snat_main.log_class, __VA_ARGS__)

Definition at line 796 of file nat.h.

◆ nat_log_info

#define nat_log_info (   ...)    vlib_log(VLIB_LOG_LEVEL_INFO, snat_main.log_class, __VA_ARGS__)

Definition at line 802 of file nat.h.

◆ nat_log_notice

#define nat_log_notice (   ...)    vlib_log(VLIB_LOG_LEVEL_NOTICE, snat_main.log_class, __VA_ARGS__)

Definition at line 800 of file nat.h.

◆ nat_log_warn

#define nat_log_warn (   ...)    vlib_log(VLIB_LOG_LEVEL_WARNING, snat_main.log_class, __VA_ARGS__)

Definition at line 798 of file nat.h.

◆ NAT_STATIC_MAPPING_FLAG_ADDR_ONLY

#define NAT_STATIC_MAPPING_FLAG_ADDR_ONLY   1

Definition at line 258 of file nat.h.

◆ NAT_STATIC_MAPPING_FLAG_IDENTITY_NAT

#define NAT_STATIC_MAPPING_FLAG_IDENTITY_NAT   4

Definition at line 260 of file nat.h.

◆ NAT_STATIC_MAPPING_FLAG_LB

#define NAT_STATIC_MAPPING_FLAG_LB   8

Definition at line 261 of file nat.h.

◆ NAT_STATIC_MAPPING_FLAG_OUT2IN_ONLY

#define NAT_STATIC_MAPPING_FLAG_OUT2IN_ONLY   2

Definition at line 259 of file nat.h.

◆ SNAT_FLAG_HAIRPINNING

#define SNAT_FLAG_HAIRPINNING   (1 << 0)

Definition at line 44 of file nat.h.

◆ SNAT_ICMP_TIMEOUT

#define SNAT_ICMP_TIMEOUT   60

Definition at line 38 of file nat.h.

◆ snat_is_session_static

#define snat_is_session_static (   s)    (s->flags & SNAT_SESSION_FLAG_STATIC_MAPPING)

Check if SNAT session is created from static mapping.

Parameters
sSNAT session
Returns
1 if SNAT session is created from static mapping otherwise 0

Definition at line 709 of file nat.h.

◆ snat_is_unk_proto_session

#define snat_is_unk_proto_session (   s)    (s->flags & SNAT_SESSION_FLAG_UNKNOWN_PROTO)

Check if SNAT session for unknown protocol.

Parameters
sSNAT session
Returns
1 if SNAT session for unknown protocol otherwise 0

Definition at line 715 of file nat.h.

◆ SNAT_SESSION_FLAG_AFFINITY

#define SNAT_SESSION_FLAG_AFFINITY   64

Definition at line 250 of file nat.h.

◆ SNAT_SESSION_FLAG_ENDPOINT_DEPENDENT

#define SNAT_SESSION_FLAG_ENDPOINT_DEPENDENT   16

Definition at line 248 of file nat.h.

◆ SNAT_SESSION_FLAG_FWD_BYPASS

#define SNAT_SESSION_FLAG_FWD_BYPASS   32

Definition at line 249 of file nat.h.

◆ SNAT_SESSION_FLAG_LOAD_BALANCING

#define SNAT_SESSION_FLAG_LOAD_BALANCING   4

Definition at line 246 of file nat.h.

◆ SNAT_SESSION_FLAG_OUTPUT_FEATURE

#define SNAT_SESSION_FLAG_OUTPUT_FEATURE   128

Definition at line 251 of file nat.h.

◆ SNAT_SESSION_FLAG_STATIC_MAPPING

#define SNAT_SESSION_FLAG_STATIC_MAPPING   1

Definition at line 244 of file nat.h.

◆ SNAT_SESSION_FLAG_TWICE_NAT

#define SNAT_SESSION_FLAG_TWICE_NAT   8

Definition at line 247 of file nat.h.

◆ SNAT_SESSION_FLAG_UNKNOWN_PROTO

#define SNAT_SESSION_FLAG_UNKNOWN_PROTO   2

Definition at line 245 of file nat.h.

◆ SNAT_TCP_ESTABLISHED_TIMEOUT

#define SNAT_TCP_ESTABLISHED_TIMEOUT   7440

Definition at line 37 of file nat.h.

◆ SNAT_TCP_TRANSITORY_TIMEOUT

#define SNAT_TCP_TRANSITORY_TIMEOUT   240

Definition at line 36 of file nat.h.

◆ SNAT_UDP_TIMEOUT

#define SNAT_UDP_TIMEOUT   300

Definition at line 35 of file nat.h.

◆ tcp_is_init

#define tcp_is_init (   t)    ((t->flags & TCP_FLAG_SYN) && !(t->flags & TCP_FLAG_ACK))

Check if client initiating TCP connection (received SYN from client)

Parameters
tTCP header
Returns
1 if client initiating TCP connection

Definition at line 793 of file nat.h.

Typedef Documentation

◆ nat_alloc_out_addr_and_port_function_t

typedef int() nat_alloc_out_addr_and_port_function_t(snat_address_t *addresses, u32 fib_index, u32 thread_index, snat_session_key_t *k, u16 port_per_thread, u32 snat_thread_index)

Definition at line 501 of file nat.h.

◆ nat_config_flags_t

◆ nat_log_level_t

◆ snat_get_worker_function_t

typedef u32() snat_get_worker_function_t(ip4_header_t *ip, u32 rx_fib_index, u8 is_output)

Definition at line 497 of file nat.h.

◆ snat_icmp_match_function_t

typedef u32() snat_icmp_match_function_t(struct snat_main_s *sm, vlib_node_runtime_t *node, u32 thread_index, vlib_buffer_t *b0, ip4_header_t *ip0, u8 *p_proto, snat_session_key_t *p_value, u8 *p_dont_translate, void *d, void *e)

Definition at line 487 of file nat.h.

◆ snat_main_t

typedef struct snat_main_s snat_main_t

Enumeration Type Documentation

◆ lb_nat_type_t

Enumerator
NO_LB_NAT 
LB_NAT 
AFFINITY_LB_NAT 

Definition at line 391 of file nat.h.

◆ nat_addr_and_port_alloc_alg_t

Enumerator
foreach_nat_addr_and_port_alloc_alg 

Definition at line 138 of file nat.h.

◆ nat_config_flags_t_

Enumerator
foreach_nat_config_flag 

Definition at line 125 of file nat.h.

◆ nat_in2out_ed_error_t

Enumerator
NAT_IN2OUT_ED_N_ERROR 

Definition at line 198 of file nat.h.

◆ nat_log_level_t_

Enumerator
foreach_nat_log_level 

Definition at line 816 of file nat.h.

◆ nat_out2in_ed_error_t

Enumerator
NAT_OUT2IN_ED_N_ERROR 

Definition at line 225 of file nat.h.

◆ snat_protocol_t

Enumerator
foreach_snat_protocol 

Definition at line 152 of file nat.h.

◆ snat_session_state_t

Enumerator
foreach_snat_session_state 

Definition at line 173 of file nat.h.

◆ twice_nat_type_t

Enumerator
TWICE_NAT_DISABLED 
TWICE_NAT 
TWICE_NAT_SELF 

Definition at line 381 of file nat.h.

Function Documentation

◆ CLIB_PACKED()

typedef CLIB_PACKED ( struct { snat_session_key_t out2in;snat_session_key_t in2out;u32 flags;u32 per_user_index;u32 per_user_list_head_index;f64 last_heard;f64 ha_last_refreshed;u64 total_bytes;u32 total_pkts;ip4_address_t ext_host_addr;u16 ext_host_port;ip4_address_t ext_host_nat_addr;u16 ext_host_nat_port;u8 state;u32 i2o_fin_seq;u32 o2i_fin_seq;u32 user_index;}  )

◆ icmp_in2out()

u32 icmp_in2out ( snat_main_t sm,
vlib_buffer_t b0,
ip4_header_t ip0,
icmp46_header_t *  icmp0,
u32  sw_if_index0,
u32  rx_fib_index0,
vlib_node_runtime_t node,
u32  next0,
u32  thread_index,
void *  d,
void *  e 
)

Definition at line 648 of file in2out.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ icmp_match_in2out_det()

u32 icmp_match_in2out_det ( snat_main_t sm,
vlib_node_runtime_t node,
u32  thread_index,
vlib_buffer_t b0,
ip4_header_t ip0,
u8 p_proto,
snat_session_key_t p_value,
u8 p_dont_translate,
void *  d,
void *  e 
)

Get address and port values to be used for ICMP packet translation and create session if needed.

Parameters
[in,out]smNAT main
[in,out]nodeNAT node runtime
[in]thread_indexthread index
[in,out]b0buffer containing packet to be translated
[out]p_protoprotocol used for matching
[out]p_valueaddress and port after NAT translation
[out]p_dont_translateif packet should not be translated
doptional parameter
eoptional parameter

Definition at line 95 of file nat_det_in2out.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ icmp_match_in2out_ed()

u32 icmp_match_in2out_ed ( snat_main_t sm,
vlib_node_runtime_t node,
u32  thread_index,
vlib_buffer_t b0,
ip4_header_t ip0,
u8 p_proto,
snat_session_key_t p_value,
u8 p_dont_translate,
void *  d,
void *  e 
)

Definition at line 522 of file in2out_ed.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ icmp_match_in2out_fast()

u32 icmp_match_in2out_fast ( snat_main_t sm,
vlib_node_runtime_t node,
u32  thread_index,
vlib_buffer_t b0,
ip4_header_t ip0,
u8 p_proto,
snat_session_key_t p_value,
u8 p_dont_translate,
void *  d,
void *  e 
)

Get address and port values to be used for ICMP packet translation.

Parameters
[in]smNAT main
[in,out]nodeNAT node runtime
[in]thread_indexthread index
[in,out]b0buffer containing packet to be translated
[out]p_protoprotocol used for matching
[out]p_valueaddress and port after NAT translation
[out]p_dont_translateif packet should not be translated
doptional parameter
eoptional parameter

Definition at line 577 of file in2out.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ icmp_match_in2out_slow()

u32 icmp_match_in2out_slow ( snat_main_t sm,
vlib_node_runtime_t node,
u32  thread_index,
vlib_buffer_t b0,
ip4_header_t ip0,
u8 p_proto,
snat_session_key_t p_value,
u8 p_dont_translate,
void *  d,
void *  e 
)

Get address and port values to be used for ICMP packet translation and create session if needed.

Parameters
[in,out]smNAT main
[in,out]nodeNAT node runtime
[in]thread_indexthread index
[in,out]b0buffer containing packet to be translated
[out]p_protoprotocol used for matching
[out]p_valueaddress and port after NAT translation
[out]p_dont_translateif packet should not be translated
doptional parameter
eoptional parameter

Definition at line 458 of file in2out.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ icmp_match_out2in_det()

u32 icmp_match_out2in_det ( snat_main_t sm,
vlib_node_runtime_t node,
u32  thread_index,
vlib_buffer_t b0,
ip4_header_t ip0,
u8 p_proto,
snat_session_key_t p_value,
u8 p_dont_translate,
void *  d,
void *  e 
)

Get address and port values to be used for ICMP packet translation and create session if needed.

Parameters
[in,out]smNAT main
[in,out]nodeNAT node runtime
[in]thread_indexthread index
[in,out]b0buffer containing packet to be translated
[out]p_protoprotocol used for matching
[out]p_valueaddress and port after NAT translation
[out]p_dont_translateif packet should not be translated
doptional parameter
eoptional parameter

Definition at line 95 of file nat_det_out2in.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ icmp_match_out2in_ed()

u32 icmp_match_out2in_ed ( snat_main_t sm,
vlib_node_runtime_t node,
u32  thread_index,
vlib_buffer_t b0,
ip4_header_t ip0,
u8 p_proto,
snat_session_key_t p_value,
u8 p_dont_translate,
void *  d,
void *  e 
)

Definition at line 449 of file out2in_ed.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ icmp_match_out2in_fast()

u32 icmp_match_out2in_fast ( snat_main_t sm,
vlib_node_runtime_t node,
u32  thread_index,
vlib_buffer_t b0,
ip4_header_t ip0,
u8 p_proto,
snat_session_key_t p_value,
u8 p_dont_translate,
void *  d,
void *  e 
)

Get address and port values to be used for ICMP packet translation.

Parameters
[in]smNAT main
[in,out]nodeNAT node runtime
[in]thread_indexthread index
[in,out]b0buffer containing packet to be translated
[out]p_protoprotocol used for matching
[out]p_valueaddress and port after NAT translation
[out]p_dont_translateif packet should not be translated
doptional parameter
eoptional parameter

Definition at line 455 of file out2in.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ icmp_match_out2in_slow()

u32 icmp_match_out2in_slow ( snat_main_t sm,
vlib_node_runtime_t node,
u32  thread_index,
vlib_buffer_t b0,
ip4_header_t ip0,
u8 p_proto,
snat_session_key_t p_value,
u8 p_dont_translate,
void *  d,
void *  e 
)

Get address and port values to be used for ICMP packet translation and create session if needed.

Parameters
[in,out]smNAT main
[in,out]nodeNAT node runtime
[in]thread_indexthread index
[in,out]b0buffer containing packet to be translated
[out]p_protoprotocol used for matching
[out]p_valueaddress and port after NAT translation
[out]p_dont_translateif packet should not be translated
doptional parameter
eoptional parameter

Definition at line 325 of file out2in.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ icmp_out2in()

u32 icmp_out2in ( snat_main_t sm,
vlib_buffer_t b0,
ip4_header_t ip0,
icmp46_header_t *  icmp0,
u32  sw_if_index0,
u32  rx_fib_index0,
vlib_node_runtime_t node,
u32  next0,
u32  thread_index,
void *  d,
void *  e 
)

Definition at line 518 of file out2in.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ increment_v4_address()

void increment_v4_address ( ip4_address_t a)

Increment IPv4 address.

Definition at line 626 of file nat.c.

+ Here is the caller graph for this function:

◆ nat44_add_del_address_dpo()

void nat44_add_del_address_dpo ( ip4_address_t  addr,
u8  is_add 
)

Add/delete external address to FIB DPO (out2in DPO mode)

Parameters
addrIPv4 address
is_add1 = add, 0 = delete
Returns
0 on success, non-zero value otherwise

Definition at line 2880 of file nat.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ nat44_add_del_lb_static_mapping()

int nat44_add_del_lb_static_mapping ( ip4_address_t  e_addr,
u16  e_port,
snat_protocol_t  proto,
nat44_lb_addr_port_t locals,
u8  is_add,
twice_nat_type_t  twice_nat,
u8  out2in_only,
u8 tag,
u32  affinity 
)

Add/delete static mapping with load-balancing (multiple backends)

Parameters
e_addrexternal IPv4 address
e_portexternal port number
protoL4 protocol
localslist of local backends
is_add1 = add, 0 = delete
twice_nattwice-nat mode
out2in_onlyif 1 rule match only out2in direction
tagopaque string tag
affinity0 = disabled, otherwise client IP affinity sticky time
Returns
0 on success, non-zero value otherwise

Definition at line 1169 of file nat.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ nat44_del_ed_session()

int nat44_del_ed_session ( snat_main_t sm,
ip4_address_t addr,
u16  port,
ip4_address_t eh_addr,
u16  eh_port,
u8  proto,
u32  vrf_id,
int  is_in 
)

Delete NAT44 endpoint-dependent session.

Parameters
addrIPv4 address
portL4 port number
protoL4 protocol
vrf_idVRF ID
is_in1 = inside network address and port pair, 0 = outside
Returns
0 on success, non-zero value otherwise

Definition at line 4191 of file nat.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ nat44_del_session()

int nat44_del_session ( snat_main_t sm,
ip4_address_t addr,
u16  port,
snat_protocol_t  proto,
u32  vrf_id,
int  is_in 
)

Delete NAT44 session.

Parameters
addrIPv4 address
portL4 port number
protoL4 protocol
vrf_idVRF ID
is_in1 = inside network address and port pair, 0 = outside
Returns
0 on success, non-zero value otherwise

Definition at line 4148 of file nat.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ nat44_ed_hairpinning_unknown_proto()

void nat44_ed_hairpinning_unknown_proto ( snat_main_t sm,
vlib_buffer_t b,
ip4_header_t ip 
)

Definition at line 382 of file nat44_hairpinning.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ nat44_i2o_ed_is_idle_session_cb()

int nat44_i2o_ed_is_idle_session_cb ( clib_bihash_kv_16_8_t kv,
void *  arg 
)

Definition at line 78 of file in2out_ed.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ nat44_i2o_is_idle_session_cb()

int nat44_i2o_is_idle_session_cb ( clib_bihash_kv_8_8_t kv,
void *  arg 
)

Definition at line 197 of file in2out.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ nat44_lb_static_mapping_add_del_local()

int nat44_lb_static_mapping_add_del_local ( ip4_address_t  e_addr,
u16  e_port,
ip4_address_t  l_addr,
u16  l_port,
snat_protocol_t  proto,
u32  vrf_id,
u8  probability,
u8  is_add 
)

Definition at line 1446 of file nat.c.

+ Here is the caller graph for this function:

◆ nat44_o2i_ed_is_idle_session_cb()

int nat44_o2i_ed_is_idle_session_cb ( clib_bihash_kv_16_8_t kv,
void *  arg 
)

Definition at line 102 of file out2in_ed.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ nat44_o2i_is_idle_session_cb()

int nat44_o2i_is_idle_session_cb ( clib_bihash_kv_8_8_t kv,
void *  arg 
)

Definition at line 116 of file out2in.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ nat44_reass_hairpinning()

void nat44_reass_hairpinning ( snat_main_t sm,
vlib_buffer_t b0,
ip4_header_t ip0,
u16  sport,
u16  dport,
u32  proto0,
int  is_ed 
)

Definition at line 429 of file nat44_hairpinning.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ nat_ed_session_alloc()

snat_session_t* nat_ed_session_alloc ( snat_main_t sm,
snat_user_t u,
u32  thread_index,
f64  now 
)

Allocate NAT endpoint-dependent session.

Parameters
uNAT user
thread_indexthread index
Returns
session data structure on success otherwise zero value

Definition at line 435 of file nat.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ nat_free_session_data()

void nat_free_session_data ( snat_main_t sm,
snat_session_t *  s,
u32  thread_index,
u8  is_ha 
)

Free NAT44 session data (lookup keys, external addrres port)

Parameters
sNAT session
thread_indexthread index
is_hais HA event

Definition at line 179 of file nat.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ nat_hairpinning_sm_unknown_proto()

void nat_hairpinning_sm_unknown_proto ( snat_main_t sm,
vlib_buffer_t b,
ip4_header_t ip 
)

Definition at line 355 of file nat44_hairpinning.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ nat_session_alloc_or_recycle()

snat_session_t* nat_session_alloc_or_recycle ( snat_main_t sm,
snat_user_t u,
u32  thread_index,
f64  now 
)

Allocate new NAT session or recycle last used.

Parameters
uNAT user
thread_indexthread index
Returns
session data structure on success otherwise zero value

Definition at line 360 of file nat.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ nat_set_alloc_addr_and_port_default()

void nat_set_alloc_addr_and_port_default ( void  )

Set address and port assignment algorithm to default/standard.

Definition at line 4258 of file nat.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ nat_set_alloc_addr_and_port_mape()

void nat_set_alloc_addr_and_port_mape ( u16  psid,
u16  psid_offset,
u16  psid_length 
)

Set address and port assignment algorithm for MAP-E CE.

Parameters
psidPort Set Identifier value
psid_offsetnumber of offset bits
psid_lengthlength of PSID

Definition at line 4235 of file nat.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ nat_set_alloc_addr_and_port_range()

void nat_set_alloc_addr_and_port_range ( u16  start_port,
u16  end_port 
)

Set address and port assignment algorithm for port range.

Parameters
start_portbeginning of the port range
end_portend of the port range

Definition at line 4247 of file nat.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ nat_user_get_or_create()

snat_user_t* nat_user_get_or_create ( snat_main_t sm,
ip4_address_t addr,
u32  fib_index,
u32  thread_index 
)

Find or create NAT user.

Parameters
addrIPv4 address
fib_indexFIB table index
thread_indexthread index
Returns
NAT user data structure on success otherwise zero value

Definition at line 313 of file nat.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ snat_add_address()

int snat_add_address ( snat_main_t sm,
ip4_address_t addr,
u32  vrf_id,
u8  twice_nat 
)

Add external address to NAT44 pool.

Parameters
addrIPv4 address
vrf_idVRF id of tenant, ~0 means independent of VRF
twice_nat1 if twice NAT address
Returns
0 on success, non-zero value otherwise

Definition at line 542 of file nat.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ snat_add_del_addr_to_fib()

void snat_add_del_addr_to_fib ( ip4_address_t addr,
u8  p_len,
u32  sw_if_index,
int  is_add 
)

Add/del NAT address to FIB.

Add the external NAT address to the FIB as receive entries. This ensures that VPP will reply to ARP for this address and we don't need to enable proxy ARP on the outside interface.

Parameters
addrIPv4 address
plenaddress prefix length
sw_if_indexsoftware index of the outside interface
is_add0 = delete, 1 = add.

Definition at line 514 of file nat.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ snat_add_interface_address()

int snat_add_interface_address ( snat_main_t sm,
u32  sw_if_index,
int  is_del,
u8  twice_nat 
)

Add/delete NAT44 pool address from specific interfce.

Parameters
sw_if_indexsoftware index of the interface
is_del1 = delete, 0 = add
twice_nat1 = twice NAT address for extenal hosts
Returns
0 on success, non-zero value otherwise

Definition at line 4080 of file nat.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ snat_add_static_mapping()

int snat_add_static_mapping ( ip4_address_t  l_addr,
ip4_address_t  e_addr,
u16  l_port,
u16  e_port,
u32  vrf_id,
int  addr_only,
u32  sw_if_index,
snat_protocol_t  proto,
int  is_add,
twice_nat_type_t  twice_nat,
u8  out2in_only,
u8 tag,
u8  identity_nat 
)

Add/delete NAT44 static mapping.

Parameters
l_addrlocal IPv4 address
e_addrexternal IPv4 address
l_portlocal port number
e_portexternal port number
vrf_idlocal VRF ID
addr_only1 = 1:1NAT, 0 = 1:1NAPT
sw_if_indexuse interface address as external IPv4 address
protoL4 protocol
is_add1 = add, 0 = delete
twice_nattwice-nat mode
out2in_onlyif 1 rule match only out2in direction
tagopaque string tag
identity_natidentity NAT
Returns
0 on success, non-zero value otherwise

Definition at line 678 of file nat.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ snat_alloc_outside_address_and_port()

int snat_alloc_outside_address_and_port ( snat_address_t addresses,
u32  fib_index,
u32  thread_index,
snat_session_key_t k,
u16  port_per_thread,
u32  snat_thread_index 
)

Alloc outside address and port.

Parameters
addressesvector of outside addresses
fib_indexFIB table index
thread_indexthread index
kallocated address and port pair
port_per_threadnumber of ports per threead
snat_thread_indexNAT thread index
Returns
0 on success, non-zero value otherwise

Definition at line 2681 of file nat.c.

+ Here is the caller graph for this function:

◆ snat_api_init()

clib_error_t* snat_api_init ( vlib_main_t vm,
snat_main_t sm 
)

Definition at line 3584 of file nat_api.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ snat_del_address()

int snat_del_address ( snat_main_t sm,
ip4_address_t  addr,
u8  delete_sm,
u8  twice_nat 
)

Delete external address from NAT44 pool.

Parameters
addrIPv4 address
delete_sm1 if delete static mapping using address
twice_nat1 if twice NAT address
Returns
0 on success, non-zero value otherwise

Definition at line 1630 of file nat.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ snat_free_outside_address_and_port()

void snat_free_outside_address_and_port ( snat_address_t addresses,
u32  thread_index,
snat_session_key_t k 
)

Free outside address and port pair.

Parameters
addressesvector of outside addresses
thread_indexthread index
kaddress, port and protocol

Definition at line 2448 of file nat.c.

+ Here is the caller graph for this function:

◆ snat_hairpinning()

int snat_hairpinning ( snat_main_t sm,
vlib_buffer_t b0,
ip4_header_t ip0,
udp_header_t udp0,
tcp_header_t tcp0,
u32  proto0,
int  is_ed 
)

Definition at line 90 of file nat44_hairpinning.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ snat_icmp_hairpinning()

u32 snat_icmp_hairpinning ( snat_main_t sm,
vlib_buffer_t b0,
ip4_header_t ip0,
icmp46_header_t *  icmp0,
int  is_ed 
)

Definition at line 199 of file nat44_hairpinning.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ snat_interface_add_del()

int snat_interface_add_del ( u32  sw_if_index,
u8  is_inside,
int  is_del 
)

Enable/disable NAT44 feature on the interface.

Parameters
sw_if_indexsoftware index of the interface
is_inside1 = inside, 0 = outside
is_del1 = delete, 0 = add
Returns
0 on success, non-zero value otherwise

Definition at line 1744 of file nat.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ snat_interface_add_del_output_feature()

int snat_interface_add_del_output_feature ( u32  sw_if_index,
u8  is_inside,
int  is_del 
)

Enable/disable NAT44 output feature on the interface (postrouting NAT)

Parameters
sw_if_indexsoftware index of the interface
is_inside1 = inside, 0 = outside
is_del1 = delete, 0 = add
Returns
0 on success, non-zero value otherwise

Definition at line 1993 of file nat.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ snat_set_workers()

int snat_set_workers ( uword bitmap)

Set NAT plugin workers.

Parameters
bitmapNAT workers bitmap
Returns
0 on success, non-zero value otherwise

Definition at line 2148 of file nat.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ snat_static_mapping_match()

int snat_static_mapping_match ( snat_main_t sm,
snat_session_key_t  match,
snat_session_key_t mapping,
u8  by_external,
u8 is_addr_only,
twice_nat_type_t twice_nat,
lb_nat_type_t lb,
ip4_address_t ext_host_addr,
u8 is_identity_nat 
)

Match NAT44 static mapping.

Parameters
matchaddress and port to match
mappingexternal/local address and port of the matched mapping
by_externalif 0 match by local address otherwise match by external address
is_addr_only1 if matched mapping is address only
twice_natmatched mapping is twice NAT type
lb1 if matched mapping is load-balanced
ext_host_addrexternal host address
Returns
0 if match found otherwise 1.

Definition at line 2522 of file nat.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Variable Documentation

◆ format_det_map_ses

format_function_t format_det_map_ses

Definition at line 696 of file nat.h.

◆ format_nat44_reass_trace

format_function_t format_nat44_reass_trace

Definition at line 701 of file nat.h.

◆ format_nat_addr_and_port_alloc_alg

format_function_t format_nat_addr_and_port_alloc_alg

Definition at line 700 of file nat.h.

◆ format_snat_key

format_function_t format_snat_key

Definition at line 697 of file nat.h.

◆ format_snat_protocol

format_function_t format_snat_protocol

Definition at line 699 of file nat.h.

◆ format_snat_session

format_function_t format_snat_session

Definition at line 695 of file nat.h.

◆ format_snat_static_map_to_resolve

format_function_t format_snat_static_map_to_resolve

Definition at line 694 of file nat.h.

◆ format_snat_static_mapping

format_function_t format_snat_static_mapping

Definition at line 693 of file nat.h.

◆ format_snat_user

format_function_t format_snat_user

Definition at line 692 of file nat.h.

◆ format_static_mapping_key

format_function_t format_static_mapping_key

Definition at line 698 of file nat.h.

◆ nat44_ed_hairpin_dst_node

vlib_node_registration_t nat44_ed_hairpin_dst_node

(constructor) VLIB_REGISTER_NODE (nat44_ed_hairpin_dst_node)

Definition at line 774 of file nat44_hairpinning.c.

◆ nat44_ed_hairpin_src_node

vlib_node_registration_t nat44_ed_hairpin_src_node

(constructor) VLIB_REGISTER_NODE (nat44_ed_hairpin_src_node)

Definition at line 898 of file nat44_hairpinning.c.

◆ nat44_ed_in2out_node

vlib_node_registration_t nat44_ed_in2out_node

(constructor) VLIB_REGISTER_NODE (nat44_ed_in2out_node)

Definition at line 1653 of file in2out_ed.c.

◆ nat44_ed_in2out_output_node

vlib_node_registration_t nat44_ed_in2out_output_node

(constructor) VLIB_REGISTER_NODE (nat44_ed_in2out_output_node)

Definition at line 1680 of file in2out_ed.c.

◆ nat44_ed_in2out_output_worker_handoff_node

vlib_node_registration_t nat44_ed_in2out_output_worker_handoff_node

◆ nat44_ed_in2out_worker_handoff_node

vlib_node_registration_t nat44_ed_in2out_worker_handoff_node

◆ nat44_ed_out2in_node

vlib_node_registration_t nat44_ed_out2in_node

(constructor) VLIB_REGISTER_NODE (nat44_ed_out2in_node)

Definition at line 1585 of file out2in_ed.c.

◆ nat44_ed_out2in_worker_handoff_node

vlib_node_registration_t nat44_ed_out2in_worker_handoff_node

◆ snat_det_in2out_node

vlib_node_registration_t snat_det_in2out_node

(constructor) VLIB_REGISTER_NODE (snat_det_in2out_node)

Definition at line 886 of file nat_det_in2out.c.

◆ snat_det_out2in_node

vlib_node_registration_t snat_det_out2in_node

(constructor) VLIB_REGISTER_NODE (snat_det_out2in_node)

Definition at line 696 of file nat_det_out2in.c.

◆ snat_hairpin_dst_node

vlib_node_registration_t snat_hairpin_dst_node

(constructor) VLIB_REGISTER_NODE (snat_hairpin_dst_node)

Definition at line 752 of file nat44_hairpinning.c.

◆ snat_hairpin_src_node

vlib_node_registration_t snat_hairpin_src_node

(constructor) VLIB_REGISTER_NODE (snat_hairpin_src_node)

Definition at line 874 of file nat44_hairpinning.c.

◆ snat_in2out_fast_node

vlib_node_registration_t snat_in2out_fast_node

(constructor) VLIB_REGISTER_NODE (snat_in2out_fast_node)

Definition at line 2207 of file in2out.c.

◆ snat_in2out_node

vlib_node_registration_t snat_in2out_node

(constructor) VLIB_REGISTER_NODE (snat_in2out_node)

Definition at line 1597 of file in2out.c.

◆ snat_in2out_output_node

vlib_node_registration_t snat_in2out_output_node

(constructor) VLIB_REGISTER_NODE (snat_in2out_output_node)

Definition at line 1630 of file in2out.c.

◆ snat_in2out_output_worker_handoff_node

vlib_node_registration_t snat_in2out_output_worker_handoff_node

(constructor) VLIB_REGISTER_NODE (snat_in2out_output_worker_handoff_node)

Definition at line 283 of file nat44_handoff.c.

◆ snat_in2out_worker_handoff_node

vlib_node_registration_t snat_in2out_worker_handoff_node

(constructor) VLIB_REGISTER_NODE (snat_in2out_worker_handoff_node)

Definition at line 260 of file nat44_handoff.c.

◆ snat_main

snat_main_t snat_main

Definition at line 39 of file nat.c.

◆ snat_out2in_fast_node

vlib_node_registration_t snat_out2in_fast_node

(constructor) VLIB_REGISTER_NODE (snat_out2in_fast_node)

Definition at line 1900 of file out2in.c.

◆ snat_out2in_node

vlib_node_registration_t snat_out2in_node

(constructor) VLIB_REGISTER_NODE (snat_out2in_node)

Definition at line 1362 of file out2in.c.

◆ snat_out2in_worker_handoff_node

vlib_node_registration_t snat_out2in_worker_handoff_node

(constructor) VLIB_REGISTER_NODE (snat_out2in_worker_handoff_node)

Definition at line 305 of file nat44_handoff.c.

◆ unformat_snat_protocol

unformat_function_t unformat_snat_protocol

Definition at line 703 of file nat.h.