wireguard_uapi/linux/set/
device.rs1use 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 pub flags: Vec<WgDeviceF>,
17 pub private_key: Option<&'a [u8; 32]>,
19 pub listen_port: Option<u16>,
21 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}