FD.io VPP  v20.01-48-g3e0dafb74
Vector Packet Processing
nat.c File Reference
+ Include dependency graph for nat.c:

Go to the source code of this file.

Functions

 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_nat_classify, static)
 
 VNET_FEATURE_INIT (ip4_snat_det_in2out, static)
 
 VNET_FEATURE_INIT (ip4_snat_det_out2in, static)
 
 VNET_FEATURE_INIT (ip4_nat_det_classify, 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_hairpin_dst, static)
 
 VNET_FEATURE_INIT (ip4_nat44_ed_hairpin_dst, static)
 
 VNET_FEATURE_INIT (ip4_snat_in2out_output, static)
 
 VNET_FEATURE_INIT (ip4_snat_in2out_output_worker_handoff, static)
 
 VNET_FEATURE_INIT (ip4_snat_hairpin_src, static)
 
 VNET_FEATURE_INIT (ip4_nat44_ed_in2out_output, static)
 
 VNET_FEATURE_INIT (ip4_nat44_ed_hairpin_src, static)
 
 VNET_FEATURE_INIT (ip4_nat_hairpinning, static)
 
 VNET_FEATURE_INIT (ip4_nat44_ed_hairpinning, static)
 
 VLIB_PLUGIN_REGISTER ()
 
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 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)
 
void increment_v4_address (ip4_address_t *a)
 Increment IPv4 address. More...
 
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, snat_protocol_t proto, int addr_only, int is_add, u8 *tag, int twice_nat, int out2in_only, int identity_nat)
 
static u32 get_thread_idx_by_port (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, 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)
 
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...
 
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...
 
static void snat_update_outside_fib (u32 sw_if_index, u32 new_fib_index, u32 old_fib_index)
 
static void snat_ip4_table_bind (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)
 
static int nat_alloc_addr_and_port_default (snat_address_t *addresses, u32 fib_index, u32 thread_index, snat_session_key_t *k, u16 port_per_thread, u32 snat_thread_index)
 
static clib_error_tsnat_init (vlib_main_t *vm)
 
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...
 
static int nat_set_outside_address_and_port (snat_address_t *addresses, u32 thread_index, snat_session_key_t *k)
 
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...
 
static_always_inline u16 snat_random_port (u16 min, u16 max)
 
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...
 
static int nat_alloc_addr_and_port_mape (snat_address_t *addresses, u32 fib_index, u32 thread_index, snat_session_key_t *k, u16 port_per_thread, u32 snat_thread_index)
 
static int nat_alloc_addr_and_port_range (snat_address_t *addresses, u32 fib_index, u32 thread_index, snat_session_key_t *k, u16 port_per_thread, u32 snat_thread_index)
 
void nat44_add_del_address_dpo (ip4_address_t addr, u8 is_add)
 Add/delete external address to FIB DPO (out2in DPO mode) More...
 
u8format_session_kvp (u8 *s, va_list *args)
 
u8format_static_mapping_kvp (u8 *s, va_list *args)
 
u8format_user_kvp (u8 *s, va_list *args)
 
u8format_ed_session_kvp (u8 *s, va_list *args)
 
static u32 snat_get_worker_in2out_cb (ip4_header_t *ip0, u32 rx_fib_index0, u8 is_output)
 
static u32 snat_get_worker_out2in_cb (vlib_buffer_t *b, ip4_header_t *ip0, u32 rx_fib_index0, u8 is_output)
 
static u32 nat44_ed_get_worker_in2out_cb (ip4_header_t *ip, u32 rx_fib_index, u8 is_output)
 
static u32 nat44_ed_get_worker_out2in_cb (vlib_buffer_t *b, ip4_header_t *ip, u32 rx_fib_index, u8 is_output)
 
void nat_ha_sadd_cb (ip4_address_t *in_addr, u16 in_port, ip4_address_t *out_addr, u16 out_port, ip4_address_t *eh_addr, u16 eh_port, ip4_address_t *ehn_addr, u16 ehn_port, u8 proto, u32 fib_index, u16 flags, u32 thread_index)
 
void nat_ha_sdel_cb (ip4_address_t *out_addr, u16 out_port, ip4_address_t *eh_addr, u16 eh_port, u8 proto, u32 fib_index, u32 ti)
 
void nat_ha_sref_cb (ip4_address_t *out_addr, u16 out_port, ip4_address_t *eh_addr, u16 eh_port, u8 proto, u32 fib_index, u32 total_pkts, u64 total_bytes, u32 thread_index)
 
void nat_ha_sadd_ed_cb (ip4_address_t *in_addr, u16 in_port, ip4_address_t *out_addr, u16 out_port, ip4_address_t *eh_addr, u16 eh_port, ip4_address_t *ehn_addr, u16 ehn_port, u8 proto, u32 fib_index, u16 flags, u32 thread_index)
 
void nat_ha_sdel_ed_cb (ip4_address_t *out_addr, u16 out_port, ip4_address_t *eh_addr, u16 eh_port, u8 proto, u32 fib_index, u32 ti)
 
void nat_ha_sref_ed_cb (ip4_address_t *out_addr, u16 out_port, ip4_address_t *eh_addr, u16 eh_port, u8 proto, u32 fib_index, u32 total_pkts, u64 total_bytes, u32 thread_index)
 
static clib_error_tsnat_config (vlib_main_t *vm, unformat_input_t *input)
 
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_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...
 
VLIB_NODE_FN() nat_default_node (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
 

Variables

snat_main_t snat_main
 
fib_source_t nat_fib_src_hi
 
fib_source_t nat_fib_src_low
 
vlib_node_registration_t nat_default_node
 (constructor) VLIB_REGISTER_NODE (nat_default_node) More...
 

Function Documentation

◆ format_ed_session_kvp()

u8* format_ed_session_kvp ( u8 s,
va_list *  args 
)

Definition at line 3026 of file nat.c.

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

◆ format_session_kvp()

u8* format_session_kvp ( u8 s,
va_list *  args 
)

Definition at line 2985 of file nat.c.

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

◆ format_static_mapping_kvp()

u8* format_static_mapping_kvp ( u8 s,
va_list *  args 
)

Definition at line 2998 of file nat.c.

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

◆ format_user_kvp()

u8* format_user_kvp ( u8 s,
va_list *  args 
)

Definition at line 3012 of file nat.c.

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

◆ get_thread_idx_by_port()

static u32 get_thread_idx_by_port ( u16  e_port)
static

Definition at line 680 of file nat.c.

◆ increment_v4_address()

void increment_v4_address ( ip4_address_t a)

Increment IPv4 address.

Definition at line 642 of file nat.c.

+ Here is the caller graph for this function:

◆ 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 623 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 2962 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 1185 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 4271 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 4228 of file nat.c.

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

◆ nat44_ed_get_worker_in2out_cb()

static u32 nat44_ed_get_worker_in2out_cb ( ip4_header_t ip,
u32  rx_fib_index,
u8  is_output 
)
static

Definition at line 3157 of file nat.c.

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

◆ nat44_ed_get_worker_out2in_cb()

static u32 nat44_ed_get_worker_out2in_cb ( vlib_buffer_t b,
ip4_header_t ip,
u32  rx_fib_index,
u8  is_output 
)
static

Definition at line 3260 of file nat.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 1462 of file nat.c.

+ Here is the caller graph for this function:

◆ nat_alloc_addr_and_port_default()

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

Definition at line 2777 of file nat.c.

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

◆ nat_alloc_addr_and_port_mape()

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

Definition at line 2864 of file nat.c.

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

◆ nat_alloc_addr_and_port_range()

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

Definition at line 2914 of file nat.c.

+ Here is the call graph for this function:
+ 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 4346 of file nat.c.

◆ 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 450 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 194 of file nat.c.

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

◆ nat_ha_sadd_cb()

void nat_ha_sadd_cb ( ip4_address_t in_addr,
u16  in_port,
ip4_address_t out_addr,
u16  out_port,
ip4_address_t eh_addr,
u16  eh_port,
ip4_address_t ehn_addr,
u16  ehn_port,
u8  proto,
u32  fib_index,
u16  flags,
u32  thread_index 
)

Definition at line 3424 of file nat.c.

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

◆ nat_ha_sadd_ed_cb()

void nat_ha_sadd_ed_cb ( ip4_address_t in_addr,
u16  in_port,
ip4_address_t out_addr,
u16  out_port,
ip4_address_t eh_addr,
u16  eh_port,
ip4_address_t ehn_addr,
u16  ehn_port,
u8  proto,
u32  fib_index,
u16  flags,
u32  thread_index 
)

Definition at line 3574 of file nat.c.

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

◆ nat_ha_sdel_cb()

void nat_ha_sdel_cb ( ip4_address_t out_addr,
u16  out_port,
ip4_address_t eh_addr,
u16  eh_port,
u8  proto,
u32  fib_index,
u32  ti 
)

Definition at line 3514 of file nat.c.

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

◆ nat_ha_sdel_ed_cb()

void nat_ha_sdel_ed_cb ( ip4_address_t out_addr,
u16  out_port,
ip4_address_t eh_addr,
u16  eh_port,
u8  proto,
u32  fib_index,
u32  ti 
)

Definition at line 3685 of file nat.c.

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

◆ nat_ha_sref_cb()

void nat_ha_sref_cb ( ip4_address_t out_addr,
u16  out_port,
ip4_address_t eh_addr,
u16  eh_port,
u8  proto,
u32  fib_index,
u32  total_pkts,
u64  total_bytes,
u32  thread_index 
)

Definition at line 3548 of file nat.c.

+ Here is the caller graph for this function:

◆ nat_ha_sref_ed_cb()

void nat_ha_sref_ed_cb ( ip4_address_t out_addr,
u16  out_port,
ip4_address_t eh_addr,
u16  eh_port,
u8  proto,
u32  fib_index,
u32  total_pkts,
u64  total_bytes,
u32  thread_index 
)

Definition at line 3722 of file nat.c.

+ Here is the caller 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 4010 of file nat.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 375 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 4338 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 4315 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 4327 of file nat.c.

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

◆ nat_set_outside_address_and_port()

static int nat_set_outside_address_and_port ( snat_address_t addresses,
u32  thread_index,
snat_session_key_t k 
)
static

Definition at line 2568 of file nat.c.

+ 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 328 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 558 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 530 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 4160 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 694 of file nat.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,
snat_protocol_t  proto,
int  addr_only,
int  is_add,
u8 tag,
int  twice_nat,
int  out2in_only,
int  identity_nat 
)
static

Definition at line 651 of file nat.c.

+ 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 2763 of file nat.c.

+ Here is the caller graph for this function:

◆ snat_config()

static clib_error_t* snat_config ( vlib_main_t vm,
unformat_input_t input 
)
static

Definition at line 3752 of file nat.c.

+ Here is the call 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 1646 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 2530 of file nat.c.

+ Here is the caller graph for this function:

◆ snat_get_worker_in2out_cb()

static u32 snat_get_worker_in2out_cb ( ip4_header_t ip0,
u32  rx_fib_index0,
u8  is_output 
)
static

Definition at line 3044 of file nat.c.

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

◆ snat_get_worker_out2in_cb()

static u32 snat_get_worker_out2in_cb ( vlib_buffer_t b,
ip4_header_t ip0,
u32  rx_fib_index0,
u8  is_output 
)
static

Definition at line 3064 of file nat.c.

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

◆ snat_init()

static clib_error_t* snat_init ( vlib_main_t vm)
static

Definition at line 2353 of file nat.c.

+ Here is the call 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 1760 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 2025 of file nat.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 4078 of file nat.c.

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

◆ snat_ip4_table_bind()

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

Definition at line 2322 of file nat.c.

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

◆ snat_random_port()

static_always_inline u16 snat_random_port ( u16  min,
u16  max 
)

Definition at line 2755 of file nat.c.

+ Here is the call 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 2223 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 2604 of file nat.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 ( u32  sw_if_index,
u32  new_fib_index,
u32  old_fib_index 
)
static

Definition at line 2252 of file nat.c.

+ Here is the caller graph for this function:

◆ VLIB_PLUGIN_REGISTER()

VLIB_PLUGIN_REGISTER ( )

◆ VNET_FEATURE_INIT() [1/25]

VNET_FEATURE_INIT ( nat_pre_in2out  ,
static   
)

◆ VNET_FEATURE_INIT() [2/25]

VNET_FEATURE_INIT ( nat_pre_out2in  ,
static   
)

◆ VNET_FEATURE_INIT() [3/25]

VNET_FEATURE_INIT ( snat_in2out_worker_handoff  ,
static   
)

◆ VNET_FEATURE_INIT() [4/25]

VNET_FEATURE_INIT ( snat_out2in_worker_handoff  ,
static   
)

◆ VNET_FEATURE_INIT() [5/25]

VNET_FEATURE_INIT ( ip4_snat_in2out  ,
static   
)

◆ VNET_FEATURE_INIT() [6/25]

VNET_FEATURE_INIT ( ip4_snat_out2in  ,
static   
)

◆ VNET_FEATURE_INIT() [7/25]

VNET_FEATURE_INIT ( ip4_nat_classify  ,
static   
)

◆ VNET_FEATURE_INIT() [8/25]

VNET_FEATURE_INIT ( ip4_snat_det_in2out  ,
static   
)

◆ VNET_FEATURE_INIT() [9/25]

VNET_FEATURE_INIT ( ip4_snat_det_out2in  ,
static   
)

◆ VNET_FEATURE_INIT() [10/25]

VNET_FEATURE_INIT ( ip4_nat_det_classify  ,
static   
)

◆ VNET_FEATURE_INIT() [11/25]

VNET_FEATURE_INIT ( ip4_nat44_ed_in2out  ,
static   
)

◆ VNET_FEATURE_INIT() [12/25]

VNET_FEATURE_INIT ( ip4_nat44_ed_out2in  ,
static   
)

◆ VNET_FEATURE_INIT() [13/25]

VNET_FEATURE_INIT ( ip4_nat44_ed_classify  ,
static   
)

◆ VNET_FEATURE_INIT() [14/25]

VNET_FEATURE_INIT ( ip4_nat_handoff_classify  ,
static   
)

◆ VNET_FEATURE_INIT() [15/25]

VNET_FEATURE_INIT ( ip4_snat_in2out_fast  ,
static   
)

◆ VNET_FEATURE_INIT() [16/25]

VNET_FEATURE_INIT ( ip4_snat_out2in_fast  ,
static   
)

◆ VNET_FEATURE_INIT() [17/25]

VNET_FEATURE_INIT ( ip4_snat_hairpin_dst  ,
static   
)

◆ VNET_FEATURE_INIT() [18/25]

VNET_FEATURE_INIT ( ip4_nat44_ed_hairpin_dst  ,
static   
)

◆ VNET_FEATURE_INIT() [19/25]

VNET_FEATURE_INIT ( ip4_snat_in2out_output  ,
static   
)

◆ VNET_FEATURE_INIT() [20/25]

VNET_FEATURE_INIT ( ip4_snat_in2out_output_worker_handoff  ,
static   
)

◆ VNET_FEATURE_INIT() [21/25]

VNET_FEATURE_INIT ( ip4_snat_hairpin_src  ,
static   
)

◆ VNET_FEATURE_INIT() [22/25]

VNET_FEATURE_INIT ( ip4_nat44_ed_in2out_output  ,
static   
)

◆ VNET_FEATURE_INIT() [23/25]

VNET_FEATURE_INIT ( ip4_nat44_ed_hairpin_src  ,
static   
)

◆ VNET_FEATURE_INIT() [24/25]

VNET_FEATURE_INIT ( ip4_nat_hairpinning  ,
static   
)

◆ VNET_FEATURE_INIT() [25/25]

VNET_FEATURE_INIT ( ip4_nat44_ed_hairpinning  ,
static   
)

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_PRE] = "nat-pre-in2out",
[NAT_NEXT_OUT2IN_PRE] = "nat-pre-out2in",
[NAT_NEXT_IN2OUT_ED_FAST_PATH] = "nat44-ed-in2out",
[NAT_NEXT_IN2OUT_ED_SLOW_PATH] = "nat44-ed-in2out-slowpath",
[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",
},
}
Definition: nat.h:63
unsigned int u32
Definition: types.h:88
vl_api_fib_path_type_t type
Definition: fib_types.api:123

(constructor) VLIB_REGISTER_NODE (nat_default_node)

Definition at line 4354 of file nat.c.

◆ nat_fib_src_hi

fib_source_t nat_fib_src_hi

Definition at line 41 of file nat.c.

◆ nat_fib_src_low

fib_source_t nat_fib_src_low

Definition at line 42 of file nat.c.

◆ snat_main

snat_main_t snat_main

Definition at line 39 of file nat.c.