__rte_experimentalstructrte_swx_pipeline*rte_swx_pipeline_find(constchar*name)
Pipeline find
Parametersname Pipeline name.
Returns
Valid pipeline handle if found or NULL otherwise.
__rte_experimentalintrte_swx_pipeline_config(structrte_swx_pipeline**p,constchar*name,intnuma_node)
Pipeline configure
Parametersp Pipeline handle. Must point to valid memory. Contains valid pipeline handle when the function
returns successfully.
name Pipeline unique name.
numa_node Non-Uniform Memory Access (NUMA) node.
Returns
0 on success or the following error codes otherwise: -EINVAL: Invalid argument; -ENOMEM: Not enough
space/cannot allocate memory; -EEXIST: Pipeline with this name already exists.
__rte_experimentalintrte_swx_pipeline_port_in_type_register(structrte_swx_pipeline*p,constchar*name,structrte_swx_port_in_ops*ops)
Pipeline input port type register
Parametersp Pipeline handle.
name Input port type name.
ops Input port type operations.
Returns
0 on success or the following error codes otherwise: -EINVAL: Invalid argument; -ENOMEM: Not enough
space/cannot allocate memory; -EEXIST: Input port type with this name already exists.
__rte_experimentalintrte_swx_pipeline_port_in_config(structrte_swx_pipeline*p,uint32_tport_id,constchar*port_type_name,void*args)
Pipeline input port configure
Parametersp Pipeline handle.
port_id Input port ID.
port_type_name Existing input port type name.
args Input port creation arguments.
Returns
0 on success or the following error codes otherwise: -EINVAL: Invalid argument; -ENOMEM: Not enough
space/cannot allocate memory; -ENODEV: Input port object creation error.
__rte_experimentalintrte_swx_pipeline_port_out_type_register(structrte_swx_pipeline*p,constchar*name,structrte_swx_port_out_ops*ops)
Pipeline output port type register
Parametersp Pipeline handle.
name Output port type name.
ops Output port type operations.
Returns
0 on success or the following error codes otherwise: -EINVAL: Invalid argument; -ENOMEM: Not enough
space/cannot allocate memory; -EEXIST: Output port type with this name already exists.
__rte_experimentalintrte_swx_pipeline_port_out_config(structrte_swx_pipeline*p,uint32_tport_id,constchar*port_type_name,void*args)
Pipeline output port configure
Parametersp Pipeline handle.
port_id Output port ID.
port_type_name Existing output port type name.
args Output port creation arguments.
Returns
0 on success or the following error codes otherwise: -EINVAL: Invalid argument; -ENOMEM: Not enough
space/cannot allocate memory; -ENODEV: Output port object creation error.
__rte_experimentalintrte_swx_pipeline_mirroring_config(structrte_swx_pipeline*p,structrte_swx_pipeline_mirroring_params*params)
Packet mirroring configure
Parametersp Pipeline handle.
params Packet mirroring parameters.
Returns
0 on success or the following error codes otherwise: -EINVAL: Invalid argument; -ENOMEM: Not enough
memory; -EEXIST: Pipeline was already built successfully.
__rte_experimentalintrte_swx_pipeline_extern_type_register(structrte_swx_pipeline*p,constchar*name,constchar*mailbox_struct_type_name,rte_swx_extern_type_constructor_tconstructor,rte_swx_extern_type_destructor_tdestructor)
Pipeline extern type register
Parametersp Pipeline handle.
name Extern type name.
mailbox_struct_type_name Name of existing struct type used to define the mailbox size and layout for
the extern objects that are instances of this type. Each extern object gets its own mailbox, which is
used to pass the input arguments to the member functions and retrieve the output results.
constructor Function used to create the extern objects that are instances of this type.
destructor Function used to free the extern objects that are instances of this type.
Returns
0 on success or the following error codes otherwise: -EINVAL: Invalid argument; -ENOMEM: Not enough
space/cannot allocate memory; -EEXIST: Extern type with this name already exists.
__rte_experimentalintrte_swx_pipeline_extern_type_member_func_register(structrte_swx_pipeline*p,constchar*extern_type_name,constchar*name,rte_swx_extern_type_member_func_tmember_func)
Pipeline extern type member function register
Parametersp Pipeline handle.
extern_type_name Existing extern type name.
name Name for the new member function to be added to the extern type.
member_func The new member function.
Returns
0 on success or the following error codes otherwise: -EINVAL: Invalid argument; -ENOMEM: Not enough
space/cannot allocate memory; -EEXIST: Member function with this name already exists for this type;
-ENOSPC: Maximum number of member functions reached for this type.
__rte_experimentalintrte_swx_pipeline_extern_object_config(structrte_swx_pipeline*p,constchar*extern_type_name,constchar*name,constchar*args)
Pipeline extern object configure
Instantiate a given extern type to create new extern object.
Parametersp Pipeline handle.
extern_type_name Existing extern type name.
name Name for the new object instantiating the extern type.
args Extern object constructor arguments.
Returns
0 on success or the following error codes otherwise: -EINVAL: Invalid argument; -ENOMEM: Not enough
space/cannot allocate memory; -EEXIST: Extern object with this name already exists; -ENODEV: Extern
object constructor error.
__rte_experimentalintrte_swx_pipeline_extern_func_register(structrte_swx_pipeline*p,constchar*name,constchar*mailbox_struct_type_name,rte_swx_extern_func_tfunc)
Pipeline extern function register
Parametersp Pipeline handle.
name Extern function name.
mailbox_struct_type_name Name of existing struct type used to define the mailbox size and layout for
this extern function. The mailbox is used to pass the input arguments to the extern function and
retrieve the output results.
func The extern function.
Returns
0 on success or the following error codes otherwise: -EINVAL: Invalid argument; -ENOMEM: Not enough
space/cannot allocate memory; -EEXIST: Extern function with this name already exists.
__rte_experimentalintrte_swx_pipeline_hash_func_register(structrte_swx_pipeline*p,constchar*name,rte_swx_hash_func_tfunc)
Pipeline hash function register
Parametersp Pipeline handle.
name Hash function name.
func Hash function.
Returns
0 on success or the following error codes otherwise: -EINVAL: Invalid argument; -ENOMEM: Not enough
space/cannot allocate memory; -EEXIST: Hash function with this name already exists.
__rte_experimentalintrte_swx_pipeline_rss_config(structrte_swx_pipeline*p,constchar*name)
Pipeline Receive Side Scaling (RSS) object configure
Parametersp Pipeline handle.
name Name for the new RSS object.
Returns
0 on success or the following error codes otherwise: -EINVAL: Invalid argument; -ENOMEM: Not enough
space/cannot allocate memory; -EEXIST: RSS object with this name already exists.
__rte_experimentalintrte_swx_pipeline_struct_type_register(structrte_swx_pipeline*p,constchar*name,structrte_swx_field_params*fields,uint32_tn_fields,intlast_field_has_variable_size)
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.
Parametersp Pipeline handle.
name Struct type name.
fields The sequence of struct fields.
n_fields The number of struct fields.
last_field_has_variable_size If non-zero (true), then the last field has a variable size between 0
and n_bits bits, with its actual size determined at run-time for each packet. If zero (false), then
the last field has a constant size of n_bits bits.
Returns
0 on success or the following error codes otherwise: -EINVAL: Invalid argument; -ENOMEM: Not enough
space/cannot allocate memory; -EEXIST: Struct type with this name already exists.
__rte_experimentalintrte_swx_pipeline_packet_header_register(structrte_swx_pipeline*p,constchar*name,constchar*struct_type_name)
Pipeline packet header register
Parametersp Pipeline handle.
name Header name.
struct_type_name The struct type instantiated by this packet header.
Returns
0 on success or the following error codes otherwise: -EINVAL: Invalid argument; -ENOMEM: Not enough
space/cannot allocate memory; -EEXIST: Header with this name already exists; -ENOSPC: Maximum number
of headers reached for the pipeline.
__rte_experimentalintrte_swx_pipeline_packet_metadata_register(structrte_swx_pipeline*p,constchar*struct_type_name)
Pipeline packet meta-data register
Parametersp Pipeline handle.
struct_type_name The struct type instantiated by the packet meta-data.
Returns
0 on success or the following error codes otherwise: -EINVAL: Invalid argument.
__rte_experimentalintrte_swx_pipeline_action_config(structrte_swx_pipeline*p,constchar*name,constchar*args_struct_type_name,constchar**instructions,uint32_tn_instructions)
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
Parametersp Pipeline handle.
name Action name.
args_struct_type_name The struct type instantiated by the action data. The action data represent the
action arguments that are stored in the table entry together with the action ID. Set to NULL when the
action does not have any arguments.
instructions Action instructions.
n_instructions Number of action instructions.
Returns
0 on success or the following error codes otherwise: -EINVAL: Invalid argument; -ENOMEM: Not enough
space/cannot allocate memory; -EEXIST: Action with this name already exists.
__rte_experimentalintrte_swx_pipeline_table_type_register(structrte_swx_pipeline*p,constchar*name,enumrte_swx_table_match_typematch_type,structrte_swx_table_ops*ops)
Pipeline table type register
Parametersp Pipeline handle.
name Table type name.
match_type Match type implemented by the new table type.
ops Table type operations.
Returns
0 on success or the following error codes otherwise: -EINVAL: Invalid argument; -ENOMEM: Not enough
space/cannot allocate memory; -EEXIST: Table type with this name already exists.
__rte_experimentalintrte_swx_pipeline_table_config(structrte_swx_pipeline*p,constchar*name,structrte_swx_pipeline_table_params*params,constchar*recommended_table_type_name,constchar*args,uint32_tsize)
Pipeline table configure
Parametersp Pipeline handle.
name Table name.
params Table parameters.
recommended_table_type_name Recommended table type. Typically set to NULL. Useful as guidance when
there are multiple table types registered for the match type of the table, as determined from the
table match fields specification. Silently ignored if the recommended table type does not exist or it
serves a different match type.
args Table creation arguments.
size Guideline on maximum number of table entries.
Returns
0 on success or the following error codes otherwise: -EINVAL: Invalid argument; -ENOMEM: Not enough
space/cannot allocate memory; -EEXIST: Table with this name already exists; -ENODEV: Table creation
error.
__rte_experimentalintrte_swx_pipeline_selector_config(structrte_swx_pipeline*p,constchar*name,structrte_swx_pipeline_selector_params*params)
Pipeline selector table configure
Parametersp Pipeline handle.
name Selector table name.
params Selector table parameters.
Returns
0 on success or the following error codes otherwise: -EINVAL: Invalid argument; -ENOMEM: Not enough
space/cannot allocate memory; -EEXIST: Selector table with this name already exists; -ENODEV:
Selector table creation error.
__rte_experimentalintrte_swx_pipeline_learner_config(structrte_swx_pipeline*p,constchar*name,structrte_swx_pipeline_learner_params*params,uint32_tsize,uint32_t*timeout,uint32_tn_timeouts)
Pipeline learner table configure
Parametersp Pipeline handle.
name Learner table name.
params Learner table parameters.
size The maximum number of table entries. Must be non-zero.
timeout Array of possible table entry timeouts in seconds. Must be non-NULL.
n_timeouts Number of elements in the timeout array.
Returns
0 on success or the following error codes otherwise: -EINVAL: Invalid argument; -ENOMEM: Not enough
space/cannot allocate memory; -EEXIST: Learner table with this name already exists; -ENODEV: Learner
table creation error.
__rte_experimentalintrte_swx_pipeline_regarray_config(structrte_swx_pipeline*p,constchar*name,uint32_tsize,uint64_tinit_val)
Pipeline register array configure
Parametersp Pipeline handle.
name Register array name.
size Number of registers in the array. Each register is 64-bit in size.
init_val Initial value for every register in the array. The recommended value is 0.
Returns
0 on success or the following error codes otherwise: -EINVAL: Invalid argument; -ENOMEM: Not enough
space/cannot allocate memory; -EEXIST: Register array with this name already exists.
__rte_experimentalintrte_swx_pipeline_metarray_config(structrte_swx_pipeline*p,constchar*name,uint32_tsize)
Pipeline meter array configure
Parametersp Pipeline handle.
name Meter array name.
size Number of meters in the array. Each meter in the array implements the Two Rate Three Color
Marker (trTCM) algorithm, as specified by RFC 2698.
Returns
0 on success or the following error codes otherwise: -EINVAL: Invalid argument; -ENOMEM: Not enough
space/cannot allocate memory; -EEXIST: Meter array with this name already exists.
__rte_experimentalintrte_swx_pipeline_instructions_config(structrte_swx_pipeline*p,constchar**instructions,uint32_tn_instructions)
Pipeline instructions configure
Parametersp Pipeline handle.
instructions Pipeline instructions.
n_instructions Number of pipeline instructions.
Returns
0 on success or the following error codes otherwise: -EINVAL: Invalid argument; -ENOMEM: Not enough
space/cannot allocate memory.
__rte_experimentalintrte_swx_pipeline_build(structrte_swx_pipeline*p)
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.
Parametersp Pipeline handle.
Returns
0 on success or the following error codes otherwise: -EINVAL: Invalid argument; -ENOMEM: Not enough
space/cannot allocate memory; -EEXIST: Pipeline was already built successfully.
__rte_experimentalintrte_swx_pipeline_codegen(FILE*spec_file,FILE*code_file,uint32_t*err_line,constchar**err_msg)
Pipeline C code generate based on input specification file
Parametersspec_file Pipeline specification file (.spec) provided as input.
code_file Pipeline C language file (.c) to be generated.
err_line In case of error and non-NULL, the line number within the spec file where the error
occurred. The first line number in the file is 1.
err_msg In case of error and non-NULL, the error message.
Returns
0 on success or the following error codes otherwise: -EINVAL: Invalid argument; -ENOMEM: Not enough
space/cannot allocate memory; -EEXIST: Resource with the same name already exists.
__rte_experimentalintrte_swx_pipeline_build_from_lib(structrte_swx_pipeline**p,constchar*name,constchar*lib_file_name,FILE*iospec_file,intnuma_node)
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.
Parametersp Pipeline handle. Must point to valid memory. Contains valid pipeline handle when the function
returns successfully.
name Pipeline unique name.
lib_file_name Shared object library file name.
iospec_file Pipeline I/O specification file.
numa_node Non-Uniform Memory Access (NUMA) node.
Returns
0 on success or the following error codes otherwise: -EINVAL: Invalid argument; -ENOMEM: Not enough
space/cannot allocate memory; -EEXIST: Pipeline with this name already exists; -ENODEV: Extern object
or table creation error.
__rte_experimentalvoidrte_swx_pipeline_run(structrte_swx_pipeline*p,uint32_tn_instructions)
Pipeline run
Parametersp Pipeline handle.
n_instructions Number of instructions to execute.
__rte_experimentalvoidrte_swx_pipeline_flush(structrte_swx_pipeline*p)
Pipeline flush
Flush all output ports of the pipeline.
Parametersp Pipeline handle. If p is NULL, no operation is performed.
__rte_experimentalvoidrte_swx_pipeline_free(structrte_swx_pipeline*p)
Pipeline free
Parametersp Pipeline handle.