Skip to content

Expose GSO capability through LinkEndpointFilter - #90

Open
kevmo314 wants to merge 1 commit into
SagerNet:devfrom
kevmo314:gso-passthrough
Open

Expose GSO capability through LinkEndpointFilter#90
kevmo314 wants to merge 1 commit into
SagerNet:devfrom
kevmo314:gso-passthrough

Conversation

@kevmo314

@kevmo314 kevmo314 commented Sep 5, 2026

Copy link
Copy Markdown

Expose the wrapped endpoint’s GSO capabilities through LinkEndpointFilter so gVisor can send larger TCP segments for the kernel to split. Without this, the filter hides offload support and forces gVisor to send MSS-sized segments, limiting throughput.

gVisor already checks whether its link endpoint implements stack.GSOEndpoint so this allows gVisor to pick up on the otherwise hidden interface and increase throughput.

LinkEndpointFilter embeds the stack.LinkEndpoint interface, which promotes
only that interface's methods. The fdbased endpoint underneath also
implements stack.GSOEndpoint, but the filter did not, so gVisor's
Route.HasHostGSOCapability type assertion on the NIC's endpoint failed and
every TCP endpoint sent MSS-sized segments even with vnet_hdr offload on.

Passing the two methods through lets the sender build 64 KiB segments for
the kernel to split. On an MT7986 router a single-stream download through
the gvisor stack went from 192 to 513 Mbit/s and upload from 828 to 907.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant