aboutsummaryrefslogtreecommitdiffstats
path: root/src/wireguard/router/worker.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/wireguard/router/worker.rs')
-rw-r--r--src/wireguard/router/worker.rs31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/wireguard/router/worker.rs b/src/wireguard/router/worker.rs
new file mode 100644
index 0000000..bbb644c
--- /dev/null
+++ b/src/wireguard/router/worker.rs
@@ -0,0 +1,31 @@
+use super::super::{tun, udp, Endpoint};
+use super::types::Callbacks;
+
+use super::queue::ParallelJob;
+use super::receive::ReceiveJob;
+use super::send::SendJob;
+
+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>>,
+) {
+ 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();
+ }
+ }
+ }
+}