sysinfo/
network.rs

1// Take a look at the license at the top of the repository in the LICENSE file.
2
3use std::collections::HashMap;
4
5use crate::network_helper::{get_interface_address, get_interface_ip_networks};
6use crate::NetworkData;
7
8/// Interface addresses are OS-independent
9pub(crate) fn refresh_networks_addresses(interfaces: &mut HashMap<String, NetworkData>) {
10    let interface_networks = unsafe { get_interface_ip_networks() };
11    for (interface_name, ip_networks) in interface_networks {
12        if let Some(interface) = interfaces.get_mut(&interface_name) {
13            interface.inner.ip_networks = ip_networks.into_iter().collect::<Vec<_>>();
14        }
15    }
16    match unsafe { get_interface_address() } {
17        Ok(ifa_iterator) => {
18            for (name, ifa) in ifa_iterator {
19                if let Some(interface) = interfaces.get_mut(&name) {
20                    interface.inner.mac_addr = ifa;
21                }
22            }
23        }
24        Err(_e) => {
25            sysinfo_debug!("refresh_networks_addresses failed: {:?}", _e);
26        }
27    }
28}