Code Review
/
vpp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
NAT44: LB NAT - local backends in multiple VRFs (VPP-1345)
[vpp.git]
/
src
/
plugins
/
nat
/
nat.h
diff --git
a/src/plugins/nat/nat.h
b/src/plugins/nat/nat.h
index
9de65d9
..
0d51109
100644
(file)
--- a/
src/plugins/nat/nat.h
+++ b/
src/plugins/nat/nat.h
@@
-202,6
+202,11
@@
typedef struct {
#undef _
} snat_address_t;
#undef _
} snat_address_t;
+typedef struct {
+ u32 fib_index;
+ u32 refcount;
+} nat_outside_fib_t;
+
typedef struct {
u16 in_port;
snat_det_out_key_t out;
typedef struct {
u16 in_port;
snat_det_out_key_t out;
@@
-226,6
+231,8
@@
typedef struct {
u16 port;
u8 probability;
u8 prefix;
u16 port;
u8 probability;
u8 prefix;
+ u32 vrf_id;
+ u32 fib_index;
} nat44_lb_addr_port_t;
typedef enum {
} nat44_lb_addr_port_t;
typedef enum {
@@
-245,7
+252,7
@@
typedef struct {
u32 vrf_id;
u32 fib_index;
snat_protocol_t proto;
u32 vrf_id;
u32 fib_index;
snat_protocol_t proto;
- u32
worker_index
;
+ u32
*workers
;
u8 *tag;
nat44_lb_addr_port_t *locals;
} snat_static_mapping_t;
u8 *tag;
nat44_lb_addr_port_t *locals;
} snat_static_mapping_t;
@@
-273,6
+280,10
@@
typedef struct {
clib_bihash_8_8_t out2in;
clib_bihash_8_8_t in2out;
clib_bihash_8_8_t out2in;
clib_bihash_8_8_t in2out;
+ /* Endpoint dependent sessions lookup tables */
+ clib_bihash_16_8_t out2in_ed;
+ clib_bihash_16_8_t in2out_ed;
+
/* Find-a-user => src address lookup */
clib_bihash_8_8_t user_hash;
/* Find-a-user => src address lookup */
clib_bihash_8_8_t user_hash;
@@
-312,16
+323,11
@@
typedef int nat_alloc_out_addr_and_port_function_t (snat_address_t * addresses,
u32 snat_thread_index);
typedef struct snat_main_s {
u32 snat_thread_index);
typedef struct snat_main_s {
- /* Endpoint address dependent sessions lookup tables */
- clib_bihash_16_8_t out2in_ed;
- clib_bihash_16_8_t in2out_ed;
-
snat_icmp_match_function_t * icmp_match_in2out_cb;
snat_icmp_match_function_t * icmp_match_out2in_cb;
u32 num_workers;
u32 first_worker_index;
snat_icmp_match_function_t * icmp_match_in2out_cb;
snat_icmp_match_function_t * icmp_match_out2in_cb;
u32 num_workers;
u32 first_worker_index;
- u32 next_worker;
u32 * workers;
snat_get_worker_function_t * worker_in2out_cb;
snat_get_worker_function_t * worker_out2in_cb;
u32 * workers;
snat_get_worker_function_t * worker_in2out_cb;
snat_get_worker_function_t * worker_out2in_cb;
@@
-351,6
+357,9
@@
typedef struct snat_main_s {
u8 psid_length;
u16 psid;
u8 psid_length;
u16 psid;
+ /* vector of outside fibs */
+ nat_outside_fib_t * outside_fibs;
+
/* Vector of twice NAT addresses for extenal hosts */
snat_address_t * twice_nat_addresses;
/* Vector of twice NAT addresses for extenal hosts */
snat_address_t * twice_nat_addresses;
@@
-386,6
+395,7
@@
typedef struct snat_main_s {
u8 static_mapping_connection_tracking;
u8 deterministic;
u8 out2in_dpo;
u8 static_mapping_connection_tracking;
u8 deterministic;
u8 out2in_dpo;
+ u8 endpoint_dependent;
u32 translation_buckets;
u32 translation_memory_size;
u32 max_translations;
u32 translation_buckets;
u32 translation_memory_size;
u32 max_translations;
@@
-430,6
+440,14
@@
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;
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;
+extern vlib_node_registration_t nat44_ed_in2out_node;
+extern vlib_node_registration_t nat44_ed_in2out_output_node;
+extern vlib_node_registration_t nat44_ed_out2in_node;
+extern vlib_node_registration_t nat44_ed_hairpin_dst_node;
+extern vlib_node_registration_t nat44_ed_hairpin_src_node;
+extern vlib_node_registration_t nat44_ed_in2out_worker_handoff_node;
+extern vlib_node_registration_t nat44_ed_in2out_output_worker_handoff_node;
+extern vlib_node_registration_t nat44_ed_out2in_worker_handoff_node;
void snat_free_outside_address_and_port (snat_address_t * addresses,
u32 thread_index,
void snat_free_outside_address_and_port (snat_address_t * addresses,
u32 thread_index,
@@
-548,6
+566,11
@@
u32 icmp_match_in2out_det(snat_main_t *sm, vlib_node_runtime_t *node,
ip4_header_t *ip0, u8 *p_proto,
snat_session_key_t *p_value,
u8 *p_dont_translate, void *d, void *e);
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_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,
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,
@@
-563,9
+586,14
@@
u32 icmp_match_out2in_det(snat_main_t *sm, vlib_node_runtime_t *node,
ip4_header_t *ip0, u8 *p_proto,
snat_session_key_t *p_value,
u8 *p_dont_translate, void *d, void *e);
ip4_header_t *ip0, u8 *p_proto,
snat_session_key_t *p_value,
u8 *p_dont_translate, void *d, void *e);
+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);
void increment_v4_address(ip4_address_t * a);
void increment_v4_address(ip4_address_t * a);
-
void
snat_add_address(snat_main_t *sm, ip4_address_t *addr, u32 vrf_id,
-
u8 twice_nat);
+
int
snat_add_address(snat_main_t *sm, ip4_address_t *addr, u32 vrf_id,
+ u8 twice_nat);
int snat_del_address(snat_main_t *sm, ip4_address_t addr, u8 delete_sm,
u8 twice_nat);
void nat44_add_del_address_dpo (ip4_address_t addr, u8 is_add);
int snat_del_address(snat_main_t *sm, ip4_address_t addr, u8 delete_sm,
u8 twice_nat);
void nat44_add_del_address_dpo (ip4_address_t addr, u8 is_add);
@@
-584,7
+612,7
@@
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);
int nat44_add_del_lb_static_mapping (ip4_address_t e_addr, u16 e_port,
uword unformat_snat_protocol(unformat_input_t * input, va_list * args);
u8 * format_snat_protocol(u8 * s, va_list * args);
int nat44_add_del_lb_static_mapping (ip4_address_t e_addr, u16 e_port,
- snat_protocol_t proto,
u32 vrf_id,
+ snat_protocol_t proto,
nat44_lb_addr_port_t *locals, u8 is_add,
twice_nat_type_t twice_nat, u8 out2in_only,
u8 *tag);
nat44_lb_addr_port_t *locals, u8 is_add,
twice_nat_type_t twice_nat, u8 out2in_only,
u8 *tag);