aboutsummaryrefslogtreecommitdiffstats
path: root/src/wireguard/router/worker.rs
diff options
context:
space:
mode:
authorMathias Hall-Andersen <mathias@hall-andersen.dk>2020-02-16 20:25:31 +0100
committerMathias Hall-Andersen <mathias@hall-andersen.dk>2020-02-16 20:25:31 +0100
commitead75828cdaa5253e57b5792b51e3d99a4a78ea0 (patch)
tree97fcba5fe19efcb52c0e25cebe4ec359c0d503c8 /src/wireguard/router/worker.rs
parentFixed EINVAL on read4/6 from invalid namelen (diff)
downloadwireguard-rs-ead75828cdaa5253e57b5792b51e3d99a4a78ea0.tar.xz
wireguard-rs-ead75828cdaa5253e57b5792b51e3d99a4a78ea0.zip
Simplified router code
Diffstat (limited to '')
-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();
+ }
+ }
+ }
+}