wireguard_uapi/linux/set/
device.rs

1use crate::set::Peer;
2use crate::DeviceInterface;
3use std::borrow::Cow;
4
5#[derive(Clone, Debug, PartialEq, Eq)]
6#[repr(u32)]
7pub enum WgDeviceF {
8    ReplacePeers = 1,
9}
10
11#[derive(Debug)]
12pub struct Device<'a> {
13    pub interface: DeviceInterface<'a>,
14    /// 0 or WGDEVICE_F_REPLACE_PEERS if all current peers should be removed prior to adding the
15    // list below.
16    pub flags: Vec<WgDeviceF>,
17    /// all zeros to remove
18    pub private_key: Option<&'a [u8; 32]>,
19    /// 0 to choose randomly
20    pub listen_port: Option<u16>,
21    /// 0 to disable
22    pub fwmark: Option<u32>,
23    pub peers: Vec<Peer<'a>>,
24}
25
26impl<'a> Device<'a> {
27    pub fn from_ifname<T: Into<Cow<'a, str>>>(ifname: T) -> Self {
28        Self {
29            interface: DeviceInterface::Name(ifname.into()),
30            flags: vec![],
31            private_key: None,
32            listen_port: None,
33            fwmark: None,
34            peers: vec![],
35        }
36    }
37
38    pub fn from_ifindex(ifindex: u32) -> Self {
39        Self {
40            interface: DeviceInterface::Index(ifindex),
41            flags: vec![],
42            private_key: None,
43            listen_port: None,
44            fwmark: None,
45            peers: vec![],
46        }
47    }
48
49    pub fn flags(mut self, flags: Vec<WgDeviceF>) -> Self {
50        self.flags = flags;
51        self
52    }
53
54    pub fn private_key(mut self, private_key: &'a [u8; 32]) -> Self {
55        self.private_key = Some(private_key);
56        self
57    }
58
59    pub fn listen_port(mut self, listen_port: u16) -> Self {
60        self.listen_port = Some(listen_port);
61        self
62    }
63
64    pub fn fwmark(mut self, fwmark: u32) -> Self {
65        self.fwmark = Some(fwmark);
66        self
67    }
68
69    pub fn peers(mut self, peers: Vec<Peer<'a>>) -> Self {
70        self.peers = peers;
71        self
72    }
73}