features_linux.go 671 B

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