[PATCH v4] rust: support raw DPDK API
Bruce Richardson
bruce.richardson at intel.com
Sat Mar 22 18:39:35 CET 2025
On Sat, Mar 22, 2025 at 12:59:11PM +0200, Gregory Etelson wrote:
> The patch converts include files with DPDK API to RUST and binds new
> RUST API files into raw module under dpdk crate.
>
> The RUST files and DPDK libraries build from C sources
> allow creation of DPDK application in RUST.
>
> RUST DPDK application must specify the `dpdk` crate as
> dependency in Cargo.toml file.
>
> RUST `dpdk` crate is installed into
> $MESON_INSTALL_DESTDIR_PREFIX/$libdir/rust directory.
>
> Software requirements:
> - clang
> - RUST installation
> - bindgen-cli crate
>
> RUST dpdk installation instructions:
> 1. Configure DPDK with `-Deanble_rust=true`
> 2. Build and install DPDK. The installation procedure will create
> $MESON_INSTALL_DESTDIR_PREFIX/$libdir/rust crate.
> 3. Update PKG_CONFIG_PATH to point to DPDK installation.
>
> Signed-off-by: Gregory Etelson <getelson at nvidia.com>
> ---
> v2:
> Change rust crate name from dpdklib to dpdk.
> Add raw module for to link with C API.
> Add "cargo:rerun-if-changed=build.rs".
> v3:
> Move init_port_config() to Port.
> Move start_port() to Port.
> Remove Cargo.lock from git repository
> Reformat code.
> v4:
> Blocked bindgen to convert stdlib functions with u128 type.
> Allow compilation of C style symbols.
> ---
> buildtools/meson.build | 4 +
> buildtools/rust-env.sh | 96 ++++++++++++
> examples/rust/helloworld/Cargo.toml | 7 +
> examples/rust/helloworld/build.rs | 24 +++
> examples/rust/helloworld/src/main.rs | 219 +++++++++++++++++++++++++++
> meson_options.txt | 2 +
> 6 files changed, 352 insertions(+)
> create mode 100755 buildtools/rust-env.sh
> create mode 100644 examples/rust/helloworld/Cargo.toml
> create mode 100644 examples/rust/helloworld/build.rs
> create mode 100644 examples/rust/helloworld/src/main.rs
>
Hi Gregory, some high-level feedback:
* I'd suggest for future revisions splitting this into two patches. The rust
example should be separate from a patch adding the basic rust
infrastructure.
* For the example, I'd suggest that the helloworld rust example should
correspond to the regular "C" helloworld example, i.e just init DPDK and
print helloworld. If we want a basic packet handling example, it should be
an l2fwd one - again to align with the "C" examples.
* However, in terms of the examples, if the idea is to provide higher level
"rustic" APIs for DPDK, the examples should be written to use that. Any use
of the low-level C APIs should be in a testing app only, rather than an example
app. IMHO We want to encourage proper rust usage, not C-code just rewritten to
use a different compiler.
Regards,
/Bruce
More information about the dev
mailing list