13 stable releases (3 major)

3.0.0 Apr 23, 2023
3.0.0-rc1 Jan 14, 2023
2.0.5 May 6, 2022
2.0.2 Dec 25, 2021
0.2.0 Oct 3, 2019

#655 in Network programming

Download history 2471/week @ 2023-12-04 3319/week @ 2023-12-11 3088/week @ 2023-12-18 1583/week @ 2023-12-25 4378/week @ 2024-01-01 3995/week @ 2024-01-08 2680/week @ 2024-01-15 3738/week @ 2024-01-22 3125/week @ 2024-01-29 3182/week @ 2024-02-05 3894/week @ 2024-02-12 2950/week @ 2024-02-19 4621/week @ 2024-02-26 9405/week @ 2024-03-04 5792/week @ 2024-03-11 7023/week @ 2024-03-18

26,968 downloads per month
Used in wireguard-p2p

MIT license

145KB
3K SLoC

wireguard-uapi-rs

Build Status codecov Crates version docs.rs MIT

This library implements the WireGuard Netlink API in Rust for Linux.

  • If you're just reading a WireGuard device interface, this library fully supports that functionality.
  • If you're creating new WireGuard device interfaces, this library has partial support. Creating and deleting device interfaces is possible, but there's no ability at the moment for adding IP addresses to those devices.

Here's a quick example.

use failure;
use wireguard_uapi::{DeviceInterface, WgSocket};

fn main() -> Result<(), failure::Error> {
  let mut wg = WgSocket::connect()?;
  let device = wg.get_device(DeviceInterface::from_name("wgtest0"))?;

  print_device(&device);
  Ok(())
}

Permissions

Compiled binaries need the CAP_NET_ADMIN capability to read network interfaces. If you're getting an access error while using this library, make sure the compiled executable has that permission. If you trust your compiled binary, one way to grant it is:

sudo setcap CAP_NET_ADMIN=+eip ./my-compiled-binary

Disclaimer

This isn't an official WireGuard product. (Although I'm interested in making it so.)

Feel free to file bugs.

Dependencies

~0.8–1.4MB
~31K SLoC