diff options
| author | Dario Nieuwenhuis <[email protected]> | 2022-12-07 00:28:38 +0100 |
|---|---|---|
| committer | Dario Nieuwenhuis <[email protected]> | 2022-12-07 00:28:38 +0100 |
| commit | f7fe0c1441843b04fa17ba0fe94f8c8d4f851882 (patch) | |
| tree | 0118957c2ce740d945293964fd0183595dec8aff /embassy-net | |
| parent | 02abe00439ba873945bd6b60546a200b3da751f1 (diff) | |
net: update smoltcp
Diffstat (limited to 'embassy-net')
| -rw-r--r-- | embassy-net/Cargo.toml | 2 | ||||
| -rw-r--r-- | embassy-net/src/device.rs | 14 | ||||
| -rw-r--r-- | embassy-net/src/stack.rs | 21 | ||||
| -rw-r--r-- | embassy-net/src/tcp.rs | 5 |
4 files changed, 17 insertions, 25 deletions
diff --git a/embassy-net/Cargo.toml b/embassy-net/Cargo.toml index 86d4aa105..ac338843d 100644 --- a/embassy-net/Cargo.toml +++ b/embassy-net/Cargo.toml | |||
| @@ -57,7 +57,7 @@ embedded-nal-async = { version = "0.3.0", optional = true } | |||
| 57 | [dependencies.smoltcp] | 57 | [dependencies.smoltcp] |
| 58 | version = "0.8.0" | 58 | version = "0.8.0" |
| 59 | git = "https://github.com/smoltcp-rs/smoltcp" | 59 | git = "https://github.com/smoltcp-rs/smoltcp" |
| 60 | rev = "ed0cf16750a42f30e31fcaf5347915592924b1e3" | 60 | rev = "b7a7c4b1c56e8d4c2524c1e3a056c745a13cc09f" |
| 61 | default-features = false | 61 | default-features = false |
| 62 | features = [ | 62 | features = [ |
| 63 | "proto-ipv4", | 63 | "proto-ipv4", |
diff --git a/embassy-net/src/device.rs b/embassy-net/src/device.rs index c183bd58a..4bdfd7720 100644 --- a/embassy-net/src/device.rs +++ b/embassy-net/src/device.rs | |||
| @@ -12,8 +12,6 @@ pub enum LinkState { | |||
| 12 | Up, | 12 | Up, |
| 13 | } | 13 | } |
| 14 | 14 | ||
| 15 | // 'static required due to the "fake GAT" in smoltcp::phy::Device. | ||
| 16 | // https://github.com/smoltcp-rs/smoltcp/pull/572 | ||
| 17 | pub trait Device { | 15 | pub trait Device { |
| 18 | fn is_transmit_ready(&mut self) -> bool; | 16 | fn is_transmit_ready(&mut self) -> bool; |
| 19 | fn transmit(&mut self, pkt: PacketBuf); | 17 | fn transmit(&mut self, pkt: PacketBuf); |
| @@ -25,7 +23,7 @@ pub trait Device { | |||
| 25 | fn ethernet_address(&self) -> [u8; 6]; | 23 | fn ethernet_address(&self) -> [u8; 6]; |
| 26 | } | 24 | } |
| 27 | 25 | ||
| 28 | impl<T: ?Sized + Device> Device for &'static mut T { | 26 | impl<T: ?Sized + Device> Device for &mut T { |
| 29 | fn is_transmit_ready(&mut self) -> bool { | 27 | fn is_transmit_ready(&mut self) -> bool { |
| 30 | T::is_transmit_ready(self) | 28 | T::is_transmit_ready(self) |
| 31 | } | 29 | } |
| @@ -63,11 +61,11 @@ impl<D: Device> DeviceAdapter<D> { | |||
| 63 | } | 61 | } |
| 64 | } | 62 | } |
| 65 | 63 | ||
| 66 | impl<'a, D: Device + 'static> SmolDevice<'a> for DeviceAdapter<D> { | 64 | impl<D: Device> SmolDevice for DeviceAdapter<D> { |
| 67 | type RxToken = RxToken; | 65 | type RxToken<'a> = RxToken where Self: 'a; |
| 68 | type TxToken = TxToken<'a, D>; | 66 | type TxToken<'a> = TxToken<'a, D> where Self: 'a; |
| 69 | 67 | ||
| 70 | fn receive(&'a mut self) -> Option<(Self::RxToken, Self::TxToken)> { | 68 | fn receive(&mut self) -> Option<(Self::RxToken<'_>, Self::TxToken<'_>)> { |
| 71 | let tx_pkt = PacketBox::new(Packet::new())?; | 69 | let tx_pkt = PacketBox::new(Packet::new())?; |
| 72 | let rx_pkt = self.device.receive()?; | 70 | let rx_pkt = self.device.receive()?; |
| 73 | let rx_token = RxToken { pkt: rx_pkt }; | 71 | let rx_token = RxToken { pkt: rx_pkt }; |
| @@ -80,7 +78,7 @@ impl<'a, D: Device + 'static> SmolDevice<'a> for DeviceAdapter<D> { | |||
| 80 | } | 78 | } |
| 81 | 79 | ||
| 82 | /// Construct a transmit token. | 80 | /// Construct a transmit token. |
| 83 | fn transmit(&'a mut self) -> Option<Self::TxToken> { | 81 | fn transmit(&mut self) -> Option<Self::TxToken<'_>> { |
| 84 | if !self.device.is_transmit_ready() { | 82 | if !self.device.is_transmit_ready() { |
| 85 | return None; | 83 | return None; |
| 86 | } | 84 | } |
diff --git a/embassy-net/src/stack.rs b/embassy-net/src/stack.rs index 631087405..5c4fb0442 100644 --- a/embassy-net/src/stack.rs +++ b/embassy-net/src/stack.rs | |||
| @@ -266,21 +266,12 @@ impl<D: Device + 'static> Inner<D> { | |||
| 266 | None => {} | 266 | None => {} |
| 267 | Some(dhcpv4::Event::Deconfigured) => self.unapply_config(s), | 267 | Some(dhcpv4::Event::Deconfigured) => self.unapply_config(s), |
| 268 | Some(dhcpv4::Event::Configured(config)) => { | 268 | Some(dhcpv4::Event::Configured(config)) => { |
| 269 | let mut dns_servers = Vec::new(); | 269 | let config = Config { |
| 270 | for s in &config.dns_servers { | 270 | address: config.address, |
| 271 | if let Some(addr) = s { | 271 | gateway: config.router, |
| 272 | dns_servers.push(addr.clone()).unwrap(); | 272 | dns_servers: config.dns_servers, |
| 273 | } | 273 | }; |
| 274 | } | 274 | self.apply_config(s, config) |
| 275 | |||
| 276 | self.apply_config( | ||
| 277 | s, | ||
| 278 | Config { | ||
| 279 | address: config.address, | ||
| 280 | gateway: config.router, | ||
| 281 | dns_servers, | ||
| 282 | }, | ||
| 283 | ) | ||
| 284 | } | 275 | } |
| 285 | } | 276 | } |
| 286 | } else if old_link_up { | 277 | } else if old_link_up { |
diff --git a/embassy-net/src/tcp.rs b/embassy-net/src/tcp.rs index 60386535a..73cf2d4e4 100644 --- a/embassy-net/src/tcp.rs +++ b/embassy-net/src/tcp.rs | |||
| @@ -94,7 +94,10 @@ impl<'a> TcpSocket<'a> { | |||
| 94 | { | 94 | { |
| 95 | let local_port = self.io.stack.borrow_mut().get_local_port(); | 95 | let local_port = self.io.stack.borrow_mut().get_local_port(); |
| 96 | 96 | ||
| 97 | match { self.io.with_mut(|s, i| s.connect(i, remote_endpoint, local_port)) } { | 97 | match { |
| 98 | self.io | ||
| 99 | .with_mut(|s, i| s.connect(i.context(), remote_endpoint, local_port)) | ||
| 100 | } { | ||
| 98 | Ok(()) => {} | 101 | Ok(()) => {} |
| 99 | Err(tcp::ConnectError::InvalidState) => return Err(ConnectError::InvalidState), | 102 | Err(tcp::ConnectError::InvalidState) => return Err(ConnectError::InvalidState), |
| 100 | Err(tcp::ConnectError::Unaddressable) => return Err(ConnectError::NoRoute), | 103 | Err(tcp::ConnectError::Unaddressable) => return Err(ConnectError::NoRoute), |
