quic: fix packet size logging
The qlog schema puts packet sizes as part of a "raw" field
of type RawInfo, not in the packet_sent/packet_received event.
Move to the correct location.
Change-Id: I4308d4bdb961cf83e29af014b60f50ed029cb915
Reviewed-on: https://go-review.googlesource.com/c/net/+/550797
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Jonathan Amsterdam <jba@google.com>
diff --git a/internal/quic/conn_send.go b/internal/quic/conn_send.go
index c2d8d14..ccb4675 100644
--- a/internal/quic/conn_send.go
+++ b/internal/quic/conn_send.go
@@ -76,7 +76,7 @@
logSentPacket(c, packetTypeInitial, pnum, p.srcConnID, p.dstConnID, c.w.payload())
}
if c.logEnabled(QLogLevelPacket) && len(c.w.payload()) > 0 {
- c.logPacketSent(packetTypeInitial, pnum, p.srcConnID, p.dstConnID, c.w.payload())
+ c.logPacketSent(packetTypeInitial, pnum, p.srcConnID, p.dstConnID, c.w.packetLen(), c.w.payload())
}
sentInitial = c.w.finishProtectedLongHeaderPacket(pnumMaxAcked, c.keysInitial.w, p)
if sentInitial != nil {
@@ -108,7 +108,7 @@
logSentPacket(c, packetTypeHandshake, pnum, p.srcConnID, p.dstConnID, c.w.payload())
}
if c.logEnabled(QLogLevelPacket) && len(c.w.payload()) > 0 {
- c.logPacketSent(packetTypeHandshake, pnum, p.srcConnID, p.dstConnID, c.w.payload())
+ c.logPacketSent(packetTypeHandshake, pnum, p.srcConnID, p.dstConnID, c.w.packetLen(), c.w.payload())
}
if sent := c.w.finishProtectedLongHeaderPacket(pnumMaxAcked, c.keysHandshake.w, p); sent != nil {
c.idleHandlePacketSent(now, sent)
@@ -139,7 +139,7 @@
logSentPacket(c, packetType1RTT, pnum, nil, dstConnID, c.w.payload())
}
if c.logEnabled(QLogLevelPacket) && len(c.w.payload()) > 0 {
- c.logPacketSent(packetType1RTT, pnum, nil, dstConnID, c.w.payload())
+ c.logPacketSent(packetType1RTT, pnum, nil, dstConnID, c.w.packetLen(), c.w.payload())
}
if sent := c.w.finish1RTTPacket(pnum, pnumMaxAcked, dstConnID, &c.keysAppData); sent != nil {
c.idleHandlePacketSent(now, sent)
diff --git a/internal/quic/packet_writer.go b/internal/quic/packet_writer.go
index 0c2b2ee..b4e54ce 100644
--- a/internal/quic/packet_writer.go
+++ b/internal/quic/packet_writer.go
@@ -47,6 +47,11 @@
return w.b
}
+// packet returns the size of the current packet.
+func (w *packetWriter) packetLen() int {
+ return len(w.b[w.pktOff:]) + aeadOverhead
+}
+
// payload returns the payload of the current packet.
func (w *packetWriter) payload() []byte {
return w.b[w.payOff:]
diff --git a/internal/quic/qlog.go b/internal/quic/qlog.go
index fea8b38..82ad92a 100644
--- a/internal/quic/qlog.go
+++ b/internal/quic/qlog.go
@@ -148,8 +148,6 @@
}
func (c *Conn) logLongPacketReceived(p longPacket, pkt []byte) {
- pnumLen := 1 + int(pkt[0]&0x03)
- length := pnumLen + len(p.payload)
var frames slog.Attr
if c.logEnabled(QLogLevelFrame) {
frames = c.packetFramesAttr(p.payload)
@@ -162,7 +160,9 @@
slog.Uint64("flags", uint64(pkt[0])),
slogHexstring("scid", p.srcConnID),
slogHexstring("dcid", p.dstConnID),
- slog.Int("length", length),
+ ),
+ slog.Group("raw",
+ slog.Int("length", len(pkt)),
),
frames,
)
@@ -180,14 +180,16 @@
slog.String("packet_type", packetType1RTT.qlogString()),
slog.Uint64("packet_number", uint64(p.num)),
slog.Uint64("flags", uint64(pkt[0])),
- slog.String("scid", ""),
slogHexstring("dcid", dstConnID),
),
+ slog.Group("raw",
+ slog.Int("length", len(pkt)),
+ ),
frames,
)
}
-func (c *Conn) logPacketSent(ptype packetType, pnum packetNumber, src, dst, payload []byte) {
+func (c *Conn) logPacketSent(ptype packetType, pnum packetNumber, src, dst []byte, pktLen int, payload []byte) {
var frames slog.Attr
if c.logEnabled(QLogLevelFrame) {
frames = c.packetFramesAttr(payload)
@@ -204,6 +206,9 @@
scid,
slogHexstring("dcid", dst),
),
+ slog.Group("raw",
+ slog.Int("length", pktLen),
+ ),
frames,
)
}