Skip to main content

nmstate/nm/nm_dbus/gen_conf/
ovs.rs

1// SPDX-License-Identifier: Apache-2.0
2
3use std::collections::HashMap;
4
5use super::super::{
6    NmError, NmSettingOvsBridge, NmSettingOvsDpdk, NmSettingOvsExtIds,
7    NmSettingOvsIface, NmSettingOvsOtherConfig, NmSettingOvsPatch,
8    NmSettingOvsPort, ToKeyfile,
9};
10use crate::nm::nm_dbus::ToDbusValue;
11
12impl ToKeyfile for NmSettingOvsBridge {}
13impl ToKeyfile for NmSettingOvsIface {}
14impl ToKeyfile for NmSettingOvsPatch {}
15impl ToKeyfile for NmSettingOvsDpdk {}
16
17impl ToKeyfile for NmSettingOvsPort {
18    fn to_keyfile(
19        &self,
20    ) -> Result<HashMap<String, zvariant::Value<'_>>, NmError> {
21        let mut ret = HashMap::new();
22
23        for (k, v) in self.to_value()?.drain() {
24            if k != "trunks" {
25                ret.insert(k.to_string(), v);
26            }
27        }
28        if let Some(vlans) = self.trunks.as_ref() {
29            let mut vlans_clone = vlans.clone();
30            vlans_clone.sort_unstable_by_key(|v| v.start);
31            let mut vlans_str = Vec::new();
32            for vlan in vlans_clone {
33                let ret = if vlan.start == vlan.end {
34                    vlan.start.to_string()
35                } else {
36                    format!("{}-{}", vlan.start, vlan.end)
37                };
38                vlans_str.push(ret);
39            }
40            ret.insert(
41                "trunks".to_string(),
42                zvariant::Value::new(vlans_str.join(",")),
43            );
44        }
45
46        Ok(ret)
47    }
48}
49
50impl ToKeyfile for NmSettingOvsExtIds {
51    fn to_keyfile(
52        &self,
53    ) -> Result<HashMap<String, zvariant::Value<'_>>, NmError> {
54        let mut ret = HashMap::new();
55        if let Some(data) = self.data.as_ref() {
56            for (k, v) in data {
57                ret.insert(format!("data.{k}"), zvariant::Value::new(v));
58            }
59        }
60        Ok(ret)
61    }
62}
63
64impl ToKeyfile for NmSettingOvsOtherConfig {
65    fn to_keyfile(
66        &self,
67    ) -> Result<HashMap<String, zvariant::Value<'_>>, NmError> {
68        let mut ret = HashMap::new();
69        if let Some(data) = self.data.as_ref() {
70            for (k, v) in data {
71                ret.insert(format!("data.{k}"), zvariant::Value::new(v));
72            }
73        }
74        Ok(ret)
75    }
76}