26 #ifndef FLOW_COMMON_H_
27 #define FLOW_COMMON_H_
33 #include <rte_byteorder.h>
34 #include <rte_common.h>
39 #define BE_IPV4_ADDR(a, b, c, d) (RTE_BE32(((uint32_t)a << 24) + (b << 16) + (c << 8) + d))
40 #define SET_IPV6_ADDR(addr, a, b, c, d) \
42 addr[0] = a & 0xffffffff; \
43 addr[1] = b & 0xffffffff; \
44 addr[2] = c & 0xffffffff; \
45 addr[3] = d & 0xffffffff; \
47 #define SET_MAC_ADDR(addr, a, b, c, d, e, f) \
56 #define BUILD_VNI(uint24_vni) (RTE_BE32((uint32_t)uint24_vni << 8))
57 #define DEFAULT_TIMEOUT_US (10000)
58 #define NB_ACTIONS_ARR (1)
59 #define SHARED_RESOURCE_NUM_VALUES (8)
62 #define MAX(a, b) (((a) > (b)) ? (a) : (b))
64 #define MIN_ACTIONS_MEM_SIZE_PER_QUEUE (256)
65 #define INITIAL_ACTIONS_MEM_SIZE (2048)
66 #define ACTIONS_MEM_SIZE(nr_queues, entries) \
68 MAX((uint32_t)(entries * DOCA_FLOW_MAX_ENTRY_ACTIONS_MEM_SIZE), \
69 (uint32_t)(nr_queues * MIN_ACTIONS_MEM_SIZE_PER_QUEUE + INITIAL_ACTIONS_MEM_SIZE)))
73 #define ARRAY_DIM(a) (sizeof(a) / sizeof((a)[0]))
74 #define ARRAY_INIT(array, val) \
76 for (size_t i = 0; i < ARRAY_DIM(array); i++) { \
80 #define DEFS_REG_OPCODE(opcode_str, ___sname, ___field) \
83 int __off = offsetof(struct ___sname, ___field); \
84 int __sz = sizeof(((struct ___sname *)0)->___field); \
86 rc = doca_flow_definitions_add_field(defs, opcode_str, __off, __sz); \
115 uint32_t nr_shared_resources[]);
130 uint32_t nr_shared_resources[],
131 struct doca_flow_definitions *defs);
147 uint32_t nr_shared_resources[],
150 struct doca_flow_definitions *defs);
163 struct doca_flow_port *
ports[],
165 struct doca_dev *dev_arr[],
180 struct doca_flow_port *
ports[],
182 struct doca_dev *dev_arr[],
static void pipe_process_cb(struct doca_flow_pipe *pipe, enum doca_flow_pipe_status status, enum doca_flow_pipe_op op, void *user_ctx)
static struct doca_flow_pipe_entry * entry[MAX_ENTRIES]
enum doca_error doca_error_t
DOCA API return codes.
doca_flow_port_operation_state
Defines the operation states for a port instance.
doca_flow_entry_op
doca flow entry operation
doca_flow_pipe_type
doca flow pipe type
void(* doca_flow_pipe_process_cb)(struct doca_flow_pipe *pipe, enum doca_flow_pipe_status status, enum doca_flow_pipe_op op, void *user_ctx)
doca flow pipe process callback
doca_flow_entry_status
doca flow entry status
void(* doca_flow_entry_process_cb)(struct doca_flow_pipe_entry *entry, uint16_t pipe_queue, enum doca_flow_entry_status status, enum doca_flow_entry_op op, void *user_ctx)
doca flow entry process callback
const struct ip_frag_config * cfg
doca_error_t flow_process_entries(struct doca_flow_port *port, struct entries_status *status, uint32_t nr_entries)
doca_error_t init_doca_flow(int nb_queues, const char *mode, struct flow_resources *resource, uint32_t nr_shared_resources[])
doca_error_t stop_doca_flow_ports(int nb_ports, struct doca_flow_port *ports[])
doca_error_t init_doca_flow_with_defs(int nb_queues, const char *mode, struct flow_resources *resource, uint32_t nr_shared_resources[], struct doca_flow_definitions *defs)
void check_for_valid_entry(struct doca_flow_pipe_entry *entry, uint16_t pipe_queue, enum doca_flow_entry_status status, enum doca_flow_entry_op op, void *user_ctx)
doca_error_t init_doca_flow_ports_with_op_state(int nb_ports, struct doca_flow_port *ports[], bool is_hairpin, struct doca_dev *dev_arr[], enum doca_flow_port_operation_state *states, uint32_t actions_mem_size[])
doca_error_t init_doca_flow_ports(int nb_ports, struct doca_flow_port *ports[], bool is_hairpin, struct doca_dev *dev_arr[], uint32_t actions_mem_size[])
doca_error_t set_flow_pipe_cfg(struct doca_flow_pipe_cfg *cfg, const char *name, enum doca_flow_pipe_type type, bool is_root)
doca_error_t init_doca_flow_cb(int nb_queues, const char *mode, struct flow_resources *resource, uint32_t nr_shared_resources[], doca_flow_entry_process_cb cb, doca_flow_pipe_process_cb pipe_process_cb, struct doca_flow_definitions *defs)
user context struct that will be used in entries process callback
static uint32_t actions_mem_size[FLOW_SWITCH_PORTS_MAX]
static struct doca_flow_port * ports[FLOW_SWITCH_PORTS_MAX]