From 171ce942c37df519c1aecf99dd061aaed29310dc Mon Sep 17 00:00:00 2001 From: occheung Date: Wed, 2 Sep 2020 17:23:03 +0800 Subject: [PATCH] ethernet: handle exit --- examples/ethernet.rs | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/examples/ethernet.rs b/examples/ethernet.rs index 245746e..c76a090 100644 --- a/examples/ethernet.rs +++ b/examples/ethernet.rs @@ -52,8 +52,8 @@ use core::mem::uninitialized; // Exception: no phy::wait //use smoltcp::phy::wait as phy_wait; -use smoltcp::wire::{EthernetAddress, IpAddress, IpCidr}; -use smoltcp::iface::{NeighborCache, EthernetInterfaceBuilder}; +use smoltcp::wire::{EthernetAddress, IpAddress, IpCidr, Ipv4Address}; +use smoltcp::iface::{NeighborCache, EthernetInterfaceBuilder, Routes}; use smoltcp::socket::SocketSet; use smoltcp::socket::{SocketHandle, TcpSocket, TcpSocketBuffer}; use smoltcp::time::{Duration, Instant}; @@ -259,11 +259,18 @@ fn main() -> ! { let mut neighbor_storage = [None; 16]; let neighbor_cache = NeighborCache::new(&mut neighbor_storage[..]); + // Routes + let default_v4_gw = Ipv4Address::new(192, 168, 1, 1); + let mut routes_storage = [None; 8]; + let mut routes = Routes::new(&mut routes_storage[..]); + routes.add_default_ipv4_route(default_v4_gw).unwrap(); + // Device? _eth_dma, as it implements phy::device let mut iface = EthernetInterfaceBuilder::new(_eth_dma) .ethernet_addr(mac_addr) .neighbor_cache(neighbor_cache) .ip_addrs(&mut ip_addrs[..]) + .routes(routes) .finalize(); // SCPI configs @@ -346,9 +353,18 @@ fn main() -> ! { } if socket.can_recv() { - let result = context.run(socket.recv(|buffer| { + // let result = context.run(socket.recv(|buffer| { + // (buffer.len(), buffer) + // }).unwrap(), &mut buf); + let mut data = socket.recv(|buffer| { (buffer.len(), buffer) - }).unwrap(), &mut buf); + }).unwrap(); + if str::from_utf8(data).unwrap().trim() == "quit" { + socket.close(); + socket.abort(); + continue; + } + let result = context.run(data, &mut buf); if let Err(err) = result { writeln!(socket, "{}", str::from_utf8(err.get_message()).unwrap()); } else {