Repository navigation
Conversation
Add an optional mtu field to the Link of the meshnet Topology CRD (Go type and the CRD schemas). The schema is structural, so without it the API server would prune the field. Part of b/577230109.
LinkMTU picks the MTU for both ends of a link: the larger of the two ends' requests, else the LINK_MTU environment variable, else zero (kernel default). SetLinkMTU sets the MTU of an interface in a pod network namespace. Part of b/577230109.
meshnetd now applies the MTU from the Topology link spec. Both ends of a link get the larger of the MTUs their two Link entries request, or LINK_MTU, or the kernel default when neither is set, so existing topologies are unchanged. - veth (same node): the pair is created with the MTU on both ends. - gRPC (cross node): each daemon sets the MTU of its TAP; the daemon asked to create the remote end looks the MTU up from its own Topology cache, so the wire protocol is unchanged. - VXLAN: the MTU is applied best effort, since the kernel caps a vxlan device at the node interface MTU less the encapsulation overhead. MTUs are applied when an interface is created, not enforced on every resync, so meshnetd does not fight a NOS that sets the MTU of its own interfaces. Part of b/577230109.
Copy topo.Interface.mtu into the meshnet Topology link spec for every node, including Keysight, so meshnet sets the MTU of the link. Part of b/577230109.
Part of b/577230109.
bstoll
reviewed
Nov 4, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
KNE ignored
topo.Interface.mtu, so every meshnet link came up at the kernel default of 1500. Frames larger than that were dropped between pods, which breaks jumbo-frame tests.This change passes the interface MTU from the KNE topology to meshnet, and meshnet sets it on both ends of every link.
Changes
mtufield to the meshnet Topology link spec (Go type, meshnet base CRD, andmanifests/meshnet/{grpc,vxlan}). The schema is structural, so without the CRD change the API server would drop the field.GetNodeLinksand the Keysight node copyInterface.mtuinto the link spec.LINK_MTUenv var, or leaves the kernel default when that isn't set either. Existing topologies are unchanged.docs/performance_tuning.md.Testing
LinkMTU, the Topology MTU lookups, andGetNodeLinks.SetLinkMTU, veth MTU on both ends) pass underunshare -rnm.go testpasses for KNEtopo/...and all ofthird_party/meshnet. golangci-lint reports no new issues.Independent of #801; the two branches merge cleanly.