features_linux.go 649 B

1234567891011121314151617181920212223242526272829
  1. /* SPDX-License-Identifier: MIT
  2. *
  3. * Copyright (C) 2017-2023 WireGuard LLC. All Rights Reserved.
  4. */
  5. package conn
  6. import (
  7. "net"
  8. "golang.org/x/sys/unix"
  9. )
  10. func supportsUDPOffload(conn *net.UDPConn) (txOffload, rxOffload bool) {
  11. rc, err := conn.SyscallConn()
  12. if err != nil {
  13. return
  14. }
  15. err = rc.Control(func(fd uintptr) {
  16. _, errSyscall := unix.GetsockoptInt(int(fd), unix.IPPROTO_UDP, unix.UDP_SEGMENT)
  17. txOffload = errSyscall == nil
  18. opt, errSyscall := unix.GetsockoptInt(int(fd), unix.IPPROTO_UDP, unix.UDP_GRO)
  19. rxOffload = errSyscall == nil && opt == 1
  20. })
  21. if err != nil {
  22. return false, false
  23. }
  24. return txOffload, rxOffload
  25. }