diff options
| author | Dario Nieuwenhuis <[email protected]> | 2023-10-16 23:41:58 +0200 |
|---|---|---|
| committer | Dario Nieuwenhuis <[email protected]> | 2023-10-18 05:28:16 +0200 |
| commit | 3cbc6874247d7b814cab8ec8762bfe2f6f385828 (patch) | |
| tree | aac4c615c816f6465559874a98c9d3cf60c21817 /embassy-net/src/lib.rs | |
| parent | 51708c8ed1962618ac7bc244a3f5e7ceced28182 (diff) | |
net/driver: remove Medium, make HardwareAddress non_exhaustive.
Diffstat (limited to 'embassy-net/src/lib.rs')
| -rw-r--r-- | embassy-net/src/lib.rs | 36 |
1 files changed, 26 insertions, 10 deletions
diff --git a/embassy-net/src/lib.rs b/embassy-net/src/lib.rs index a0ad33c6b..c41faee2f 100644 --- a/embassy-net/src/lib.rs +++ b/embassy-net/src/lib.rs | |||
| @@ -33,6 +33,7 @@ use heapless::Vec; | |||
| 33 | pub use smoltcp::iface::MulticastError; | 33 | pub use smoltcp::iface::MulticastError; |
| 34 | #[allow(unused_imports)] | 34 | #[allow(unused_imports)] |
| 35 | use smoltcp::iface::{Interface, SocketHandle, SocketSet, SocketStorage}; | 35 | use smoltcp::iface::{Interface, SocketHandle, SocketSet, SocketStorage}; |
| 36 | use smoltcp::phy::Medium; | ||
| 36 | #[cfg(feature = "dhcpv4")] | 37 | #[cfg(feature = "dhcpv4")] |
| 37 | use smoltcp::socket::dhcpv4::{self, RetryConfig}; | 38 | use smoltcp::socket::dhcpv4::{self, RetryConfig}; |
| 38 | #[cfg(feature = "medium-ethernet")] | 39 | #[cfg(feature = "medium-ethernet")] |
| @@ -264,14 +265,17 @@ pub(crate) struct SocketStack { | |||
| 264 | next_local_port: u16, | 265 | next_local_port: u16, |
| 265 | } | 266 | } |
| 266 | 267 | ||
| 267 | fn to_smoltcp_hardware_address(addr: driver::HardwareAddress) -> HardwareAddress { | 268 | fn to_smoltcp_hardware_address(addr: driver::HardwareAddress) -> (HardwareAddress, Medium) { |
| 268 | match addr { | 269 | match addr { |
| 269 | #[cfg(feature = "medium-ethernet")] | 270 | #[cfg(feature = "medium-ethernet")] |
| 270 | driver::HardwareAddress::Ethernet(eth) => HardwareAddress::Ethernet(EthernetAddress(eth)), | 271 | driver::HardwareAddress::Ethernet(eth) => (HardwareAddress::Ethernet(EthernetAddress(eth)), Medium::Ethernet), |
| 271 | #[cfg(feature = "medium-ieee802154")] | 272 | #[cfg(feature = "medium-ieee802154")] |
| 272 | driver::HardwareAddress::Ieee802154(ieee) => HardwareAddress::Ieee802154(Ieee802154Address::Extended(ieee)), | 273 | driver::HardwareAddress::Ieee802154(ieee) => ( |
| 274 | HardwareAddress::Ieee802154(Ieee802154Address::Extended(ieee)), | ||
| 275 | Medium::Ieee802154, | ||
| 276 | ), | ||
| 273 | #[cfg(feature = "medium-ip")] | 277 | #[cfg(feature = "medium-ip")] |
| 274 | driver::HardwareAddress::Ip => HardwareAddress::Ip, | 278 | driver::HardwareAddress::Ip => (HardwareAddress::Ip, Medium::Ip), |
| 275 | 279 | ||
| 276 | #[allow(unreachable_patterns)] | 280 | #[allow(unreachable_patterns)] |
| 277 | _ => panic!( | 281 | _ => panic!( |
| @@ -289,7 +293,8 @@ impl<D: Driver> Stack<D> { | |||
| 289 | resources: &'static mut StackResources<SOCK>, | 293 | resources: &'static mut StackResources<SOCK>, |
| 290 | random_seed: u64, | 294 | random_seed: u64, |
| 291 | ) -> Self { | 295 | ) -> Self { |
| 292 | let mut iface_cfg = smoltcp::iface::Config::new(to_smoltcp_hardware_address(device.hardware_address())); | 296 | let (hardware_addr, medium) = to_smoltcp_hardware_address(device.hardware_address()); |
| 297 | let mut iface_cfg = smoltcp::iface::Config::new(hardware_addr); | ||
| 293 | iface_cfg.random_seed = random_seed; | 298 | iface_cfg.random_seed = random_seed; |
| 294 | 299 | ||
| 295 | let iface = Interface::new( | 300 | let iface = Interface::new( |
| @@ -297,6 +302,7 @@ impl<D: Driver> Stack<D> { | |||
| 297 | &mut DriverAdapter { | 302 | &mut DriverAdapter { |
| 298 | inner: &mut device, | 303 | inner: &mut device, |
| 299 | cx: None, | 304 | cx: None, |
| 305 | medium, | ||
| 300 | }, | 306 | }, |
| 301 | instant_to_smoltcp(Instant::now()), | 307 | instant_to_smoltcp(Instant::now()), |
| 302 | ); | 308 | ); |
| @@ -356,7 +362,7 @@ impl<D: Driver> Stack<D> { | |||
| 356 | 362 | ||
| 357 | /// Get the hardware address of the network interface. | 363 | /// Get the hardware address of the network interface. |
| 358 | pub fn hardware_address(&self) -> HardwareAddress { | 364 | pub fn hardware_address(&self) -> HardwareAddress { |
| 359 | self.with(|_s, i| to_smoltcp_hardware_address(i.device.hardware_address())) | 365 | self.with(|_s, i| to_smoltcp_hardware_address(i.device.hardware_address()).0) |
| 360 | } | 366 | } |
| 361 | 367 | ||
| 362 | /// Get whether the link is up. | 368 | /// Get whether the link is up. |
| @@ -812,18 +818,28 @@ impl<D: Driver> Inner<D> { | |||
| 812 | fn poll(&mut self, cx: &mut Context<'_>, s: &mut SocketStack) { | 818 | fn poll(&mut self, cx: &mut Context<'_>, s: &mut SocketStack) { |
| 813 | s.waker.register(cx.waker()); | 819 | s.waker.register(cx.waker()); |
| 814 | 820 | ||
| 821 | let (_hardware_addr, medium) = to_smoltcp_hardware_address(self.device.hardware_address()); | ||
| 822 | |||
| 815 | #[cfg(any(feature = "medium-ethernet", feature = "medium-ieee802154"))] | 823 | #[cfg(any(feature = "medium-ethernet", feature = "medium-ieee802154"))] |
| 816 | if self.device.capabilities().medium == embassy_net_driver::Medium::Ethernet | ||
| 817 | || self.device.capabilities().medium == embassy_net_driver::Medium::Ieee802154 | ||
| 818 | { | 824 | { |
| 819 | s.iface | 825 | let do_set = match medium { |
| 820 | .set_hardware_addr(to_smoltcp_hardware_address(self.device.hardware_address())); | 826 | #[cfg(feature = "medium-ethernet")] |
| 827 | Medium::Ethernet => true, | ||
| 828 | #[cfg(feature = "medium-ieee802154")] | ||
| 829 | Medium::Ieee802154 => true, | ||
| 830 | #[allow(unreachable_patterns)] | ||
| 831 | _ => false, | ||
| 832 | }; | ||
| 833 | if do_set { | ||
| 834 | s.iface.set_hardware_addr(_hardware_addr); | ||
| 835 | } | ||
| 821 | } | 836 | } |
| 822 | 837 | ||
| 823 | let timestamp = instant_to_smoltcp(Instant::now()); | 838 | let timestamp = instant_to_smoltcp(Instant::now()); |
| 824 | let mut smoldev = DriverAdapter { | 839 | let mut smoldev = DriverAdapter { |
| 825 | cx: Some(cx), | 840 | cx: Some(cx), |
| 826 | inner: &mut self.device, | 841 | inner: &mut self.device, |
| 842 | medium, | ||
| 827 | }; | 843 | }; |
| 828 | s.iface.poll(timestamp, &mut smoldev, &mut s.sockets); | 844 | s.iface.poll(timestamp, &mut smoldev, &mut s.sockets); |
| 829 | 845 | ||
