FD.io VPP  v21.01.1
Vector Packet Processing
nat_affinity.h File Reference

NAT plugin client-IP based session affinity for load-balancing. More...

+ Include dependency graph for nat_affinity.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  nat_affinity_key_t
 
struct  nat_affinity_main_t
 

Functions

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
 
u32 nat_affinity_get_per_service_list_head_index (void)
 Get new affinity per service list head index. More...
 
void nat_affinity_flush_service (u32 affinity_per_service_list_head_index)
 Flush all service affinity data. More...
 
void nat_affinity_enable ()
 NAT affinity enable. More...
 
void nat_affinity_disable ()
 NAT affinity disable. More...
 
clib_error_tnat_affinity_init (vlib_main_t *vm)
 Initialize NAT client-IP based affinity. More...
 
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. More...
 
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. More...
 
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. More...
 

Variables

nat_affinity_main_t nat_affinity_main
 

Detailed Description

NAT plugin client-IP based session affinity for load-balancing.

Definition in file nat_affinity.h.

Function Documentation

◆ CLIB_PACKED()

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_create_and_lock()

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.

Parameters
client_addrClient IP address.
service_addrService IP address.
protoIP protocol number.
service_portService L4 port number.
backend_indexService backend index for client-IP.
sticky_timeAffinity sticky time in seconds.
affinity_per_service_list_head_indexPer sevice list head index.
Returns
0 on success, non-zero value otherwise.

Definition at line 204 of file nat_affinity.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ nat_affinity_disable()

void nat_affinity_disable ( )

NAT affinity disable.

Definition at line 61 of file nat_affinity.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ nat_affinity_enable()

void nat_affinity_enable ( )

NAT affinity enable.

Definition at line 47 of file nat_affinity.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ nat_affinity_find_and_lock()

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.

Parameters
client_addrClient IP address.
service_addrService IP address.
protoIP protocol number.
service_portService L4 port number.
backend_indexService backend index for client-IP if found.
Returns
0 on success, non-zero value otherwise.

Definition at line 140 of file nat_affinity.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ nat_affinity_flush_service()

void nat_affinity_flush_service ( u32  affinity_per_service_list_head_index)

Flush all service affinity data.

Parameters
affinity_per_service_list_head_indexPer sevice list head index.

Definition at line 110 of file nat_affinity.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ nat_affinity_get_per_service_list_head_index()

u32 nat_affinity_get_per_service_list_head_index ( void  )

Get new affinity per service list head index.

Returns
new affinity per service list head index.

Definition at line 94 of file nat_affinity.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ nat_affinity_init()

clib_error_t* nat_affinity_init ( vlib_main_t vm)

Initialize NAT client-IP based affinity.

Parameters
vmvlib main.
Returns
error code.

Definition at line 72 of file nat_affinity.c.

+ Here is the caller graph for this function:

◆ nat_affinity_unlock()

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.

Parameters
client_addrClient IP address.
service_addrService IP address.
protoIP protocol number.

Definition at line 255 of file nat_affinity.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Variable Documentation

◆ nat_affinity_main

nat_affinity_main_t nat_affinity_main

Definition at line 23 of file nat_affinity.c.