Skip to content

Commit 93be8fe

Browse files
committed
quic: log packet_dropped events
Log unparsable or otherwise discarded packets. For golang/go#58547 Change-Id: Ief64174d91c93691bd524515aa6518e487543ced Reviewed-on: https://go-review.googlesource.com/c/net/+/564017 Reviewed-by: Jonathan Amsterdam <jba@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
1 parent 6e383c4 commit 93be8fe

File tree

2 files changed

+34
-3
lines changed

2 files changed

+34
-3
lines changed

internal/quic/conn_recv.go

+12-3
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ package quic
88

99
import (
1010
"bytes"
11+
"context"
1112
"encoding/binary"
1213
"errors"
1314
"time"
@@ -56,9 +57,16 @@ func (c *Conn) handleDatagram(now time.Time, dgram *datagram) {
5657
if len(buf) == len(dgram.b) && len(buf) > statelessResetTokenLen {
5758
var token statelessResetToken
5859
copy(token[:], buf[len(buf)-len(token):])
59-
c.handleStatelessReset(now, token)
60+
if c.handleStatelessReset(now, token) {
61+
return
62+
}
6063
}
6164
// Invalid data at the end of a datagram is ignored.
65+
if c.logEnabled(QLogLevelPacket) {
66+
c.log.LogAttrs(context.Background(), QLogLevelPacket,
67+
"connectivity:packet_dropped",
68+
)
69+
}
6270
break
6371
}
6472
c.idleHandlePacketReceived(now)
@@ -562,10 +570,11 @@ func (c *Conn) handleHandshakeDoneFrame(now time.Time, space numberSpace, payloa
562570

563571
var errStatelessReset = errors.New("received stateless reset")
564572

565-
func (c *Conn) handleStatelessReset(now time.Time, resetToken statelessResetToken) {
573+
func (c *Conn) handleStatelessReset(now time.Time, resetToken statelessResetToken) (valid bool) {
566574
if !c.connIDState.isValidStatelessResetToken(resetToken) {
567-
return
575+
return false
568576
}
569577
c.setFinalError(errStatelessReset)
570578
c.enterDraining(now)
579+
return true
571580
}

internal/quic/qlog_test.go

+22
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
package quic
88

99
import (
10+
"bytes"
1011
"encoding/hex"
1112
"encoding/json"
1213
"fmt"
@@ -230,6 +231,27 @@ func TestQLogLoss(t *testing.T) {
230231
})
231232
}
232233

234+
func TestQLogPacketDropped(t *testing.T) {
235+
qr := &qlogRecord{}
236+
tc := newTestConn(t, clientSide, permissiveTransportParameters, qr.config)
237+
tc.handshake()
238+
239+
// A garbage-filled datagram with a DCID matching this connection.
240+
dgram := bytes.Join([][]byte{
241+
{headerFormShort | fixedBit},
242+
testLocalConnID(0),
243+
make([]byte, 100),
244+
[]byte{1, 2, 3, 4}, // random data, to avoid this looking like a stateless reset
245+
}, nil)
246+
tc.endpoint.write(&datagram{
247+
b: dgram,
248+
})
249+
250+
qr.wantEvents(t, jsonEvent{
251+
"name": "connectivity:packet_dropped",
252+
})
253+
}
254+
233255
type nopCloseWriter struct {
234256
io.Writer
235257
}

0 commit comments

Comments
 (0)