X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fplugins%2Fsnat%2Fsnat.h;h=aa0f82fc9df86f7122b5628ad7ca2533028f3f37;hb=80cb2584c3fecec59c75f94726a95d2b2adce188;hp=1bc5fcd754530ee5508c2dec3d69c4a9b8b46334;hpb=7968e6cad5fac28568162945e2e57556740013fd;p=vpp.git diff --git a/src/plugins/snat/snat.h b/src/plugins/snat/snat.h index 1bc5fcd7545..aa0f82fc9df 100644 --- a/src/plugins/snat/snat.h +++ b/src/plugins/snat/snat.h @@ -37,6 +37,8 @@ #define SNAT_TCP_INCOMING_SYN 6 #define SNAT_ICMP_TIMEOUT 60 +#define SNAT_FLAG_HAIRPINNING (1 << 0) + /* Key */ typedef struct { union @@ -239,6 +241,8 @@ typedef struct { /* Pool of doubly-linked list elements */ dlist_elt_t * list_pool; + + u32 snat_thread_index; } snat_main_per_thread_data_t; struct snat_main_s; @@ -282,6 +286,8 @@ typedef struct snat_main_s { u32 * workers; snat_get_worker_function_t * worker_in2out_cb; snat_get_worker_function_t * worker_out2in_cb; + u16 port_per_thread; + u32 num_snat_thread; /* Per thread data */ snat_main_per_thread_data_t * per_thread_data; @@ -297,6 +303,7 @@ typedef struct snat_main_s { /* Interface pool */ snat_interface_t * interfaces; + snat_interface_t * output_feature_interfaces; /* Vector of outside addresses */ snat_address_t * addresses; @@ -312,10 +319,12 @@ typedef struct snat_main_s { /* Worker handoff index */ u32 fq_in2out_index; + u32 fq_in2out_output_index; u32 fq_out2in_index; /* in2out and out2in node index */ u32 in2out_node_index; + u32 in2out_output_node_index; u32 out2in_node_index; /* Deterministic NAT */ @@ -357,20 +366,25 @@ typedef struct snat_main_s { extern snat_main_t snat_main; extern vlib_node_registration_t snat_in2out_node; +extern vlib_node_registration_t snat_in2out_output_node; extern vlib_node_registration_t snat_out2in_node; extern vlib_node_registration_t snat_in2out_fast_node; extern vlib_node_registration_t snat_out2in_fast_node; extern vlib_node_registration_t snat_in2out_worker_handoff_node; +extern vlib_node_registration_t snat_in2out_output_worker_handoff_node; extern vlib_node_registration_t snat_out2in_worker_handoff_node; extern vlib_node_registration_t snat_det_in2out_node; extern vlib_node_registration_t snat_det_out2in_node; +extern vlib_node_registration_t snat_hairpin_dst_node; +extern vlib_node_registration_t snat_hairpin_src_node; -void snat_free_outside_address_and_port (snat_main_t * sm, - snat_session_key_t * k, +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, +int snat_alloc_outside_address_and_port (snat_main_t * sm, u32 fib_index, + u32 thread_index, snat_session_key_t * k, u32 * address_indexp); @@ -477,6 +491,8 @@ int snat_add_static_mapping(ip4_address_t l_addr, ip4_address_t e_addr, 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_interface_add_del_output_feature(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);