summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2018-04-18 07:24:33 +0200
committerJason A. Donenfeld <Jason@zx2c4.com>2018-04-18 07:24:33 +0200
commiteb6728400ba656990aa4518dc4f5f2a6f0f19f8e (patch)
tree07582cbeda3eee2c9d0c75b03e635ff598793665
parent099219be2a1e58b1b34b0202e1466480a4fa0cbc (diff)
downloadwireguard-go-eb6728400ba656990aa4518dc4f5f2a6f0f19f8e.tar.gz
wireguard-go-eb6728400ba656990aa4518dc4f5f2a6f0f19f8e.zip
Use simple 16-bit integer for persistent keepalive
Races for this aren't a huge problem.
Diffstat (limited to '')
-rw-r--r--peer.go3
-rw-r--r--timers.go6
-rw-r--r--uapi.go10
3 files changed, 8 insertions, 11 deletions
diff --git a/peer.go b/peer.go
index 3a4f5f2..8acdfbc 100644
--- a/peer.go
+++ b/peer.go
@@ -13,13 +13,14 @@ const (
)
type Peer struct {
- persistentKeepaliveInterval uint64
isRunning AtomicBool
mutex sync.RWMutex
keyPairs KeyPairs
handshake Handshake
device *Device
endpoint Endpoint
+ persistentKeepaliveInterval uint16
+ _ uint32 // padding for alignment
stats struct {
txBytes uint64 // bytes send to peer (endpoint)
diff --git a/timers.go b/timers.go
index 76dffb9..e118c38 100644
--- a/timers.go
+++ b/timers.go
@@ -105,7 +105,7 @@ func (peer *Peer) TimerAnyAuthenticatedPacketReceived() {
* Push persistent keep-alive into the future
*/
func (peer *Peer) TimerAnyAuthenticatedPacketTraversal() {
- interval := atomic.LoadUint64(&peer.persistentKeepaliveInterval)
+ interval := peer.persistentKeepaliveInterval
if interval > 0 {
duration := time.Duration(interval) * time.Second
peer.timer.keepalivePersistent.Reset(duration)
@@ -199,7 +199,7 @@ func (peer *Peer) RoutineTimerHandler() {
peer.timer.handshakeNew.Stop()
peer.timer.zeroAllKeys.Stop()
- interval := atomic.LoadUint64(&peer.persistentKeepaliveInterval)
+ interval := peer.persistentKeepaliveInterval
if interval > 0 {
duration := time.Duration(interval) * time.Second
peer.timer.keepalivePersistent.Reset(duration)
@@ -225,7 +225,7 @@ func (peer *Peer) RoutineTimerHandler() {
case <-peer.timer.keepalivePersistent.Wait():
- interval := atomic.LoadUint64(&peer.persistentKeepaliveInterval)
+ interval := peer.persistentKeepaliveInterval
if interval > 0 {
logDebug.Println(peer.String(), ": Send keep-alive (persistent)")
peer.timer.keepalivePassive.Stop()
diff --git a/uapi.go b/uapi.go
index 01cdab6..c795b73 100644
--- a/uapi.go
+++ b/uapi.go
@@ -84,9 +84,7 @@ func ipcGetOperation(device *Device, socket *bufio.ReadWriter) *IPCError {
send(fmt.Sprintf("last_handshake_time_nsec=%d", nano))
send(fmt.Sprintf("tx_bytes=%d", peer.stats.txBytes))
send(fmt.Sprintf("rx_bytes=%d", peer.stats.rxBytes))
- send(fmt.Sprintf("persistent_keepalive_interval=%d",
- atomic.LoadUint64(&peer.persistentKeepaliveInterval),
- ))
+ send(fmt.Sprintf("persistent_keepalive_interval=%d", peer.persistentKeepaliveInterval))
for _, ip := range device.routing.table.AllowedIPs(peer) {
send("allowed_ip=" + ip.String())
@@ -322,10 +320,8 @@ func ipcSetOperation(device *Device, socket *bufio.ReadWriter) *IPCError {
return &IPCError{Code: ipcErrorInvalid}
}
- old := atomic.SwapUint64(
- &peer.persistentKeepaliveInterval,
- secs,
- )
+ old := peer.persistentKeepaliveInterval
+ peer.persistentKeepaliveInterval = uint16(secs)
// send immediate keep-alive