Documentation
¶
Overview ¶
Copyright (C) 2018-2022 Matt Layher Copyright (C) 2025 Advanced-WG, V. Bantserov
Package wgctrl enables control of WireGuard and AmneziaWG devices on multiple platforms.
For more information on WireGuard, please see https://www.wireguard.com/. For AmneziaWG, see https://github.com/amnezia-vpn/amneziawg-linux-kernel-module.
This package is a fork of WireGuard/wgctrl-go with full AmneziaWG support:
- Reading AWG parameters (Jc, Jmin, Jmax, S1-S4, H1-H4, I1-I5) via Device()
- Writing AWG parameters via ConfigureDevice()
- Automatic parameter generation via Config.GenerateAmneziaParams()
- Parameter validation via Config.Validate()
- Userspace AWG daemon support (amneziawg-go)
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
A Client provides access to WireGuard device information.
func (*Client) Close ¶
Close releases resources used by a Client.
All underlying clients are closed regardless of errors. If multiple clients fail to close, their errors are joined with errors.Join so callers can inspect individual errors via errors.Is / errors.As.
func (*Client) ConfigureDevice ¶
ConfigureDevice configures a WireGuard device by its interface name.
Because the zero value of some Go types may be significant to WireGuard for Config fields, only fields which are not nil will be applied when configuring a device.
If the device specified by name does not exist or is not a WireGuard device, an error is returned which can be checked using `errors.Is(err, os.ErrNotExist)`.
The AmneziaWG fields are checked with cfg.Validate first: the netlink encoding is 16-bit, so e.g. Jc 70000 would otherwise reach the kernel as 4464 without an error. When cfg sets only some of Jc/Jmin/Jmax or of H1-H4, the kernel checks them together with the device's current values (Jmin <= Jmax, no overlapping headers); the device is then read once so that such a conflict is reported clearly instead of as EINVAL.
func (*Client) Device ¶
Device retrieves a WireGuard device by its interface name.
If the device specified by name does not exist or is not a WireGuard device, an error is returned which can be checked using `errors.Is(err, os.ErrNotExist)`.
func (*Client) Devices ¶
Devices retrieves all WireGuard devices on this system.
When multiple backend clients report the same device (identified by interface name), only the first occurrence is kept. This prevents duplicates when, for example, both kernel and userspace clients discover the same interface.
A backend that fails does not hide the devices of the others (LIB-03: one unreadable userspace socket returned no devices at all): Devices returns what the other backends found together with the errors, joined. A caller that only checks err sees the failure as before.
Directories
¶
| Path | Synopsis |
|---|---|
|
cmd
|
|
|
wgctrl
command
Command wgctrl is a testing utility for interacting with WireGuard via package wgctrl.
|
Command wgctrl is a testing utility for interacting with WireGuard via package wgctrl. |
|
internal
|
|
|
wgfreebsd
Package wgfreebsd provides internal access to FreeBSD's WireGuard ioctl interface.
|
Package wgfreebsd provides internal access to FreeBSD's WireGuard ioctl interface. |
|
wgfreebsd/internal/nv
Package nv marshals and unmarshals Go maps to/from FreeBSDs nv(9) name/value lists See: https://www.freebsd.org/cgi/man.cgi?query=nv&sektion=9
|
Package nv marshals and unmarshals Go maps to/from FreeBSDs nv(9) name/value lists See: https://www.freebsd.org/cgi/man.cgi?query=nv&sektion=9 |
|
wgfreebsd/internal/wgh
Package wgh is an auto-generated package which contains constants and types used to access WireGuard information using ioctl calls.
|
Package wgh is an auto-generated package which contains constants and types used to access WireGuard information using ioctl calls. |
|
wginternal
Package wginternal contains shared internal types for wgctrl.
|
Package wginternal contains shared internal types for wgctrl. |
|
wglinux
Package wglinux provides internal access to Linux's WireGuard generic netlink interface.
|
Package wglinux provides internal access to Linux's WireGuard generic netlink interface. |
|
wgopenbsd
Package wgopenbsd provides internal access to OpenBSD's WireGuard ioctl interface.
|
Package wgopenbsd provides internal access to OpenBSD's WireGuard ioctl interface. |
|
wgopenbsd/internal/wgh
Package wgh is an auto-generated package which contains constants and types used to access WireGuard information using ioctl calls.
|
Package wgh is an auto-generated package which contains constants and types used to access WireGuard information using ioctl calls. |
|
wgtest
Package wgtest contains shared testing utilities for package wgctrl.
|
Package wgtest contains shared testing utilities for package wgctrl. |
|
wguser
Package wguser provides internal access to the userspace WireGuard configuration protocol interface.
|
Package wguser provides internal access to the userspace WireGuard configuration protocol interface. |
|
Package wgtypes provides shared types for the wgctrl family of packages.
|
Package wgtypes provides shared types for the wgctrl family of packages. |