Skip to content

Commit

Permalink
wgengine/netstack: use build tags to exclude gVisor GRO importation o…
Browse files Browse the repository at this point in the history
…n iOS (tailscale#13015)

Updates tailscale/corp#22125

Signed-off-by: Jordan Whited <jordan@tailscale.com>
  • Loading branch information
jwhited authored Aug 3, 2024
1 parent a7a394e commit 25f0a3f
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 2 deletions.
16 changes: 16 additions & 0 deletions wgengine/netstack/gro_default.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
// Copyright (c) Tailscale Inc & AUTHORS
// SPDX-License-Identifier: BSD-3-Clause

//go:build !ios

package netstack

import (
nsgro "gvisor.dev/gvisor/pkg/tcpip/stack/gro"
)

// gro wraps a gVisor GRO implementation. It exists solely to prevent iOS from
// importing said package (see _ios.go).
type gro struct {
nsgro.GRO
}
30 changes: 30 additions & 0 deletions wgengine/netstack/gro_ios.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
// Copyright (c) Tailscale Inc & AUTHORS
// SPDX-License-Identifier: BSD-3-Clause

//go:build ios

package netstack

import (
"gvisor.dev/gvisor/pkg/tcpip/stack"
)

// gro on iOS delivers packets to its Dispatcher, immediately. This type exists
// to prevent importation of the gVisor GRO implementation as said package
// increases binary size. This is a penalty we do not wish to pay since we
// currently do not leverage GRO on iOS.
type gro struct {
Dispatcher stack.NetworkDispatcher
}

func (g *gro) Init(v bool) {
if v {
panic("GRO is not supported on this platform")
}
}

func (g *gro) Flush() {}

func (g *gro) Enqueue(pkt *stack.PacketBuffer) {
g.Dispatcher.DeliverNetworkPacket(pkt.NetworkProtocolNumber, pkt)
}
3 changes: 1 addition & 2 deletions wgengine/netstack/link_endpoint.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import (
"gvisor.dev/gvisor/pkg/tcpip/header"
"gvisor.dev/gvisor/pkg/tcpip/header/parse"
"gvisor.dev/gvisor/pkg/tcpip/stack"
"gvisor.dev/gvisor/pkg/tcpip/stack/gro"
"tailscale.com/net/packet"
"tailscale.com/types/ipproto"
)
Expand Down Expand Up @@ -96,7 +95,7 @@ type linkEndpoint struct {
dispatcher stack.NetworkDispatcher
linkAddr tcpip.LinkAddress
mtu uint32
gro gro.GRO // mu only guards access to gro.Dispatcher
gro gro // mu only guards access to gro.Dispatcher

q *queue // outbound
}
Expand Down

0 comments on commit 25f0a3f

Please sign in to comment.