{"record":{"id":"1771513b877cb760","repo":"cilium/cilium","slug":"setting-up-gso-gro-on-geneve-netdev-w","errorCode":null,"errorMessage":"setting up GSO/GRO on GENEVE netdev: %w","messagePattern":"setting up GSO/GRO on GENEVE netdev: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"pkg/datapath/loader/netlink.go","lineNumber":195,"sourceCode":"\t\t}\n\n\t\tif err := netlink.AddrReplace(hostDev, &addr); err != nil {\n\t\t\treturn fmt.Errorf(\"failed to replace IPv6 address: %w\", err)\n\t\t}\n\t}\n\treturn nil\n}\n\n// setupTunnelDevice ensures the cilium_{mode} device is created and\n// unused leftover devices are cleaned up in case mode changes.\nfunc setupTunnelDevice(logger *slog.Logger, sysctl sysctl.Sysctl, mode tunnel.EncapProtocol, port, srcPortLow, srcPortHigh uint16, mtu int, bigtcp bigtcp.Config) error {\n\tswitch mode {\n\tcase tunnel.Geneve:\n\t\tif err := setupGeneveDevice(logger, sysctl, port, srcPortLow, srcPortHigh, mtu); err != nil {\n\t\t\treturn fmt.Errorf(\"setting up geneve device: %w\", err)\n\t\t}\n\t\tif err := setupTunnelGSOGRO(logger, defaults.GeneveDevice, bigtcp); err != nil {\n\t\t\treturn fmt.Errorf(\"setting up GSO/GRO on GENEVE netdev: %w\", err)\n\t\t}\n\t\tif err := removeDevice(defaults.VxlanDevice); err != nil {\n\t\t\treturn fmt.Errorf(\"removing %s: %w\", defaults.VxlanDevice, err)\n\t\t}\n\n\tcase tunnel.VXLAN:\n\t\tif err := setupVxlanDevice(logger, sysctl, port, srcPortLow, srcPortHigh, mtu); err != nil {\n\t\t\treturn fmt.Errorf(\"setting up vxlan device: %w\", err)\n\t\t}\n\t\tif err := setupTunnelGSOGRO(logger, defaults.VxlanDevice, bigtcp); err != nil {\n\t\t\treturn fmt.Errorf(\"setting up GSO/GRO on VXLAN netdev: %w\", err)\n\t\t}\n\t\tif err := removeDevice(defaults.GeneveDevice); err != nil {\n\t\t\treturn fmt.Errorf(\"removing %s: %w\", defaults.GeneveDevice, err)\n\t\t}\n\n\tdefault:\n\t\tif err := removeDevice(defaults.VxlanDevice); err != nil {","sourceCodeStart":177,"sourceCodeEnd":213,"githubUrl":"https://github.com/cilium/cilium/blob/ac7b90affa4baf0642e6685319d56907b3a73a6d/pkg/datapath/loader/netlink.go#L177-L213","documentation":"After creating the cilium_geneve device, setupTunnelDevice configures GSO/GRO (big TCP) via setupTunnelGSOGRO. Failure here is wrapped as this error. GSO/GRO tuning is an optimization; this error means the offload settings could not be applied to the Geneve netdev.","triggerScenarios":"setupTunnelGSOGRO on defaults.GeneveDevice fails: ethtool-style netlink/tunables unavailable, device vanished after creation, or bigtcp enabled but kernel doesn't support large GSO/GRO seg fields.","commonSituations":"Big TCP (--enable-bigtcp) enabled on a kernel without support (needs ~5.19+ for GSO_MAX_SIZE changes); geneve device deleted between creation and offload config; restricted environment blocking ethtool features; NIC/driver lacking GRO on the tunnel device.","solutions":["Disable Big TCP (--enable-bigtcp=false) if the node kernel or NIC does not support it.","Upgrade the kernel to >= 5.19/6.x for reliable large GSO/GRO on tunnel devices.","Check the wrapped error: if device missing, restart the agent to recreate cilium_geneve.","Confirm the geneve device exists and offloads are visible: ethtool -k cilium_geneve."],"exampleFix":"// before\ncilium-agent --enable-bigtcp=true   # kernel 5.4\n// after\ncilium-agent --enable-bigtcp=false  # or upgrade kernel to >= 5.19","handlingStrategy":"fallback","validationCode":"// only enable Big TCP when the kernel supports large GSO\nif kernelVersionLessThan(5, 19) {\n    bigtcpEnabled = false\n}","typeGuard":null,"tryCatchPattern":"if err := setupTunnelGSOGRO(logger, defaults.GeneveDevice, bigtcpCfg); err != nil {\n    logger.Warn(\"GSO/GRO tuning unavailable; continuing without Big TCP\", logfields.Error, err)\n    return nil // degrade gracefully — offload is an optimization\n}","preventionTips":["Enable Big TCP only on kernels >= 5.19 with NICs supporting large GSO/GRO.","Treat GSO/GRO setup as best-effort; log and continue instead of failing datapath init.","Verify with ethtool -k cilium_geneve after startup."],"tags":["network","geneve","gso","gro","cilium"],"backgroundTag":"gso-gro-setup-failed","analyzedSha":"ac7b90affa4baf0642e6685319d56907b3a73a6d","analyzedAt":"2026-08-31T18:27:15.868Z","schemaVersion":2},"datasetVersion":"2026-08-31T22:30:34.772Z"}