| rte_swx_pipeline.h(3) | Library Functions Manual | rte_swx_pipeline.h(3) |
rte_swx_pipeline.h
#include <stdint.h>
#include <stdio.h>
#include <rte_compat.h>
#include 'rte_swx_port.h'
#include 'rte_swx_table.h'
#include 'rte_swx_extern.h'
struct rte_swx_pipeline_mirroring_params
struct rte_swx_field_params
struct rte_swx_match_field_params
struct rte_swx_pipeline_table_params
struct rte_swx_pipeline_selector_params
struct rte_swx_pipeline_learner_params
#define RTE_SWX_NAME_SIZE 64
#define RTE_SWX_INSTRUCTION_SIZE 256
#define RTE_SWX_INSTRUCTION_TOKENS_MAX 16
#define RTE_SWX_PACKET_MIRRORING_SLOTS_DEFAULT 4
#define RTE_SWX_PACKET_MIRRORING_SESSIONS_DEFAULT 64
__rte_experimental struct rte_swx_pipeline *
rte_swx_pipeline_find (const char *name)
__rte_experimental int rte_swx_pipeline_config (struct rte_swx_pipeline
**p, const char *name, int numa_node)
__rte_experimental int rte_swx_pipeline_port_in_type_register (struct
rte_swx_pipeline *p, const char *name, struct rte_swx_port_in_ops
*ops)
__rte_experimental int rte_swx_pipeline_port_in_config (struct
rte_swx_pipeline *p, uint32_t port_id, const char *port_type_name, void
*args)
__rte_experimental int rte_swx_pipeline_port_out_type_register (struct
rte_swx_pipeline *p, const char *name, struct rte_swx_port_out_ops
*ops)
__rte_experimental int rte_swx_pipeline_port_out_config (struct
rte_swx_pipeline *p, uint32_t port_id, const char *port_type_name, void
*args)
__rte_experimental int rte_swx_pipeline_mirroring_config (struct
rte_swx_pipeline *p, struct rte_swx_pipeline_mirroring_params
*params)
__rte_experimental int rte_swx_pipeline_extern_type_register (struct
rte_swx_pipeline *p, const char *name, const char *mailbox_struct_type_name,
rte_swx_extern_type_constructor_t constructor,
rte_swx_extern_type_destructor_t destructor)
__rte_experimental int
rte_swx_pipeline_extern_type_member_func_register (struct
rte_swx_pipeline *p, const char *extern_type_name, const char *name,
rte_swx_extern_type_member_func_t member_func)
__rte_experimental int rte_swx_pipeline_extern_object_config (struct
rte_swx_pipeline *p, const char *extern_type_name, const char *name, const
char *args)
__rte_experimental int rte_swx_pipeline_extern_func_register (struct
rte_swx_pipeline *p, const char *name, const char *mailbox_struct_type_name,
rte_swx_extern_func_t func)
__rte_experimental int rte_swx_pipeline_hash_func_register (struct
rte_swx_pipeline *p, const char *name, rte_swx_hash_func_t func)
__rte_experimental int rte_swx_pipeline_rss_config (struct
rte_swx_pipeline *p, const char *name)
__rte_experimental int rte_swx_pipeline_struct_type_register (struct
rte_swx_pipeline *p, const char *name, struct rte_swx_field_params
*fields, uint32_t n_fields, int last_field_has_variable_size)
__rte_experimental int rte_swx_pipeline_packet_header_register (struct
rte_swx_pipeline *p, const char *name, const char *struct_type_name)
__rte_experimental int rte_swx_pipeline_packet_metadata_register
(struct rte_swx_pipeline *p, const char *struct_type_name)
__rte_experimental int rte_swx_pipeline_action_config (struct
rte_swx_pipeline *p, const char *name, const char *args_struct_type_name,
const char **instructions, uint32_t n_instructions)
__rte_experimental int rte_swx_pipeline_table_type_register (struct
rte_swx_pipeline *p, const char *name, enum rte_swx_table_match_type
match_type, struct rte_swx_table_ops *ops)
__rte_experimental int rte_swx_pipeline_table_config (struct
rte_swx_pipeline *p, const char *name, struct
rte_swx_pipeline_table_params *params, const char
*recommended_table_type_name, const char *args, uint32_t size)
__rte_experimental int rte_swx_pipeline_selector_config (struct
rte_swx_pipeline *p, const char *name, struct
rte_swx_pipeline_selector_params *params)
__rte_experimental int rte_swx_pipeline_learner_config (struct
rte_swx_pipeline *p, const char *name, struct
rte_swx_pipeline_learner_params *params, uint32_t size, uint32_t
*timeout, uint32_t n_timeouts)
__rte_experimental int rte_swx_pipeline_regarray_config (struct
rte_swx_pipeline *p, const char *name, uint32_t size, uint64_t init_val)
__rte_experimental int rte_swx_pipeline_metarray_config (struct
rte_swx_pipeline *p, const char *name, uint32_t size)
__rte_experimental int rte_swx_pipeline_instructions_config (struct
rte_swx_pipeline *p, const char **instructions, uint32_t n_instructions)
__rte_experimental int rte_swx_pipeline_build (struct rte_swx_pipeline
*p)
__rte_experimental int rte_swx_pipeline_codegen (FILE *spec_file, FILE
*code_file, uint32_t *err_line, const char **err_msg)
__rte_experimental int rte_swx_pipeline_build_from_lib (struct
rte_swx_pipeline **p, const char *name, const char *lib_file_name, FILE
*iospec_file, int numa_node)
__rte_experimental void rte_swx_pipeline_run (struct rte_swx_pipeline
*p, uint32_t n_instructions)
__rte_experimental void rte_swx_pipeline_flush (struct rte_swx_pipeline
*p)
__rte_experimental void rte_swx_pipeline_free (struct rte_swx_pipeline
*p)
RTE SWX Pipeline
Definition in file rte_swx_pipeline.h.
Name size.
Definition at line 27 of file rte_swx_pipeline.h.
Instruction size.
Definition at line 32 of file rte_swx_pipeline.h.
Instruction tokens.
Definition at line 37 of file rte_swx_pipeline.h.
Default number of packet mirroring slots.
Definition at line 184 of file rte_swx_pipeline.h.
Default maximum number of packet mirroring sessions.
Definition at line 189 of file rte_swx_pipeline.h.
Pipeline find
Parameters
Returns
Pipeline configure
Parameters
Returns
Pipeline input port type register
Parameters
Returns
Pipeline input port configure
Parameters
Returns
Pipeline output port type register
Parameters
Returns
Pipeline output port configure
Parameters
Returns
Packet mirroring configure
Parameters
Returns
Pipeline extern type register
Parameters
Returns
Pipeline extern type member function register
Parameters
Returns
Pipeline extern object configure
Instantiate a given extern type to create new extern object.
Parameters
Returns
Pipeline extern function register
Parameters
Returns
Pipeline hash function register
Parameters
Returns
Pipeline Receive Side Scaling (RSS) object configure
Parameters
Returns
Pipeline struct type register
Structs are used extensively in many part of the pipeline to define the size and layout of a specific memory piece such as: headers, meta-data, action data stored in a table entry, mailboxes for extern objects and functions. Similar to C language structs, they are a well defined sequence of fields, with each field having a unique name and a constant size.
In order to use structs to express variable size packet headers such as IPv4 with options, it is allowed for the last field of the struct type to have a variable size between 0 and n_bits bits, with the actual size of this field determined at run-time for each packet. This struct feature is restricted to just a few selected instructions that deal with packet headers, so a typical struct generally has a constant size that is fully known when its struct type is registered.
Parameters
Returns
Pipeline packet header register
Parameters
Returns
Pipeline packet meta-data register
Parameters
Returns
Instruction operands:
+-----+---------------------------+------------------+-----+-----+
| | Description | Format | DST | SRC |
+-----+---------------------------+------------------+-----+-----+
| hdr | Header | h.header | | |
+-----+---------------------------+------------------+-----+-----+
| act | Action | ACTION | | |
+-----+---------------------------+------------------+-----+-----+
| tbl | Table | TABLE | | |
+-----+---------------------------+------------------+-----+-----+
| H | Header field | h.header.field | YES | YES |
+-----+---------------------------+------------------+-----+-----+
| M | Meta-data field | m.field | YES | YES |
+-----+---------------------------+------------------+-----+-----+
| E | Extern obj mailbox field | e.ext_obj.field | YES | YES |
+-----+---------------------------+------------------+-----+-----+
| F | Extern func mailbox field | f.ext_func.field | YES | YES |
+-----+---------------------------+------------------+-----+-----+
| T | Table action data field | t.header.field | NO | YES |
+-----+---------------------------+------------------+-----+-----+
| I | Immediate value (64-bit) | h.header.field | NO | YES |
+-----+---------------------------+------------------+-----+-----+
Instruction set:
+------------+----------------------+-------------------+------+--------+
| Instr. | Instruction | Instruction | 1st | 2nd |
| Name | Description | Format | opnd.| opnd. |
+------------+----------------------+-------------------+------+--------+
| rx | Receive one pkt | rx m.port_in | M | |
+------------+----------------------+-------------------+------+--------+
| tx | Transmit one pkt | tx m.port_out | M | |
+------------+----------------------+-------------------+------+--------+
| extract | Extract one hdr | extract h.hdr | hdr | |
+------------+----------------------+-------------------+------+--------+
| emit | Emit one hdr | emit h.hdr | hdr | |
+------------+----------------------+-------------------+------+--------+
| validate | Validate one hdr | validate h.hdr | hdr | |
+------------+----------------------+-------------------+------+--------+
| invalidate | Invalidate one hdr | invalidate h.hdr | hdr | |
+------------+----------------------+-------------------+------+--------+
| mov | dst = src | mov dst src | HMEF | HMEFTI |
+------------+----------------------+-------------------+------+--------+
| add | dst += src | add dst src | HMEF | HMEFTI |
+------------+----------------------+-------------------+------+--------+
| sub | dst -= src | add dst src | HMEF | HMEFTI |
+------------+----------------------+-------------------+------+--------+
| ckadd | Checksum add: dst = | add dst src | HMEF | HMEFTI |
| | dst '+ src[0:1] '+ | | | or hdr |
| | src[2:3] '+ ... | | | |
+------------+----------------------+-------------------+------+--------+
| cksub | Checksum subtract: | add dst src | HMEF | HMEFTI |
| | dst = dst '- src | | | |
+------------+----------------------+-------------------+------+--------+
| and | dst &= src | and dst src | HMEF | HMEFTI |
+------------+----------------------+-------------------+------+--------+
| or | dst |= src | or dst src | HMEF | HMEFTI |
+------------+----------------------+-------------------+------+--------+
| xor | dst ^= src | xor dst src | HMEF | HMEFTI |
+------------+----------------------+-------------------+------+--------+
| shl | dst <<= src | shl dst src | HMEF | HMEFTI |
+------------+----------------------+-------------------+------+--------+
| shr | dst >>= src | shr dst src | HMEF | HMEFTI |
+------------+----------------------+-------------------+------+--------+
| table | Table lookup | table TABLE | tbl | |
+------------+----------------------+-------------------+------+--------+
| extern | Ext obj member func | extern e.obj.mfunc| ext | |
| | call or ext func call| extern f.func | | |
+------------+----------------------+-------------------+------+--------+
| jmp | Unconditional jump | jmp LABEL | | |
+------------+----------------------+-------------------+------+--------+
| jmpv | Jump if hdr is valid | jmpv LABEL h.hdr | hdr | |
+------------+----------------------+-------------------+------+--------+
| jmpnv | Jump if hdr is inval | jmpnv LABEL h.hdr | hdr | |
+------------+----------------------+-------------------+------+--------+
| jmph | Jump if tbl lkp hit | jmph LABEL | | |
+------------+----------------------+-------------------+------+--------+
| jmpnh | Jump if tbl lkp miss | jmpnh LABEL | | |
+------------+----------------------+-------------------+------+--------+
| jmpa | Jump if action run | jmpa LABEL ACTION | act | |
+------------+----------------------+-------------------+------+--------+
| jmpna | Jump if act not run | jmpna LABEL ACTION| act | |
+------------+----------------------+-------------------+------+--------+
| jmpeq | Jump if (a == b) | jmpeq LABEL a b | HMEFT| HMEFTI |
+------------+----------------------+-------------------+------+--------+
| jmpneq | Jump if (a != b) | jmpneq LABEL a b | HMEFT| HMEFTI |
+------------+----------------------+-------------------+------+--------+
| jmplt | Jump if (a < b) | jmplt LABEL a b | HMEFT| HMEFTI |
+------------+----------------------+-------------------+------+--------+
| jmpgt | Jump if (a > b) | jmpgt LABEL a b | HMEFT| HMEFTI |
+------------+----------------------+-------------------+------+--------+
| return | Return from action | return | | |
+------------+----------------------+-------------------+------+--------+
At initialization time, the pipeline and action instructions (including the symbolic name operands) are translated to internal data structures that are used at run-time. Pipeline action configure
Parameters
Returns
Pipeline table type register
Parameters
Returns
Pipeline table configure
Parameters
Returns
Pipeline selector table configure
Parameters
Returns
Pipeline learner table configure
Parameters
Returns
Pipeline register array configure
Parameters
Returns
Pipeline meter array configure
Parameters
Returns
Pipeline instructions configure
Parameters
Returns
Pipeline build
Once called, the pipeline build operation marks the end of pipeline configuration. At this point, all the internal data structures needed to run the pipeline are built.
Parameters
Returns
Pipeline C code generate based on input specification file
Parameters
Returns
Pipeline build from shared object library
The shared object library must be built from the C language source code file previously generated by the rte_swx_pipeline_codegen() API function.
The pipeline I/O specification file defines the I/O ports of the pipeline.
Parameters
Returns
Pipeline run
Parameters
Pipeline flush
Flush all output ports of the pipeline.
Parameters
Pipeline free
Parameters
Generated automatically by Doxygen for DPDK from the source code.
| Version 24.11.3 | DPDK |