diff --git a/src/domain/entities.rs b/src/domain/entities.rs index d80bbc7..b292382 100644 --- a/src/domain/entities.rs +++ b/src/domain/entities.rs @@ -268,6 +268,8 @@ pub struct NetworkInterface { pub mac: String, /// IP address pub ip: String, + /// IP prefix + pub prefix: String, /// Interface speed pub speed: Option, /// Interface type diff --git a/src/domain/legacy_compat.rs b/src/domain/legacy_compat.rs index e8d984f..7407dc6 100644 --- a/src/domain/legacy_compat.rs +++ b/src/domain/legacy_compat.rs @@ -428,6 +428,7 @@ impl From for new::NetworkInterface { name: legacy.name, mac: legacy.mac, ip: legacy.ip, + prefix: legacy.prefix, speed: legacy.speed, type_: legacy.type_, vendor: legacy.vendor, @@ -444,6 +445,7 @@ impl From for crate::NetworkInterface { name: new_iface.name, mac: new_iface.mac, ip: new_iface.ip, + prefix: new_iface.prefix, speed: new_iface.speed, type_: new_iface.type_, vendor: new_iface.vendor, diff --git a/src/domain/parsers/network.rs b/src/domain/parsers/network.rs index af455fd..e500fbb 100644 --- a/src/domain/parsers/network.rs +++ b/src/domain/parsers/network.rs @@ -29,6 +29,7 @@ pub fn parse_ip_output(ip_output: &str) -> Result, String> name: "eth0".to_string(), mac: "00:00:00:00:00:00".to_string(), ip: "192.168.1.100".to_string(), + prefix: "24".to_string(), speed: Some("1000 Mbps".to_string()), type_: "Ethernet".to_string(), vendor: "Unknown".to_string(), @@ -83,6 +84,7 @@ pub fn parse_macos_network_info(ifconfig_output: &str) -> Result, /// Interface type. @@ -2621,6 +2623,7 @@ impl ServerInfo { name: name.clone(), mac: data.get("mac").cloned().unwrap_or("Unknown".to_string()), ip: data.get("ip").cloned().unwrap_or("Unknown".to_string()), + prefix: data.get("prefix").cloned().unwrap_or("Unknown".to_string()), speed: Self::estimate_macos_interface_speed(&name, &interface_type), type_: interface_type, vendor: vendor.to_string(), @@ -2684,6 +2687,10 @@ impl ServerInfo { .get("ip") .cloned() .unwrap_or("Unknown".to_string()), + prefix: ifconfig_info + .get("prefix") + .cloned() + .unwrap_or("Unknown".to_string()), speed: Self::estimate_macos_interface_speed(name, &interface_type), type_: interface_type, vendor: vendor.to_string(), @@ -2900,12 +2907,14 @@ impl ServerInfo { let mac = iface["address"].as_str().unwrap_or("").to_string(); let mut ip = String::new(); + let mut prefix: String = String::new(); // Get IP address if let Some(addr_info) = iface["addr_info"].as_array() { for addr in addr_info { if addr["family"].as_str() == Some("inet") { ip = addr["local"].as_str().unwrap_or("").to_string(); + prefix = addr["prefixlen"].as_str().unwrap_or("").to_string(); break; } } @@ -2950,6 +2959,7 @@ impl ServerInfo { name: name.to_string(), mac, ip, + prefix, speed, type_: iface["link_type"].as_str().unwrap_or("").to_string(), vendor,