diff --git a/netstack/src/scheme/netcfg/mod.rs b/netstack/src/scheme/netcfg/mod.rs index deb626b9d9..95635146fb 100644 --- a/netstack/src/scheme/netcfg/mod.rs +++ b/netstack/src/scheme/netcfg/mod.rs @@ -106,6 +106,40 @@ fn mk_root_node( observer: ObserverRef, ) -> CfgNodeRef { cfg_node! { + "summary" => { + ro [devices, route_table, socket_set, ip_forward] || { + let mut out = String::new(); + let devs = devices.borrow(); + let eth0 = devs.get("eth0"); + let lo = devs.get("loopback"); + let eth_state = eth0.map(|d| d.link_state()).unwrap_or("missing"); + let lo_state = lo.map(|d| d.link_state()).unwrap_or("missing"); + out.push_str(&format!("interfaces: eth0={} lo={}\n", eth_state, lo_state)); + out.push_str(&format!("routes: {}\n", route_table.borrow().len())); + let set = socket_set.borrow(); + let mut tcp = 0u32; let mut udp = 0u32; let mut icmp = 0u32; let mut raw = 0u32; + for (_handle, socket) in set.iter() { + match socket { + smoltcp::socket::Socket::Tcp(_) => tcp += 1, + smoltcp::socket::Socket::Udp(_) => udp += 1, + smoltcp::socket::Socket::Icmp(_) => icmp += 1, + smoltcp::socket::Socket::Raw(_) => raw += 1, + _ => {} + } + } + out.push_str(&format!("sockets: {} (tcp={} udp={} icmp={} raw={})\n", + tcp + udp + icmp + raw, tcp, udp, icmp, raw)); + out.push_str(&format!("ip_forward: {}\n", + if ip_forward.get() { "1" } else { "0" })); + if let Some(dev) = eth0 { + let s = dev.statistics(); + out.push_str(&format!("eth0 stats: rx={}/{} tx={}/{} err={}/{} drop={}/{}\n", + s.rx_bytes, s.rx_packets, s.tx_bytes, s.tx_packets, + s.rx_errors, s.tx_errors, s.rx_dropped, s.tx_dropped)); + } + out + } + }, "capture" => { "enable" => { wo [observer] (Option<()>, None)