aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--embassy-net-driver-channel/src/lib.rs23
-rw-r--r--embassy-net-driver/Cargo.toml3
-rw-r--r--embassy-net-driver/src/lib.rs16
-rw-r--r--embassy-net/src/lib.rs27
-rw-r--r--embassy-stm32-wpan/src/mac/driver.rs4
-rw-r--r--examples/std/src/tuntap.rs5
6 files changed, 28 insertions, 50 deletions
diff --git a/embassy-net-driver-channel/src/lib.rs b/embassy-net-driver-channel/src/lib.rs
index e101bf38a..53b66afba 100644
--- a/embassy-net-driver-channel/src/lib.rs
+++ b/embassy-net-driver-channel/src/lib.rs
@@ -42,8 +42,7 @@ struct StateInner<'d, const MTU: usize> {
42struct Shared { 42struct Shared {
43 link_state: LinkState, 43 link_state: LinkState,
44 waker: WakerRegistration, 44 waker: WakerRegistration,
45 ethernet_address: [u8; 6], 45 hardware_address: HardwareAddress,
46 ieee802154_address: [u8; 8],
47} 46}
48 47
49pub struct Runner<'d, const MTU: usize> { 48pub struct Runner<'d, const MTU: usize> {
@@ -86,18 +85,10 @@ impl<'d, const MTU: usize> Runner<'d, MTU> {
86 }); 85 });
87 } 86 }
88 87
89 pub fn set_ethernet_address(&mut self, address: [u8; 6]) { 88 pub fn set_hardware_address(&mut self, address: HardwareAddress) {
90 self.shared.lock(|s| { 89 self.shared.lock(|s| {
91 let s = &mut *s.borrow_mut(); 90 let s = &mut *s.borrow_mut();
92 s.ethernet_address = address; 91 s.hardware_address = address;
93 s.waker.wake();
94 });
95 }
96
97 pub fn set_ieee802154_address(&mut self, address: [u8; 8]) {
98 self.shared.lock(|s| {
99 let s = &mut *s.borrow_mut();
100 s.ieee802154_address = address;
101 s.waker.wake(); 92 s.waker.wake();
102 }); 93 });
103 } 94 }
@@ -300,12 +291,8 @@ impl<'d, const MTU: usize> embassy_net_driver::Driver for Device<'d, MTU> {
300 self.caps.clone() 291 self.caps.clone()
301 } 292 }
302 293
303 fn ethernet_address(&self) -> [u8; 6] { 294 fn hardware_address(&self) -> HardwareAddress {
304 self.shared.lock(|s| s.borrow().ethernet_address) 295 self.shared.lock(|s| s.borrow().hardware_address)
305 }
306
307 fn ieee802154_address(&self) -> [u8; 8] {
308 self.shared.lock(|s| s.borrow().ieee802154_address)
309 } 296 }
310 297
311 fn link_state(&mut self, cx: &mut Context) -> LinkState { 298 fn link_state(&mut self, cx: &mut Context) -> LinkState {
diff --git a/embassy-net-driver/Cargo.toml b/embassy-net-driver/Cargo.toml
index da6d9ad62..1af0d61b3 100644
--- a/embassy-net-driver/Cargo.toml
+++ b/embassy-net-driver/Cargo.toml
@@ -21,4 +21,5 @@ target = "thumbv7em-none-eabi"
21features = ["defmt"] 21features = ["defmt"]
22 22
23[dependencies] 23[dependencies]
24defmt = { version = "0.3", optional = true } \ No newline at end of file 24defmt = { version = "0.3", optional = true }
25smoltcp = { version = "0.10", default-features = false }
diff --git a/embassy-net-driver/src/lib.rs b/embassy-net-driver/src/lib.rs
index beb1a1c79..93a02e46c 100644
--- a/embassy-net-driver/src/lib.rs
+++ b/embassy-net-driver/src/lib.rs
@@ -4,6 +4,8 @@
4 4
5use core::task::Context; 5use core::task::Context;
6 6
7use smoltcp::wire::HardwareAddress;
8
7/// Main `embassy-net` driver API. 9/// Main `embassy-net` driver API.
8/// 10///
9/// This is essentially an interface for sending and receiving raw network frames. 11/// This is essentially an interface for sending and receiving raw network frames.
@@ -51,11 +53,8 @@ pub trait Driver {
51 /// Get a description of device capabilities. 53 /// Get a description of device capabilities.
52 fn capabilities(&self) -> Capabilities; 54 fn capabilities(&self) -> Capabilities;
53 55
54 /// Get the device's Ethernet address. 56 /// Get the device's hardware address.
55 fn ethernet_address(&self) -> [u8; 6]; 57 fn hardware_address(&self) -> HardwareAddress;
56
57 /// Get the device's IEEE 802.15.4 address.
58 fn ieee802154_address(&self) -> [u8; 8];
59} 58}
60 59
61impl<T: ?Sized + Driver> Driver for &mut T { 60impl<T: ?Sized + Driver> Driver for &mut T {
@@ -78,11 +77,8 @@ impl<T: ?Sized + Driver> Driver for &mut T {
78 fn link_state(&mut self, cx: &mut Context) -> LinkState { 77 fn link_state(&mut self, cx: &mut Context) -> LinkState {
79 T::link_state(self, cx) 78 T::link_state(self, cx)
80 } 79 }
81 fn ethernet_address(&self) -> [u8; 6] { 80 fn hardware_address(&self) -> HardwareAddress {
82 T::ethernet_address(self) 81 T::hardware_address(self)
83 }
84 fn ieee802154_address(&self) -> [u8; 8] {
85 T::ieee802154_address(self)
86 } 82 }
87} 83}
88 84
diff --git a/embassy-net/src/lib.rs b/embassy-net/src/lib.rs
index 53693563b..efd820a63 100644
--- a/embassy-net/src/lib.rs
+++ b/embassy-net/src/lib.rs
@@ -243,11 +243,11 @@ impl<D: Driver + 'static> Stack<D> {
243 243
244 let hardware_addr = match medium { 244 let hardware_addr = match medium {
245 #[cfg(feature = "medium-ethernet")] 245 #[cfg(feature = "medium-ethernet")]
246 Medium::Ethernet => HardwareAddress::Ethernet(EthernetAddress(device.ethernet_address())), 246 Medium::Ethernet => device.hardware_address(),
247 #[cfg(feature = "medium-ip")] 247 #[cfg(feature = "medium-ip")]
248 Medium::Ip => HardwareAddress::Ip, 248 Medium::Ip => HardwareAddress::Ip,
249 #[cfg(feature = "medium-ieee802154")] 249 #[cfg(feature = "medium-ieee802154")]
250 Medium::Ieee802154 => HardwareAddress::Ieee802154(Ieee802154Address::Extended(device.ieee802154_address())), 250 Medium::Ieee802154 => device.hardware_address(),
251 #[allow(unreachable_patterns)] 251 #[allow(unreachable_patterns)]
252 _ => panic!( 252 _ => panic!(
253 "Unsupported medium {:?}. Make sure to enable it in embassy-net's Cargo features.", 253 "Unsupported medium {:?}. Make sure to enable it in embassy-net's Cargo features.",
@@ -336,9 +336,9 @@ impl<D: Driver + 'static> Stack<D> {
336 f(&mut *self.socket.borrow_mut(), &mut *self.inner.borrow_mut()) 336 f(&mut *self.socket.borrow_mut(), &mut *self.inner.borrow_mut())
337 } 337 }
338 338
339 /// Get the MAC address of the network interface. 339 /// Get the hardware address of the network interface.
340 pub fn ethernet_address(&self) -> [u8; 6] { 340 pub fn hardware_address(&self) -> HardwareAddress {
341 self.with(|_s, i| i.device.ethernet_address()) 341 self.with(|_s, i| i.device.hardware_address())
342 } 342 }
343 343
344 /// Get whether the link is up. 344 /// Get whether the link is up.
@@ -740,18 +740,11 @@ impl<D: Driver + 'static> Inner<D> {
740 fn poll(&mut self, cx: &mut Context<'_>, s: &mut SocketStack) { 740 fn poll(&mut self, cx: &mut Context<'_>, s: &mut SocketStack) {
741 s.waker.register(cx.waker()); 741 s.waker.register(cx.waker());
742 742
743 #[cfg(feature = "medium-ethernet")] 743 #[cfg(any(feature = "medium-ethernet", feature = "medium-ieee802154"))]
744 if self.device.capabilities().medium == Medium::Ethernet { 744 if self.device.capabilities().medium == Medium::Ethernet
745 s.iface.set_hardware_addr(HardwareAddress::Ethernet(EthernetAddress( 745 || self.device.capabilities().medium == Medium::Ieee802154
746 self.device.ethernet_address(), 746 {
747 ))); 747 s.iface.set_hardware_addr(self.device.hardware_address());
748 }
749
750 #[cfg(feature = "medium-ieee802154")]
751 if self.device.capabilities().medium == Medium::Ieee802154 {
752 s.iface.set_hardware_addr(HardwareAddress::Ieee802154(Ieee802154Address::Extended(
753 self.device.ieee802154_address(),
754 )));
755 } 748 }
756 749
757 let timestamp = instant_to_smoltcp(Instant::now()); 750 let timestamp = instant_to_smoltcp(Instant::now());
diff --git a/embassy-stm32-wpan/src/mac/driver.rs b/embassy-stm32-wpan/src/mac/driver.rs
index fffbb9edc..06ff0cf69 100644
--- a/embassy-stm32-wpan/src/mac/driver.rs
+++ b/embassy-stm32-wpan/src/mac/driver.rs
@@ -73,10 +73,10 @@ impl<'d> embassy_net_driver::Driver for Driver<'d> {
73 LinkState::Down 73 LinkState::Down
74 } 74 }
75 75
76 fn ethernet_address(&self) -> [u8; 6] { 76 fn hardware_address(&self) -> HardwareAddress {
77 // self.mac_addr 77 // self.mac_addr
78 78
79 [0; 6] 79 HardwareAddress::Ethernet(EthernetAddress([0; 6]))
80 } 80 }
81} 81}
82 82
diff --git a/examples/std/src/tuntap.rs b/examples/std/src/tuntap.rs
index d918a2e62..932bdaf96 100644
--- a/examples/std/src/tuntap.rs
+++ b/examples/std/src/tuntap.rs
@@ -4,6 +4,7 @@ use std::os::unix::io::{AsRawFd, RawFd};
4use std::task::Context; 4use std::task::Context;
5 5
6use async_io::Async; 6use async_io::Async;
7use embassy_net::HardwareAddress;
7use embassy_net_driver::{self, Capabilities, Driver, LinkState}; 8use embassy_net_driver::{self, Capabilities, Driver, LinkState};
8use log::*; 9use log::*;
9 10
@@ -180,8 +181,8 @@ impl Driver for TunTapDevice {
180 LinkState::Up 181 LinkState::Up
181 } 182 }
182 183
183 fn ethernet_address(&self) -> [u8; 6] { 184 fn hardware_address(&self) -> HardwareAddress {
184 [0x02, 0x03, 0x04, 0x05, 0x06, 0x07] 185 HardwareAddress::Ethernet(EthernetAddress([0x02, 0x03, 0x04, 0x05, 0x06, 0x07]))
185 } 186 }
186} 187}
187 188