tun_name_linux.go 482 B

1234567891011121314151617181920212223242526
  1. package libbox
  2. import (
  3. "fmt"
  4. "syscall"
  5. "unsafe"
  6. "golang.org/x/sys/unix"
  7. )
  8. const ifReqSize = unix.IFNAMSIZ + 64
  9. func getTunnelName(fd int32) (string, error) {
  10. var ifr [ifReqSize]byte
  11. var errno syscall.Errno
  12. _, _, errno = unix.Syscall(
  13. unix.SYS_IOCTL,
  14. uintptr(fd),
  15. uintptr(unix.TUNGETIFF),
  16. uintptr(unsafe.Pointer(&ifr[0])),
  17. )
  18. if errno != 0 {
  19. return "", fmt.Errorf("failed to get name of TUN device: %w", errno)
  20. }
  21. return unix.ByteSliceToString(ifr[:]), nil
  22. }