rte_swx_pipeline_extern_type_member_func_register;
rte_swx_pipeline_extern_type_register;
rte_swx_pipeline_free;
+ rte_swx_pipeline_instructions_config;
rte_swx_pipeline_packet_header_register;
rte_swx_pipeline_packet_metadata_register;
rte_swx_pipeline_port_in_config;
/* Extern objects and functions. */
struct extern_obj_runtime *extern_objs;
struct extern_func_runtime *extern_funcs;
+
+ /* Instructions. */
+ struct instruction *ip;
+ struct instruction *ret;
};
#ifndef RTE_SWX_PIPELINE_THREADS_MAX
struct port_out_runtime *out;
struct instruction **action_instructions;
struct rte_swx_table_state *table_state;
+ struct instruction *instructions;
struct thread threads[RTE_SWX_PIPELINE_THREADS_MAX];
uint32_t n_structs;
uint32_t n_actions;
uint32_t n_tables;
uint32_t n_headers;
+ uint32_t n_instructions;
int build_done;
int numa_node;
};
/*
* Instruction.
*/
+static inline void
+thread_ip_reset(struct rte_swx_pipeline *p, struct thread *t)
+{
+ t->ip = p->instructions;
+}
+
static int
instruction_config(struct rte_swx_pipeline *p __rte_unused,
struct action *a __rte_unused,
if (!p)
return;
+ free(p->instructions);
+
table_state_free(p);
table_free(p);
action_free(p);
free(p);
}
+int
+rte_swx_pipeline_instructions_config(struct rte_swx_pipeline *p,
+ const char **instructions,
+ uint32_t n_instructions)
+{
+ int err;
+ uint32_t i;
+
+ err = instruction_config(p, NULL, instructions, n_instructions);
+ if (err)
+ return err;
+
+ /* Thread instruction pointer reset. */
+ for (i = 0; i < RTE_SWX_PIPELINE_THREADS_MAX; i++) {
+ struct thread *t = &p->threads[i];
+
+ thread_ip_reset(p, t);
+ }
+
+ return 0;
+}
+
int
rte_swx_pipeline_build(struct rte_swx_pipeline *p)
{
const char *args,
uint32_t size);
+/**
+ * Pipeline instructions configure
+ *
+ * @param[in] p
+ * Pipeline handle.
+ * @param[in] instructions
+ * Pipeline instructions.
+ * @param[in] n_instructions
+ * Number of pipeline instructions.
+ * @return
+ * 0 on success or the following error codes otherwise:
+ * -EINVAL: Invalid argument;
+ * -ENOMEM: Not enough space/cannot allocate memory.
+ */
+__rte_experimental
+int
+rte_swx_pipeline_instructions_config(struct rte_swx_pipeline *p,
+ const char **instructions,
+ uint32_t n_instructions);
+
/**
* Pipeline build
*