[PATCH V6 00/17] pipeline: pipeline configuration and build improvements

Thomas Monjalon thomas at monjalon.net
Thu Sep 15 17:54:29 CEST 2022


28/07/2022 17:11, Cristian Dumitrescu:
> The sequence of steps to build a SWX pipeline object are:
> 
> 1. Create the specification file (pipeline.p4 -> pipeline.spec): This text file represents the
>    pipeline program that is typically generated by the P4 compiler or sometimes manually created.
> 
> 2. Generate the C source code file (pipeline.spec -> pipeline.c): The C file contains a C function
>    for every pipeline action and several C functions for the pipeline main program. It allows the C
>    compiler to generate optimized code by having access to the entire pipeline program rather than
>    using the small pre-build functions corresponding to the individual instructions
> 
> 3. Build the shared object library (pipeline.c -> pipeline.o -> pipeline.so).
> 
> 4. Load the shared object library (pipeline.so): At initialization, the pipeline object is “patched”
>    with the optimized C functions from the shared object library.
> 
> Previously, steps 2., 3. and 4. were implemented under the hood by the pipeline library at the
> initialization time in a completely hard-coded and non-customizable way. The user was not able to
> select the C compiler (GCC was assumed), the compiler version, the build flags, the file locations,
> etc. The code generation (step 2.) and library build (step 3.) were done on-the-fly at init and
> could potentially fail for many setup related reasons.
> 
> Now, this process is no longer done under the hood by the pipeline library and the individual steps
> are explicitly supported by the API functions. The code generation (step 2.) is done off-line at any
> time before the pipeline execution. The library build (step 3.) is also done off-line and is now
> fully customizable by the user, who is able to gracefully access the generated C code and decide on
> the various build options.
> 
> We also take the opportunity to streamline the pipeline I/O port configuration by introducing an I/O
> specification file. Essentially, the pipeline is now configured and build based on two files:
> 
> a) The shared object library file (pipeline.so): It defines how the packets are processed by the
>    program through tables and actions; the same P4 program can be executed by many pipelines.
> 
> b) The I/O specification file (pipeline.io): High level text file defining how the packets are
>    received and transmitted by the pipeline; this is not part of the P4 program, which is completely
>    agnostic about the pipeline I/O ports. This is defined differently for each pipeline object when
>    initialized.

Series applied, thanks.





More information about the dev mailing list