Skip to main content

proxmox_api/generated/nodes/node/network/
iface.rs

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, &params).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}