NVIDIA DOCA SDK Data Center on a Chip Framework Documentation
Doca Flow CT
Collaboration diagram for Doca Flow CT:

Data Structures

struct  doca_flow_ct_aging_ctx
 CT aging user plugin context. More...
 
union  doca_flow_ct_aging_conn
 CT aging connection info. More...
 
struct  doca_flow_ct_aging_conn_event
 CT aging user plugin connection event. More...
 
struct  doca_flow_ct_aging_ops
 CT aging user plugin callbacks. More...
 
struct  doca_flow_ct_aging_counter_state
 CT aging counter state. More...
 
struct  doca_flow_ct_aging_counter
 Counter statistics. More...
 
struct  doca_flow_ct_aging_conn_update_info
 Connection update information. More...
 
struct  doca_flow_ct_actions
 
struct  doca_flow_ct_match4
 doca flow CT IPv4 match pattern More...
 
struct  doca_flow_ct_match6
 doca flow CT IPv6 match pattern More...
 
struct  doca_flow_ct_match
 doca flow CT match pattern More...
 

Macros

#define DOCA_FLOW_CT_ACTION_HANDLE_INVALID   (UINT32_MAX)
 
#define DOCA_FLOW_CT_MARK_FROM_DPDK(_mark)   (DOCA_BETOH32((_mark) + 1) >> 8)
 

Typedefs

typedef void(* doca_flow_ct_entry_finalize_cb) (struct doca_flow_pipe *pipe, void *entry, uint16_t queue, void *usr_ctx)
 
typedef void(* doca_flow_ct_stats_update_cb) (struct doca_flow_pipe *pipe, void *priv_data, struct doca_flow_resource_query *stats_origin, struct doca_flow_resource_query *stats_reply)
 

Enumerations

enum  doca_flow_ct_flags {
  DOCA_FLOW_CT_FLAG_STATS = 1u << 0 , DOCA_FLOW_CT_FLAG_WORKER_STATS = 1u << 1 , DOCA_FLOW_CT_FLAG_NO_AGING = 1u << 2 , DOCA_FLOW_CT_FLAG_ASYMMETRIC_TUNNEL = 1u << 3 ,
  DOCA_FLOW_CT_FLAG_NO_COUNTER = 1u << 4 , DOCA_FLOW_CT_FLAG_WIRE_TO_WIRE = 1u << 5 , DOCA_FLOW_CT_FLAG_DUP_FILTER_UDP_ONLY = 1u << 6
}
 CT flags. More...
 
enum  doca_flow_ct_entry_flags {
  DOCA_FLOW_CT_ENTRY_FLAGS_NO_WAIT = (1 << 0) , DOCA_FLOW_CT_ENTRY_FLAGS_DIR_ORIGIN = (1 << 1) , DOCA_FLOW_CT_ENTRY_FLAGS_DIR_REPLY = (1 << 2) , DOCA_FLOW_CT_ENTRY_FLAGS_IPV6_ORIGIN = (1 << 3) ,
  DOCA_FLOW_CT_ENTRY_FLAGS_IPV6_REPLY = (1 << 4) , DOCA_FLOW_CT_ENTRY_FLAGS_COUNTER_ORIGIN = (1 << 5) , DOCA_FLOW_CT_ENTRY_FLAGS_COUNTER_REPLY = (1 << 6) , DOCA_FLOW_CT_ENTRY_FLAGS_COUNTER_SHARED = (1 << 7) ,
  DOCA_FLOW_CT_ENTRY_FLAGS_ENTRY_FINALIZE = (1 << 8) , DOCA_FLOW_CT_ENTRY_FLAGS_ALLOC_ON_MISS = (1 << 9) , DOCA_FLOW_CT_ENTRY_FLAGS_DUP_FILTER_ORIGIN = 1u << 10 , DOCA_FLOW_CT_ENTRY_FLAGS_DUP_FILTER_REPLY = 1u << 11 ,
  DOCA_FLOW_CT_ENTRY_FLAGS_STATS_UPDATES = 1u << 12
}
 doca flow CT entry operation flags More...
 

Functions

DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_cfg_create (struct doca_flow_ct_cfg **cfg)
 Create CT configuration. More...
 
DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_cfg_destroy (struct doca_flow_ct_cfg *cfg)
 Destroy CT configuration. More...
 
DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_cfg_set_flags (struct doca_flow_ct_cfg *cfg, uint32_t flags)
 Set CT flags. More...
 
DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_cfg_set_queues (struct doca_flow_ct_cfg *cfg, uint32_t n_queues)
 Set number of hardware queues. More...
 
DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_cfg_set_queue_depth (struct doca_flow_ct_cfg *cfg, uint32_t queue_depth)
 Set queue depth. More...
 
DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_cfg_set_ctrl_queues (struct doca_flow_ct_cfg *cfg, uint32_t n_ctrl_queues)
 Set number of control queues. More...
 
DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_cfg_set_user_actions (struct doca_flow_ct_cfg *cfg, uint32_t n_user_actions)
 Set number of user actions. More...
 
DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_cfg_set_connections (struct doca_flow_ct_cfg *cfg, uint32_t n_ipv4, uint32_t n_ipv6, uint32_t n_total)
 Set number of ARM sessions. More...
 
DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_cfg_set_max_connections_per_zone (struct doca_flow_ct_cfg *cfg, uint32_t max_connections_per_zone)
 Set maximum number of connections per zone. More...
 
DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_cfg_set_counter_asymmetric (struct doca_flow_ct_cfg *cfg, uint32_t n_counter_asymmetric)
 Set number of asymmetric counter connections. More...
 
DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_cfg_set_entry_private_data_size (struct doca_flow_ct_cfg *cfg, uint32_t entry_priv_data_size)
 Set entry private data size. More...
 
DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_cfg_set_entry_finalize_cb (struct doca_flow_ct_cfg *cfg, doca_flow_ct_entry_finalize_cb entry_finalize_cb)
 Set entry finalize callback to query connection final stats. More...
 
DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_cfg_set_status_update_cb (struct doca_flow_ct_cfg *cfg, doca_flow_ct_stats_update_cb stats_update_cb)
 Set status update callback to notify on counter changes. More...
 
DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_cfg_set_aging_core (struct doca_flow_ct_cfg *cfg, uint32_t aging_core)
 Set core ID to run aging thread on. More...
 
DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_cfg_set_aging_query_delay (struct doca_flow_ct_cfg *cfg, uint32_t aging_query_delay_s)
 Set aging query delay in seconds. More...
 
DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_cfg_set_aging_plugin_ops (struct doca_flow_ct_cfg *cfg, struct doca_flow_ct_aging_ops *aging_ops)
 Set aging plugin callbacks. More...
 
DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_cfg_set_dup_filter_size (struct doca_flow_ct_cfg *cfg, uint32_t dup_filter_sz)
 Set Number of connections to cache in duplication filter. More...
 
DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_cfg_set_direction (struct doca_flow_ct_cfg *cfg, bool direction, bool match_inner, struct doca_flow_meta *zone_match_mask, struct doca_flow_meta *meta_modify_mask)
 Set CT configuration origin and reply direction. More...
 
DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_init (const struct doca_flow_ct_cfg *cfg)
 Initialize the doca flow ct. More...
 
DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_cap_is_dev_supported (const struct doca_devinfo *devinfo)
 Check if doca device supported by CT. More...
 
DOCA_EXPERIMENTAL void doca_flow_ct_destroy (void)
 Destroy the doca flow ct. More...
 
DOCA_EXPERIMENTAL void doca_flow_ct_meta_prepare (struct doca_flow_meta *meta, uint32_t zone, bool is_reply)
 Prepare meta with zone and default CT type. More...
 
DOCA_EXPERIMENTAL void doca_flow_ct_meta_mask_prepare (struct doca_flow_meta *meta, bool is_reply)
 Prepare meta as mask with zone and CT type. More...
 
DOCA_EXPERIMENTAL void doca_flow_ct_meta_set_match_zone (struct doca_flow_meta *meta, uint32_t zone, bool is_reply)
 Set meta match zone data to doca_flow meta. More...
 
DOCA_EXPERIMENTAL uint32_t doca_flow_ct_meta_get_zone_offset (bool is_reply)
 Get zone data bit offset in meta data field. More...
 
DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_aging_counter_state_get (struct doca_flow_ct_aging_ctx *ctx, struct doca_flow_ct_aging_counter_state *ctrs, uint32_t n)
 Get counter state inside aging plugin timer callback. More...
 
DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_aging_counter_state_set (struct doca_flow_ct_aging_ctx *ctx, struct doca_flow_ct_aging_counter_state *ctrs, uint32_t n)
 Set counter state inside aging plugin timer callback. More...
 
DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_aging_counter_query (struct doca_flow_ct_aging_ctx *ctx, struct doca_flow_ct_aging_counter *ctrs, uint32_t n)
 Get counter statistics inside aging plugin timer callback. More...
 
DOCA_EXPERIMENTAL void doca_flow_ct_aging_conn_update (struct doca_flow_ct_aging_ctx *ctx, struct doca_flow_ct_aging_conn_update_info *info, uint32_t n)
 Update connection counter inside aging plugin timer callback. More...
 
DOCA_EXPERIMENTAL void doca_flow_ct_aging_conn_timeout (struct doca_flow_ct_aging_ctx *ctx, uint32_t *aging_conn_ids, uint32_t n)
 Remove timeout connections inside aging plugin timer callback. More...
 
DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_entries_process (struct doca_flow_port *port, uint16_t pipe_queue, uint32_t min_room, uint32_t max_processed_entries, uint32_t *queue_room)
 Process CT entries in queue. More...
 
DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_entry_prepare (uint16_t queue, struct doca_flow_pipe *pipe, uint32_t flags, struct doca_flow_ct_match *match_origin, uint32_t hash_origin, struct doca_flow_ct_match *match_reply, uint32_t hash_reply, struct doca_flow_pipe_entry **entry, bool *conn_found)
 Lookup recent CT entry and create on miss. More...
 
DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_entry_prepare_rollback (uint16_t queue, struct doca_flow_pipe *pipe, struct doca_flow_pipe_entry *entry)
 Free the CT entry that hasn't been added to CT pipe. More...
 
DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_add_entry (uint16_t queue, struct doca_flow_pipe *pipe, uint32_t flags, struct doca_flow_ct_match *match_origin, struct doca_flow_ct_match *match_reply, const struct doca_flow_ct_actions *actions_origin, const struct doca_flow_ct_actions *actions_reply, uint32_t fwd_handle_origin, uint32_t fwd_handle_reply, uint32_t timeout_s, void *usr_ctx, struct doca_flow_pipe_entry *entry)
 Add new entry to doca flow CT pipe. More...
 
DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_entry_add_dir (uint16_t queue, struct doca_flow_pipe *pipe, uint32_t flags, struct doca_flow_ct_match *match, const struct doca_flow_ct_actions *actions, uint32_t fwd_handle, struct doca_flow_pipe_entry *entry)
 Add missing direction rule to CT connection. More...
 
DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_update_entry (uint16_t queue, struct doca_flow_pipe *pipe, uint32_t flags, struct doca_flow_pipe_entry *entry, const struct doca_flow_ct_actions *actions_origin, const struct doca_flow_ct_actions *actions_reply, uint32_t fwd_handle_origin, uint32_t fwd_handle_reply, uint32_t timeout_s)
 Update CT entry meta or counter. More...
 
DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_rm_entry (uint16_t queue, struct doca_flow_pipe *pipe, uint32_t flags, struct doca_flow_pipe_entry *entry)
 remove CT entry. More...
 
DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_get_entry (uint16_t queue, struct doca_flow_pipe *pipe, uint32_t flags, struct doca_flow_pipe_entry *entry, struct doca_flow_ct_match *match_origin, struct doca_flow_ct_match *match_reply, uint64_t *entry_flags)
 Get CT entry match pattern. More...
 
DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_query_entry (uint16_t queue, struct doca_flow_pipe *pipe, uint32_t flags, struct doca_flow_pipe_entry *entry, struct doca_flow_resource_query *stats_origin, struct doca_flow_resource_query *stats_reply, uint64_t *last_hit_s)
 Extract information about specific entry. More...
 
DOCA_EXPERIMENTAL void * doca_flow_ct_entry_get_priv_data (uint16_t queue, struct doca_flow_pipe *pipe, struct doca_flow_pipe_entry *entry)
 
DOCA_EXPERIMENTAL uint32_t doca_flow_ct_entry_get_conn_id (uint16_t queue, struct doca_flow_pipe *pipe, struct doca_flow_pipe_entry *entry)
 
DOCA_EXPERIMENTAL uint32_t doca_flow_ct_entry_get_aging_conn_id (uint16_t queue, struct doca_flow_pipe *pipe, struct doca_flow_pipe_entry *entry)
 
DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_entry_get_by_id (uint16_t queue, struct doca_flow_pipe *pipe, uint32_t conn_id, struct doca_flow_pipe_entry **entry, void **priv_data)
 Retrieves the entry from CT pipe based on the given connection ID. More...
 
DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_actions_add_shared (uint16_t ctrl_queue, struct doca_flow_pipe *pipe, const struct doca_flow_ct_actions actions[], uint32_t nb_actions, uint32_t actions_handles[])
 Add shared modify-action. More...
 
DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_actions_update_shared (uint16_t ctrl_queue, struct doca_flow_pipe *pipe, const struct doca_flow_ct_actions actions[], uint32_t nb_actions, uint32_t actions_handles[])
 Update shared modify-action. More...
 
DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_actions_rm_shared (uint16_t ctrl_queue, struct doca_flow_pipe *pipe, uint32_t actions_handles[], uint32_t nb_actions)
 Remove shared modify-action. More...
 
DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_fwd_register (struct doca_flow_port *port, uint32_t fwd_count, struct doca_flow_fwd fwd[], uint32_t fwd_handle[])
 CT register multiple forwards pipes. More...
 

Detailed Description

DOCA HW connection tracking library.

Macro Definition Documentation

◆ DOCA_FLOW_CT_ACTION_HANDLE_INVALID

#define DOCA_FLOW_CT_ACTION_HANDLE_INVALID   (UINT32_MAX)

invalid CT action handle

Definition at line 45 of file doca_flow_ct.h.

◆ DOCA_FLOW_CT_MARK_FROM_DPDK

#define DOCA_FLOW_CT_MARK_FROM_DPDK (   _mark)    (DOCA_BETOH32((_mark) + 1) >> 8)

Translate DPDK's MARK value to CT mark value

Definition at line 50 of file doca_flow_ct.h.

Typedef Documentation

◆ doca_flow_ct_entry_finalize_cb

typedef void(* doca_flow_ct_entry_finalize_cb) (struct doca_flow_pipe *pipe, void *entry, uint16_t queue, void *usr_ctx)

This callback is invoked as the final step in the lifecycle of a flow entry if the DOCA_FLOW_CT_ENTRY_FLAGS_ENTRY_FINALIZE was configured. It occurs after the destroy callback and provides a last opportunity to query the flow's final state before the SW context associated with the flow entry is completely invalidated.

Definition at line 72 of file doca_flow_ct.h.

◆ doca_flow_ct_stats_update_cb

typedef void(* doca_flow_ct_stats_update_cb) (struct doca_flow_pipe *pipe, void *priv_data, struct doca_flow_resource_query *stats_origin, struct doca_flow_resource_query *stats_reply)

Stats updates callback function to notify on counter changes

Definition at line 77 of file doca_flow_ct.h.

Enumeration Type Documentation

◆ doca_flow_ct_entry_flags

doca flow CT entry operation flags

Enumerator
DOCA_FLOW_CT_ENTRY_FLAGS_NO_WAIT 

entry will not be buffered, send to hardware immediately

DOCA_FLOW_CT_ENTRY_FLAGS_DIR_ORIGIN 

apply to origin direction

DOCA_FLOW_CT_ENTRY_FLAGS_DIR_REPLY 

apply to reply direction

DOCA_FLOW_CT_ENTRY_FLAGS_IPV6_ORIGIN 

origin direction is IPv6, union in struct doca_flow_ct_match is ipv6

DOCA_FLOW_CT_ENTRY_FLAGS_IPV6_REPLY 

reply direction is IPv6, union in struct doca_flow_ct_match is ipv6

DOCA_FLOW_CT_ENTRY_FLAGS_COUNTER_ORIGIN 

Apply counter to origin direction

DOCA_FLOW_CT_ENTRY_FLAGS_COUNTER_REPLY 

Apply counter to reply direction

DOCA_FLOW_CT_ENTRY_FLAGS_COUNTER_SHARED 

Counter is shared for both direction

DOCA_FLOW_CT_ENTRY_FLAGS_ENTRY_FINALIZE 

Enable finalize callback on entry removed

DOCA_FLOW_CT_ENTRY_FLAGS_ALLOC_ON_MISS 

Allocate on entry not found

DOCA_FLOW_CT_ENTRY_FLAGS_DUP_FILTER_ORIGIN 

Enable duplication filter on origin

DOCA_FLOW_CT_ENTRY_FLAGS_DUP_FILTER_REPLY 

Enable duplication filter on reply

DOCA_FLOW_CT_ENTRY_FLAGS_STATS_UPDATES 

Enable calls to stats_update_cb on counter changes

Definition at line 664 of file doca_flow_ct.h.

◆ doca_flow_ct_flags

CT flags.

Enumerator
DOCA_FLOW_CT_FLAG_STATS 

Enable counter for internal pipes

DOCA_FLOW_CT_FLAG_WORKER_STATS 

Enable worker counter dump

DOCA_FLOW_CT_FLAG_NO_AGING 

Bypass aging scan

DOCA_FLOW_CT_FLAG_ASYMMETRIC_TUNNEL 

Tunnel or non-tunnel in different direction

DOCA_FLOW_CT_FLAG_NO_COUNTER 

Disable counter support

DOCA_FLOW_CT_FLAG_WIRE_TO_WIRE 

Traffic will be from wire to wire

DOCA_FLOW_CT_FLAG_DUP_FILTER_UDP_ONLY 

Apply connection duplication filter for UDP connections only

Definition at line 55 of file doca_flow_ct.h.

Function Documentation

◆ doca_flow_ct_actions_add_shared()

DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_actions_add_shared ( uint16_t  ctrl_queue,
struct doca_flow_pipe *  pipe,
const struct doca_flow_ct_actions  actions[],
uint32_t  nb_actions,
uint32_t  actions_handles[] 
)

Add shared modify-action.

Parameters
[in]ctrl_queuecontrol queue id.
[in]pipePointer to pipe.
[in]actionslist of actions data, each updated with action id
[in]nb_actionsnumber of actions to create
[out]actions_handleslist of handles allocated for the input actions
Returns
DOCA_SUCCESS - in case of success Error code - in case of failure:
  • DOCA_ERROR_INVALID_VALUE - received invalid input
  • DOCA_ERROR_EMPTY - user actions pool is empty
  • DOCA_ERROR_BAD_STATE - wrong number of HW responses

◆ doca_flow_ct_actions_rm_shared()

DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_actions_rm_shared ( uint16_t  ctrl_queue,
struct doca_flow_pipe *  pipe,
uint32_t  actions_handles[],
uint32_t  nb_actions 
)

Remove shared modify-action.

Parameters
[in]ctrl_queuecontrol ctrl queue id.
[in]pipePointer to pipe.
[in]actions_handleslist of action ids
[in]nb_actionsnumber of actions to create
Returns
DOCA_SUCCESS - always success

◆ doca_flow_ct_actions_update_shared()

DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_actions_update_shared ( uint16_t  ctrl_queue,
struct doca_flow_pipe *  pipe,
const struct doca_flow_ct_actions  actions[],
uint32_t  nb_actions,
uint32_t  actions_handles[] 
)

Update shared modify-action.

Parameters
[in]ctrl_queuecontrol queue id.
[in]pipePointer to pipe.
[in]actionslist of actions data, each updated with action id
[in]nb_actionsnumber of actions to update
[in]actions_handleslist of handles used for the update actions
Returns
DOCA_SUCCESS - in case of success Error code - in case of failure:
  • DOCA_ERROR_NOT_SUPPORTED - number of update action is not supported
  • DOCA_ERROR_BAD_STATE - wrong number of HW responses

◆ doca_flow_ct_add_entry()

DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_add_entry ( uint16_t  queue,
struct doca_flow_pipe *  pipe,
uint32_t  flags,
struct doca_flow_ct_match match_origin,
struct doca_flow_ct_match match_reply,
const struct doca_flow_ct_actions actions_origin,
const struct doca_flow_ct_actions actions_reply,
uint32_t  fwd_handle_origin,
uint32_t  fwd_handle_reply,
uint32_t  timeout_s,
void *  usr_ctx,
struct doca_flow_pipe_entry *  entry 
)

Add new entry to doca flow CT pipe.

Parameters
[in]queuequeue ID, offset from doca_flow.nb_queues.
[in]pipePointer to pipe.
[in]flagsoperation flags, see doca_flow_ct_entry_flags.
[in]match_originmatch pattern in origin direction.
[in]match_replymatch pattern in reply direction, default to reverse of origin pattern.
[in]actions_originactions to set on origin direction
[in]actions_replyactions to set on reply direction
[in]fwd_handle_originfwd handle for origin direction
[in]fwd_handle_replyfwd handle for reply direction
[in]timeout_saging timeout in second, 0 to disable aging
[in]usr_ctxuser context data to associate to entry
[out]entrypointer of the CT entry
Returns
DOCA_SUCCESS - in case of success.

◆ doca_flow_ct_aging_conn_timeout()

DOCA_EXPERIMENTAL void doca_flow_ct_aging_conn_timeout ( struct doca_flow_ct_aging_ctx ctx,
uint32_t *  aging_conn_ids,
uint32_t  n 
)

Remove timeout connections inside aging plugin timer callback.

Parameters
ctxCT Aging callback context
aging_conn_idsList of aging global connection IDs
nNumber of connections to remove

◆ doca_flow_ct_aging_conn_update()

DOCA_EXPERIMENTAL void doca_flow_ct_aging_conn_update ( struct doca_flow_ct_aging_ctx ctx,
struct doca_flow_ct_aging_conn_update_info info,
uint32_t  n 
)

Update connection counter inside aging plugin timer callback.

Parameters
ctxCT Aging callback context
infoList of connection info
nNumber of connections to update

◆ doca_flow_ct_aging_counter_query()

DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_aging_counter_query ( struct doca_flow_ct_aging_ctx ctx,
struct doca_flow_ct_aging_counter ctrs,
uint32_t  n 
)

Get counter statistics inside aging plugin timer callback.

Parameters
ctxCT Aging callback context
[out]ctrsList of counter states with counter ID set
nNumber of counter statistics to get
Returns
DOCA_SUCCESS in case of success, others on error.

◆ doca_flow_ct_aging_counter_state_get()

DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_aging_counter_state_get ( struct doca_flow_ct_aging_ctx ctx,
struct doca_flow_ct_aging_counter_state ctrs,
uint32_t  n 
)

Get counter state inside aging plugin timer callback.

Parameters
ctxCT Aging callback context
[out]ctrsList of counter states with counter ID set
nNumber of counter states to get
Returns
DOCA_SUCCESS in case of success, others on error.

◆ doca_flow_ct_aging_counter_state_set()

DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_aging_counter_state_set ( struct doca_flow_ct_aging_ctx ctx,
struct doca_flow_ct_aging_counter_state ctrs,
uint32_t  n 
)

Set counter state inside aging plugin timer callback.

Parameters
ctxCT Aging callback context
ctrsList of counter states
nNumber of counter states to set
Returns
DOCA_SUCCESS in case of success, others on error.

◆ doca_flow_ct_cap_is_dev_supported()

DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_cap_is_dev_supported ( const struct doca_devinfo *  devinfo)

Check if doca device supported by CT.

Parameters
devinfoDoca device info.
Returns
DOCA_SUCCESS - device supported by CT. Error code - in case of failure:
  • DOCA_ERROR_NOT_SUPPORTED - provided devinfo does not support CT.
  • DOCA_ERROR_INVALID_VALUE - received invalid input.
  • DOCA_ERROR_DRIVER - failed to query capability support.

◆ doca_flow_ct_cfg_create()

DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_cfg_create ( struct doca_flow_ct_cfg **  cfg)

Create CT configuration.

Parameters
[out]cfgCT configuration.
Returns
DOCA_SUCCESS in case of success, error number otherwise.

◆ doca_flow_ct_cfg_destroy()

DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_cfg_destroy ( struct doca_flow_ct_cfg *  cfg)

Destroy CT configuration.

Parameters
[in]cfgCT configuration.
Returns
DOCA_SUCCESS in case of success, error number otherwise.

◆ doca_flow_ct_cfg_set_aging_core()

DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_cfg_set_aging_core ( struct doca_flow_ct_cfg *  cfg,
uint32_t  aging_core 
)

Set core ID to run aging thread on.

Parameters
[in]cfgCT configuration.
[in]aging_coreCore to run aging thread on.
Returns
DOCA_SUCCESS in case of success, error number otherwise.

◆ doca_flow_ct_cfg_set_aging_plugin_ops()

DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_cfg_set_aging_plugin_ops ( struct doca_flow_ct_cfg *  cfg,
struct doca_flow_ct_aging_ops aging_ops 
)

Set aging plugin callbacks.

Parameters
[in]cfgCT configuration.
[in]aging_opsAging plugin callbacks.
Returns
DOCA_SUCCESS in case of success, error number otherwise.

◆ doca_flow_ct_cfg_set_aging_query_delay()

DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_cfg_set_aging_query_delay ( struct doca_flow_ct_cfg *  cfg,
uint32_t  aging_query_delay_s 
)

Set aging query delay in seconds.

Parameters
[in]cfgCT configuration.
[in]aging_query_delay_sAging query delay in seconds.
Returns
DOCA_SUCCESS in case of success, error number otherwise.

◆ doca_flow_ct_cfg_set_connections()

DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_cfg_set_connections ( struct doca_flow_ct_cfg *  cfg,
uint32_t  n_ipv4,
uint32_t  n_ipv6,
uint32_t  n_total 
)

Set number of ARM sessions.

Parameters
[in]cfgCT configuration.
[in]n_ipv4Number of IPv4 sessions.
[in]n_ipv6Number of IPv6 sessions.
[in]n_totalTotal number of sessions.
Returns
DOCA_SUCCESS in case of success, error number otherwise.

◆ doca_flow_ct_cfg_set_counter_asymmetric()

DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_cfg_set_counter_asymmetric ( struct doca_flow_ct_cfg *  cfg,
uint32_t  n_counter_asymmetric 
)

Set number of asymmetric counter connections.

Parameters
[in]cfgCT configuration.
[in]n_counter_asymmetricMax number of connections with asymmetric counter.
Returns
DOCA_SUCCESS in case of success, error number otherwise.

◆ doca_flow_ct_cfg_set_ctrl_queues()

DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_cfg_set_ctrl_queues ( struct doca_flow_ct_cfg *  cfg,
uint32_t  n_ctrl_queues 
)

Set number of control queues.

Parameters
[in]cfgCT configuration.
[in]n_ctrl_queuesNumber of control queues.
Returns
DOCA_SUCCESS in case of success, error number otherwise.

◆ doca_flow_ct_cfg_set_direction()

DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_cfg_set_direction ( struct doca_flow_ct_cfg *  cfg,
bool  direction,
bool  match_inner,
struct doca_flow_meta zone_match_mask,
struct doca_flow_meta meta_modify_mask 
)

Set CT configuration origin and reply direction.

Parameters
[in]cfgCT configuration.
[in]directionDirection of the CT configuration.
[in]match_innerMatch inner 5-tuples.
[in]zone_match_maskZone match mask.
[in]meta_modify_maskMeta modify mask.
Returns
DOCA_SUCCESS in case of success, error number otherwise.

◆ doca_flow_ct_cfg_set_dup_filter_size()

DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_cfg_set_dup_filter_size ( struct doca_flow_ct_cfg *  cfg,
uint32_t  dup_filter_sz 
)

Set Number of connections to cache in duplication filter.

Parameters
[in]cfgCT configuration.
[in]dup_filter_szConnection duplication filter cache size.
Returns
DOCA_SUCCESS in case of success, error number otherwise.

◆ doca_flow_ct_cfg_set_entry_finalize_cb()

DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_cfg_set_entry_finalize_cb ( struct doca_flow_ct_cfg *  cfg,
doca_flow_ct_entry_finalize_cb  entry_finalize_cb 
)

Set entry finalize callback to query connection final stats.

Parameters
[in]cfgCT configuration.
[in]entry_finalize_cbEntry finalize callback.
Returns
DOCA_SUCCESS in case of success, error number otherwise.

◆ doca_flow_ct_cfg_set_entry_private_data_size()

DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_cfg_set_entry_private_data_size ( struct doca_flow_ct_cfg *  cfg,
uint32_t  entry_priv_data_size 
)

Set entry private data size.

Parameters
[in]cfgCT configuration.
[in]entry_priv_data_sizeEntry private data size.
Returns
DOCA_SUCCESS in case of success, error number otherwise.

◆ doca_flow_ct_cfg_set_flags()

DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_cfg_set_flags ( struct doca_flow_ct_cfg *  cfg,
uint32_t  flags 
)

Set CT flags.

Parameters
[in]cfgCT configuration.
[in]flagsCT flags. see enum doca_flow_ct_flags.
Returns
DOCA_SUCCESS in case of success, error number otherwise.

◆ doca_flow_ct_cfg_set_max_connections_per_zone()

DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_cfg_set_max_connections_per_zone ( struct doca_flow_ct_cfg *  cfg,
uint32_t  max_connections_per_zone 
)

Set maximum number of connections per zone.

Parameters
[in]cfgCT configuration.
[in]max_connections_per_zoneMax number of CT connections per zone, default 0x200000.
Returns
DOCA_SUCCESS in case of success, error number otherwise.

◆ doca_flow_ct_cfg_set_queue_depth()

DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_cfg_set_queue_depth ( struct doca_flow_ct_cfg *  cfg,
uint32_t  queue_depth 
)

Set queue depth.

Parameters
[in]cfgCT configuration.
[in]queue_depthQueue depth. Default to 512
Returns
DOCA_SUCCESS in case of success, error number otherwise.

◆ doca_flow_ct_cfg_set_queues()

DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_cfg_set_queues ( struct doca_flow_ct_cfg *  cfg,
uint32_t  n_queues 
)

Set number of hardware queues.

Parameters
[in]cfgCT configuration.
[in]n_queuesNumber of hardware queues.
Returns
DOCA_SUCCESS in case of success, error number otherwise.

◆ doca_flow_ct_cfg_set_status_update_cb()

DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_cfg_set_status_update_cb ( struct doca_flow_ct_cfg *  cfg,
doca_flow_ct_stats_update_cb  stats_update_cb 
)

Set status update callback to notify on counter changes.

Parameters
[in]cfgCT configuration.
[in]stats_update_cbStatus update callback.
Returns
DOCA_SUCCESS in case of success, error number otherwise.

◆ doca_flow_ct_cfg_set_user_actions()

DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_cfg_set_user_actions ( struct doca_flow_ct_cfg *  cfg,
uint32_t  n_user_actions 
)

Set number of user actions.

Parameters
[in]cfgCT configuration.
[in]n_user_actionsNumber of shared and non-shared user actions.
Returns
DOCA_SUCCESS in case of success, error number otherwise.

◆ doca_flow_ct_destroy()

DOCA_EXPERIMENTAL void doca_flow_ct_destroy ( void  )

Destroy the doca flow ct.

Release all the resources used by doca flow ct.

Must be invoked before doca flow destroy.

◆ doca_flow_ct_entries_process()

DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_entries_process ( struct doca_flow_port *  port,
uint16_t  pipe_queue,
uint32_t  min_room,
uint32_t  max_processed_entries,
uint32_t *  queue_room 
)

Process CT entries in queue.

The application may invoke this function in order to complete the flow rule offloading and to receive the flow rule operation status via callbacks.

This function allows the application to ensure minimal room in the steering queue for pushing entries operations in bulks.

This function also processes entries counter reset and counter update if enabled.

Parameters
[in]portPort
[in]pipe_queueQueue identifier.
[in]min_roomNon-zero value: minimal room to ensure in queue. max_processed_entries must be set to same value or greater. 0 to poll queue once, process any entries operation completion available.
[in]max_processed_entriesFlow CT entries number to process from hardware steering queue. If it is 0, no limitation, process all entries available, max is queue depth.
[out]queue_roomIf set, return queue room available after processing entries.
Returns
DOCA_SUCCESS - in case of success. Error code - in case of failure:
  • DOCA_ERROR_BAD_STATE - invalid pipe state.
  • DOCA_ERROR_DRIVER - error happened in driver.
  • DOCA_ERROR_INVALID_VALUE - received invalid input.
  • DOCA_ERROR_NOT_SUPPORTED - unsupported operation.

◆ doca_flow_ct_entry_add_dir()

DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_entry_add_dir ( uint16_t  queue,
struct doca_flow_pipe *  pipe,
uint32_t  flags,
struct doca_flow_ct_match match,
const struct doca_flow_ct_actions actions,
uint32_t  fwd_handle,
struct doca_flow_pipe_entry *  entry 
)

Add missing direction rule to CT connection.

The direction must be specified via flags, must be empty when the connection created. Must call doca_flow_entries_process to polling adding result.

Parameters
[in]queuequeue ID, offset from doca_flow.nb_queues.
[in]pipePointer to pipe.
[in]flagsoperation flags, see doca_flow_ct_entry_flags.
[in]matchmatch pattern of the direction.
[in]actionsactions to set of the direction
[in]fwd_handlefwd handle for the input direction created
[in]entrypointer of the entry
Returns
DOCA_SUCCESS - in case of success.

◆ doca_flow_ct_entry_get_aging_conn_id()

DOCA_EXPERIMENTAL uint32_t doca_flow_ct_entry_get_aging_conn_id ( uint16_t  queue,
struct doca_flow_pipe *  pipe,
struct doca_flow_pipe_entry *  entry 
)

Retrieves the aging connection ID associated with a given CT entry.

Parameters
[in]queuequeue ID, offset from doca_flow.nb_queues.
[in]pipePointer to pipe.
[in]entryCT entry.
Returns
The aging connection ID associated with the CT entry. UINT32_MAX - in case of failure.

◆ doca_flow_ct_entry_get_by_id()

DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_entry_get_by_id ( uint16_t  queue,
struct doca_flow_pipe *  pipe,
uint32_t  conn_id,
struct doca_flow_pipe_entry **  entry,
void **  priv_data 
)

Retrieves the entry from CT pipe based on the given connection ID.

Parameters
[in]queuequeue ID, offset from doca_flow.nb_queues.
[in]pipePointer to pipe.
[in]conn_idCT connection ID inside queue.
[out]entryCT entry retrieved by the query.
[out]priv_dataPrivate data associated with the CT entry.
Returns
DOCA_SUCCESS - in case of success. Error code - in case of failure:
  • DOCA_ERROR_BAD_STATE - wrong pipe state.
  • DOCA_ERROR_INVALID_VALUE - received invalid input.

◆ doca_flow_ct_entry_get_conn_id()

DOCA_EXPERIMENTAL uint32_t doca_flow_ct_entry_get_conn_id ( uint16_t  queue,
struct doca_flow_pipe *  pipe,
struct doca_flow_pipe_entry *  entry 
)

Retrieves the connection ID associated with a given CT entry.

Parameters
[in]queuequeue ID, offset from doca_flow.nb_queues.
[in]pipePointer to pipe.
[in]entryCT entry.
Returns
The connection ID associated with the CT entry. UINT32_MAX - in case of failure.

◆ doca_flow_ct_entry_get_priv_data()

DOCA_EXPERIMENTAL void* doca_flow_ct_entry_get_priv_data ( uint16_t  queue,
struct doca_flow_pipe *  pipe,
struct doca_flow_pipe_entry *  entry 
)

Retrieves the user private data associated with a specific CT entry.

Parameters
[in]queuequeue ID, offset from doca_flow.nb_queues.
[in]pipePointer to pipe.
[in]entryThe CT pipe entry to query.
Returns
A pointer to the private data associated with the CT entry. NULL - in case of failure.

◆ doca_flow_ct_entry_prepare()

DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_entry_prepare ( uint16_t  queue,
struct doca_flow_pipe *  pipe,
uint32_t  flags,
struct doca_flow_ct_match match_origin,
uint32_t  hash_origin,
struct doca_flow_ct_match match_reply,
uint32_t  hash_reply,
struct doca_flow_pipe_entry **  entry,
bool conn_found 
)

Lookup recent CT entry and create on miss.

Parameters
[in]queuequeue ID, offset from doca_flow.nb_queues.
[in]pipePointer to pipe.
[in]flagsoperation flags, see doca_flow_ct_entry_flags.
[in]match_originmatch pattern in origin direction.
[in]hash_origin5 tuple hash of origin direction.
[in]match_replymatch pattern in reply direction, default to reverse of origin pattern.
[in]hash_reply5 tuple hash of reply direction.
[out]entrypointer to save the new entry
[out]conn_foundwhether the entry is found in recent list.
Returns
DOCA_SUCCESS - in case of success. Error code - in case of failure:
  • DOCA_ERROR_INVALID_VALUE - received invalid input.
  • DOCA_ERROR_BAD_STATE - invalid pipe state.
  • DOCA_ERROR_NOT_SUPPORTED - unsupported operation.
  • DOCA_ERROR_FULL - pipe is full.

◆ doca_flow_ct_entry_prepare_rollback()

DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_entry_prepare_rollback ( uint16_t  queue,
struct doca_flow_pipe *  pipe,
struct doca_flow_pipe_entry *  entry 
)

Free the CT entry that hasn't been added to CT pipe.

Parameters
[in]queuequeue ID, offset from doca_flow.nb_queues.
[in]pipePointer to pipe.
[out]entrypointer to the CT entry
Returns
DOCA_SUCCESS - in case of success. Error code - in case of failure:
  • DOCA_ERROR_INVALID_VALUE - received invalid input.
  • DOCA_ERROR_BAD_STATE - invalid pipe state.

◆ doca_flow_ct_fwd_register()

DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_fwd_register ( struct doca_flow_port *  port,
uint32_t  fwd_count,
struct doca_flow_fwd  fwd[],
uint32_t  fwd_handle[] 
)

CT register multiple forwards pipes.

Parameters
[in]portPort struct.
[in]fwd_countnumber of CT forwards
[in]fwdarray of CT forwards
[out]fwd_handlearray of forward handles
Returns
DOCA_SUCCESS - in case of success Error code - in case of failure:
  • DOCA_ERROR_INVALID_VALUE - received invalid input
  • DOCA_ERROR_NOT_FOUND - fwd pipe not found
  • DOCA_ERROR_NOT_SUPPORTED - fwd type not supported
  • DOCA_ERROR_BAD_STATE - fwd register should be called before CT pipe creation

◆ doca_flow_ct_get_entry()

DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_get_entry ( uint16_t  queue,
struct doca_flow_pipe *  pipe,
uint32_t  flags,
struct doca_flow_pipe_entry *  entry,
struct doca_flow_ct_match match_origin,
struct doca_flow_ct_match match_reply,
uint64_t *  entry_flags 
)

Get CT entry match pattern.

Parameters
[in]queuequeue ID, offset from doca_flow.nb_queues.
[in]pipePointer to pipe.
[in]flagsoperation flags, see doca_flow_ct_entry_flags.
[in]entryCT entry.
[out]match_originPointer to save match pattern of origin direction
[out]match_replyPointer to save match pattern of reply direction
[out]entry_flagsEntry flags, see doca_flow_ct_entry_flags.
Returns
DOCA_SUCCESS - in case of success.

◆ doca_flow_ct_init()

DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_init ( const struct doca_flow_ct_cfg *  cfg)

Initialize the doca flow ct.

This is the global initialization function for doca flow ct. It initializes all resources used by doca flow.

Must be invoked first before any other function in this API. this is a one time call, used for doca flow ct initialization and global configurations.

Must be invoked after Doca Flow initialization, before port start.

Parameters
cfgCT configuration.
Returns
0 on success, a negative errno value otherwise.

◆ doca_flow_ct_meta_get_zone_offset()

DOCA_EXPERIMENTAL uint32_t doca_flow_ct_meta_get_zone_offset ( bool  is_reply)

Get zone data bit offset in meta data field.

Parameters
is_replyReply direction in asymmetric mode.
Returns
Zone data bit offset.

◆ doca_flow_ct_meta_mask_prepare()

DOCA_EXPERIMENTAL void doca_flow_ct_meta_mask_prepare ( struct doca_flow_meta meta,
bool  is_reply 
)

Prepare meta as mask with zone and CT type.

Parameters
metaDoca flow meta.
is_replyPrepare reply direction zone in asymmetric mode.

◆ doca_flow_ct_meta_prepare()

DOCA_EXPERIMENTAL void doca_flow_ct_meta_prepare ( struct doca_flow_meta meta,
uint32_t  zone,
bool  is_reply 
)

Prepare meta with zone and default CT type.

Parameters
metaDoca flow meta.
zoneZone value.
is_replyPrepare reply direction zone in asymmetric mode.

◆ doca_flow_ct_meta_set_match_zone()

DOCA_EXPERIMENTAL void doca_flow_ct_meta_set_match_zone ( struct doca_flow_meta meta,
uint32_t  zone,
bool  is_reply 
)

Set meta match zone data to doca_flow meta.

Parameters
metadoca_flow meta.
zoneZone value.
is_replySet reply direction zone in asymmetric mode.

◆ doca_flow_ct_query_entry()

DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_query_entry ( uint16_t  queue,
struct doca_flow_pipe *  pipe,
uint32_t  flags,
struct doca_flow_pipe_entry *  entry,
struct doca_flow_resource_query stats_origin,
struct doca_flow_resource_query stats_reply,
uint64_t *  last_hit_s 
)

Extract information about specific entry.

Query the packet statistics about specific CT pipe entry

Parameters
[in]queuequeue ID, offset from doca_flow.nb_queues.
[in]pipePointer to pipe.
[in]flagsoperation flags, see doca_flow_ct_entry_flags.
[in]entryThe CT pipe entry to query.
[in]stats_originData of origin direction retrieved by the query.
[in]stats_replyData of reply direction retrieved by the query.
[in]last_hit_sLast hit time in the number of seconds since the Epoch.
Returns
DOCA_SUCCESS - in case of success. Error code - in case of failure:
  • DOCA_ERROR_INVALID_VALUE - received invalid input.
  • DOCA_ERROR_UNKNOWN - otherwise.

◆ doca_flow_ct_rm_entry()

DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_rm_entry ( uint16_t  queue,
struct doca_flow_pipe *  pipe,
uint32_t  flags,
struct doca_flow_pipe_entry *  entry 
)

remove CT entry.

Parameters
[in]queuequeue ID, offset from doca_flow.nb_queues.
[in]pipePointer to pipe.
[in]flagsoperation flags, see doca_flow_ct_entry_flags.
[in]entryThe CT pipe entry to query.
Returns
DOCA_SUCCESS - in case of success. DOCA_ERROR_INVALID_VALUE - in case of invalid input. DOCA_ERROR_IN_PROGRESS - in case of connection is in progress of hardware processing. DOCA_ERROR_NOT_FOUND - in case of entry not found or destroyed. DOCA_ERROR_BAD_STATE - in case of invalid pipe or connection state.

◆ doca_flow_ct_update_entry()

DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_update_entry ( uint16_t  queue,
struct doca_flow_pipe *  pipe,
uint32_t  flags,
struct doca_flow_pipe_entry *  entry,
const struct doca_flow_ct_actions actions_origin,
const struct doca_flow_ct_actions actions_reply,
uint32_t  fwd_handle_origin,
uint32_t  fwd_handle_reply,
uint32_t  timeout_s 
)

Update CT entry meta or counter.

Parameters
[in]queuequeue ID, offset from doca_flow.nb_queues.
[in]pipePointer to pipe.
[in]flagsoperation flags, see doca_flow_ct_entry_flags.
[in]entryThe CT pipe entry to query.
[in]actions_originactions to set on origin direction
[in]actions_replyactions ta to set on reply direction
[in]fwd_handle_originfwd handle for origin direction
[in]fwd_handle_replyfwd handle for reply direction
[in]timeout_saging timeout in second, 0 to disable aging
Returns
DOCA_SUCCESS - in case of success.