diff --git a/logd/src/main.rs b/logd/src/main.rs index 5b6e23243c..1798a43550 100644 --- a/logd/src/main.rs +++ b/logd/src/main.rs @@ -1,6 +1,7 @@ use redox_scheme::{RequestKind, SignalBehavior, Socket}; use std::env; use std::fs::OpenOptions; +use std::io::{Read, Write}; use std::process; use crate::scheme::LogScheme; @@ -19,6 +20,11 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! { let socket = Socket::create("log").expect("logd: failed to create log scheme"); + std::process::Command::new(std::env::current_exe().unwrap()) + .arg("--internal-copy-kernel-log") + .spawn() + .unwrap(); + eprintln!("logd: ready for logging on log:"); daemon.ready().expect("logd: failed to notify parent"); @@ -47,5 +53,19 @@ fn daemon(daemon: redox_daemon::Daemon) -> ! { } fn main() { + if std::env::args().nth(1).as_deref() == Some("--internal-copy-kernel-log") { + let mut debug_file = std::fs::File::open("/scheme/sys/log").unwrap(); + let mut log_file = std::fs::OpenOptions::new() + .write(true) + .open("/scheme/log/kernel") + .unwrap(); + let mut buf = [0; 4096]; + loop { + let n = debug_file.read(&mut buf).unwrap(); + assert!(n != 0); // FIXME currently fails as /scheme/log/kernel presents a snapshot of the log queue + log_file.write_all(&buf[..n]).unwrap(); + } + } + redox_daemon::Daemon::new(daemon).expect("logd: failed to daemonize"); } diff --git a/netstack/Cargo.toml b/netstack/Cargo.toml index c7bff84416..e278fb47e7 100644 --- a/netstack/Cargo.toml +++ b/netstack/Cargo.toml @@ -7,10 +7,6 @@ edition = "2021" name = "smolnetd" path = "src/main.rs" -[lib] -name = "redox_netstack" -path = "src/lib/lib.rs" - [dependencies] netutils = { git = "https://gitlab.redox-os.org/redox-os/netutils.git" } redox_event = "0.4.1" diff --git a/netstack/src/lib/error.rs b/netstack/src/error.rs similarity index 100% rename from netstack/src/lib/error.rs rename to netstack/src/error.rs diff --git a/netstack/src/lib/lib.rs b/netstack/src/lib/lib.rs deleted file mode 100644 index f83f3f3f1c..0000000000 --- a/netstack/src/lib/lib.rs +++ /dev/null @@ -1,2 +0,0 @@ -pub mod error; -pub mod logger; diff --git a/netstack/src/lib/logger.rs b/netstack/src/logger.rs similarity index 100% rename from netstack/src/lib/logger.rs rename to netstack/src/logger.rs diff --git a/netstack/src/main.rs b/netstack/src/main.rs index 57d13e725c..0fac115464 100644 --- a/netstack/src/main.rs +++ b/netstack/src/main.rs @@ -7,12 +7,13 @@ use event::{EventFlags, EventQueue}; use libredox::flag::{O_CREAT, O_NONBLOCK, O_RDWR}; use libredox::Fd; -use redox_netstack::logger; use scheme::Smolnetd; use smoltcp::wire::EthernetAddress; mod buffer_pool; +mod error; mod link; +mod logger; mod port_set; mod router; mod scheme; diff --git a/netstack/src/scheme/mod.rs b/netstack/src/scheme/mod.rs index 789efc07c1..2cb39aac7d 100644 --- a/netstack/src/scheme/mod.rs +++ b/netstack/src/scheme/mod.rs @@ -28,7 +28,7 @@ use self::ip::IpScheme; use self::netcfg::NetCfgScheme; use self::tcp::TcpScheme; use self::udp::UdpScheme; -use redox_netstack::error::{Error, Result}; +use crate::error::{Error, Result}; mod icmp; mod ip; diff --git a/netstack/src/scheme/netcfg/mod.rs b/netstack/src/scheme/netcfg/mod.rs index 846bcddfdb..e5433b51ef 100644 --- a/netstack/src/scheme/netcfg/mod.rs +++ b/netstack/src/scheme/netcfg/mod.rs @@ -19,13 +19,13 @@ use syscall::{ Result as SyscallResult, SchemeMut, }; +use crate::error::{Error, Result}; use crate::link::DeviceList; use crate::router::route_table::{RouteTable, Rule}; use self::nodes::*; use self::notifier::*; use super::{post_fevent, Interface}; -use redox_netstack::error::{Error, Result}; const WRITE_BUFFER_MAX_SIZE: usize = 0xffff; diff --git a/netstack/src/scheme/socket.rs b/netstack/src/scheme/socket.rs index c1d1dc228f..e6a3ed6eb0 100644 --- a/netstack/src/scheme/socket.rs +++ b/netstack/src/scheme/socket.rs @@ -20,9 +20,9 @@ use syscall::{ }; use super::Interface; +use crate::error::{Error, Result}; use crate::router::route_table::RouteTable; use crate::scheme::smoltcp::iface::SocketHandle; -use redox_netstack::error::{Error, Result}; use smoltcp::socket::AnySocket; use super::{post_fevent, SocketSet};