net/tstun,wgengine{/netstack/gro}: refactor and re-enable gVisor GRO for Linux (#13172)
In2f27319baf
we disabled GRO due to a data race around concurrent calls to tstun.Wrapper.Write(). This commit refactors GRO to be thread-safe, and re-enables it on Linux. This refactor now carries a GRO type across tstun and netstack APIs with a lifetime that is scoped to a single tstun.Wrapper.Write() call. In25f0a3fc8f
we used build tags to prevent importation of gVisor's GRO package on iOS as at the time we believed it was contributing to additional memory usage on that platform. It wasn't, so this commit simplifies and removes those build tags. Updates tailscale/corp#22353 Updates tailscale/corp#22125 Updates #6816 Signed-off-by: Jordan Whited <jordan@tailscale.com>
This commit is contained in:
@ -79,7 +79,7 @@ func TestInjectInboundLeak(t *testing.T) {
|
||||
const N = 10_000
|
||||
ms0 := getMemStats()
|
||||
for range N {
|
||||
outcome := ns.injectInbound(pkt, tunWrap)
|
||||
outcome, _ := ns.injectInbound(pkt, tunWrap, nil)
|
||||
if outcome != filter.DropSilently {
|
||||
t.Fatalf("got outcome %v; want DropSilently", outcome)
|
||||
}
|
||||
@ -569,7 +569,7 @@ func TestTCPForwardLimits(t *testing.T) {
|
||||
// When injecting this packet, we want the outcome to be "drop
|
||||
// silently", which indicates that netstack is processing the
|
||||
// packet and not delivering it to the host system.
|
||||
if resp := impl.injectInbound(&parsed, impl.tundev); resp != filter.DropSilently {
|
||||
if resp, _ := impl.injectInbound(&parsed, impl.tundev, nil); resp != filter.DropSilently {
|
||||
t.Errorf("got filter outcome %v, want filter.DropSilently", resp)
|
||||
}
|
||||
|
||||
@ -587,7 +587,7 @@ func TestTCPForwardLimits(t *testing.T) {
|
||||
// Inject another packet, which will be deduplicated and thus not
|
||||
// increment our counter.
|
||||
parsed.Decode(pkt)
|
||||
if resp := impl.injectInbound(&parsed, impl.tundev); resp != filter.DropSilently {
|
||||
if resp, _ := impl.injectInbound(&parsed, impl.tundev, nil); resp != filter.DropSilently {
|
||||
t.Errorf("got filter outcome %v, want filter.DropSilently", resp)
|
||||
}
|
||||
|
||||
@ -655,7 +655,7 @@ func TestTCPForwardLimits_PerClient(t *testing.T) {
|
||||
// When injecting this packet, we want the outcome to be "drop
|
||||
// silently", which indicates that netstack is processing the
|
||||
// packet and not delivering it to the host system.
|
||||
if resp := impl.injectInbound(&parsed, impl.tundev); resp != filter.DropSilently {
|
||||
if resp, _ := impl.injectInbound(&parsed, impl.tundev, nil); resp != filter.DropSilently {
|
||||
t.Fatalf("got filter outcome %v, want filter.DropSilently", resp)
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user