Skip to content

Commit 2513d2d

Browse files
committed
net/{neterror,dns/resolver}: move PacketWasTruncated to neterror from DNS code
And delete the unused code in net/dns/resolver/neterr_*.go. Change-Id: Ibe62c486bacce2733eb9968c96a98cbbdb2758bd Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
1 parent dd45bba commit 2513d2d

File tree

6 files changed

+37
-90
lines changed

6 files changed

+37
-90
lines changed

net/dns/resolver/forwarder.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
dns "golang.org/x/net/dns/dnsmessage"
2626
"inet.af/netaddr"
2727
"tailscale.com/hostinfo"
28+
"tailscale.com/net/neterror"
2829
"tailscale.com/net/netns"
2930
"tailscale.com/net/tsdial"
3031
"tailscale.com/types/dnstype"
@@ -482,7 +483,7 @@ func (f *forwarder) send(ctx context.Context, fq *forwardQuery, rr resolverAndDe
482483
if err := ctx.Err(); err != nil {
483484
return nil, err
484485
}
485-
if packetWasTruncated(err) {
486+
if neterror.PacketWasTruncated(err) {
486487
err = nil
487488
} else {
488489
metricDNSFwdUDPErrorRead.Add(1)

net/dns/resolver/neterr_darwin.go

Lines changed: 0 additions & 30 deletions
This file was deleted.

net/dns/resolver/neterr_other.go

Lines changed: 0 additions & 16 deletions
This file was deleted.

net/dns/resolver/neterr_windows.go

Lines changed: 0 additions & 43 deletions
This file was deleted.

net/neterror/neterror.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,21 @@ func TreatAsLostUDP(err error) bool {
4040
}
4141
return false
4242
}
43+
44+
var packetWasTruncated func(error) bool // non-nil on Windows at least
45+
46+
// PacketWasTruncated reports whether err indicates truncation but the RecvFrom
47+
// that generated err was otherwise successful. On Windows, Go's UDP RecvFrom
48+
// calls WSARecvFrom which returns the WSAEMSGSIZE error code when the received
49+
// datagram is larger than the provided buffer. When that happens, both a valid
50+
// size and an error are returned (as per the partial fix for golang/go#14074).
51+
// If the WSAEMSGSIZE error is returned, then we ignore the error to get
52+
// semantics similar to the POSIX operating systems. One caveat is that it
53+
// appears that the source address is not returned when WSAEMSGSIZE occurs, but
54+
// we do not currently look at the source address.
55+
func PacketWasTruncated(err error) bool {
56+
if packetWasTruncated == nil {
57+
return false
58+
}
59+
return packetWasTruncated(err)
60+
}

net/neterror/neterror_windows.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// Copyright (c) 2021 Tailscale Inc & AUTHORS All rights reserved.
2+
// Use of this source code is governed by a BSD-style
3+
// license that can be found in the LICENSE file.
4+
5+
package neterror
6+
7+
import (
8+
"errors"
9+
10+
"golang.org/x/sys/windows"
11+
)
12+
13+
func init() {
14+
packetWasTruncated = func(err error) bool {
15+
return errors.Is(err, windows.WSAEMSGSIZE)
16+
}
17+
}

0 commit comments

Comments
 (0)