aboutsummaryrefslogtreecommitdiffstats
path: root/src/wireguard/router/peer.rs
diff options
context:
space:
mode:
authorMathias Hall-Andersen <mathias@hall-andersen.dk>2019-12-09 13:21:12 +0100
committerMathias Hall-Andersen <mathias@hall-andersen.dk>2019-12-09 13:21:12 +0100
commit115fa574a807877594c3b8cf467798fc0524d007 (patch)
tree07d487f3f8ef130d17536fb93b02f937b7bf66ae /src/wireguard/router/peer.rs
parentFixed inbound job bug (add to sequential queue) (diff)
downloadwireguard-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.rs21
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
}