Skip to content

Commit 2bdc783

Browse files
authored
Merge pull request #765 from Gelbpunkt/net-feature
hermit: Add net feature
2 parents e8db246 + dd50804 commit 2bdc783

File tree

7 files changed

+59
-1
lines changed

7 files changed

+59
-1
lines changed

Cargo.lock

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ members = [
1212
"examples/fuse_test",
1313
"examples/hello_world",
1414
"examples/httpd",
15+
"examples/loopback",
1516
"examples/miotcp",
1617
"examples/mioudp",
1718
"examples/polling",

examples/loopback/Cargo.toml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
[package]
2+
name = "loopback"
3+
edition = "2021"
4+
5+
[target.'cfg(target_os = "hermit")'.dependencies]
6+
hermit = { path = "../../hermit", default-features = false }
7+
8+
[features]
9+
default = ["hermit/acpi", "hermit/net", "hermit/pci", "hermit/pci-ids", "hermit/tcp"]

examples/loopback/src/main.rs

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
//! This example requires setting HERMIT_IP=127.0.0.1
2+
3+
use std::io::{self, Read, Write};
4+
use std::net::{Ipv4Addr, SocketAddr, TcpListener, TcpStream};
5+
use std::thread;
6+
7+
#[cfg(target_os = "hermit")]
8+
use hermit as _;
9+
10+
const TO_SEND: &[u8] = b"hello loopback";
11+
12+
fn handle_client(mut stream: TcpStream) -> io::Result<()> {
13+
let mut buf = [0u8; TO_SEND.len()];
14+
stream.read_exact(&mut buf)?;
15+
assert_eq!(&buf, TO_SEND);
16+
stream.write_all(TO_SEND)
17+
}
18+
19+
fn main() -> io::Result<()> {
20+
let addr = SocketAddr::from((Ipv4Addr::LOCALHOST, 9975));
21+
22+
let t = thread::spawn(move || {
23+
let mut client = TcpStream::connect(addr)?;
24+
eprintln!("Client successfully connected");
25+
client.write_all(TO_SEND)?;
26+
let mut buf = [0u8; TO_SEND.len()];
27+
client.read_exact(&mut buf)?;
28+
assert_eq!(&buf, TO_SEND);
29+
Ok(())
30+
});
31+
32+
let listener = TcpListener::bind(addr)?;
33+
eprintln!("Listening on {addr}");
34+
let (socket, socket_addr) = listener.accept()?;
35+
eprintln!("Accepted connection from {socket_addr}");
36+
handle_client(socket)?;
37+
38+
t.join().unwrap()
39+
}

hermit/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ instrument = []
5050

5151
libc = []
5252
mmap = []
53+
net = []
5354
pci = []
5455
pci-ids = ["pci"]
5556

hermit/build.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ impl KernelSrc {
123123
"idle-poll",
124124
"log-target",
125125
"mmap",
126+
"net",
126127
"pci",
127128
"pci-ids",
128129
"rtl8139",

kernel

Submodule kernel updated 101 files

0 commit comments

Comments
 (0)