feat(wireguard): WIREGUARD_GSO option to disable TUN vnet hdr batching (#3424)

This commit is contained in:
Tyler MacDonald
2026-08-04 21:31:22 -04:00
committed by GitHub
parent 297d6480d0
commit 0186f2ff4a
20 changed files with 260 additions and 11 deletions
+27
View File
@@ -0,0 +1,27 @@
package amneziawg
import (
"fmt"
amneziatun "github.com/amnezia-vpn/amneziawg-go/tun"
"github.com/qdm12/gluetun/internal/wireguard"
)
// createTUN creates a TUN device. When gso is false, IFF_VNET_HDR is
// omitted so amneziawg-go's initFromFlags sees no vnet header support and
// keeps tun.vnetHdr=false, falling back to simple single-packet writes instead
// of the GRO/GSO batch path that causes EINVAL on some vendor kernels.
func createTUN(name string, mtu int, gso bool) (amneziatun.Device, error) { //nolint:ireturn
if gso {
return amneziatun.CreateTUN(name, mtu)
}
tunFile, err := wireguard.OpenTUNFile(name)
if err != nil {
return nil, fmt.Errorf("creating tun fd file: %w", err)
}
tunDevice, err := amneziatun.CreateTUNFromFile(tunFile, mtu)
if err != nil {
return nil, fmt.Errorf("creating TUN device from file: %w", err)
}
return tunDevice, nil
}