diff options
author | Mathias Hall-Andersen <mathias@hall-andersen.dk> | 2019-09-02 20:22:47 +0200 |
---|---|---|
committer | Mathias Hall-Andersen <mathias@hall-andersen.dk> | 2019-09-02 20:22:47 +0200 |
commit | 62d71a7a67e2f4e32a8fc48d3e483fecea2c352e (patch) | |
tree | 3fd87e5878d4ca533e65b65351ed7a7a05b84ef5 /src/router/peer.rs | |
parent | Outbound cryptkey routing (diff) | |
download | wireguard-rs-62d71a7a67e2f4e32a8fc48d3e483fecea2c352e.tar.xz wireguard-rs-62d71a7a67e2f4e32a8fc48d3e483fecea2c352e.zip |
Reconsider inorder queueing
Diffstat (limited to 'src/router/peer.rs')
-rw-r--r-- | src/router/peer.rs | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/router/peer.rs b/src/router/peer.rs index d755fa5..c1762ad 100644 --- a/src/router/peer.rs +++ b/src/router/peer.rs @@ -5,9 +5,9 @@ use std::sync::mpsc::{sync_channel, SyncSender}; use std::sync::{Arc, Weak}; use std::thread; -use spin; +use spin::Mutex; -use arraydeque::{ArrayDeque, Wrapping}; +use arraydeque::{ArrayDeque, Wrapping, Saturating}; use zerocopy::{AsBytes, LayoutVerified}; use treebitmap::address::Address; @@ -40,6 +40,8 @@ pub struct KeyWheel { pub struct PeerInner<C: Callbacks, T: Tun, B: Bind> { pub stopped: AtomicBool, pub opaque: C::Opaque, + pub outbound: Mutex<ArrayDeque<[JobOutbound; MAX_STAGED_PACKETS], Wrapping>>, + pub inbound: Mutex<ArrayDeque<[JobInbound<C, T, B>; MAX_STAGED_PACKETS], Wrapping>>, pub device: Arc<DeviceInner<C, T, B>>, pub thread_outbound: spin::Mutex<Option<thread::JoinHandle<()>>>, pub thread_inbound: spin::Mutex<Option<thread::JoinHandle<()>>>, @@ -101,6 +103,7 @@ fn treebit_remove<A: Address, C: Callbacks, T: Tun, B: Bind>( impl<C: Callbacks, T: Tun, B: Bind> Drop for Peer<C, T, B> { fn drop(&mut self) { + println!("drop"); // mark peer as stopped let peer = &self.0; @@ -167,6 +170,8 @@ pub fn new_peer<C: Callbacks, T: Tun, B: Bind>( let device = device.clone(); Arc::new(PeerInner { opaque, + inbound: Mutex::new(ArrayDeque::new()), + outbound: Mutex::new(ArrayDeque::new()), stopped: AtomicBool::new(false), device: device, ekey: spin::Mutex::new(None), @@ -258,7 +263,10 @@ impl<C: Callbacks, T: Tun, B: Bind> PeerInner<C, T, B> { // add job to in-order queue and return to device for inclusion in worker pool match self.queue_outbound.try_send(job.clone()) { Ok(_) => Some(job), - Err(_) => None, + Err(e) => { + println!("{:?}", e); + None + } } } } |