ioctl.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. // +build linux,cgo
  2. package loopback
  3. import (
  4. "syscall"
  5. "unsafe"
  6. )
  7. func ioctlLoopCtlGetFree(fd uintptr) (int, error) {
  8. index, _, err := syscall.Syscall(syscall.SYS_IOCTL, fd, LoopCtlGetFree, 0)
  9. if err != 0 {
  10. return 0, err
  11. }
  12. return int(index), nil
  13. }
  14. func ioctlLoopSetFd(loopFd, sparseFd uintptr) error {
  15. if _, _, err := syscall.Syscall(syscall.SYS_IOCTL, loopFd, LoopSetFd, sparseFd); err != 0 {
  16. return err
  17. }
  18. return nil
  19. }
  20. func ioctlLoopSetStatus64(loopFd uintptr, loopInfo *loopInfo64) error {
  21. if _, _, err := syscall.Syscall(syscall.SYS_IOCTL, loopFd, LoopSetStatus64, uintptr(unsafe.Pointer(loopInfo))); err != 0 {
  22. return err
  23. }
  24. return nil
  25. }
  26. func ioctlLoopClrFd(loopFd uintptr) error {
  27. if _, _, err := syscall.Syscall(syscall.SYS_IOCTL, loopFd, LoopClrFd, 0); err != 0 {
  28. return err
  29. }
  30. return nil
  31. }
  32. func ioctlLoopGetStatus64(loopFd uintptr) (*loopInfo64, error) {
  33. loopInfo := &loopInfo64{}
  34. if _, _, err := syscall.Syscall(syscall.SYS_IOCTL, loopFd, LoopGetStatus64, uintptr(unsafe.Pointer(loopInfo))); err != 0 {
  35. return nil, err
  36. }
  37. return loopInfo, nil
  38. }
  39. func ioctlLoopSetCapacity(loopFd uintptr, value int) error {
  40. if _, _, err := syscall.Syscall(syscall.SYS_IOCTL, loopFd, LoopSetCapacity, uintptr(value)); err != 0 {
  41. return err
  42. }
  43. return nil
  44. }