aboutsummaryrefslogtreecommitdiffstats
path: root/src/wireguard
diff options
context:
space:
mode:
Diffstat (limited to 'src/wireguard')
-rw-r--r--src/wireguard/router/peer.rs2
-rw-r--r--src/wireguard/tests.rs17
-rw-r--r--src/wireguard/timers.rs41
-rw-r--r--src/wireguard/wireguard.rs22
4 files changed, 31 insertions, 51 deletions
diff --git a/src/wireguard/router/peer.rs b/src/wireguard/router/peer.rs
index 3eed7c7..8248a55 100644
--- a/src/wireguard/router/peer.rs
+++ b/src/wireguard/router/peer.rs
@@ -96,6 +96,7 @@ pub struct PeerHandle<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<
peer: Peer<E, C, T, B>,
}
+/*
impl<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>> Clone
for PeerHandle<E, C, T, B>
{
@@ -105,6 +106,7 @@ impl<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>> Clone
}
}
}
+*/
impl<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>> Deref
for PeerHandle<E, C, T, B>
diff --git a/src/wireguard/tests.rs b/src/wireguard/tests.rs
index 6bc4be3..66659e6 100644
--- a/src/wireguard/tests.rs
+++ b/src/wireguard/tests.rs
@@ -120,16 +120,21 @@ fn test_pure_wireguard() {
// configure crypto-key router
- let peer2 = wg1.lookup_peer(&pk2).unwrap();
- let peer1 = wg2.lookup_peer(&pk1).unwrap();
+ {
+ let peers1 = wg1.peers.read();
+ let peers2 = wg2.peers.read();
+
+ let peer2 = peers1.get(&pk2).unwrap();
+ let peer1 = peers2.get(&pk1).unwrap();
- peer1.add_allowed_ip("192.168.1.0".parse().unwrap(), 24);
+ peer1.add_allowed_ip("192.168.1.0".parse().unwrap(), 24);
- peer2.add_allowed_ip("192.168.2.0".parse().unwrap(), 24);
+ peer2.add_allowed_ip("192.168.2.0".parse().unwrap(), 24);
- // set endpoint (the other should be learned dynamically)
+ // set endpoint (the other should be learned dynamically)
- peer2.set_endpoint(dummy::UnitEndpoint::new());
+ peer2.set_endpoint(dummy::UnitEndpoint::new());
+ }
let num_packets = 20;
diff --git a/src/wireguard/timers.rs b/src/wireguard/timers.rs
index a435e5c..94a95ab 100644
--- a/src/wireguard/timers.rs
+++ b/src/wireguard/timers.rs
@@ -237,25 +237,24 @@ impl Timers {
running: bool, // timers started
) -> Timers {
macro_rules! fetch_peer {
- ( $wg:expr, $pk:expr ) => {
- match $wg.lookup_peer(&$pk) {
+ ( $wg:expr, $pk:expr, $peer:ident) => {
+ let peers = $wg.peers.read();
+ let $peer = match peers.get(&$pk) {
None => {
return;
}
Some(peer) => peer,
- }
+ };
};
}
- macro_rules! fetch_timer {
- ( $peer:expr ) => {{
- let timers = $peer.timers();
- if timers.enabled {
- timers
- } else {
+ macro_rules! fetch_timers {
+ ( $peer:ident, $timers:ident) => {
+ let $timers = $peer.timers();
+ if !$timers.enabled {
return;
}
- }};
+ };
}
let runner = wg.runner.lock();
@@ -272,9 +271,8 @@ impl Timers {
let pk = pk.clone();
runner.timer(move || {
// fetch peer by public key
- let peer = fetch_peer!(wg, pk);
- let timers = fetch_timer!(peer);
- log::trace!("{} : timer fired (retransmit_handshake)", peer);
+ fetch_peer!(wg, pk, peer);
+ fetch_timers!(peer, timers);
// check if handshake attempts remaining
let attempts = timers.handshake_attempts.fetch_add(1, Ordering::SeqCst);
@@ -305,9 +303,8 @@ impl Timers {
let pk = pk.clone();
runner.timer(move || {
// fetch peer by public key
- let peer = fetch_peer!(wg, pk);
- let timers = fetch_timer!(peer);
- log::trace!("{} : timer fired (send_keepalive)", peer);
+ fetch_peer!(wg, pk, peer);
+ fetch_timers!(peer, timers);
// send keepalive and schedule next keepalive
peer.send_keepalive();
@@ -321,9 +318,8 @@ impl Timers {
let pk = pk.clone();
runner.timer(move || {
// fetch peer by public key
- let peer = fetch_peer!(wg, pk);
- let _timers = fetch_timer!(peer);
- log::trace!("{} : timer fired (new_handshake)", peer);
+ fetch_peer!(wg, pk, peer);
+ fetch_timers!(peer, timers);
// clear source and retry
log::debug!(
@@ -340,8 +336,7 @@ impl Timers {
let pk = pk.clone();
runner.timer(move || {
// fetch peer by public key
- let peer = fetch_peer!(wg, pk);
- let _timers = fetch_timer!(peer);
+ fetch_peer!(wg, pk, peer);
log::trace!("{} : timer fired (zero_key_material)", peer);
// null all key-material
@@ -353,8 +348,8 @@ impl Timers {
let pk = pk.clone();
runner.timer(move || {
// fetch peer by public key
- let peer = fetch_peer!(wg, pk);
- let timers = fetch_timer!(peer);
+ fetch_peer!(wg, pk, peer);
+ fetch_timers!(peer, timers);
log::trace!("{} : timer fired (send_persistent_keepalive)", peer);
// send and schedule persistent keepalive
diff --git a/src/wireguard/wireguard.rs b/src/wireguard/wireguard.rs
index 7490703..91526aa 100644
--- a/src/wireguard/wireguard.rs
+++ b/src/wireguard/wireguard.rs
@@ -179,28 +179,6 @@ impl<T: Tun, B: UDP> WireGuard<T, B> {
let _ = self.peers.write().remove(pk);
}
- pub fn lookup_peer(
- &self,
- pk: &PublicKey,
- ) -> Option<router::PeerHandle<B::Endpoint, PeerInner<T, B>, T::Writer, B::Writer>> {
- self.peers.read().get(pk).map(|handle| handle.clone())
- }
-
- pub fn list_peers(
- &self,
- ) -> Vec<(
- PublicKey,
- router::PeerHandle<B::Endpoint, PeerInner<T, B>, T::Writer, B::Writer>,
- )> {
- let peers = self.peers.read();
- let mut list = Vec::with_capacity(peers.len());
- for (k, v) in peers.iter() {
- debug_assert!(k.as_bytes() == v.opaque().pk.as_bytes());
- list.push((k.clone(), v.clone()));
- }
- list
- }
-
pub fn set_key(&self, sk: Option<StaticSecret>) {
let mut peers = self.peers.write();
peers.set_sk(sk);