22 #ifndef __included_snat_det_h__ 23 #define __included_snat_det_h__ 29 #define SNAT_DET_SES_PER_USER 1000 51 if (is_addr_in_net(user_addr, &dm->in_addr, dm->in_plen))
66 if (is_addr_in_net(out_addr, &dm->out_addr, dm->out_plen))
77 u32 in_offset, out_offset;
79 in_offset = clib_net_to_host_u32 (in_addr->
as_u32) -
92 u32 in_offset1, in_offset2, out_offset;
94 out_offset = clib_net_to_host_u32 (out_addr->
as_u32) -
99 clib_host_to_net_u32 (clib_net_to_host_u32 (dm->
in_addr.
as_u32) +
100 in_offset1 + in_offset2);
121 return &dm->
sessions[i + user_offset];
138 return &dm->
sessions[i + user_offset];
157 if (__sync_bool_compare_and_swap
163 __sync_add_and_fetch (&dm->
ses_num, 1);
164 return &dm->
sessions[i + user_offset];
175 if (__sync_bool_compare_and_swap (&ses->
in_port, ses->
in_port, 0))
178 __sync_add_and_fetch (&dm->
ses_num, -1);
sll srl srl sll sra u16x4 i
static snat_det_session_t * snat_det_find_ses_by_in(snat_det_map_t *dm, ip4_address_t *in_addr, u16 in_port)
static void snat_det_reverse(snat_det_map_t *dm, ip4_address_t *out_addr, u16 out_port, ip4_address_t *in_addr)
static snat_det_map_t * snat_det_map_by_out(snat_main_t *sm, ip4_address_t *out_addr)
static void snat_det_forward(snat_det_map_t *dm, ip4_address_t *in_addr, ip4_address_t *out_addr, u16 *lo_port)
#define pool_foreach(VAR, POOL, BODY)
Iterate through pool.
static uword pow2_mask(uword x)
int snat_det_add_map(snat_main_t *sm, ip4_address_t *in_addr, u8 in_plen, ip4_address_t *out_addr, u8 out_plen, int is_add)
Add/delete deterministic NAT mapping.
snat_det_session_t * sessions
#define SNAT_DET_SES_PER_USER
static u32 snat_det_user_ses_offset(ip4_address_t *addr, u8 plen)
static snat_det_session_t * snat_det_get_ses_by_out(snat_det_map_t *dm, ip4_address_t *in_addr, u64 out_key)
static int is_addr_in_net(ip4_address_t *addr, ip4_address_t *net, u8 plen)
static snat_det_map_t * snat_det_map_by_user(snat_main_t *sm, ip4_address_t *user_addr)
static void snat_det_ses_close(snat_det_map_t *dm, snat_det_session_t *ses)
ip4_main_t ip4_main
Global ip4 main structure.
static snat_det_session_t * snat_det_ses_create(snat_det_map_t *dm, ip4_address_t *in_addr, u16 in_port, snat_det_out_key_t *out)