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§
- Full network interface with IP stack.
Enums§
- Network interface configuration.
- Network interface state.
Constants§
- Maximum number of concurrent TCP sockets.
- TCP receive buffer size.
- TCP transmit buffer size.