morpheus_network::stack

Module interface

Source
Expand description

Full smoltcp network interface with TCP/IP stack.

This provides a complete IP stack over any NetworkDevice:

  • Ethernet frame handling
  • ARP resolution
  • IPv4 with DHCP or static configuration
  • TCP socket management
  • DNS resolution (optional)

§Architecture

┌─────────────────────────────────────────────────────────────┐
│                    NetInterface                             │
│  (manages smoltcp Interface + socket set)                   │
└─────────────────────────────────────────────────────────────┘
                             │
                             ▼
┌─────────────────────────────────────────────────────────────┐
│              smoltcp::iface::Interface                      │
│  (IP routing, ARP, fragmentation)                           │
└─────────────────────────────────────────────────────────────┘
                             │
                             ▼
┌─────────────────────────────────────────────────────────────┐
│              DeviceAdapter<D: NetworkDevice>                │
│  (bridges our drivers to smoltcp Device trait)              │
└─────────────────────────────────────────────────────────────┘
                             │
                             ▼
┌─────────────────────────────────────────────────────────────┐
│              NetworkDevice implementations                  │
│  VirtIO | Intel | Realtek | Broadcom | ...                  │
└─────────────────────────────────────────────────────────────┘

§Usage

use morpheus_network::stack::{NetInterface, NetConfig};
use morpheus_network::device::virtio::VirtioNetDevice;

// Create network device
let device = VirtioNetDevice::new(transport)?;

// Create interface with DHCP
let mut iface = NetInterface::new(device, NetConfig::dhcp());

// Poll until we have an IP
while !iface.has_ip() {
    iface.poll(get_time_ms());
}

// Now ready for TCP connections
let socket = iface.tcp_connect(remote_ip, remote_port)?;

Structs§

Enums§

Constants§