From a3fe9445cc6d4d1b7e410a37da3fe177c35b0137 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Tue, 28 Jan 2020 17:37:32 +0700 Subject: [PATCH] set the packet_size on the packet_received and packet_sent event --- qlog/packet_header.go | 6 ++++-- qlog/qlog.go | 18 +++++++++++------- qlog/qlog_test.go | 11 +++++++++++ session.go | 4 ++-- 4 files changed, 28 insertions(+), 11 deletions(-) diff --git a/qlog/packet_header.go b/qlog/packet_header.go index 73e0c8d2..5428defa 100644 --- a/qlog/packet_header.go +++ b/qlog/packet_header.go @@ -60,8 +60,10 @@ func transformExtendedHeader(hdr *wire.ExtendedHeader) *packetHeader { type packetHeader struct { PacketNumber protocol.PacketNumber - PacketSize protocol.ByteCount PayloadLength protocol.ByteCount + // Size of the QUIC packet (QUIC header + payload). + // See https://github.com/quiclog/internet-drafts/issues/40. + PacketSize protocol.ByteCount Version protocol.VersionNumber SrcConnectionID protocol.ConnectionID @@ -70,8 +72,8 @@ type packetHeader struct { func (h packetHeader) MarshalJSONObject(enc *gojay.Encoder) { enc.StringKey("packet_number", toString(int64(h.PacketNumber))) - enc.Int64KeyOmitEmpty("packet_size", int64(h.PacketSize)) enc.Int64KeyOmitEmpty("payload_length", int64(h.PayloadLength)) + enc.Int64KeyOmitEmpty("packet_size", int64(h.PacketSize)) if h.Version != 0 { enc.StringKey("version", versionNumber(h.Version).String()) } diff --git a/qlog/qlog.go b/qlog/qlog.go index 01c6b23d..2eec8e6c 100644 --- a/qlog/qlog.go +++ b/qlog/qlog.go @@ -14,10 +14,10 @@ import ( // A Tracer records events to be exported to a qlog. type Tracer interface { Export() error - SentPacket(time.Time, *wire.ExtendedHeader, *wire.AckFrame, []wire.Frame) + SentPacket(t time.Time, hdr *wire.ExtendedHeader, packetSize protocol.ByteCount, ack *wire.AckFrame, frames []wire.Frame) ReceivedRetry(time.Time, *wire.Header) - ReceivedPacket(time.Time, *wire.ExtendedHeader, []wire.Frame) - UpdatedMetrics(time time.Time, rttStats *congestion.RTTStats, cwnd protocol.ByteCount, bytesInFLight protocol.ByteCount, packetsInFlight int) + ReceivedPacket(t time.Time, hdr *wire.ExtendedHeader, packetSize protocol.ByteCount, frames []wire.Frame) + UpdatedMetrics(t time.Time, rttStats *congestion.RTTStats, cwnd protocol.ByteCount, bytesInFLight protocol.ByteCount, packetsInFlight int) LostPacket(time.Time, protocol.EncryptionLevel, protocol.PacketNumber, PacketLossReason) } @@ -60,7 +60,7 @@ func (t *tracer) Export() error { return t.w.Close() } -func (t *tracer) SentPacket(time time.Time, hdr *wire.ExtendedHeader, ack *wire.AckFrame, frames []wire.Frame) { +func (t *tracer) SentPacket(time time.Time, hdr *wire.ExtendedHeader, packetSize protocol.ByteCount, ack *wire.AckFrame, frames []wire.Frame) { numFrames := len(frames) if ack != nil { numFrames++ @@ -72,26 +72,30 @@ func (t *tracer) SentPacket(time time.Time, hdr *wire.ExtendedHeader, ack *wire. for _, f := range frames { fs = append(fs, *transformFrame(f)) } + header := *transformExtendedHeader(hdr) + header.PacketSize = packetSize t.events = append(t.events, event{ Time: time, eventDetails: eventPacketSent{ PacketType: getPacketTypeFromHeader(hdr), - Header: *transformExtendedHeader(hdr), + Header: header, Frames: fs, }, }) } -func (t *tracer) ReceivedPacket(time time.Time, hdr *wire.ExtendedHeader, frames []wire.Frame) { +func (t *tracer) ReceivedPacket(time time.Time, hdr *wire.ExtendedHeader, packetSize protocol.ByteCount, frames []wire.Frame) { fs := make([]frame, len(frames)) for i, f := range frames { fs[i] = *transformFrame(f) } + header := *transformExtendedHeader(hdr) + header.PacketSize = packetSize t.events = append(t.events, event{ Time: time, eventDetails: eventPacketReceived{ PacketType: getPacketTypeFromHeader(hdr), - Header: *transformExtendedHeader(hdr), + Header: header, Frames: fs, }, }) diff --git a/qlog/qlog_test.go b/qlog/qlog_test.go index 62f872ff..f7ae6313 100644 --- a/qlog/qlog_test.go +++ b/qlog/qlog_test.go @@ -93,6 +93,7 @@ var _ = Describe("Tracer", func() { }, PacketNumber: 1337, }, + 987, nil, []wire.Frame{ &wire.MaxStreamDataFrame{StreamID: 42, ByteOffset: 987}, @@ -105,6 +106,10 @@ var _ = Describe("Tracer", func() { Expect(eventName).To(Equal("packet_sent")) Expect(ev).To(HaveKeyWithValue("packet_type", "handshake")) Expect(ev).To(HaveKey("header")) + hdr := ev["header"].(map[string]interface{}) + Expect(hdr).To(HaveKeyWithValue("packet_size", float64(987))) + Expect(hdr).To(HaveKeyWithValue("packet_number", "1337")) + Expect(hdr).To(HaveKeyWithValue("scid", "04030201")) Expect(ev).To(HaveKey("frames")) frames := ev["frames"].([]interface{}) Expect(frames).To(HaveLen(2)) @@ -119,6 +124,7 @@ var _ = Describe("Tracer", func() { Header: wire.Header{DestConnectionID: protocol.ConnectionID{1, 2, 3, 4}}, PacketNumber: 1337, }, + 123, &wire.AckFrame{AckRanges: []wire.AckRange{{Smallest: 1, Largest: 10}}}, []wire.Frame{&wire.MaxDataFrame{ByteOffset: 987}}, ) @@ -146,6 +152,7 @@ var _ = Describe("Tracer", func() { }, PacketNumber: 1337, }, + 789, []wire.Frame{ &wire.MaxStreamDataFrame{StreamID: 42, ByteOffset: 987}, &wire.StreamFrame{StreamID: 123, Offset: 1234, Data: []byte("foobar"), FinBit: true}, @@ -157,6 +164,10 @@ var _ = Describe("Tracer", func() { Expect(eventName).To(Equal("packet_received")) Expect(ev).To(HaveKeyWithValue("packet_type", "initial")) Expect(ev).To(HaveKey("header")) + hdr := ev["header"].(map[string]interface{}) + Expect(hdr).To(HaveKeyWithValue("packet_size", float64(789))) + Expect(hdr).To(HaveKeyWithValue("packet_number", "1337")) + Expect(hdr).To(HaveKeyWithValue("scid", "04030201")) Expect(ev).To(HaveKey("frames")) Expect(ev["frames"].([]interface{})).To(HaveLen(2)) }) diff --git a/session.go b/session.go index 94f11374..d3dfb0c9 100644 --- a/session.go +++ b/session.go @@ -866,7 +866,7 @@ func (s *session) handleUnpackedPacket(packet *unpackedPacket, rcvTime time.Time }) } if s.qlogger != nil { - s.qlogger.ReceivedPacket(rcvTime, packet.hdr, frames) + s.qlogger.ReceivedPacket(rcvTime, packet.hdr, protocol.ByteCount(len(packet.data)), frames) } return s.receivedPacketHandler.ReceivedPacket(packet.packetNumber, packet.encryptionLevel, rcvTime, isAckEliciting) @@ -1337,7 +1337,7 @@ func (s *session) sendPackedPacket(packet *packedPacket) { for _, f := range packet.frames { frames = append(frames, f.Frame) } - s.qlogger.SentPacket(now, packet.header, packet.ack, frames) + s.qlogger.SentPacket(now, packet.header, protocol.ByteCount(len(packet.raw)), packet.ack, frames) } s.logPacket(packet) s.connIDManager.SentPacket()