Vallicks is a unikernel written in Rust for fun, designed to be used to create microservices that run in the cloud.
I'm doing this simply for fun. But who knows what might come out out of it.
- proc-macros for easy bootstrapping
- SMP
- Async
- Drivers
- Kernel
- VGA Text mode
- Keyboard int driver
- Pic8259 (masked)
- Pit8259
- APIC/x2APIC
- ACPI
- RTC
- Peripherals
- RTL8139
- Virtio
- VBE
- Kernel
- Network Stack
- ARP
- ICMP
- TCP (partial)
- UDP
- QUIC?
- TLS
#![no_std]
#![no_main]
use rtl8139_rs::*;
use vallicks::async_::*;
use vallicks::driver::Driver;
use vallicks::net::socks::TcpListener;
use vallicks::net::wire::ipaddr::Ipv4Addr;
use vallicks::net::NetworkDevice;
use vallicks::prelude::*;
async fn netstack_init() {
let mut phy = RTL8139::probe().map(|x| RTL8139::preload(x)).unwrap();
if phy.init().is_err() {
panic!("failed to start phy");
}
let mut netdev = NetworkDevice::new(&mut phy);
netdev.set_ip(Ipv4Addr::new(192, 168, 100, 51));
netdev.run_forever().await
}
async fn tcp_echo_server() {
let mut listener = TcpListener::bind(1234).expect("failed to bind to port 1234");
loop {
if let Some(mut conn) = listener.accept().await {
spawn(async move {
loop {
let mut buf: [u8; 1000] = [0; 1000];
let read = conn.read(&mut buf).await;
if read > 0 {
println!("{}", String::from_utf8_lossy(&buf[..read]));
conn.write(&buf[..read]).await;
}
}
});
}
}
}
#[entrypoint]
fn main() {
println!("Ok");
let mut executor = executor::Executor::new();
executor.spawn(Task::new(netstack_init()));
executor.spawn(Task::new(tcp_echo_server()));
executor.run();
}
Contributions are absolutely, positively welcome and encouraged! Contributions come in many forms. You could:
- Submit a feature request or bug report as an issue.
- Ask for improved documentation as an issue.
- Contribute code via merge requests.
All pull requests are code reviewed and tested by the CI. Note that unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Vallicks by you shall be licensed under the GNU GPLv2 License without any additional terms or conditions.
Vallicks is licensed under the GPLv2 license (LICENSE.md or https://opensource.org/licenses/GPL-2.0)