aboutsummaryrefslogtreecommitdiff
path: root/embassy-net
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2022-12-07 00:28:38 +0100
committerDario Nieuwenhuis <[email protected]>2022-12-07 00:28:38 +0100
commitf7fe0c1441843b04fa17ba0fe94f8c8d4f851882 (patch)
tree0118957c2ce740d945293964fd0183595dec8aff /embassy-net
parent02abe00439ba873945bd6b60546a200b3da751f1 (diff)
net: update smoltcp
Diffstat (limited to 'embassy-net')
-rw-r--r--embassy-net/Cargo.toml2
-rw-r--r--embassy-net/src/device.rs14
-rw-r--r--embassy-net/src/stack.rs21
-rw-r--r--embassy-net/src/tcp.rs5
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]
58version = "0.8.0" 58version = "0.8.0"
59git = "https://github.com/smoltcp-rs/smoltcp" 59git = "https://github.com/smoltcp-rs/smoltcp"
60rev = "ed0cf16750a42f30e31fcaf5347915592924b1e3" 60rev = "b7a7c4b1c56e8d4c2524c1e3a056c745a13cc09f"
61default-features = false 61default-features = false
62features = [ 62features = [
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
17pub trait Device { 15pub 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
28impl<T: ?Sized + Device> Device for &'static mut T { 26impl<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
66impl<'a, D: Device + 'static> SmolDevice<'a> for DeviceAdapter<D> { 64impl<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),