1#[derive(Debug, Clone)]
2pub struct IfaceClient<T> {
3 client: T,
4 path: String,
5}
6impl<T> IfaceClient<T>
7where
8 T: crate::client::Client,
9{
10 pub fn new(client: T, parent_path: &str, iface: &str) -> Self {
11 Self {
12 client,
13 path: format!("{}/{}", parent_path, iface),
14 }
15 }
16}
17impl<T> IfaceClient<T>
18where
19 T: crate::client::Client,
20{
21 #[doc = "Delete network device configuration"]
22 #[doc = ""]
23 #[doc = "Permission check: perm(\"/nodes/{node}\", [\"Sys.Modify\"])"]
24 pub async fn delete(&self) -> Result<(), T::Error> {
25 let path = self.path.to_string();
26 self.client.delete(&path, &()).await
27 }
28}
29impl<T> IfaceClient<T>
30where
31 T: crate::client::Client,
32{
33 #[doc = "Read network device configuration"]
34 #[doc = ""]
35 #[doc = "Permission check: perm(\"/nodes/{node}\", [\"Sys.Audit\"])"]
36 pub async fn get(&self) -> Result<GetOutput, T::Error> {
37 let path = self.path.to_string();
38 self.client.get(&path, &()).await
39 }
40}
41impl<T> IfaceClient<T>
42where
43 T: crate::client::Client,
44{
45 #[doc = "Update network device configuration"]
46 #[doc = ""]
47 #[doc = "Permission check: perm(\"/nodes/{node}\", [\"Sys.Modify\"])"]
48 pub async fn put(&self, params: PutParams) -> Result<(), T::Error> {
49 let path = self.path.to_string();
50 self.client.put(&path, ¶ms).await
51 }
52}
53impl GetOutput {
54 pub fn new(method: String, ty: String) -> Self {
55 Self {
56 method,
57 ty,
58 additional_properties: ::std::default::Default::default(),
59 }
60 }
61}
62#[derive(Clone, Debug, :: serde :: Serialize, :: serde :: Deserialize)]
63pub struct GetOutput {
64 pub method: String,
65 #[serde(rename = "type")]
66 pub ty: String,
67 #[serde(
68 flatten,
69 default,
70 skip_serializing_if = "::std::collections::HashMap::is_empty"
71 )]
72 pub additional_properties: ::std::collections::HashMap<String, ::serde_json::Value>,
73}
74impl PutParams {
75 pub fn new(ty: Type) -> Self {
76 Self {
77 ty,
78 address: ::std::default::Default::default(),
79 address6: ::std::default::Default::default(),
80 autostart: ::std::default::Default::default(),
81 bond_primary: ::std::default::Default::default(),
82 bond_mode: ::std::default::Default::default(),
83 bond_xmit_hash_policy: ::std::default::Default::default(),
84 bridge_ports: ::std::default::Default::default(),
85 bridge_vids: ::std::default::Default::default(),
86 bridge_vlan_aware: ::std::default::Default::default(),
87 cidr: ::std::default::Default::default(),
88 cidr6: ::std::default::Default::default(),
89 comments: ::std::default::Default::default(),
90 comments6: ::std::default::Default::default(),
91 delete: ::std::default::Default::default(),
92 gateway: ::std::default::Default::default(),
93 gateway6: ::std::default::Default::default(),
94 mtu: ::std::default::Default::default(),
95 netmask: ::std::default::Default::default(),
96 netmask6: ::std::default::Default::default(),
97 ovs_bonds: ::std::default::Default::default(),
98 ovs_bridge: ::std::default::Default::default(),
99 ovs_options: ::std::default::Default::default(),
100 ovs_ports: ::std::default::Default::default(),
101 ovs_tag: ::std::default::Default::default(),
102 slaves: ::std::default::Default::default(),
103 vlan_id: ::std::default::Default::default(),
104 vlan_raw_device: ::std::default::Default::default(),
105 additional_properties: ::std::default::Default::default(),
106 }
107 }
108}
109#[derive(Clone, Debug, :: serde :: Serialize, :: serde :: Deserialize)]
110pub struct PutParams {
111 #[serde(skip_serializing_if = "Option::is_none", default)]
112 #[doc = "IP address."]
113 #[doc = ""]
114 pub address: Option<::std::net::Ipv4Addr>,
115 #[serde(skip_serializing_if = "Option::is_none", default)]
116 #[doc = "IP address."]
117 #[doc = ""]
118 pub address6: Option<::std::net::Ipv6Addr>,
119 #[serde(
120 serialize_with = "crate::types::serialize_bool_optional",
121 deserialize_with = "crate::types::deserialize_bool_optional"
122 )]
123 #[serde(skip_serializing_if = "Option::is_none", default)]
124 #[doc = "Automatically start interface on boot."]
125 #[doc = ""]
126 pub autostart: Option<bool>,
127 #[serde(rename = "bond-primary")]
128 #[serde(skip_serializing_if = "Option::is_none", default)]
129 #[doc = "Specify the primary interface for active-backup bond."]
130 #[doc = ""]
131 pub bond_primary: Option<String>,
132 #[serde(skip_serializing_if = "Option::is_none", default)]
133 #[doc = "Bonding mode."]
134 #[doc = ""]
135 pub bond_mode: Option<BondMode>,
136 #[serde(skip_serializing_if = "Option::is_none", default)]
137 #[doc = "Selects the transmit hash policy to use for slave selection in balance-xor and 802.3ad modes."]
138 #[doc = ""]
139 pub bond_xmit_hash_policy: Option<BondXmitHashPolicy>,
140 #[serde(skip_serializing_if = "Option::is_none", default)]
141 #[doc = "Specify the interfaces you want to add to your bridge."]
142 #[doc = ""]
143 pub bridge_ports: Option<String>,
144 #[serde(skip_serializing_if = "Option::is_none", default)]
145 #[doc = "Specify the allowed VLANs. For example: '2 4 100-200'. Only used if the bridge is VLAN aware."]
146 #[doc = ""]
147 pub bridge_vids: Option<String>,
148 #[serde(
149 serialize_with = "crate::types::serialize_bool_optional",
150 deserialize_with = "crate::types::deserialize_bool_optional"
151 )]
152 #[serde(skip_serializing_if = "Option::is_none", default)]
153 #[doc = "Enable bridge vlan support."]
154 #[doc = ""]
155 pub bridge_vlan_aware: Option<bool>,
156 #[serde(skip_serializing_if = "Option::is_none", default)]
157 #[doc = "IPv4 CIDR."]
158 #[doc = ""]
159 pub cidr: Option<String>,
160 #[serde(skip_serializing_if = "Option::is_none", default)]
161 #[doc = "IPv6 CIDR."]
162 #[doc = ""]
163 pub cidr6: Option<String>,
164 #[serde(skip_serializing_if = "Option::is_none", default)]
165 #[doc = "Comments"]
166 #[doc = ""]
167 pub comments: Option<String>,
168 #[serde(skip_serializing_if = "Option::is_none", default)]
169 #[doc = "Comments"]
170 #[doc = ""]
171 pub comments6: Option<String>,
172 #[serde(skip_serializing_if = "Option::is_none", default)]
173 #[doc = "A list of settings you want to delete."]
174 #[doc = ""]
175 pub delete: Option<String>,
176 #[serde(skip_serializing_if = "Option::is_none", default)]
177 #[doc = "Default gateway address."]
178 #[doc = ""]
179 pub gateway: Option<::std::net::Ipv4Addr>,
180 #[serde(skip_serializing_if = "Option::is_none", default)]
181 #[doc = "Default ipv6 gateway address."]
182 #[doc = ""]
183 pub gateway6: Option<::std::net::Ipv6Addr>,
184 #[serde(skip_serializing_if = "Option::is_none", default)]
185 #[doc = "MTU."]
186 #[doc = ""]
187 pub mtu: Option<MtuInt>,
188 #[serde(skip_serializing_if = "Option::is_none", default)]
189 #[doc = "Network mask."]
190 #[doc = ""]
191 pub netmask: Option<String>,
192 #[serde(skip_serializing_if = "Option::is_none", default)]
193 #[doc = "Network mask."]
194 #[doc = ""]
195 pub netmask6: Option<Netmask6Int>,
196 #[serde(skip_serializing_if = "Option::is_none", default)]
197 #[doc = "Specify the interfaces used by the bonding device."]
198 #[doc = ""]
199 pub ovs_bonds: Option<String>,
200 #[serde(skip_serializing_if = "Option::is_none", default)]
201 #[doc = "The OVS bridge associated with a OVS port. This is required when you create an OVS port."]
202 #[doc = ""]
203 pub ovs_bridge: Option<String>,
204 #[serde(skip_serializing_if = "Option::is_none", default)]
205 #[doc = "OVS interface options."]
206 #[doc = ""]
207 pub ovs_options: Option<OvsOptionsStr>,
208 #[serde(skip_serializing_if = "Option::is_none", default)]
209 #[doc = "Specify the interfaces you want to add to your bridge."]
210 #[doc = ""]
211 pub ovs_ports: Option<String>,
212 #[serde(skip_serializing_if = "Option::is_none", default)]
213 #[doc = "Specify a VLan tag (used by OVSPort, OVSIntPort, OVSBond)"]
214 #[doc = ""]
215 pub ovs_tag: Option<OvsTagInt>,
216 #[serde(skip_serializing_if = "Option::is_none", default)]
217 #[doc = "Specify the interfaces used by the bonding device."]
218 #[doc = ""]
219 pub slaves: Option<String>,
220 #[serde(rename = "type")]
221 #[doc = "Network interface type"]
222 #[doc = ""]
223 pub ty: Type,
224 #[serde(rename = "vlan-id")]
225 #[serde(skip_serializing_if = "Option::is_none", default)]
226 #[doc = "vlan-id for a custom named vlan interface (ifupdown2 only)."]
227 #[doc = ""]
228 pub vlan_id: Option<VlanIdInt>,
229 #[serde(rename = "vlan-raw-device")]
230 #[serde(skip_serializing_if = "Option::is_none", default)]
231 #[doc = "Specify the raw interface for the vlan interface."]
232 #[doc = ""]
233 pub vlan_raw_device: Option<String>,
234 #[serde(
235 flatten,
236 default,
237 skip_serializing_if = "::std::collections::HashMap::is_empty"
238 )]
239 pub additional_properties: ::std::collections::HashMap<String, ::serde_json::Value>,
240}
241#[derive(Clone, Debug, :: serde :: Serialize, :: serde :: Deserialize, PartialEq)]
242#[doc = "Bonding mode."]
243#[doc = ""]
244pub enum BondMode {
245 #[serde(rename = "802.3ad")]
246 _8023ad,
247 #[serde(rename = "active-backup")]
248 ActiveBackup,
249 #[serde(rename = "balance-alb")]
250 BalanceAlb,
251 #[serde(rename = "balance-rr")]
252 BalanceRr,
253 #[serde(rename = "balance-slb")]
254 BalanceSlb,
255 #[serde(rename = "balance-tlb")]
256 BalanceTlb,
257 #[serde(rename = "balance-xor")]
258 BalanceXor,
259 #[serde(rename = "broadcast")]
260 Broadcast,
261 #[serde(rename = "lacp-balance-slb")]
262 LacpBalanceSlb,
263 #[serde(rename = "lacp-balance-tcp")]
264 LacpBalanceTcp,
265}
266impl TryFrom<&str> for BondMode {
267 type Error = String;
268 fn try_from(value: &str) -> Result<Self, <Self as TryFrom<&str>>::Error> {
269 match value {
270 "802.3ad" => Ok(Self::_8023ad),
271 "active-backup" => Ok(Self::ActiveBackup),
272 "balance-alb" => Ok(Self::BalanceAlb),
273 "balance-rr" => Ok(Self::BalanceRr),
274 "balance-slb" => Ok(Self::BalanceSlb),
275 "balance-tlb" => Ok(Self::BalanceTlb),
276 "balance-xor" => Ok(Self::BalanceXor),
277 "broadcast" => Ok(Self::Broadcast),
278 "lacp-balance-slb" => Ok(Self::LacpBalanceSlb),
279 "lacp-balance-tcp" => Ok(Self::LacpBalanceTcp),
280 v => Err(format!("Unknown variant {v}")),
281 }
282 }
283}
284#[derive(Clone, Debug, :: serde :: Serialize, :: serde :: Deserialize, PartialEq)]
285#[doc = "Selects the transmit hash policy to use for slave selection in balance-xor and 802.3ad modes."]
286#[doc = ""]
287pub enum BondXmitHashPolicy {
288 #[serde(rename = "layer2")]
289 Layer2,
290 #[serde(rename = "layer2+3")]
291 Layer23,
292 #[serde(rename = "layer3+4")]
293 Layer34,
294}
295impl TryFrom<&str> for BondXmitHashPolicy {
296 type Error = String;
297 fn try_from(value: &str) -> Result<Self, <Self as TryFrom<&str>>::Error> {
298 match value {
299 "layer2" => Ok(Self::Layer2),
300 "layer2+3" => Ok(Self::Layer23),
301 "layer3+4" => Ok(Self::Layer34),
302 v => Err(format!("Unknown variant {v}")),
303 }
304 }
305}
306#[derive(Clone, Debug, :: serde :: Serialize, :: serde :: Deserialize, PartialEq)]
307#[doc = "Network interface type"]
308#[doc = ""]
309pub enum Type {
310 OVSBond,
311 OVSBridge,
312 OVSIntPort,
313 OVSPort,
314 #[serde(rename = "alias")]
315 Alias,
316 #[serde(rename = "bond")]
317 Bond,
318 #[serde(rename = "bridge")]
319 Bridge,
320 #[serde(rename = "eth")]
321 Eth,
322 #[serde(rename = "fabric")]
323 Fabric,
324 #[serde(rename = "unknown")]
325 Unknown,
326 #[serde(rename = "vlan")]
327 Vlan,
328 #[serde(rename = "vnet")]
329 Vnet,
330}
331impl TryFrom<&str> for Type {
332 type Error = String;
333 fn try_from(value: &str) -> Result<Self, <Self as TryFrom<&str>>::Error> {
334 match value {
335 "OVSBond" => Ok(Self::OVSBond),
336 "OVSBridge" => Ok(Self::OVSBridge),
337 "OVSIntPort" => Ok(Self::OVSIntPort),
338 "OVSPort" => Ok(Self::OVSPort),
339 "alias" => Ok(Self::Alias),
340 "bond" => Ok(Self::Bond),
341 "bridge" => Ok(Self::Bridge),
342 "eth" => Ok(Self::Eth),
343 "fabric" => Ok(Self::Fabric),
344 "unknown" => Ok(Self::Unknown),
345 "vlan" => Ok(Self::Vlan),
346 "vnet" => Ok(Self::Vnet),
347 v => Err(format!("Unknown variant {v}")),
348 }
349 }
350}
351#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)]
352pub struct MtuInt(i128);
353impl crate::types::bounded_integer::BoundedInteger for MtuInt {
354 const MIN: Option<i128> = Some(1280i128);
355 const MAX: Option<i128> = Some(65520i128);
356 const DEFAULT: Option<i128> = None::<i128>;
357 const TYPE_DESCRIPTION: &'static str = "an integer between 1280 and 65520";
358 fn get(&self) -> i128 {
359 self.0
360 }
361 fn new(value: i128) -> Result<Self, crate::types::bounded_integer::BoundedIntegerError> {
362 Self::validate(value)?;
363 Ok(Self(value))
364 }
365}
366impl std::convert::TryFrom<i128> for MtuInt {
367 type Error = crate::types::bounded_integer::BoundedIntegerError;
368 fn try_from(value: i128) -> Result<Self, Self::Error> {
369 crate::types::bounded_integer::BoundedInteger::new(value)
370 }
371}
372impl ::serde::Serialize for MtuInt {
373 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
374 where
375 S: ::serde::Serializer,
376 {
377 crate::types::bounded_integer::serialize_bounded_integer(self, serializer)
378 }
379}
380impl<'de> ::serde::Deserialize<'de> for MtuInt {
381 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
382 where
383 D: ::serde::Deserializer<'de>,
384 {
385 crate::types::bounded_integer::deserialize_bounded_integer(deserializer)
386 }
387}
388#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)]
389pub struct Netmask6Int(i128);
390impl crate::types::bounded_integer::BoundedInteger for Netmask6Int {
391 const MIN: Option<i128> = Some(0i128);
392 const MAX: Option<i128> = Some(128i128);
393 const DEFAULT: Option<i128> = None::<i128>;
394 const TYPE_DESCRIPTION: &'static str = "an integer between 0 and 128";
395 fn get(&self) -> i128 {
396 self.0
397 }
398 fn new(value: i128) -> Result<Self, crate::types::bounded_integer::BoundedIntegerError> {
399 Self::validate(value)?;
400 Ok(Self(value))
401 }
402}
403impl std::convert::TryFrom<i128> for Netmask6Int {
404 type Error = crate::types::bounded_integer::BoundedIntegerError;
405 fn try_from(value: i128) -> Result<Self, Self::Error> {
406 crate::types::bounded_integer::BoundedInteger::new(value)
407 }
408}
409impl ::serde::Serialize for Netmask6Int {
410 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
411 where
412 S: ::serde::Serializer,
413 {
414 crate::types::bounded_integer::serialize_bounded_integer(self, serializer)
415 }
416}
417impl<'de> ::serde::Deserialize<'de> for Netmask6Int {
418 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
419 where
420 D: ::serde::Deserializer<'de>,
421 {
422 crate::types::bounded_integer::deserialize_bounded_integer(deserializer)
423 }
424}
425#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)]
426pub struct OvsTagInt(i128);
427impl crate::types::bounded_integer::BoundedInteger for OvsTagInt {
428 const MIN: Option<i128> = Some(1i128);
429 const MAX: Option<i128> = Some(4094i128);
430 const DEFAULT: Option<i128> = None::<i128>;
431 const TYPE_DESCRIPTION: &'static str = "an integer between 1 and 4094";
432 fn get(&self) -> i128 {
433 self.0
434 }
435 fn new(value: i128) -> Result<Self, crate::types::bounded_integer::BoundedIntegerError> {
436 Self::validate(value)?;
437 Ok(Self(value))
438 }
439}
440impl std::convert::TryFrom<i128> for OvsTagInt {
441 type Error = crate::types::bounded_integer::BoundedIntegerError;
442 fn try_from(value: i128) -> Result<Self, Self::Error> {
443 crate::types::bounded_integer::BoundedInteger::new(value)
444 }
445}
446impl ::serde::Serialize for OvsTagInt {
447 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
448 where
449 S: ::serde::Serializer,
450 {
451 crate::types::bounded_integer::serialize_bounded_integer(self, serializer)
452 }
453}
454impl<'de> ::serde::Deserialize<'de> for OvsTagInt {
455 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
456 where
457 D: ::serde::Deserializer<'de>,
458 {
459 crate::types::bounded_integer::deserialize_bounded_integer(deserializer)
460 }
461}
462#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)]
463pub struct VlanIdInt(i128);
464impl crate::types::bounded_integer::BoundedInteger for VlanIdInt {
465 const MIN: Option<i128> = Some(1i128);
466 const MAX: Option<i128> = Some(4094i128);
467 const DEFAULT: Option<i128> = None::<i128>;
468 const TYPE_DESCRIPTION: &'static str = "an integer between 1 and 4094";
469 fn get(&self) -> i128 {
470 self.0
471 }
472 fn new(value: i128) -> Result<Self, crate::types::bounded_integer::BoundedIntegerError> {
473 Self::validate(value)?;
474 Ok(Self(value))
475 }
476}
477impl std::convert::TryFrom<i128> for VlanIdInt {
478 type Error = crate::types::bounded_integer::BoundedIntegerError;
479 fn try_from(value: i128) -> Result<Self, Self::Error> {
480 crate::types::bounded_integer::BoundedInteger::new(value)
481 }
482}
483impl ::serde::Serialize for VlanIdInt {
484 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
485 where
486 S: ::serde::Serializer,
487 {
488 crate::types::bounded_integer::serialize_bounded_integer(self, serializer)
489 }
490}
491impl<'de> ::serde::Deserialize<'de> for VlanIdInt {
492 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
493 where
494 D: ::serde::Deserializer<'de>,
495 {
496 crate::types::bounded_integer::deserialize_bounded_integer(deserializer)
497 }
498}
499#[derive(Debug, Clone, PartialEq, PartialOrd)]
500pub struct OvsOptionsStr {
501 value: String,
502}
503impl crate::types::bounded_string::BoundedString for OvsOptionsStr {
504 const MIN_LENGTH: Option<usize> = None::<usize>;
505 const MAX_LENGTH: Option<usize> = Some(1024usize);
506 const DEFAULT: Option<&'static str> = None::<&'static str>;
507 const PATTERN: Option<&'static str> = None::<&'static str>;
508 const TYPE_DESCRIPTION: &'static str = "a string with length at most 1024";
509 fn get_value(&self) -> &str {
510 &self.value
511 }
512 fn new(value: String) -> Result<Self, crate::types::bounded_string::BoundedStringError> {
513 Self::validate(&value)?;
514 Ok(Self { value })
515 }
516}
517impl std::convert::TryFrom<String> for OvsOptionsStr {
518 type Error = crate::types::bounded_string::BoundedStringError;
519 fn try_from(value: String) -> Result<Self, Self::Error> {
520 crate::types::bounded_string::BoundedString::new(value)
521 }
522}
523impl ::serde::Serialize for OvsOptionsStr {
524 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
525 where
526 S: ::serde::Serializer,
527 {
528 crate::types::bounded_string::serialize_bounded_string(self, serializer)
529 }
530}
531impl<'de> ::serde::Deserialize<'de> for OvsOptionsStr {
532 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
533 where
534 D: ::serde::Deserializer<'de>,
535 {
536 crate::types::bounded_string::deserialize_bounded_string(deserializer)
537 }
538}