summaryrefslogtreecommitdiffhomepage
path: root/device
diff options
context:
space:
mode:
Diffstat (limited to 'device')
-rw-r--r--device/peer.go3
-rw-r--r--device/timers.go9
2 files changed, 7 insertions, 5 deletions
diff --git a/device/peer.go b/device/peer.go
index abe8a08..3e4f4ec 100644
--- a/device/peer.go
+++ b/device/peer.go
@@ -107,6 +107,7 @@ func (device *Device) NewPeer(pk NoisePublicKey) (*Peer, error) {
device.peers.empty.Set(false)
// start peer
+ peer.timersInit()
if peer.device.isUp() {
peer.Start()
}
@@ -183,7 +184,7 @@ func (peer *Peer) Start() {
}
peer.device.queue.encryption.wg.Add(1) // keep encryption queue open for our writes
- peer.timersInit()
+ peer.timersStart()
go peer.RoutineSequentialSender()
go peer.RoutineSequentialReceiver()
diff --git a/device/timers.go b/device/timers.go
index f740cf0..fa44874 100644
--- a/device/timers.go
+++ b/device/timers.go
@@ -14,10 +14,8 @@ import (
"time"
)
-/* This Timer structure and related functions should roughly copy the interface of
- * the Linux kernel's struct timer_list.
- */
-
+// A Timer manages time-based aspects of the WireGuard protocol.
+// Timer roughly copies the interface of the Linux kernel's struct timer_list.
type Timer struct {
*time.Timer
modifyingLock sync.RWMutex
@@ -213,6 +211,9 @@ func (peer *Peer) timersInit() {
peer.timers.newHandshake = peer.NewTimer(expiredNewHandshake)
peer.timers.zeroKeyMaterial = peer.NewTimer(expiredZeroKeyMaterial)
peer.timers.persistentKeepalive = peer.NewTimer(expiredPersistentKeepalive)
+}
+
+func (peer *Peer) timersStart() {
atomic.StoreUint32(&peer.timers.handshakeAttempts, 0)
peer.timers.sentLastMinuteHandshake.Set(false)
peer.timers.needAnotherKeepalive.Set(false)