FD.io VPP
v17.07.01-10-g3be13f0
Vector Packet Processing
|
Go to the source code of this file.
Data Structures | |
struct | snat_session_key_t |
struct | snat_det_out_key_t |
struct | snat_user_key_t |
struct | snat_worker_key_t |
struct | snat_user_t |
struct | snat_address_t |
struct | snat_det_session_t |
struct | snat_det_map_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 | snat_runtime_t |
struct | icmp_echo_header_t |
struct | tcp_udp_header_t |
Macros | |
#define | SNAT_UDP_TIMEOUT 300 |
#define | SNAT_UDP_TIMEOUT_MIN 120 |
#define | SNAT_TCP_TRANSITORY_TIMEOUT 240 |
#define | SNAT_TCP_ESTABLISHED_TIMEOUT 7440 |
#define | SNAT_TCP_INCOMING_SYN 6 |
#define | SNAT_ICMP_TIMEOUT 60 |
#define | foreach_snat_protocol |
#define | foreach_snat_session_state |
#define | SNAT_SESSION_FLAG_STATIC_MAPPING 1 |
#define | snat_is_session_static(s) s->flags & SNAT_SESSION_FLAG_STATIC_MAPPING |
Check if SNAT session is created from static mapping. More... | |
Typedefs | |
typedef u32 | snat_icmp_match_function_t(struct snat_main_s *sm, vlib_node_runtime_t *node, u32 thread_index, vlib_buffer_t *b0, 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) |
typedef struct snat_main_s | snat_main_t |
Enumerations | |
enum | snat_protocol_t { foreach_snat_protocol } |
enum | snat_session_state_t { foreach_snat_session_state } |
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;u64 total_bytes;u32 total_pkts;u32 outside_address_index;}) snat_session_t |
void | snat_free_outside_address_and_port (snat_main_t *sm, snat_session_key_t *k, u32 address_index) |
int | snat_alloc_outside_address_and_port (snat_main_t *sm, u32 fib_index, snat_session_key_t *k, u32 *address_indexp) |
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) |
Match SNAT 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... | |
static u32 | ip_proto_to_snat_proto (u8 ip_proto) |
static u8 | snat_proto_to_ip_proto (snat_protocol_t snat_proto) |
u32 | icmp_match_in2out_fast (snat_main_t *sm, vlib_node_runtime_t *node, u32 thread_index, vlib_buffer_t *b0, 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 packet SNAT translation. More... | |
u32 | icmp_match_in2out_slow (snat_main_t *sm, vlib_node_runtime_t *node, u32 thread_index, vlib_buffer_t *b0, 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 packet SNAT 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, 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 packet SNAT 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, 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 packet SNAT translation. More... | |
u32 | icmp_match_out2in_slow (snat_main_t *sm, vlib_node_runtime_t *node, u32 thread_index, vlib_buffer_t *b0, 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 packet SNAT 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, 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 packet SNAT translation and create session if needed. More... | |
void | increment_v4_address (ip4_address_t *a) |
void | snat_add_address (snat_main_t *sm, ip4_address_t *addr, u32 vrf_id) |
int | snat_del_address (snat_main_t *sm, ip4_address_t addr, u8 delete_sm) |
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) |
Add static mapping. More... | |
clib_error_t * | snat_api_init (vlib_main_t *vm, snat_main_t *sm) |
int | snat_set_workers (uword *bitmap) |
int | snat_interface_add_del (u32 sw_if_index, u8 is_inside, int is_del) |
int | snat_add_interface_address (snat_main_t *sm, u32 sw_if_index, int is_del) |
uword | unformat_snat_protocol (unformat_input_t *input, va_list *args) |
u8 * | format_snat_protocol (u8 *s, va_list *args) |
static_always_inline u8 | icmp_is_error_message (icmp46_header_t *icmp) |
static_always_inline u8 | is_interface_addr (snat_main_t *sm, vlib_node_runtime_t *node, u32 sw_if_index0, u32 ip4_addr) |
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_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_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... | |
format_function_t | format_snat_user |
#define foreach_snat_protocol |
#define foreach_snat_session_state |
#define snat_is_session_static | ( | s | ) | s->flags & SNAT_SESSION_FLAG_STATIC_MAPPING |
typedef u32( snat_get_worker_function_t) (ip4_header_t *ip, u32 rx_fib_index) |
typedef u32 snat_icmp_match_function_t(struct snat_main_s *sm, vlib_node_runtime_t *node, u32 thread_index, vlib_buffer_t *b0, u8 *p_proto, snat_session_key_t *p_value, u8 *p_dont_translate, void *d, void *e) |
typedef struct snat_main_s snat_main_t |
enum snat_protocol_t |
enum snat_session_state_t |
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;u64 total_bytes;u32 total_pkts;u32 outside_address_index;} | ) |
static_always_inline u8 icmp_is_error_message | ( | icmp46_header_t * | icmp | ) |
u32 icmp_match_in2out_det | ( | snat_main_t * | sm, |
vlib_node_runtime_t * | node, | ||
u32 | thread_index, | ||
vlib_buffer_t * | b0, | ||
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 packet SNAT translation and create session if needed.
[in,out] | sm | SNAT main |
[in,out] | node | SNAT node runtime |
[in] | thread_index | thread index |
[in,out] | b0 | buffer containing packet to be translated |
[out] | p_proto | protocol used for matching |
[out] | p_value | address and port after NAT translation |
[out] | p_dont_translate | if packet should not be translated |
d | optional parameter | |
e | optional parameter |
Definition at line 2251 of file in2out.c.
u32 icmp_match_in2out_fast | ( | snat_main_t * | sm, |
vlib_node_runtime_t * | node, | ||
u32 | thread_index, | ||
vlib_buffer_t * | b0, | ||
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 packet SNAT translation.
[in] | sm | SNAT main |
[in,out] | node | SNAT node runtime |
[in] | thread_index | thread index |
[in,out] | b0 | buffer containing packet to be translated |
[out] | p_proto | protocol used for matching |
[out] | p_value | address and port after NAT translation |
[out] | p_dont_translate | if packet should not be translated |
d | optional parameter | |
e | optional parameter |
Definition at line 569 of file in2out.c.
u32 icmp_match_in2out_slow | ( | snat_main_t * | sm, |
vlib_node_runtime_t * | node, | ||
u32 | thread_index, | ||
vlib_buffer_t * | b0, | ||
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 packet SNAT translation and create session if needed.
[in,out] | sm | SNAT main |
[in,out] | node | SNAT node runtime |
[in] | thread_index | thread index |
[in,out] | b0 | buffer containing packet to be translated |
[out] | p_proto | protocol used for matching |
[out] | p_value | address and port after NAT translation |
[out] | p_dont_translate | if packet should not be translated |
d | optional parameter | |
e | optional parameter |
Definition at line 477 of file in2out.c.
u32 icmp_match_out2in_det | ( | snat_main_t * | sm, |
vlib_node_runtime_t * | node, | ||
u32 | thread_index, | ||
vlib_buffer_t * | b0, | ||
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 packet SNAT translation and create session if needed.
[in,out] | sm | SNAT main |
[in,out] | node | SNAT node runtime |
[in] | thread_index | thread index |
[in,out] | b0 | buffer containing packet to be translated |
[out] | p_proto | protocol used for matching |
[out] | p_value | address and port after NAT translation |
[out] | p_dont_translate | if packet should not be translated |
d | optional parameter | |
e | optional parameter |
Definition at line 1702 of file out2in.c.
u32 icmp_match_out2in_fast | ( | snat_main_t * | sm, |
vlib_node_runtime_t * | node, | ||
u32 | thread_index, | ||
vlib_buffer_t * | b0, | ||
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 packet SNAT translation.
[in] | sm | SNAT main |
[in,out] | node | SNAT node runtime |
[in] | thread_index | thread index |
[in,out] | b0 | buffer containing packet to be translated |
[out] | p_proto | protocol used for matching |
[out] | p_value | address and port after NAT translation |
[out] | p_dont_translate | if packet should not be translated |
d | optional parameter | |
e | optional parameter |
Definition at line 398 of file out2in.c.
u32 icmp_match_out2in_slow | ( | snat_main_t * | sm, |
vlib_node_runtime_t * | node, | ||
u32 | thread_index, | ||
vlib_buffer_t * | b0, | ||
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 packet SNAT translation and create session if needed.
[in,out] | sm | SNAT main |
[in,out] | node | SNAT node runtime |
[in] | thread_index | thread index |
[in,out] | b0 | buffer containing packet to be translated |
[out] | p_proto | protocol used for matching |
[out] | p_value | address and port after NAT translation |
[out] | p_dont_translate | if packet should not be translated |
d | optional parameter | |
e | optional parameter |
Definition at line 288 of file out2in.c.
void increment_v4_address | ( | ip4_address_t * | a | ) |
static_always_inline u8 is_interface_addr | ( | snat_main_t * | sm, |
vlib_node_runtime_t * | node, | ||
u32 | sw_if_index0, | ||
u32 | ip4_addr | ||
) |
void snat_add_address | ( | snat_main_t * | sm, |
ip4_address_t * | addr, | ||
u32 | vrf_id | ||
) |
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.
addr | IPv4 address. |
plen | address prefix length |
sw_if_index | Interface. |
is_add | If 0 delete, otherwise add. |
Definition at line 96 of file snat.c.
int snat_add_interface_address | ( | snat_main_t * | sm, |
u32 | sw_if_index, | ||
int | is_del | ||
) |
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 | ||
) |
Add static mapping.
Create static mapping between local addr+port and external addr+port.
l_addr | Local IPv4 address. |
e_addr | External IPv4 address. |
l_port | Local port number. |
e_port | External port number. |
vrf_id | VRF ID. |
addr_only | If 0 address port and pair mapping, otherwise address only. |
sw_if_index | External port instead of specific IP address. |
is_add | If 0 delete static mapping, otherwise add. |
Definition at line 223 of file snat.c.
int snat_alloc_outside_address_and_port | ( | snat_main_t * | sm, |
u32 | fib_index, | ||
snat_session_key_t * | k, | ||
u32 * | address_indexp | ||
) |
clib_error_t* snat_api_init | ( | vlib_main_t * | vm, |
snat_main_t * | sm | ||
) |
Definition at line 1850 of file snat_api.c.
int snat_del_address | ( | snat_main_t * | sm, |
ip4_address_t | addr, | ||
u8 | delete_sm | ||
) |
void snat_free_outside_address_and_port | ( | snat_main_t * | sm, |
snat_session_key_t * | k, | ||
u32 | address_index | ||
) |
|
inlinestatic |
int snat_set_workers | ( | uword * | bitmap | ) |
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 | ||
) |
Match SNAT static mapping.
sm | SNAT main. |
match | Address and port to match. |
mapping | External or local address and port of the matched mapping. |
by_external | If 0 match by local address otherwise match by external address. |
is_addr_only | If matched mapping is address only |
Definition at line 835 of file snat.c.
uword unformat_snat_protocol | ( | unformat_input_t * | input, |
va_list * | args | ||
) |
format_function_t format_snat_user |
vlib_node_registration_t snat_det_in2out_node |
vlib_node_registration_t snat_det_out2in_node |
vlib_node_registration_t snat_in2out_fast_node |
vlib_node_registration_t snat_in2out_node |
vlib_node_registration_t snat_in2out_worker_handoff_node |
snat_main_t snat_main |
Definition at line 39 of file jvpp_snat.h.
vlib_node_registration_t snat_out2in_fast_node |
vlib_node_registration_t snat_out2in_node |
vlib_node_registration_t snat_out2in_worker_handoff_node |