summaryrefslogtreecommitdiffstats
path: root/src/wireguard/router/worker.rs
diff options
context:
space:
mode:
authorMathias Hall-Andersen <mathias@hall-andersen.dk>2020-02-16 18:12:43 +0100
committerMathias Hall-Andersen <mathias@hall-andersen.dk>2020-02-16 18:12:43 +0100
commit106c5e8b5c865c8396f824f4f5aa14d1bf0952b1 (patch)
tree68101553c62d301921b84776a9e18fc627c7a731 /src/wireguard/router/worker.rs
parentWork on reducing context switches (diff)
downloadwireguard-rs-router.tar.xz
wireguard-rs-router.zip
Work on router optimizationsrouter
Diffstat (limited to 'src/wireguard/router/worker.rs')
-rw-r--r--src/wireguard/router/worker.rs30
1 files changed, 24 insertions, 6 deletions
diff --git a/src/wireguard/router/worker.rs b/src/wireguard/router/worker.rs
index d95050e..bbb644c 100644
--- a/src/wireguard/router/worker.rs
+++ b/src/wireguard/router/worker.rs
@@ -1,13 +1,31 @@
-use super::Device;
-
use super::super::{tun, udp, Endpoint};
use super::types::Callbacks;
-use super::receive::ReceieveJob;
+use super::queue::ParallelJob;
+use super::receive::ReceiveJob;
use super::send::SendJob;
-fn worker<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>>(
- device: Device<E, C, T, B>,
+use crossbeam_channel::Receiver;
+
+pub enum JobUnion<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>> {
+ Outbound(SendJob<E, C, T, B>),
+ Inbound(ReceiveJob<E, C, T, B>),
+}
+
+pub fn worker<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>>(
+ receiver: Receiver<JobUnion<E, C, T, B>>,
) {
- // fetch job
+ loop {
+ match receiver.recv() {
+ Err(_) => break,
+ Ok(JobUnion::Inbound(job)) => {
+ job.parallel_work();
+ job.queue().consume();
+ }
+ Ok(JobUnion::Outbound(job)) => {
+ job.parallel_work();
+ job.queue().consume();
+ }
+ }
+ }
}