diff --git a/derp/derp_server.go b/derp/derp_server.go index e87596b4c..75f3e039e 100644 --- a/derp/derp_server.go +++ b/derp/derp_server.go @@ -39,8 +39,9 @@ type Server struct { logf logger.Logf // Counters: - packetsSent int64 - bytesSent int64 + packetsSent, bytesSent int64 + packetsRecv, bytesRecv int64 + packetsDropped int64 mu sync.Mutex closed bool @@ -221,6 +222,7 @@ func (s *Server) accept(nc net.Conn, brw *bufio.ReadWriter) error { s.mu.Unlock() if dst == nil { + atomic.AddInt64(&s.packetsDropped, 1) s.logf("derp: %s: client %x: dropping packet for unknown %x", nc.RemoteAddr(), c.key, dstKey) continue } @@ -351,6 +353,8 @@ func (s *Server) recvPacket(ctx context.Context, br *bufio.Reader, frameLen uint if _, err := io.ReadFull(br, contents); err != nil { return key.Public{}, nil, err } + atomic.AddInt64(&s.packetsRecv, 1) + atomic.AddInt64(&s.bytesRecv, int64(len(contents))) return dstKey, contents, nil } @@ -422,6 +426,9 @@ func (s *Server) Stats() *ServerStats { TotalAccepts: s.accepts, PacketsSent: atomic.LoadInt64(&s.packetsSent), BytesSent: atomic.LoadInt64(&s.bytesSent), + PacketsReceived: atomic.LoadInt64(&s.packetsRecv), + BytesReceived: atomic.LoadInt64(&s.bytesRecv), + PacketsDropped: atomic.LoadInt64(&s.packetsDropped), } } @@ -452,4 +459,7 @@ type ServerStats struct { TotalAccepts int64 `json:"totalAccepts"` PacketsSent int64 `json:"packetsSent"` BytesSent int64 `json:"bytesSent"` + PacketsReceived int64 `json:"packetsReceived"` + BytesReceived int64 `json:"bytessReceived"` + PacketsDropped int64 `json:"packetsDropped"` }