aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJake McGinty <me@jake.su>2018-05-03 18:28:52 -0700
committerJake McGinty <me@jake.su>2018-05-03 18:28:52 -0700
commit59e5adfed6b4ce9d50bb9200fe0cd678660e91b4 (patch)
tree131b98fe64393ab8432bb2709cab2641dd2ed66a
parentpeer_server: move config change handling code to own method (diff)
downloadwireguard-rs-59e5adfed6b4ce9d50bb9200fe0cd678660e91b4.tar.xz
wireguard-rs-59e5adfed6b4ce9d50bb9200fe0cd678660e91b4.zip
timers: properly set correct timer data for in/egress packets
-rw-r--r--src/interface/peer_server.rs3
-rw-r--r--src/peer.rs22
2 files changed, 17 insertions, 8 deletions
diff --git a/src/interface/peer_server.rs b/src/interface/peer_server.rs
index ff3e356..2acbb6a 100644
--- a/src/interface/peer_server.rs
+++ b/src/interface/peer_server.rs
@@ -313,8 +313,7 @@ impl PeerServer {
self.send_to_peer((endpoint, init_packet))?;
peer.timers.handshake_initialized = Timestamp::now();
- let when = *REKEY_TIMEOUT;
- self.timer.send_after(when, TimerMessage::Rekey(peer_ref.clone(), new_index));
+ self.timer.send_after(*REKEY_TIMEOUT, TimerMessage::Rekey(peer_ref.clone(), new_index));
Ok(new_index)
}
diff --git a/src/peer.rs b/src/peer.rs
index 37285c5..558c25a 100644
--- a/src/peer.rs
+++ b/src/peer.rs
@@ -282,8 +282,10 @@ impl Peer {
None
};
- self.info.endpoint = Some(addr);
- self.last_handshake_tai64n = Some(timestamp);
+ self.info.endpoint = Some(addr);
+ self.last_handshake_tai64n = Some(timestamp);
+ self.timers.authenticated_received = Timestamp::now();
+ self.timers.authenticated_traversed = Timestamp::now();
Ok((response_packet, dead_index))
}
@@ -315,8 +317,10 @@ impl Peer {
session.their_index = packet.their_index();
session.birthday = Timestamp::now();
- self.timers.handshake_completed = Timestamp::now();
- self.info.endpoint = Some(addr);
+ self.info.endpoint = Some(addr);
+ self.timers.authenticated_received = Timestamp::now();
+ self.timers.authenticated_traversed = Timestamp::now();
+ self.timers.handshake_completed = Timestamp::now();
let current = mem::replace(&mut self.sessions.current, Some(session));
let dead = mem::replace(&mut self.sessions.past, current);
@@ -354,7 +358,8 @@ impl Peer {
if raw_packet.len() > 0 {
self.timers.data_received = Timestamp::now();
}
-
+ self.timers.authenticated_received = Timestamp::now();
+ self.timers.authenticated_traversed = Timestamp::now();
self.timers.keepalive_sent = false; // reset passive keepalive token since received a valid ingress transport
let transition = if session_type == SessionType::Next {
@@ -393,7 +398,12 @@ impl Peer {
let padded_packet = &[packet, &vec![0u8; padding]].concat();
let len = session.noise.write_message(padded_packet, &mut out_packet[16..])?;
self.tx_bytes += len as u64;
- self.timers.data_sent = Timestamp::now(); // TODO: only set this timer if not a keepalive
+
+ if packet.len() > 0 {
+ self.timers.data_sent = Timestamp::now();
+ }
+ self.timers.authenticated_traversed = Timestamp::now();
+
out_packet.truncate(TRANSPORT_HEADER_SIZE + len);
Ok((endpoint, out_packet))
}