os_linux.go 910 B

123456789101112131415161718192021222324252627282930313233343536
  1. //go:build linux
  2. // +build linux
  3. package wgctrl
  4. import (
  5. "golang.zx2c4.com/wireguard/wgctrl/internal/wginternal"
  6. "golang.zx2c4.com/wireguard/wgctrl/internal/wglinux"
  7. "golang.zx2c4.com/wireguard/wgctrl/internal/wguser"
  8. )
  9. // newClients configures wginternal.Clients for Linux systems.
  10. func newClients() ([]wginternal.Client, error) {
  11. var clients []wginternal.Client
  12. // Linux has an in-kernel WireGuard implementation. Determine if it is
  13. // available and make use of it if so.
  14. kc, ok, err := wglinux.New()
  15. if err != nil {
  16. return nil, err
  17. }
  18. if ok {
  19. clients = append(clients, kc)
  20. }
  21. // Although it isn't recommended to use userspace implementations on Linux,
  22. // it can be used. We make use of it in integration tests as well.
  23. uc, err := wguser.New()
  24. if err != nil {
  25. return nil, err
  26. }
  27. // Kernel devices seem to appear first in wg(8).
  28. clients = append(clients, uc)
  29. return clients, nil
  30. }