1use std::collections::HashMap;
4
5use crate::{
6 nm::nm_gen_conf, Interface, MergedNetworkState, NetworkState,
7 NetworkStateMode, NmstateError,
8};
9
10impl NetworkState {
11 pub fn gen_conf(
20 &self,
21 ) -> Result<HashMap<String, Vec<(String, String)>>, NmstateError> {
22 let mut ret = HashMap::new();
23 let mut cur_state = NetworkState::new();
26 cur_state
27 .interfaces
28 .push(Interface::Loopback(Default::default()));
29
30 let merged_state = MergedNetworkState::new(
31 self.clone(),
32 cur_state,
33 NetworkStateMode::GenerateConfig,
34 false, )?;
36 ret.insert("NetworkManager".to_string(), nm_gen_conf(&merged_state)?);
37 Ok(ret)
38 }
39}
40
41#[cfg(test)]
42mod tests {
43 use crate::{Interface, InterfaceType, Interfaces};
44
45 #[test]
46 fn test_gen_conf_change_unknown_to_eth() {
47 let mut ifaces: Interfaces = serde_yaml::from_str(
48 r"---
49- name: foo
50 state: up
51 ethernet:
52 speed: 1000
53",
54 )
55 .unwrap();
56
57 ifaces.set_unknown_iface_to_eth().unwrap();
58
59 let ifaces = ifaces.to_vec();
60
61 assert_eq!(ifaces.len(), 1);
62 if let Interface::Ethernet(eth_iface) = ifaces[0] {
63 assert_eq!(eth_iface.base.iface_type, InterfaceType::Ethernet);
64 assert_eq!(eth_iface.ethernet.as_ref().unwrap().speed, Some(1000));
65 } else {
66 panic!("Expecting ethernet interface");
67 }
68 }
69}