forky_tun/
configuration.rs1use std::net::Ipv4Addr;
16use std::os::unix::io::RawFd;
17
18use crate::address::IntoAddress;
19use crate::platform;
20
21#[derive(Clone, Copy, Debug, Eq, PartialEq, Default)]
23pub enum Layer {
24 L2,
25 #[default]
26 L3,
27}
28
29#[derive(Clone, Default, Debug)]
31pub struct Configuration {
32 pub(crate) name: Option<String>,
33 pub(crate) platform: platform::Configuration,
34
35 pub(crate) address: Option<Ipv4Addr>,
36 pub(crate) destination: Option<Ipv4Addr>,
37 pub(crate) broadcast: Option<Ipv4Addr>,
38 pub(crate) netmask: Option<Ipv4Addr>,
39 pub(crate) mtu: Option<i32>,
40 pub(crate) enabled: Option<bool>,
41 pub(crate) layer: Option<Layer>,
42 pub(crate) queues: Option<usize>,
43 pub(crate) raw_fd: Option<RawFd>,
44}
45
46impl Configuration {
47 pub fn platform<F>(&mut self, f: F) -> &mut Self
49 where
50 F: FnOnce(&mut platform::Configuration),
51 {
52 f(&mut self.platform);
53 self
54 }
55
56 pub fn name<S: AsRef<str>>(&mut self, name: S) -> &mut Self {
58 self.name = Some(name.as_ref().into());
59 self
60 }
61
62 pub fn address<A: IntoAddress>(&mut self, value: A) -> &mut Self {
64 self.address = Some(value.into_address().unwrap());
65 self
66 }
67
68 pub fn destination<A: IntoAddress>(&mut self, value: A) -> &mut Self {
70 self.destination = Some(value.into_address().unwrap());
71 self
72 }
73
74 pub fn broadcast<A: IntoAddress>(&mut self, value: A) -> &mut Self {
76 self.broadcast = Some(value.into_address().unwrap());
77 self
78 }
79
80 pub fn netmask<A: IntoAddress>(&mut self, value: A) -> &mut Self {
82 self.netmask = Some(value.into_address().unwrap());
83 self
84 }
85
86 pub fn mtu(&mut self, value: i32) -> &mut Self {
88 self.mtu = Some(value);
89 self
90 }
91
92 pub fn up(&mut self) -> &mut Self {
94 self.enabled = Some(true);
95 self
96 }
97
98 pub fn down(&mut self) -> &mut Self {
100 self.enabled = Some(false);
101 self
102 }
103
104 pub fn layer(&mut self, value: Layer) -> &mut Self {
106 self.layer = Some(value);
107 self
108 }
109
110 pub fn queues(&mut self, value: usize) -> &mut Self {
112 self.queues = Some(value);
113 self
114 }
115
116 pub fn raw_fd(&mut self, fd: RawFd) -> &mut Self {
118 self.raw_fd = Some(fd);
119 self
120 }
121}