24 #ifndef DOCA_FLOW_CT_H_
25 #define DOCA_FLOW_CT_H_
45 #define DOCA_FLOW_CT_ACTION_HANDLE_INVALID (UINT32_MAX)
50 #define DOCA_FLOW_CT_MARK_FROM_DPDK(_mark) (DOCA_BETOH32((_mark) + 1) >> 8)
135 struct doca_flow_ct_cfg;
256 uint32_t max_connections_per_zone);
728 uint32_t max_processed_entries,
729 uint32_t *queue_room);
762 struct doca_flow_pipe *pipe,
765 uint32_t hash_origin,
768 struct doca_flow_pipe_entry **
entry,
788 struct doca_flow_pipe *pipe,
789 struct doca_flow_pipe_entry *
entry);
823 struct doca_flow_pipe *pipe,
829 uint32_t fwd_handle_origin,
830 uint32_t fwd_handle_reply,
833 struct doca_flow_pipe_entry *
entry);
860 struct doca_flow_pipe *pipe,
865 struct doca_flow_pipe_entry *
entry);
893 struct doca_flow_pipe *pipe,
895 struct doca_flow_pipe_entry *
entry,
898 uint32_t fwd_handle_origin,
899 uint32_t fwd_handle_reply,
922 struct doca_flow_pipe *pipe,
924 struct doca_flow_pipe_entry *
entry);
948 struct doca_flow_pipe *pipe,
950 struct doca_flow_pipe_entry *
entry,
953 uint64_t *entry_flags);
982 struct doca_flow_pipe *pipe,
984 struct doca_flow_pipe_entry *
entry,
987 uint64_t *last_hit_s);
1020 struct doca_flow_pipe *pipe,
1021 struct doca_flow_pipe_entry *
entry);
1038 struct doca_flow_pipe *pipe,
1039 struct doca_flow_pipe_entry *
entry);
1061 struct doca_flow_pipe *pipe,
1063 struct doca_flow_pipe_entry **
entry,
1090 struct doca_flow_pipe *pipe,
1092 uint32_t nb_actions,
1093 uint32_t actions_handles[]);
1116 struct doca_flow_pipe *pipe,
1118 uint32_t nb_actions,
1119 uint32_t actions_handles[]);
1136 struct doca_flow_pipe *pipe,
1137 uint32_t actions_handles[],
1138 uint32_t nb_actions);
1163 uint32_t fwd_handle[]);
static void entry_finalize_cb(struct doca_flow_pipe *pipe, void *entry, uint16_t ct_queue, void *usr_ctx)
static struct doca_flow_actions actions
static struct doca_flow_fwd fwd
static struct doca_flow_pipe_entry * entry[MAX_ENTRIES]
#define DOCA_EXPERIMENTAL
To set a Symbol (or specifically a function) as experimental.
enum doca_error doca_error_t
DOCA API return codes.
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.
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.
DOCA_EXPERIMENTAL uint32_t doca_flow_ct_meta_get_zone_offset(bool is_reply)
Get zone data bit offset in meta data field.
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.
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.
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.
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 doca_error_t doca_flow_ct_cfg_create(struct doca_flow_ct_cfg **cfg)
Create CT configuration.
DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_cfg_set_flags(struct doca_flow_ct_cfg *cfg, uint32_t flags)
Set CT flags.
void(* doca_flow_ct_entry_finalize_cb)(struct doca_flow_pipe *pipe, void *entry, uint16_t queue, void *usr_ctx)
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.
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.
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.
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.
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.
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.
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_cfg_set_user_actions(struct doca_flow_ct_cfg *cfg, uint32_t n_user_actions)
Set number of user actions.
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)
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.
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.
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.
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.
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.
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.
DOCA_EXPERIMENTAL void doca_flow_ct_destroy(void)
Destroy the doca flow ct.
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.
DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_cap_is_dev_supported(const struct doca_devinfo *devinfo)
Check if doca device supported by CT.
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.
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.
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.
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.
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.
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.
doca_flow_ct_entry_flags
doca flow CT entry operation flags
DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_init(const struct doca_flow_ct_cfg *cfg)
Initialize the doca flow ct.
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.
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.
doca_flow_ct_flags
CT flags.
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.
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.
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.
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.
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.
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.
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 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.
DOCA_EXPERIMENTAL doca_error_t doca_flow_ct_cfg_destroy(struct doca_flow_ct_cfg *cfg)
Destroy CT configuration.
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.
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.
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.
@ DOCA_FLOW_CT_ENTRY_FLAGS_COUNTER_REPLY
@ DOCA_FLOW_CT_ENTRY_FLAGS_DIR_ORIGIN
@ DOCA_FLOW_CT_ENTRY_FLAGS_IPV6_REPLY
@ DOCA_FLOW_CT_ENTRY_FLAGS_NO_WAIT
@ DOCA_FLOW_CT_ENTRY_FLAGS_DIR_REPLY
@ DOCA_FLOW_CT_ENTRY_FLAGS_IPV6_ORIGIN
@ DOCA_FLOW_CT_ENTRY_FLAGS_ALLOC_ON_MISS
@ DOCA_FLOW_CT_ENTRY_FLAGS_ENTRY_FINALIZE
@ DOCA_FLOW_CT_ENTRY_FLAGS_DUP_FILTER_REPLY
@ DOCA_FLOW_CT_ENTRY_FLAGS_STATS_UPDATES
@ DOCA_FLOW_CT_ENTRY_FLAGS_DUP_FILTER_ORIGIN
@ DOCA_FLOW_CT_ENTRY_FLAGS_COUNTER_ORIGIN
@ DOCA_FLOW_CT_ENTRY_FLAGS_COUNTER_SHARED
@ DOCA_FLOW_CT_FLAG_NO_COUNTER
@ DOCA_FLOW_CT_FLAG_NO_AGING
@ DOCA_FLOW_CT_FLAG_WIRE_TO_WIRE
@ DOCA_FLOW_CT_FLAG_ASYMMETRIC_TUNNEL
@ DOCA_FLOW_CT_FLAG_STATS
@ DOCA_FLOW_CT_FLAG_WORKER_STATS
@ DOCA_FLOW_CT_FLAG_DUP_FILTER_UDP_ONLY
doca_flow_entry_op
doca flow entry operation
doca_flow_resource_type
doca flow resource type
const struct ip_frag_config * cfg
struct doca_flow_header_l4_port l4_port
struct doca_flow_meta meta
struct doca_flow_ct_ip4 ip4
enum doca_flow_resource_type resource_type
struct doca_flow_ct_actions::@121::@123 data
struct doca_flow_ct_ip6 ip6
CT aging user plugin connection event.
enum doca_flow_entry_op op
union doca_flow_ct_aging_conn conn
Connection update information.
union doca_flow_ct_aging_conn conn_info
CT aging user plugin context.
uint32_t n_total_counters
CT aging user plugin callbacks.
void(* aging_shutdown_cb)(struct doca_flow_ct_aging_ctx *ctx)
void(* conn_sync_cb)(struct doca_flow_ct_aging_ctx *ctx, struct doca_flow_ct_aging_conn_event *conn, uint32_t n)
void(* aging_timer_cb)(struct doca_flow_ct_aging_ctx *ctx, uint64_t current_time_s)
doca_error_t(* aging_init_cb)(struct doca_flow_ct_aging_ctx *ctx)
doca flow CT IPv4 match pattern
struct doca_flow_header_l4_port l4_port
doca flow CT IPv6 match pattern
struct doca_flow_header_l4_port l4_port
doca flow CT match pattern
struct doca_flow_ct_match4 ipv4
struct doca_flow_ct_match6 ipv6
CT aging connection info.
struct upf_accel_ctx * ctx