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