diff options
author | Mathias Hall-Andersen <mathias@hall-andersen.dk> | 2019-12-09 13:21:12 +0100 |
---|---|---|
committer | Mathias Hall-Andersen <mathias@hall-andersen.dk> | 2019-12-09 13:21:12 +0100 |
commit | 115fa574a807877594c3b8cf467798fc0524d007 (patch) | |
tree | 07d487f3f8ef130d17536fb93b02f937b7bf66ae /src/wireguard/router/peer.rs | |
parent | Fixed inbound job bug (add to sequential queue) (diff) | |
download | wireguard-rs-115fa574a807877594c3b8cf467798fc0524d007.tar.xz wireguard-rs-115fa574a807877594c3b8cf467798fc0524d007.zip |
Move to run queue
Diffstat (limited to 'src/wireguard/router/peer.rs')
-rw-r--r-- | src/wireguard/router/peer.rs | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/src/wireguard/router/peer.rs b/src/wireguard/router/peer.rs index 40442a8..a00ce1a 100644 --- a/src/wireguard/router/peer.rs +++ b/src/wireguard/router/peer.rs @@ -20,6 +20,7 @@ use super::messages::TransportHeader; use super::constants::*; use super::types::{Callbacks, RouterError}; use super::SIZE_MESSAGE_PREFIX; +use super::runq::ToKey; // worker pool related use super::inbound::Inbound; @@ -56,14 +57,28 @@ impl<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>> Clone for Pee } } +/* Equality of peers is defined as pointer equality + * the atomic reference counted pointer. + */ impl<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>> PartialEq for Peer<E, C, T, B> { fn eq(&self, other: &Self) -> bool { Arc::ptr_eq(&self.inner, &other.inner) } } +impl<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>> ToKey for Peer<E, C, T, B> { + type Key = usize; + fn to_key(&self) -> usize { + Arc::downgrade(&self.inner).into_raw() as usize + } +} + impl<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>> Eq for Peer<E, C, T, B> {} +/* A peer is transparently dereferenced to the inner type + * + */ + impl<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>> Deref for Peer<E, C, T, B> { type Target = PeerInner<E, C, T, B>; fn deref(&self) -> &Self::Target { @@ -71,6 +86,10 @@ impl<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>> Deref for Pee } } + +/* A peer handle is a specially designated peer pointer + * which removes the peer from the device when dropped. + */ pub struct PeerHandle<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>> { peer: Peer<E, C, T, B>, } @@ -227,7 +246,7 @@ impl<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>> Peer<E, C, T, log::debug!("peer.send_raw"); match self.send_job(msg, false) { Some(job) => { - self.device.outbound_queue.send(job); + self.device.queue_outbound.send(job); debug!("send_raw: got obtained send_job"); true } |