tailscale/net
Joe Tsai 2e5d08ec4f
net/connstats: invert network logging data flow (#6272)
Previously, tstun.Wrapper and magicsock.Conn managed their
own statistics data structure and relied on an external call to
Extract to extract (and reset) the statistics.
This makes it difficult to ensure a maximum size on the statistics
as the caller has no introspection into whether the number
of unique connections is getting too large.

Invert the control flow such that a *connstats.Statistics
is registered with tstun.Wrapper and magicsock.Conn.
Methods on non-nil *connstats.Statistics are called for every packet.
This allows the implementation of connstats.Statistics (in the future)
to better control when it needs to flush to ensure
bounds on maximum sizes.

The value registered into tstun.Wrapper and magicsock.Conn could
be an interface, but that has two performance detriments:

1. Method calls on interface values are more expensive since
they must go through a virtual method dispatch.

2. The implementation would need a sync.Mutex to protect the
statistics value instead of using an atomic.Pointer.

Given that methods on constats.Statistics are called for every packet,
we want reduce the CPU cost on this hot path.

Signed-off-by: Joe Tsai <joetsai@digital-static.net>
2022-11-28 15:59:33 -08:00
..
connstats net/connstats: invert network logging data flow (#6272) 2022-11-28 15:59:33 -08:00
dns net/dns: retry overwriting hosts file on Windows 2022-11-23 11:36:50 -05:00
dnscache net/dnscache: Handle 4-in-6 addresses in DNS responses 2022-10-23 08:41:51 -07:00
dnsfallback all: remove old +build tags 2022-11-04 07:25:42 -07:00
flowtrack net/flowtrack: add json tags to Tuple (#5849) 2022-10-05 19:40:49 -07:00
interfaces ipn/ipnlocal: don't warn about serve listener failing on IPv6-less machines 2022-11-13 10:11:25 -08:00
netaddr all: migrate code from netaddr.FromStdAddr to Go 1.18 2022-08-02 22:25:07 -07:00
netcheck net/netcheck: don't use a space in the captive portal challenge 2022-11-08 16:58:54 -05:00
neterror net/{neterror,dns/resolver}: move PacketWasTruncated to neterror from DNS code 2022-01-03 14:03:30 -08:00
netknob all: disable TCP keep-alives on iOS/Android 2021-09-28 12:03:18 -07:00
netns all: remove old +build tags 2022-11-04 07:25:42 -07:00
netstat all: remove old +build tags 2022-11-04 07:25:42 -07:00
nettest ssh/tailssh: add TestSSHAuthFlow 2022-10-09 10:27:31 -07:00
netutil all: fix spelling mistakes 2022-09-29 13:36:13 -07:00
packet all: fix spelling mistakes 2022-09-29 13:36:13 -07:00
ping all: fix spelling mistakes 2022-09-29 13:36:13 -07:00
portmapper net/portmapper: add test for Huawei router 2022-11-25 07:42:31 -08:00
proxymux net/proxymux: add a listener mux that can run SOCKS and HTTP on a single socket. 2021-11-29 16:49:48 -08:00
routetable all: remove old +build tags 2022-11-04 07:25:42 -07:00
socks5 net/socks5: use new Go 1.19 binary.AppendByteOrder.AppendUintX 2022-08-05 08:30:48 -07:00
speedtest net/speedtest: retune to meet iperf on localhost in a VM 2022-09-23 10:46:04 -07:00
stun net/netcheck: deflake (maybe) magicsock's TestNewConn 2022-11-05 22:02:13 -07:00
tlsdial all: remove old +build tags 2022-11-04 07:25:42 -07:00
tsaddr ipn/ipnlocal: also accept service IP IPv6 literal in brackets for quad100 2022-11-16 11:47:42 -08:00
tsdial all: standardize on PeerAPI 2022-11-16 22:49:13 +05:00
tshttpproxy net/tshttpproxy: don't ignore env-based HTTP proxies after system lookups fail 2022-11-14 09:11:33 -08:00
tstun net/connstats: invert network logging data flow (#6272) 2022-11-28 15:59:33 -08:00
wsconn net/wsconn: add back custom wrapper for turning a websocket.Conn into a net.Conn 2022-10-18 15:39:32 -07:00