FD.io VPP  v21.06-3-gbb25fbf28
Vector Packet Processing
nat44_ed.c File Reference
+ Include dependency graph for nat44_ed.c:

Go to the source code of this file.

Macros

#define skip_if_disabled()
 
#define fail_if_enabled()
 
#define fail_if_disabled()
 
#define nat_validate_simple_counter(c, i)
 
#define nat_init_simple_counter(c, n, sn)
 

Functions

static_always_inline void nat_validate_interface_counters (snat_main_t *sm, u32 sw_if_index)
 
 VNET_FEATURE_INIT (nat_pre_in2out, static)
 
 VNET_FEATURE_INIT (nat_pre_out2in, static)
 
 VNET_FEATURE_INIT (snat_in2out_worker_handoff, static)
 
 VNET_FEATURE_INIT (snat_out2in_worker_handoff, static)
 
 VNET_FEATURE_INIT (ip4_snat_in2out, static)
 
 VNET_FEATURE_INIT (ip4_snat_out2in, static)
 
 VNET_FEATURE_INIT (ip4_nat44_ed_in2out, static)
 
 VNET_FEATURE_INIT (ip4_nat44_ed_out2in, static)
 
 VNET_FEATURE_INIT (ip4_nat44_ed_classify, static)
 
 VNET_FEATURE_INIT (ip4_nat_handoff_classify, static)
 
 VNET_FEATURE_INIT (ip4_snat_in2out_fast, static)
 
 VNET_FEATURE_INIT (ip4_snat_out2in_fast, static)
 
 VNET_FEATURE_INIT (ip4_snat_in2out_output, static)
 
 VNET_FEATURE_INIT (ip4_snat_in2out_output_worker_handoff, static)
 
 VNET_FEATURE_INIT (nat_pre_in2out_output, static)
 
 VNET_FEATURE_INIT (ip4_nat44_ed_in2out_output, static)
 
 VLIB_PLUGIN_REGISTER ()
 
static void nat44_ed_db_init (u32 translations, u32 translation_buckets)
 
static void nat44_ed_db_free ()
 
u32 nat_calc_bihash_buckets (u32 n_elts)
 
u8format_session_kvp (u8 *s, va_list *args)
 
u8format_static_mapping_kvp (u8 *s, va_list *args)
 
u8format_ed_session_kvp (u8 *s, va_list *args)
 
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 address port) 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...
 
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...
 
static int is_snat_address_used_in_static_mapping (snat_main_t *sm, ip4_address_t addr)
 
static void snat_add_static_mapping_when_resolved (snat_main_t *sm, ip4_address_t l_addr, u16 l_port, u32 sw_if_index, u16 e_port, u32 vrf_id, nat_protocol_t proto, int addr_only, u8 *tag, int twice_nat, int out2in_only, int identity_nat, ip4_address_t pool_addr, int exact)
 
u32 get_thread_idx_by_port (u16 e_port)
 
void nat_ed_static_mapping_del_sessions (snat_main_t *sm, snat_main_per_thread_data_t *tsm, ip4_address_t l_addr, u16 l_port, u8 protocol, u32 fib_index, int addr_only, ip4_address_t e_addr, u16 e_port)
 
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, nat_protocol_t proto, int is_add, twice_nat_type_t twice_nat, u8 out2in_only, u8 *tag, u8 identity_nat, ip4_address_t pool_addr, int exact)
 Add/delete NAT44 static mapping. More...
 
int nat44_add_del_lb_static_mapping (ip4_address_t e_addr, u16 e_port, nat_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, nat_protocol_t proto, u32 vrf_id, u8 probability, u8 is_add)
 
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 expire_per_vrf_sessions (u32 fib_index)
 
void update_per_vrf_sessions_vec (u32 fib_index, int is_del)
 
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_set_workers (uword *bitmap)
 Set NAT plugin workers. More...
 
int nat44_ed_set_frame_queue_nelts (u32 frame_queue_nelts)
 
static void snat_update_outside_fib (ip4_main_t *im, uword opaque, u32 sw_if_index, u32 new_fib_index, u32 old_fib_index)
 
static void snat_ip4_add_del_interface_address_cb (ip4_main_t *im, uword opaque, u32 sw_if_index, ip4_address_t *address, u32 address_length, u32 if_address_index, u32 is_delete)
 
static void nat_ip4_add_del_addr_only_sm_cb (ip4_main_t *im, uword opaque, u32 sw_if_index, ip4_address_t *address, u32 address_length, u32 if_address_index, u32 is_delete)
 
void test_key_calc_split ()
 
static clib_error_tnat_ip_table_add_del (vnet_main_t *vnm, u32 table_id, u32 is_add)
 
 VNET_IP_TABLE_ADD_DEL_FUNCTION (nat_ip_table_add_del)
 
void nat44_set_node_indexes (snat_main_t *sm, vlib_main_t *vm)
 
static clib_error_tnat_init (vlib_main_t *vm)
 
int nat44_plugin_enable (nat44_config_t c)
 Enable NAT44 plugin. More...
 
void nat44_addresses_free (snat_address_t **addresses)
 
int nat44_plugin_disable ()
 Disable NAT44 plugin. More...
 
void nat44_ed_forwarding_enable_disable (u8 is_enable)
 
void snat_free_outside_address_and_port (snat_address_t *addresses, u32 thread_index, ip4_address_t *addr, u16 port, nat_protocol_t protocol)
 Free outside address and port pair. More...
 
int nat_set_outside_address_and_port (snat_address_t *addresses, u32 thread_index, ip4_address_t addr, u16 port, nat_protocol_t protocol)
 
int snat_static_mapping_match (vlib_main_t *vm, snat_main_t *sm, ip4_address_t match_addr, u16 match_port, u32 match_fib_index, nat_protocol_t match_protocol, ip4_address_t *mapping_addr, u16 *mapping_port, u32 *mapping_fib_index, 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, snat_static_mapping_t **out)
 Match NAT44 static mapping. More...
 
u32 nat44_ed_get_in2out_worker_index (vlib_buffer_t *b, ip4_header_t *ip, u32 rx_fib_index, u8 is_output)
 
u32 nat44_ed_get_out2in_worker_index (vlib_buffer_t *b, ip4_header_t *ip, u32 rx_fib_index, u8 is_output)
 
u32 nat44_get_max_session_limit ()
 
int nat44_set_session_limit (u32 session_limit, u32 vrf_id)
 Set NAT44 session limit (session limit, vrf id) More...
 
int nat44_update_session_limit (u32 session_limit, u32 vrf_id)
 Update NAT44 session limit flushing all data (session limit, vrf id) More...
 
static void nat44_ed_worker_db_init (snat_main_per_thread_data_t *tsm, u32 translations, u32 translation_buckets)
 
static void reinit_ed_flow_hash ()
 
static void nat44_ed_worker_db_free (snat_main_per_thread_data_t *tsm)
 
void nat44_ed_sessions_clear ()
 
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 interface. 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...
 
VLIB_NODE_FN() nat_default_node (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
 
void nat_6t_l3_l4_csum_calc (nat_6t_flow_t *f)
 
static_always_inline int nat_6t_flow_icmp_translate (snat_main_t *sm, vlib_buffer_t *b, ip4_header_t *ip, nat_6t_flow_t *f)
 
static_always_inline void nat_6t_flow_ip4_translate (snat_main_t *sm, vlib_buffer_t *b, ip4_header_t *ip, nat_6t_flow_t *f, nat_protocol_t proto, int is_icmp_inner_ip4)
 
nat_translation_error_e nat_6t_flow_buf_translate (snat_main_t *sm, vlib_buffer_t *b, ip4_header_t *ip, nat_6t_flow_t *f, nat_protocol_t proto, int is_output_feature)
 
u8format_nat_6t (u8 *s, va_list *args)
 
u8format_nat_ed_translation_error (u8 *s, va_list *args)
 
u8format_nat_6t_flow (u8 *s, va_list *args)
 

Variables

snat_main_t snat_main
 
vlib_node_registration_t nat_default_node
 (constructor) VLIB_REGISTER_NODE (nat_default_node) More...
 

Macro Definition Documentation

◆ fail_if_disabled

#define fail_if_disabled ( )
Value:
do \
{ \
snat_main_t *sm = &snat_main; \
if (PREDICT_FALSE (!sm->enabled)) \
{ \
nat_log_err ("plugin disabled"); \
return 1; \
} \
} \
while (0)

Definition at line 67 of file nat44_ed.c.

◆ fail_if_enabled

#define fail_if_enabled ( )
Value:
do \
{ \
snat_main_t *sm = &snat_main; \
if (PREDICT_FALSE (sm->enabled)) \
{ \
nat_log_err ("plugin enabled"); \
return 1; \
} \
} \
while (0)

Definition at line 55 of file nat44_ed.c.

◆ nat_init_simple_counter

#define nat_init_simple_counter (   c,
  n,
  sn 
)
Value:
do \
{ \
c.name = n; \
c.stat_segment_name = sn; \
nat_validate_simple_counter (c, 0); \
} \
while (0);

Definition at line 1975 of file nat44_ed.c.

◆ nat_validate_simple_counter

#define nat_validate_simple_counter (   c,
  i 
)
Value:
do \
{ \
vlib_validate_simple_counter (&c, i); \
vlib_zero_simple_counter (&c, i); \
} \
while (0);

Definition at line 1967 of file nat44_ed.c.

◆ skip_if_disabled

#define skip_if_disabled ( )
Value:
do \
{ \
snat_main_t *sm = &snat_main; \
if (PREDICT_FALSE (!sm->enabled)) \
return; \
} \
while (0)

Definition at line 46 of file nat44_ed.c.

Function Documentation

◆ expire_per_vrf_sessions()

void expire_per_vrf_sessions ( u32  fib_index)

Definition at line 1340 of file nat44_ed.c.

+ Here is the caller graph for this function:

◆ format_ed_session_kvp()

u8* format_ed_session_kvp ( u8 s,
va_list *  args 
)

Definition at line 209 of file nat44_ed.c.

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

◆ format_nat_6t()

u8* format_nat_6t ( u8 s,
va_list *  args 
)

Definition at line 3444 of file nat44_ed.c.

+ Here is the caller graph for this function:

◆ format_nat_6t_flow()

u8* format_nat_6t_flow ( u8 s,
va_list *  args 
)

Definition at line 3477 of file nat44_ed.c.

+ Here is the call graph for this function:

◆ format_nat_ed_translation_error()

u8* format_nat_ed_translation_error ( u8 s,
va_list *  args 
)

Definition at line 3457 of file nat44_ed.c.

◆ format_session_kvp()

u8* format_session_kvp ( u8 s,
va_list *  args 
)

Definition at line 186 of file nat44_ed.c.

+ Here is the call graph for this function:

◆ format_static_mapping_kvp()

u8* format_static_mapping_kvp ( u8 s,
va_list *  args 
)

Definition at line 198 of file nat44_ed.c.

+ Here is the caller graph for this function:

◆ get_thread_idx_by_port()

u32 get_thread_idx_by_port ( u16  e_port)

Definition at line 426 of file nat44_ed.c.

◆ is_snat_address_used_in_static_mapping()

static int is_snat_address_used_in_static_mapping ( snat_main_t sm,
ip4_address_t  addr 
)
static

Definition at line 383 of file nat44_ed.c.

+ 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,
nat_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 856 of file nat44_ed.c.

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

◆ nat44_addresses_free()

void nat44_addresses_free ( snat_address_t **  addresses)

Definition at line 2164 of file nat44_ed.c.

+ 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
smsnat global configuration data
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 3144 of file nat44_ed.c.

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

◆ nat44_ed_db_free()

static void nat44_ed_db_free ( )
static

Definition at line 2889 of file nat44_ed.c.

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

◆ nat44_ed_db_init()

static void nat44_ed_db_init ( u32  translations,
u32  translation_buckets 
)
static

Definition at line 2849 of file nat44_ed.c.

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

◆ nat44_ed_forwarding_enable_disable()

void nat44_ed_forwarding_enable_disable ( u8  is_enable)

Definition at line 2246 of file nat44_ed.c.

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

◆ nat44_ed_get_in2out_worker_index()

u32 nat44_ed_get_in2out_worker_index ( vlib_buffer_t b,
ip4_header_t ip,
u32  rx_fib_index,
u8  is_output 
)

Definition at line 2503 of file nat44_ed.c.

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

◆ nat44_ed_get_out2in_worker_index()

u32 nat44_ed_get_out2in_worker_index ( vlib_buffer_t b,
ip4_header_t ip,
u32  rx_fib_index,
u8  is_output 
)

Definition at line 2606 of file nat44_ed.c.

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

◆ nat44_ed_sessions_clear()

void nat44_ed_sessions_clear ( )

Definition at line 2909 of file nat44_ed.c.

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

◆ nat44_ed_set_frame_queue_nelts()

int nat44_ed_set_frame_queue_nelts ( u32  frame_queue_nelts)

Definition at line 1785 of file nat44_ed.c.

+ Here is the caller graph for this function:

◆ nat44_ed_worker_db_free()

static void nat44_ed_worker_db_free ( snat_main_per_thread_data_t tsm)
static

Definition at line 2881 of file nat44_ed.c.

+ Here is the caller graph for this function:

◆ nat44_ed_worker_db_init()

static void nat44_ed_worker_db_init ( snat_main_per_thread_data_t tsm,
u32  translations,
u32  translation_buckets 
)
static

Definition at line 2808 of file nat44_ed.c.

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

◆ nat44_get_max_session_limit()

u32 nat44_get_max_session_limit ( )

Definition at line 2756 of file nat44_ed.c.

+ 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,
nat_protocol_t  proto,
u32  vrf_id,
u8  probability,
u8  is_add 
)

Definition at line 1084 of file nat44_ed.c.

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

◆ nat44_plugin_disable()

int nat44_plugin_disable ( )

Disable NAT44 plugin.

Returns
0 on success, non-zero value otherwise

Definition at line 2179 of file nat44_ed.c.

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

◆ nat44_plugin_enable()

int nat44_plugin_enable ( nat44_config_t  c)

Enable NAT44 plugin.

Parameters
cnat44_config_t
Returns
0 on success, non-zero value otherwise

Definition at line 2099 of file nat44_ed.c.

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

◆ nat44_set_node_indexes()

void nat44_set_node_indexes ( snat_main_t sm,
vlib_main_t vm 
)

Definition at line 1953 of file nat44_ed.c.

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

◆ nat44_set_session_limit()

int nat44_set_session_limit ( u32  session_limit,
u32  vrf_id 
)

Set NAT44 session limit (session limit, vrf id)

Parameters
session_limitSession limit
vrf_idVRF id
Returns
0 on success, non-zero value otherwise

Definition at line 2770 of file nat44_ed.c.

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

◆ nat44_update_session_limit()

int nat44_update_session_limit ( u32  session_limit,
u32  vrf_id 
)

Update NAT44 session limit flushing all data (session limit, vrf id)

Parameters
session_limitSession limit
vrf_idVRF id
Returns
0 on success, non-zero value otherwise

Definition at line 2789 of file nat44_ed.c.

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

◆ nat_6t_flow_buf_translate()

nat_translation_error_e nat_6t_flow_buf_translate ( snat_main_t sm,
vlib_buffer_t b,
ip4_header_t ip,
nat_6t_flow_t f,
nat_protocol_t  proto,
int  is_output_feature 
)

Definition at line 3424 of file nat44_ed.c.

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

◆ nat_6t_flow_icmp_translate()

static_always_inline int nat_6t_flow_icmp_translate ( snat_main_t sm,
vlib_buffer_t b,
ip4_header_t ip,
nat_6t_flow_t f 
)

Definition at line 3341 of file nat44_ed.c.

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

◆ nat_6t_flow_ip4_translate()

static_always_inline void nat_6t_flow_ip4_translate ( snat_main_t sm,
vlib_buffer_t b,
ip4_header_t ip,
nat_6t_flow_t f,
nat_protocol_t  proto,
int  is_icmp_inner_ip4 
)

Definition at line 3277 of file nat44_ed.c.

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

◆ nat_6t_l3_l4_csum_calc()

void nat_6t_l3_l4_csum_calc ( nat_6t_flow_t f)

Definition at line 3205 of file nat44_ed.c.

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

◆ nat_calc_bihash_buckets()

u32 nat_calc_bihash_buckets ( u32  n_elts)

Definition at line 122 of file lib.h.

+ Here is the caller graph for this function:

◆ nat_default_node()

VLIB_NODE_FN() nat_default_node ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t frame 
)

Definition at line 3176 of file nat44_ed.c.

◆ nat_ed_static_mapping_del_sessions()

void nat_ed_static_mapping_del_sessions ( snat_main_t sm,
snat_main_per_thread_data_t tsm,
ip4_address_t  l_addr,
u16  l_port,
u8  protocol,
u32  fib_index,
int  addr_only,
ip4_address_t  e_addr,
u16  e_port 
)

Definition at line 440 of file nat44_ed.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 address port)

Parameters
smsnat global configuration data
sNAT session
thread_indexthread index
is_hais HA event

Definition at line 231 of file nat44_ed.c.

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

◆ nat_init()

static clib_error_t* nat_init ( vlib_main_t vm)
static

Definition at line 1998 of file nat44_ed.c.

+ Here is the call graph for this function:

◆ nat_ip4_add_del_addr_only_sm_cb()

static void nat_ip4_add_del_addr_only_sm_cb ( ip4_main_t im,
uword  opaque,
u32  sw_if_index,
ip4_address_t address,
u32  address_length,
u32  if_address_index,
u32  is_delete 
)
static

Definition at line 2930 of file nat44_ed.c.

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

◆ nat_ip_table_add_del()

static clib_error_t* nat_ip_table_add_del ( vnet_main_t vnm,
u32  table_id,
u32  is_add 
)
static

Definition at line 1936 of file nat44_ed.c.

+ Here is the call graph for this function:

◆ nat_set_outside_address_and_port()

int nat_set_outside_address_and_port ( snat_address_t addresses,
u32  thread_index,
ip4_address_t  addr,
u16  port,
nat_protocol_t  protocol 
)

Definition at line 2317 of file nat44_ed.c.

◆ nat_validate_interface_counters()

static_always_inline void nat_validate_interface_counters ( snat_main_t sm,
u32  sw_if_index 
)

Definition at line 1985 of file nat44_ed.c.

+ Here is the caller graph for this function:

◆ reinit_ed_flow_hash()

static void reinit_ed_flow_hash ( )
static

Definition at line 2838 of file nat44_ed.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
smsnat global configuration data
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 320 of file nat44_ed.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 291 of file nat44_ed.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 interface.

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

Definition at line 3076 of file nat44_ed.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,
nat_protocol_t  proto,
int  is_add,
twice_nat_type_t  twice_nat,
u8  out2in_only,
u8 tag,
u8  identity_nat,
ip4_address_t  pool_addr,
int  exact 
)

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
pool_addrpool IPv4 address
exact1 = exact pool address
Returns
0 on success, non-zero value otherwise

Definition at line 484 of file nat44_ed.c.

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

◆ snat_add_static_mapping_when_resolved()

static void snat_add_static_mapping_when_resolved ( snat_main_t sm,
ip4_address_t  l_addr,
u16  l_port,
u32  sw_if_index,
u16  e_port,
u32  vrf_id,
nat_protocol_t  proto,
int  addr_only,
u8 tag,
int  twice_nat,
int  out2in_only,
int  identity_nat,
ip4_address_t  pool_addr,
int  exact 
)
static

Definition at line 400 of file nat44_ed.c.

+ 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
smsnat global configuration data
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 1224 of file nat44_ed.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,
ip4_address_t addr,
u16  port,
nat_protocol_t  protocol 
)

Free outside address and port pair.

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

Definition at line 2280 of file nat44_ed.c.

+ 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 1397 of file nat44_ed.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 1595 of file nat44_ed.c.

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

◆ snat_ip4_add_del_interface_address_cb()

static void snat_ip4_add_del_interface_address_cb ( ip4_main_t im,
uword  opaque,
u32  sw_if_index,
ip4_address_t address,
u32  address_length,
u32  if_address_index,
u32  is_delete 
)
static

Definition at line 2998 of file nat44_ed.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 1759 of file nat44_ed.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 ( vlib_main_t vm,
snat_main_t sm,
ip4_address_t  match_addr,
u16  match_port,
u32  match_fib_index,
nat_protocol_t  match_protocol,
ip4_address_t mapping_addr,
u16 mapping_port,
u32 mapping_fib_index,
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,
snat_static_mapping_t **  out 
)

Match NAT44 static mapping.

Parameters
keyaddress and port to match
addrexternal/local address of the matched mapping
portport of the matched mapping
fib_indexfib index 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
is_identity_nat1 if indentity mapping
outif !=0 set to pointer of the mapping structure
Returns
0 if match found otherwise 1.

Definition at line 2354 of file nat44_ed.c.

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

◆ snat_update_outside_fib()

static void snat_update_outside_fib ( ip4_main_t im,
uword  opaque,
u32  sw_if_index,
u32  new_fib_index,
u32  old_fib_index 
)
static

Definition at line 1794 of file nat44_ed.c.

+ Here is the caller graph for this function:

◆ test_key_calc_split()

void test_key_calc_split ( )

Definition at line 1884 of file nat44_ed.c.

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

◆ update_per_vrf_sessions_vec()

void update_per_vrf_sessions_vec ( u32  fib_index,
int  is_del 
)

Definition at line 1360 of file nat44_ed.c.

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

◆ VLIB_PLUGIN_REGISTER()

VLIB_PLUGIN_REGISTER ( )

◆ VNET_FEATURE_INIT() [1/16]

VNET_FEATURE_INIT ( ip4_nat44_ed_classify  ,
static   
)

◆ VNET_FEATURE_INIT() [2/16]

VNET_FEATURE_INIT ( ip4_nat44_ed_in2out  ,
static   
)

◆ VNET_FEATURE_INIT() [3/16]

VNET_FEATURE_INIT ( ip4_nat44_ed_in2out_output  ,
static   
)

◆ VNET_FEATURE_INIT() [4/16]

VNET_FEATURE_INIT ( ip4_nat44_ed_out2in  ,
static   
)

◆ VNET_FEATURE_INIT() [5/16]

VNET_FEATURE_INIT ( ip4_nat_handoff_classify  ,
static   
)

◆ VNET_FEATURE_INIT() [6/16]

VNET_FEATURE_INIT ( ip4_snat_in2out  ,
static   
)

◆ VNET_FEATURE_INIT() [7/16]

VNET_FEATURE_INIT ( ip4_snat_in2out_fast  ,
static   
)

◆ VNET_FEATURE_INIT() [8/16]

VNET_FEATURE_INIT ( ip4_snat_in2out_output  ,
static   
)

◆ VNET_FEATURE_INIT() [9/16]

VNET_FEATURE_INIT ( ip4_snat_in2out_output_worker_handoff  ,
static   
)

◆ VNET_FEATURE_INIT() [10/16]

VNET_FEATURE_INIT ( ip4_snat_out2in  ,
static   
)

◆ VNET_FEATURE_INIT() [11/16]

VNET_FEATURE_INIT ( ip4_snat_out2in_fast  ,
static   
)

◆ VNET_FEATURE_INIT() [12/16]

VNET_FEATURE_INIT ( nat_pre_in2out  ,
static   
)

◆ VNET_FEATURE_INIT() [13/16]

VNET_FEATURE_INIT ( nat_pre_in2out_output  ,
static   
)

◆ VNET_FEATURE_INIT() [14/16]

VNET_FEATURE_INIT ( nat_pre_out2in  ,
static   
)

◆ VNET_FEATURE_INIT() [15/16]

VNET_FEATURE_INIT ( snat_in2out_worker_handoff  ,
static   
)

◆ VNET_FEATURE_INIT() [16/16]

VNET_FEATURE_INIT ( snat_out2in_worker_handoff  ,
static   
)

◆ VNET_IP_TABLE_ADD_DEL_FUNCTION()

VNET_IP_TABLE_ADD_DEL_FUNCTION ( nat_ip_table_add_del  )

Variable Documentation

◆ nat_default_node

vlib_node_registration_t nat_default_node
Initial value:
= {
.name = "nat-default",
.vector_size = sizeof (u32),
.format_trace = 0,
.n_errors = 0,
.n_next_nodes = NAT_N_NEXT,
.next_nodes = {
[NAT_NEXT_DROP] = "error-drop",
[NAT_NEXT_ICMP_ERROR] = "ip4-icmp-error",
[NAT_NEXT_IN2OUT_ED_FAST_PATH] = "nat44-ed-in2out",
[NAT_NEXT_IN2OUT_ED_SLOW_PATH] = "nat44-ed-in2out-slowpath",
[NAT_NEXT_IN2OUT_ED_OUTPUT_FAST_PATH] = "nat44-ed-in2out-output",
[NAT_NEXT_IN2OUT_ED_OUTPUT_SLOW_PATH] = "nat44-ed-in2out-output-slowpath",
[NAT_NEXT_OUT2IN_ED_FAST_PATH] = "nat44-ed-out2in",
[NAT_NEXT_OUT2IN_ED_SLOW_PATH] = "nat44-ed-out2in-slowpath",
[NAT_NEXT_IN2OUT_CLASSIFY] = "nat44-in2out-worker-handoff",
[NAT_NEXT_OUT2IN_CLASSIFY] = "nat44-out2in-worker-handoff",
},
}

(constructor) VLIB_REGISTER_NODE (nat_default_node)

Definition at line 3183 of file nat44_ed.c.

◆ snat_main

snat_main_t snat_main

Definition at line 41 of file nat44_ed.c.

NAT_NEXT_IN2OUT_CLASSIFY
@ NAT_NEXT_IN2OUT_CLASSIFY
Definition: nat44_ed.h:83
VLIB_NODE_TYPE_INTERNAL
@ VLIB_NODE_TYPE_INTERNAL
Definition: node.h:72
NAT_NEXT_IN2OUT_ED_SLOW_PATH
@ NAT_NEXT_IN2OUT_ED_SLOW_PATH
Definition: nat44_ed.h:78
NAT_NEXT_IN2OUT_ED_OUTPUT_SLOW_PATH
@ NAT_NEXT_IN2OUT_ED_OUTPUT_SLOW_PATH
Definition: nat44_ed.h:80
NAT_NEXT_ICMP_ERROR
@ NAT_NEXT_ICMP_ERROR
Definition: nat44_ed.h:76
NAT_NEXT_IN2OUT_ED_FAST_PATH
@ NAT_NEXT_IN2OUT_ED_FAST_PATH
Definition: nat44_ed.h:77
PREDICT_FALSE
#define PREDICT_FALSE(x)
Definition: clib.h:124
NAT_NEXT_OUT2IN_ED_FAST_PATH
@ NAT_NEXT_OUT2IN_ED_FAST_PATH
Definition: nat44_ed.h:81
c
svmdb_client_t * c
Definition: vpp_get_metrics.c:48
i
sll srl srl sll sra u16x4 i
Definition: vector_sse42.h:261
NAT_N_NEXT
@ NAT_N_NEXT
Definition: nat44_ed.h:85
NAT_NEXT_IN2OUT_ED_OUTPUT_FAST_PATH
@ NAT_NEXT_IN2OUT_ED_OUTPUT_FAST_PATH
Definition: nat44_ed.h:79
u32
unsigned int u32
Definition: types.h:88
NAT_NEXT_DROP
@ NAT_NEXT_DROP
Definition: nat44_ed.h:75
NAT_NEXT_OUT2IN_ED_SLOW_PATH
@ NAT_NEXT_OUT2IN_ED_SLOW_PATH
Definition: nat44_ed.h:82
snat_main
snat_main_t snat_main
Definition: nat44_ed.c:41
NAT_NEXT_OUT2IN_CLASSIFY
@ NAT_NEXT_OUT2IN_CLASSIFY
Definition: nat44_ed.h:84
type
vl_api_fib_path_type_t type
Definition: fib_types.api:123