diff --git a/Cargo.lock b/Cargo.lock index 2d8472754c..7e798c699c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7,7 +7,7 @@ dependencies = [ "rand 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", "redox_event 0.1.0 (git+https://github.com/redox-os/event.git)", "redox_syscall 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)", - "smoltcp 0.4.0", + "smoltcp 0.4.0 (git+https://github.com/batonius/smoltcp.git?branch=default_route)", ] [[package]] @@ -328,6 +328,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "smoltcp" version = "0.4.0" +source = "git+https://github.com/batonius/smoltcp.git?branch=default_route#253a14b425fa77ddfe096352cf3d8d6a9dbcafbc" dependencies = [ "byteorder 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", @@ -477,6 +478,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum rustls 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "17727f4b991294da2c84d75a43c003151ff58072212768800f66c56ee46dca43" "checksum safemem 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e27a8b19b835f7aea908818e871f5cc3a5a186550c30773be987e155e8163d8f" "checksum scopeguard 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c79eb2c3ac4bc2507cda80e7f3ac5b88bd8eae4c0914d5663e6a8933994be918" +"checksum smoltcp 0.4.0 (git+https://github.com/batonius/smoltcp.git?branch=default_route)" = "" "checksum termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "689a3bdfaab439fd92bc87df5c4c78417d3cbe537487274e9b0b2dce76e92096" "checksum time 0.1.38 (registry+https://github.com/rust-lang/crates.io-index)" = "d5d788d3aa77bc0ef3e9621256885555368b47bd495c13dd2e7413c89f845520" "checksum traitobject 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "efd1f82c56340fdf16f2a953d7bda4f8fdffba13d93b00844c25572110b26079" diff --git a/Cargo.toml b/Cargo.toml index 0639af3499..febfbe50e4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -41,4 +41,4 @@ features = ["release_max_level_off"] git = "https://github.com/batonius/smoltcp.git" branch = "default_route" default-features = false -features = ["std", "log", "socket-raw", "socket-udp", "socket-tcp"] +features = ["std", "log", "socket-raw", "socket-udp", "socket-tcp"] diff --git a/src/smolnetd/main.rs b/src/smolnetd/main.rs index 286070d40b..2ac8cc8095 100644 --- a/src/smolnetd/main.rs +++ b/src/smolnetd/main.rs @@ -25,12 +25,6 @@ mod port_set; fn run() -> Result<()> { use syscall::flag::*; - logger::init_logger(); - - // if unsafe { syscall::clone(0).unwrap() } != 0 { - // return Ok(()); - // } - trace!("opening network:"); let network_fd = syscall::open("network:", O_RDWR | O_NONBLOCK) .map_err(|e| Error::from_syscall_error(e, "failed to open network:"))? @@ -126,9 +120,12 @@ fn run() -> Result<()> { } fn main() { - if let Err(err) = run() { - error!("smoltcpd: {}", err); - process::exit(1); + if unsafe { syscall::clone(0).unwrap() } == 0 { + logger::init_logger(); + + if let Err(err) = run() { + error!("smoltcpd: {}", err); + process::exit(1); + } } - process::exit(0); } diff --git a/src/smolnetd/scheme/mod.rs b/src/smolnetd/scheme/mod.rs index 9424759431..fabffd93b4 100644 --- a/src/smolnetd/scheme/mod.rs +++ b/src/smolnetd/scheme/mod.rs @@ -126,9 +126,9 @@ impl Smolnetd { fn poll(&mut self) -> Result<()> { let timestamp = self.get_timestamp(); // trace!("Poll {}", timestamp); - self.iface - .poll(&mut *self.socket_set.borrow_mut(), timestamp) - .expect("poll error"); + if let Err(err) = self.iface.poll(&mut *self.socket_set.borrow_mut(), timestamp) { + error!("poll error: {}", err); + } self.notify_sockets() } diff --git a/src/smolnetd/scheme/tcp_socket.rs b/src/smolnetd/scheme/tcp_socket.rs index c283a3b4c1..dbb4d1d7f8 100644 --- a/src/smolnetd/scheme/tcp_socket.rs +++ b/src/smolnetd/scheme/tcp_socket.rs @@ -11,7 +11,6 @@ use std::ops::DerefMut; use syscall::data::TimeSpec; use syscall; -use super::Smolnetd; use port_set::PortSet; pub type TcpScheme = SocketScheme>; @@ -109,7 +108,7 @@ impl<'a> SchemeSocket for TcpSocket<'a> { let remote_endpoint = parse_endpoint(parts.next().unwrap_or("")); let mut local_endpoint = parse_endpoint(parts.next().unwrap_or("")); - if local_endpoint.port <= 1024 && uid != 0 { + if local_endpoint.port > 0 && local_endpoint.port <= 1024 && uid != 0 { return Err(syscall::Error::new(syscall::EACCES)); } diff --git a/src/smolnetd/scheme/udp_socket.rs b/src/smolnetd/scheme/udp_socket.rs index e06825a1e3..a9c40cf066 100644 --- a/src/smolnetd/scheme/udp_socket.rs +++ b/src/smolnetd/scheme/udp_socket.rs @@ -107,7 +107,7 @@ impl<'a, 'b> SchemeSocket for UdpSocket<'a, 'b> { let remote_endpoint = parse_endpoint(parts.next().unwrap_or("")); let mut local_endpoint = parse_endpoint(parts.next().unwrap_or("")); - if local_endpoint.port <= 1024 && uid != 0 { + if local_endpoint.port > 0 && local_endpoint.port <= 1024 && uid != 0 { return Err(syscall::Error::new(syscall::EACCES)); }