]> git.ipfire.org Git - thirdparty/wireguard-go.git/commitdiff
Added last_handshake_time fields to UAPI
authorMathias Hall-Andersen <mathias@hall-andersen.dk>
Tue, 18 Jul 2017 13:22:56 +0000 (15:22 +0200)
committerMathias Hall-Andersen <mathias@hall-andersen.dk>
Tue, 18 Jul 2017 13:22:56 +0000 (15:22 +0200)
src/config.go
src/peer.go
src/receive.go
src/send.go
src/timers.go

index d92e8d711dadced23a86ed3e5cdf04920aad0779..ad4ac97489cd470af7dc2101810e83fcd4747633 100644 (file)
@@ -10,6 +10,7 @@ import (
        "strings"
        "sync/atomic"
        "syscall"
+       "time"
 )
 
 const (
@@ -58,8 +59,15 @@ func ipcGetOperation(device *Device, socket *bufio.ReadWriter) *IPCError {
                        if peer.endpoint != nil {
                                send("endpoint=" + peer.endpoint.String())
                        }
-                       send(fmt.Sprintf("tx_bytes=%d", peer.txBytes))
-                       send(fmt.Sprintf("rx_bytes=%d", peer.rxBytes))
+
+                       nano := atomic.LoadInt64(&peer.stats.lastHandshakeNano)
+                       secs := nano / time.Second.Nanoseconds()
+                       nano %= time.Second.Nanoseconds()
+
+                       send(fmt.Sprintf("last_handshake_time_sec=%d", secs))
+                       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),
                        ))
index 408c605ab108ba711b235221d4b8d9961aaac166..8eea92946eee8898b8aa0b0d2409c9def5de7a96 100644 (file)
@@ -19,9 +19,12 @@ type Peer struct {
        keyPairs                    KeyPairs
        handshake                   Handshake
        device                      *Device
-       txBytes                     uint64
-       rxBytes                     uint64
-       time                        struct {
+       stats                       struct {
+               txBytes           uint64 // bytes send to peer (endpoint)
+               rxBytes           uint64 // bytes received from peer
+               lastHandshakeNano int64  // nano seconds since epoch
+       }
+       time struct {
                mutex         sync.RWMutex
                lastSend      time.Time // last send message
                lastHandshake time.Time // last completed handshake
index e063c99b146e3d1760b68c109517f1e42cf4ec18..d97ca41de55b3b0ef4b3e77b823ddb47ec8ee29e 100644 (file)
@@ -540,7 +540,7 @@ func (peer *Peer) RoutineSequentialReceiver() {
                                return
                        }
 
-                       atomic.AddUint64(&peer.rxBytes, uint64(len(elem.packet)))
+                       atomic.AddUint64(&peer.stats.rxBytes, uint64(len(elem.packet)))
                        device.addToInboundQueue(device.queue.inbound, elem)
                }()
        }
index ca42934556a7503507561c923078e803bfe7e092..7cdb806726976787b6dc35a458bead601780cb37 100644 (file)
@@ -379,7 +379,8 @@ func (peer *Peer) RoutineSequentialSender() {
                                if err != nil {
                                        return
                                }
-                               atomic.AddUint64(&peer.txBytes, uint64(len(elem.packet)))
+
+                               atomic.AddUint64(&peer.stats.txBytes, uint64(len(elem.packet)))
                                peer.TimerResetKeepalive()
                        }()
 
index fd2bdc35b30c0fb7fb2b75ecca8c9854a6bb9c51..24544147e7730e2cbd1d27f4d8487e19b8a2d6b6 100644 (file)
@@ -52,6 +52,10 @@ func (peer *Peer) KeepKeyFreshReceiving() {
 func (peer *Peer) EventHandshakeComplete() {
        peer.device.log.Info.Println("Negotiated new handshake for", peer.String())
        peer.timer.zeroAllKeys.Reset(RejectAfterTime * 3)
+       atomic.StoreInt64(
+               &peer.stats.lastHandshakeNano,
+               time.Now().UnixNano(),
+       )
        signalSend(peer.signal.handshakeCompleted)
 }