diff options
Diffstat (limited to 'src/wireguard/timers.rs')
-rw-r--r-- | src/wireguard/timers.rs | 34 |
1 files changed, 27 insertions, 7 deletions
diff --git a/src/wireguard/timers.rs b/src/wireguard/timers.rs index b8c6d99..6b852bb 100644 --- a/src/wireguard/timers.rs +++ b/src/wireguard/timers.rs @@ -80,7 +80,7 @@ impl<T: Tun, B: UDP> PeerInner<T, B> { if timers.keepalive_interval > 0 { timers .send_persistent_keepalive - .start(Duration::from_secs(timers.keepalive_interval)); + .start(Duration::from_secs(0)); } } @@ -108,6 +108,7 @@ impl<T: Tun, B: UDP> PeerInner<T, B> { * - handshake */ pub fn timers_any_authenticated_packet_sent(&self) { + log::trace!("timers_any_authenticated_packet_sent"); let timers = self.timers(); if timers.enabled { timers.send_keepalive.stop() @@ -120,6 +121,7 @@ impl<T: Tun, B: UDP> PeerInner<T, B> { * - handshake */ pub fn timers_any_authenticated_packet_received(&self) { + log::trace!("timers_any_authenticated_packet_received"); let timers = self.timers(); if timers.enabled { timers.new_handshake.stop(); @@ -128,6 +130,7 @@ impl<T: Tun, B: UDP> PeerInner<T, B> { /* Should be called after a handshake initiation message is sent. */ pub fn timers_handshake_initiated(&self) { + log::trace!("timers_handshake_initiated"); let timers = self.timers(); if timers.enabled { timers.send_keepalive.stop(); @@ -139,6 +142,7 @@ impl<T: Tun, B: UDP> PeerInner<T, B> { * or when getting key confirmation via the first data message. */ pub fn timers_handshake_complete(&self) { + log::trace!("timers_handshake_complete"); let timers = self.timers(); if timers.enabled { timers.retransmit_handshake.stop(); @@ -154,6 +158,7 @@ impl<T: Tun, B: UDP> PeerInner<T, B> { * handshake response or after receiving a handshake response. */ pub fn timers_session_derived(&self) { + log::trace!("timers_session_derived"); let timers = self.timers(); if timers.enabled { timers.zero_key_material.reset(REJECT_AFTER_TIME * 3); @@ -164,6 +169,7 @@ impl<T: Tun, B: UDP> PeerInner<T, B> { * keepalive, data, or handshake is sent, or after one is received. */ pub fn timers_any_authenticated_packet_traversal(&self) { + log::trace!("timers_any_authenticated_packet_traversal"); let timers = self.timers(); if timers.enabled && timers.keepalive_interval > 0 { // push persistent_keepalive into the future @@ -174,6 +180,7 @@ impl<T: Tun, B: UDP> PeerInner<T, B> { } fn timers_set_retransmit_handshake(&self) { + log::trace!("timers_set_retransmit_handshake"); let timers = self.timers(); if timers.enabled { timers.retransmit_handshake.reset(REKEY_TIMEOUT); @@ -205,11 +212,11 @@ impl<T: Tun, B: UDP> PeerInner<T, B> { // stop the keepalive timer with the old interval timers.send_persistent_keepalive.stop(); - // restart the persistent_keepalive timer with the new interval + // cause immediate expiry of persistent_keepalive timer if secs > 0 && timers.enabled { timers .send_persistent_keepalive - .start(Duration::from_secs(secs)); + .reset(Duration::from_secs(0)); } } @@ -233,6 +240,8 @@ impl Timers { retransmit_handshake: { let peer = peer.clone(); runner.timer(move || { + log::trace!("{} : timer fired (retransmit_handshake)", peer); + // ignore if timers are disabled let timers = peer.timers(); if !timers.enabled { @@ -269,6 +278,8 @@ impl Timers { send_keepalive: { let peer = peer.clone(); runner.timer(move || { + log::trace!("{} : timer fired (send_keepalive)", peer); + // ignore if timers are disabled let timers = peer.timers(); if !timers.enabled { @@ -284,7 +295,8 @@ impl Timers { new_handshake: { let peer = peer.clone(); runner.timer(move || { - debug!( + log::trace!("{} : timer fired (new_handshake)", peer); + log::debug!( "Retrying handshake with {} because we stopped hearing back after {} seconds", peer, (KEEPALIVE_TIMEOUT + REKEY_TIMEOUT).as_secs() @@ -296,16 +308,19 @@ impl Timers { zero_key_material: { let peer = peer.clone(); runner.timer(move || { + log::trace!("{} : timer fired (zero_key_material)", peer); peer.router.zero_keys(); }) }, send_persistent_keepalive: { let peer = peer.clone(); runner.timer(move || { + log::trace!("{} : timer fired (send_persistent_keepalive)", peer); let timers = peer.timers(); if timers.enabled && timers.keepalive_interval > 0 { - peer.router.send_keepalive(); timers.send_keepalive.stop(); + let queued = peer.router.send_keepalive(); + log::trace!("{} : keepalive queued {}", peer, queued); timers .send_persistent_keepalive .start(Duration::from_secs(timers.keepalive_interval)); @@ -331,8 +346,7 @@ impl Timers { } } -/* Instance of the router callbacks */ - +/* instance of the router callbacks */ pub struct Events<T, B>(PhantomData<(T, B)>); impl<T: Tun, B: UDP> Callbacks for Events<T, B> { @@ -343,6 +357,8 @@ impl<T: Tun, B: UDP> Callbacks for Events<T, B> { */ #[inline(always)] fn send(peer: &Self::Opaque, size: usize, sent: bool, keypair: &Arc<KeyPair>, counter: u64) { + log::trace!("{} : EVENT(send)", peer); + // update timers and stats peer.timers_any_authenticated_packet_traversal(); @@ -373,6 +389,8 @@ impl<T: Tun, B: UDP> Callbacks for Events<T, B> { */ #[inline(always)] fn recv(peer: &Self::Opaque, size: usize, sent: bool, keypair: &Arc<KeyPair>) { + log::trace!("{} : EVENT(recv)", peer); + // update timers and stats peer.timers_any_authenticated_packet_traversal(); @@ -407,11 +425,13 @@ impl<T: Tun, B: UDP> Callbacks for Events<T, B> { */ #[inline(always)] fn need_key(peer: &Self::Opaque) { + log::trace!("{} : EVENT(need_key)", peer); peer.packet_send_queued_handshake_initiation(false); } #[inline(always)] fn key_confirmed(peer: &Self::Opaque) { + log::trace!("{} : EVENT(key_confirmed)", peer); peer.timers_handshake_complete(); } } |