diff --git a/pkg/nmlite/link/manager.go b/pkg/nmlite/link/manager.go index fec9b075..5996bc66 100644 --- a/pkg/nmlite/link/manager.go +++ b/pkg/nmlite/link/manager.go @@ -444,12 +444,22 @@ func (nm *NetlinkManager) ReconcileLink(link *Link, expected []types.IPAddress, expectedGateways := make(map[string]net.IP) + mtu := link.Attrs().MTU + expectedMTU := mtu // add all expected addresses to the map for _, addr := range expected { expectedAddrs[addr.String()] = &addr if addr.Gateway != nil { expectedGateways[addr.String()] = addr.Gateway } + if addr.MTU != 0 { + mtu = addr.MTU + } + } + if expectedMTU != mtu { + if err := link.SetMTU(expectedMTU); err != nil { + nm.logger.Warn().Err(err).Int("expected_mtu", expectedMTU).Int("mtu", mtu).Msg("failed to set MTU") + } } addrs, err := nm.AddrList(link, family) diff --git a/pkg/nmlite/link/netlink.go b/pkg/nmlite/link/netlink.go index d726e4b9..12358d32 100644 --- a/pkg/nmlite/link/netlink.go +++ b/pkg/nmlite/link/netlink.go @@ -118,6 +118,13 @@ func (l *Link) AddrList(family int) ([]netlink.Addr, error) { return netlink.AddrList(l.Link, family) } +func (l *Link) SetMTU(mtu int) error { + l.mu.Lock() + defer l.mu.Unlock() + + return netlink.LinkSetMTU(l.Link, mtu) +} + // HasGlobalUnicastAddress returns true if the link has a global unicast address func (l *Link) HasGlobalUnicastAddress() bool { addrs, err := l.AddrList(AfUnspec)