diff options
| author | Ruben De Smet <[email protected]> | 2023-07-28 16:19:24 +0200 |
|---|---|---|
| committer | Ruben De Smet <[email protected]> | 2023-07-28 16:40:15 +0200 |
| commit | 69c0a89aa5d52e048fdd8ddc5d47b767da07e88b (patch) | |
| tree | e8eb364418ae00d46f2b4163b6c0bd8fff6306fc | |
| parent | c3ba08ffb6570589726db44d40ba5b724a8950d4 (diff) | |
Use HardwareAddress in Driver
| -rw-r--r-- | embassy-net-driver-channel/src/lib.rs | 23 | ||||
| -rw-r--r-- | embassy-net-driver/Cargo.toml | 3 | ||||
| -rw-r--r-- | embassy-net-driver/src/lib.rs | 16 | ||||
| -rw-r--r-- | embassy-net/src/lib.rs | 27 | ||||
| -rw-r--r-- | embassy-stm32-wpan/src/mac/driver.rs | 4 | ||||
| -rw-r--r-- | examples/std/src/tuntap.rs | 5 |
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> { | |||
| 42 | struct Shared { | 42 | struct 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 | ||
| 49 | pub struct Runner<'d, const MTU: usize> { | 48 | pub 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" | |||
| 21 | features = ["defmt"] | 21 | features = ["defmt"] |
| 22 | 22 | ||
| 23 | [dependencies] | 23 | [dependencies] |
| 24 | defmt = { version = "0.3", optional = true } \ No newline at end of file | 24 | defmt = { version = "0.3", optional = true } |
| 25 | smoltcp = { 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 | ||
| 5 | use core::task::Context; | 5 | use core::task::Context; |
| 6 | 6 | ||
| 7 | use 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 | ||
| 61 | impl<T: ?Sized + Driver> Driver for &mut T { | 60 | impl<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}; | |||
| 4 | use std::task::Context; | 4 | use std::task::Context; |
| 5 | 5 | ||
| 6 | use async_io::Async; | 6 | use async_io::Async; |
| 7 | use embassy_net::HardwareAddress; | ||
| 7 | use embassy_net_driver::{self, Capabilities, Driver, LinkState}; | 8 | use embassy_net_driver::{self, Capabilities, Driver, LinkState}; |
| 8 | use log::*; | 9 | use 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 | ||
