From: Harry van Haaren <harry.van.haaren@intel.com>
To: dev@dpdk.org
Cc: getelson@nvidia.com, bruce.richardson@intel.com,
owen.hilyard@unh.edu,
Harry van Haaren <harry.van.haaren@intel.com>
Subject: [PATCH 2/3] rust: split main into example, refactor to lib.rs
Date: Fri, 18 Apr 2025 14:23:23 +0100 [thread overview]
Message-ID: <20250418132324.4085336-2-harry.van.haaren@intel.com> (raw)
In-Reply-To: <20250418132324.4085336-1-harry.van.haaren@intel.com>
Signed-off-by: Harry van Haaren <harry.van.haaren@intel.com>
---
rust_api_example/examples/eth_poll.rs | 35 +++++++++++++++++++
rust_api_example/src/{main.rs => lib.rs} | 43 ------------------------
2 files changed, 35 insertions(+), 43 deletions(-)
create mode 100644 rust_api_example/examples/eth_poll.rs
rename rust_api_example/src/{main.rs => lib.rs} (77%)
diff --git a/rust_api_example/examples/eth_poll.rs b/rust_api_example/examples/eth_poll.rs
new file mode 100644
index 0000000000..cde28df68d
--- /dev/null
+++ b/rust_api_example/examples/eth_poll.rs
@@ -0,0 +1,35 @@
+// Examples should not require any "unsafe" code.
+#![deny(unsafe_code)]
+
+use rust_api_example::dpdk::{self};
+
+fn main() {
+ let mut dpdk = dpdk::Eal::init().expect("dpdk must init ok");
+ let rx_mempool = dpdk::Mempool::new(4096);
+
+ let mut ports = dpdk.take_eth_ports().expect("take eth ports ok");
+ let mut p = ports.pop().unwrap();
+
+ p.rxqs(2, rx_mempool).expect("rxqs setup ok");
+ println!("{:?}", p);
+
+ let (mut rxqs, _txqs) = p.start();
+ println!("rxqs: {:?}", rxqs);
+
+ let rxq1 = rxqs.pop().unwrap();
+ let rxq2 = rxqs.pop().unwrap();
+
+ std::thread::spawn(move || {
+ let mut rxq = rxq1.enable_polling();
+ loop {
+ let _nb_mbufs = rxq.rx_burst(&mut [0; 32]);
+ std::thread::sleep(std::time::Duration::from_millis(1000));
+ }
+ });
+
+ let mut rxq = rxq2.enable_polling();
+ loop {
+ let _nb_mbufs = rxq.rx_burst(&mut [0; 32]);
+ std::thread::sleep(std::time::Duration::from_millis(1000));
+ }
+}
\ No newline at end of file
diff --git a/rust_api_example/src/main.rs b/rust_api_example/src/lib.rs
similarity index 77%
rename from rust_api_example/src/main.rs
rename to rust_api_example/src/lib.rs
index 8d0de50c30..0d13b06d85 100644
--- a/rust_api_example/src/main.rs
+++ b/rust_api_example/src/lib.rs
@@ -144,46 +144,3 @@ pub mod dpdk {
}
}
} // DPDK mod
-
-fn main() {
- let mut dpdk = dpdk::Eal::init().expect("dpdk must init ok");
- let rx_mempool = dpdk::Mempool::new(4096);
-
- let mut ports = dpdk.take_eth_ports().expect("take eth ports ok");
- let mut p = ports.pop().unwrap();
-
- p.rxqs(2, rx_mempool).expect("rxqs setup ok");
- println!("{:?}", p);
-
- let (mut rxqs, _txqs) = p.start();
- println!("rxqs: {:?}", rxqs);
-
- let rxq1 = rxqs.pop().unwrap();
- let rxq2 = rxqs.pop().unwrap();
-
- // spawn a new thread to use rxq1. This demonstrates that the RxqHandle
- // type can move between threads - it is not tied to the thread that created it.
- std::thread::spawn(move || {
- // Uncomment this: it fails to compile!
- // - Rxq2 would be used by this newly-spawned thread
- // -- specifically the variable was "moved" into this thread
- // - it is also used below (by the main thread)
- // "value used after move" is the error, on the below code
- // let mut rxq = rxq2.enable_polling();
-
- // see docs on enable_polling above to understand how the enable_polling()
- // function helps to achieve the thread-safety-at-compile-time goal.
- let mut rxq = rxq1.enable_polling();
- loop {
- let _nb_mbufs = rxq.rx_burst(&mut [0; 32]);
- std::thread::sleep(std::time::Duration::from_millis(1000));
- }
- });
-
- // main thread polling rxq2
- let mut rxq = rxq2.enable_polling();
- loop {
- let _nb_mbufs = rxq.rx_burst(&mut [0; 32]);
- std::thread::sleep(std::time::Duration::from_millis(1000));
- }
-}
--
2.34.1
next prev parent reply other threads:[~2025-04-18 13:23 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-17 15:10 [PATCH] rust: RFC/demo of safe API for Dpdk Eal, Eth and Rxq Harry van Haaren
2025-04-17 18:58 ` Etelson, Gregory
2025-04-18 11:40 ` Van Haaren, Harry
2025-04-18 13:23 ` [PATCH 1/3] " Harry van Haaren
2025-04-18 13:23 ` Harry van Haaren [this message]
2025-04-18 13:23 ` [PATCH 3/3] rust: showcase port Rxq return for stop() and reconfigure Harry van Haaren
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250418132324.4085336-2-harry.van.haaren@intel.com \
--to=harry.van.haaren@intel.com \
--cc=bruce.richardson@intel.com \
--cc=dev@dpdk.org \
--cc=getelson@nvidia.com \
--cc=owen.hilyard@unh.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).