20 #ifndef __included_nat_affinity_h__ 21 #define __included_nat_affinity_h__ 50 u32 per_service_index;
104 u16 service_port,
u8 * backend_index);
120 u16 service_port,
u8 backend_index,
122 u32 affinity_per_service_list_head_index);
int nat_affinity_create_and_lock(ip4_address_t client_addr, ip4_address_t service_addr, u8 proto, u16 service_port, u8 backend_index, u32 sticky_time, u32 affinity_per_service_list_head_index)
Create affinity record and take reference counting lock.
ip4_address_t client_addr
void nat_affinity_unlock(ip4_address_t client_addr, ip4_address_t service_addr, u8 proto, u16 service_port)
Release a reference counting lock for affinity.
ip4_address_t service_addr
clib_bihash_16_8_t affinity_hash
nat_affinity_main_t nat_affinity_main
clib_spinlock_t affinity_lock
void nat_affinity_flush_service(u32 affinity_per_service_list_head_index)
Flush all service affinity data.
nat_affinity_t * affinity_pool
u32 nat_affinity_get_per_service_list_head_index(void)
Get new affinity per service list head index.
clib_error_t * nat_affinity_init(vlib_main_t *vm)
Initialize NAT client-IP based affinity.
typedef CLIB_PACKED(struct{nat_affinity_key_t key;u32 sticky_time;u32 ref_cnt;u32 per_service_index;u8 backend_index;f64 expire;}) nat_affinity_t
int nat_affinity_find_and_lock(ip4_address_t client_addr, ip4_address_t service_addr, u8 proto, u16 service_port, u8 *backend_index)
Find service backend index for client-IP and take a reference counting lock.