net: add functions to get current Eth and IP config

This commit is contained in:
Dario Nieuwenhuis 2022-05-02 16:15:05 +02:00
parent e74af83681
commit a5f5c3a844
7 changed files with 30 additions and 12 deletions

View File

@ -21,7 +21,7 @@ pub trait Device {
fn register_waker(&mut self, waker: &Waker); fn register_waker(&mut self, waker: &Waker);
fn capabilities(&mut self) -> DeviceCapabilities; fn capabilities(&mut self) -> DeviceCapabilities;
fn link_state(&mut self) -> LinkState; fn link_state(&mut self) -> LinkState;
fn ethernet_address(&mut self) -> [u8; 6]; fn ethernet_address(&self) -> [u8; 6];
} }
pub struct DeviceAdapter { pub struct DeviceAdapter {

View File

@ -15,7 +15,9 @@ pub use config::{Config, Configurator, Event as ConfigEvent, StaticConfigurator}
pub use device::{Device, LinkState}; pub use device::{Device, LinkState};
pub use packet_pool::{Packet, PacketBox, PacketBoxExt, PacketBuf, MTU}; pub use packet_pool::{Packet, PacketBox, PacketBoxExt, PacketBuf, MTU};
pub use stack::{init, is_config_up, is_init, is_link_up, run, StackResources}; pub use stack::{
config, ethernet_address, init, is_config_up, is_init, is_link_up, run, StackResources,
};
#[cfg(feature = "tcp")] #[cfg(feature = "tcp")]
mod tcp_socket; mod tcp_socket;

View File

@ -21,7 +21,7 @@ use smoltcp::wire::{EthernetAddress, HardwareAddress, IpAddress};
use crate::config::Configurator; use crate::config::Configurator;
use crate::config::Event; use crate::config::Event;
use crate::device::{Device, DeviceAdapter, LinkState}; use crate::device::{Device, DeviceAdapter, LinkState};
use crate::Interface; use crate::{Config, Interface};
const LOCAL_PORT_MIN: u16 = 1025; const LOCAL_PORT_MIN: u16 = 1025;
const LOCAL_PORT_MAX: u16 = 65535; const LOCAL_PORT_MAX: u16 = 65535;
@ -56,7 +56,7 @@ static STACK: ThreadModeMutex<RefCell<Option<Stack>>> = ThreadModeMutex::new(Ref
pub(crate) struct Stack { pub(crate) struct Stack {
pub iface: Interface, pub iface: Interface,
link_up: bool, link_up: bool,
config_up: bool, config: Option<Config>,
next_local_port: u16, next_local_port: u16,
configurator: &'static mut dyn Configurator, configurator: &'static mut dyn Configurator,
waker: WakerRegistration, waker: WakerRegistration,
@ -113,7 +113,7 @@ impl Stack {
debug!(" DNS server {}: {}", i, s); debug!(" DNS server {}: {}", i, s);
} }
self.config_up = true; self.config = Some(config)
} }
Event::Deconfigured => { Event::Deconfigured => {
debug!("Lost IP configuration"); debug!("Lost IP configuration");
@ -122,7 +122,7 @@ impl Stack {
if medium == Medium::Ethernet { if medium == Medium::Ethernet {
self.iface.routes_mut().remove_default_ipv4_route(); self.iface.routes_mut().remove_default_ipv4_route();
} }
self.config_up = false; self.config = None
} }
} }
} }
@ -209,7 +209,7 @@ pub fn init<const ADDR: usize, const SOCK: usize, const NEIGH: usize>(
let stack = Stack { let stack = Stack {
iface, iface,
link_up: false, link_up: false,
config_up: false, config: None,
configurator, configurator,
next_local_port: local_port, next_local_port: local_port,
waker: WakerRegistration::new(), waker: WakerRegistration::new(),
@ -218,6 +218,18 @@ pub fn init<const ADDR: usize, const SOCK: usize, const NEIGH: usize>(
*STACK.borrow().borrow_mut() = Some(stack); *STACK.borrow().borrow_mut() = Some(stack);
} }
pub fn ethernet_address() -> [u8; 6] {
STACK
.borrow()
.borrow()
.as_ref()
.unwrap()
.iface
.device()
.device
.ethernet_address()
}
pub fn is_init() -> bool { pub fn is_init() -> bool {
STACK.borrow().borrow().is_some() STACK.borrow().borrow().is_some()
} }
@ -227,7 +239,11 @@ pub fn is_link_up() -> bool {
} }
pub fn is_config_up() -> bool { pub fn is_config_up() -> bool {
STACK.borrow().borrow().as_ref().unwrap().config_up STACK.borrow().borrow().as_ref().unwrap().config.is_some()
}
pub fn config() -> Option<Config> {
STACK.borrow().borrow().as_ref().unwrap().config.clone()
} }
pub async fn run() -> ! { pub async fn run() -> ! {

View File

@ -334,7 +334,7 @@ impl<'d, T: Instance, P: PHY, const TX: usize, const RX: usize> Device
} }
} }
fn ethernet_address(&mut self) -> [u8; 6] { fn ethernet_address(&self) -> [u8; 6] {
self.mac_addr self.mac_addr
} }
} }

View File

@ -268,7 +268,7 @@ impl<'d, T: Instance, P: PHY, const TX: usize, const RX: usize> Device
} }
} }
fn ethernet_address(&mut self) -> [u8; 6] { fn ethernet_address(&self) -> [u8; 6] {
self.mac_addr self.mac_addr
} }
} }

View File

@ -265,7 +265,7 @@ impl embassy_net::Device for Device {
RX_CHANNEL.try_recv().ok() RX_CHANNEL.try_recv().ok()
} }
fn ethernet_address(&mut self) -> [u8; 6] { fn ethernet_address(&self) -> [u8; 6] {
self.mac_addr self.mac_addr
} }
} }

View File

@ -219,7 +219,7 @@ impl Device for TunTapDevice {
LinkState::Up LinkState::Up
} }
fn ethernet_address(&mut self) -> [u8; 6] { fn ethernet_address(&self) -> [u8; 6] {
[0x02, 0x03, 0x04, 0x05, 0x06, 0x07] [0x02, 0x03, 0x04, 0x05, 0x06, 0x07]
} }
} }