diff options
| author | Ulf Lilleengen <[email protected]> | 2023-02-10 18:30:17 +0100 |
|---|---|---|
| committer | Ulf Lilleengen <[email protected]> | 2023-02-10 18:30:17 +0100 |
| commit | 6e68353a931cc268f61b4606c3a99bf8f5e96f6e (patch) | |
| tree | 5ea5ab8676515b0b71eba5897bda26c0f49db06b | |
| parent | 7ae47cb1d81d5112fdc42ceaec470350aab5c372 (diff) | |
attempt removing option
| -rw-r--r-- | embassy-net/src/lib.rs | 74 |
1 files changed, 27 insertions, 47 deletions
diff --git a/embassy-net/src/lib.rs b/embassy-net/src/lib.rs index 5b6ab0e3a..627c0a0f7 100644 --- a/embassy-net/src/lib.rs +++ b/embassy-net/src/lib.rs | |||
| @@ -53,7 +53,7 @@ const MAX_QUERIES: usize = 2; | |||
| 53 | pub struct StackResources<const SOCK: usize> { | 53 | pub struct StackResources<const SOCK: usize> { |
| 54 | sockets: [SocketStorage<'static>; SOCK], | 54 | sockets: [SocketStorage<'static>; SOCK], |
| 55 | #[cfg(feature = "dns")] | 55 | #[cfg(feature = "dns")] |
| 56 | queries: Option<[Option<dns::DnsQuery>; MAX_QUERIES]>, | 56 | queries: [Option<dns::DnsQuery>; MAX_QUERIES], |
| 57 | } | 57 | } |
| 58 | 58 | ||
| 59 | impl<const SOCK: usize> StackResources<SOCK> { | 59 | impl<const SOCK: usize> StackResources<SOCK> { |
| @@ -63,7 +63,7 @@ impl<const SOCK: usize> StackResources<SOCK> { | |||
| 63 | Self { | 63 | Self { |
| 64 | sockets: [SocketStorage::EMPTY; SOCK], | 64 | sockets: [SocketStorage::EMPTY; SOCK], |
| 65 | #[cfg(feature = "dns")] | 65 | #[cfg(feature = "dns")] |
| 66 | queries: Some([INIT; MAX_QUERIES]), | 66 | queries: [INIT; MAX_QUERIES], |
| 67 | } | 67 | } |
| 68 | } | 68 | } |
| 69 | } | 69 | } |
| @@ -117,7 +117,7 @@ struct Inner<D: Driver> { | |||
| 117 | #[cfg(feature = "dhcpv4")] | 117 | #[cfg(feature = "dhcpv4")] |
| 118 | dhcp_socket: Option<SocketHandle>, | 118 | dhcp_socket: Option<SocketHandle>, |
| 119 | #[cfg(feature = "dns")] | 119 | #[cfg(feature = "dns")] |
| 120 | dns_socket: Option<SocketHandle>, | 120 | dns_socket: SocketHandle, |
| 121 | } | 121 | } |
| 122 | 122 | ||
| 123 | pub(crate) struct SocketStack { | 123 | pub(crate) struct SocketStack { |
| @@ -156,6 +156,14 @@ impl<D: Driver + 'static> Stack<D> { | |||
| 156 | 156 | ||
| 157 | let next_local_port = (random_seed % (LOCAL_PORT_MAX - LOCAL_PORT_MIN) as u64) as u16 + LOCAL_PORT_MIN; | 157 | let next_local_port = (random_seed % (LOCAL_PORT_MAX - LOCAL_PORT_MIN) as u64) as u16 + LOCAL_PORT_MIN; |
| 158 | 158 | ||
| 159 | |||
| 160 | let mut socket = SocketStack { | ||
| 161 | sockets, | ||
| 162 | iface, | ||
| 163 | waker: WakerRegistration::new(), | ||
| 164 | next_local_port, | ||
| 165 | }; | ||
| 166 | |||
| 159 | let mut inner = Inner { | 167 | let mut inner = Inner { |
| 160 | device, | 168 | device, |
| 161 | link_up: false, | 169 | link_up: false, |
| @@ -163,21 +171,8 @@ impl<D: Driver + 'static> Stack<D> { | |||
| 163 | #[cfg(feature = "dhcpv4")] | 171 | #[cfg(feature = "dhcpv4")] |
| 164 | dhcp_socket: None, | 172 | dhcp_socket: None, |
| 165 | #[cfg(feature = "dns")] | 173 | #[cfg(feature = "dns")] |
| 166 | dns_socket: None, | 174 | dns_socket: socket.sockets.add(dns::Socket::new(&[], &mut resources.queries)), |
| 167 | }; | 175 | }; |
| 168 | let mut socket = SocketStack { | ||
| 169 | sockets, | ||
| 170 | iface, | ||
| 171 | waker: WakerRegistration::new(), | ||
| 172 | next_local_port, | ||
| 173 | }; | ||
| 174 | |||
| 175 | #[cfg(feature = "dns")] | ||
| 176 | { | ||
| 177 | if let Some(queries) = resources.queries.take() { | ||
| 178 | inner.dns_socket = Some(socket.sockets.add(dns::Socket::new(&[], queries))); | ||
| 179 | } | ||
| 180 | } | ||
| 181 | 176 | ||
| 182 | match config { | 177 | match config { |
| 183 | Config::Static(config) => { | 178 | Config::Static(config) => { |
| @@ -235,42 +230,29 @@ impl<D: Driver + 'static> Stack<D> { | |||
| 235 | #[cfg(feature = "dns")] | 230 | #[cfg(feature = "dns")] |
| 236 | pub async fn dns_query(&self, name: &str, qtype: dns::DnsQueryType) -> Result<Vec<IpAddress, 1>, dns::Error> { | 231 | pub async fn dns_query(&self, name: &str, qtype: dns::DnsQueryType) -> Result<Vec<IpAddress, 1>, dns::Error> { |
| 237 | let query = self.with_mut(|s, i| { | 232 | let query = self.with_mut(|s, i| { |
| 238 | if let Some(dns_handle) = i.dns_socket { | 233 | let socket = s.sockets.get_mut::<dns::Socket>(i.dns_socket); |
| 239 | let socket = s.sockets.get_mut::<dns::Socket>(dns_handle); | 234 | socket.start_query(s.iface.context(), name, qtype) |
| 240 | match socket.start_query(s.iface.context(), name, qtype) { | ||
| 241 | Ok(handle) => Ok(handle), | ||
| 242 | Err(e) => Err(e.into()), | ||
| 243 | } | ||
| 244 | } else { | ||
| 245 | Err(dns::Error::Failed) | ||
| 246 | } | ||
| 247 | })?; | 235 | })?; |
| 248 | 236 | ||
| 249 | use embassy_hal_common::drop::OnDrop; | 237 | use embassy_hal_common::drop::OnDrop; |
| 250 | let drop = OnDrop::new(|| { | 238 | let drop = OnDrop::new(|| { |
| 251 | self.with_mut(|s, i| { | 239 | self.with_mut(|s, i| { |
| 252 | if let Some(dns_handle) = i.dns_socket { | 240 | let socket = s.sockets.get_mut::<dns::Socket>(i.dns_socket); |
| 253 | let socket = s.sockets.get_mut::<dns::Socket>(dns_handle); | 241 | socket.cancel_query(query); |
| 254 | socket.cancel_query(query); | 242 | s.waker.wake(); |
| 255 | s.waker.wake(); | ||
| 256 | } | ||
| 257 | }) | 243 | }) |
| 258 | }); | 244 | }); |
| 259 | 245 | ||
| 260 | let res = poll_fn(|cx| { | 246 | let res = poll_fn(|cx| { |
| 261 | self.with_mut(|s, i| { | 247 | self.with_mut(|s, i| { |
| 262 | if let Some(dns_handle) = i.dns_socket { | 248 | let socket = s.sockets.get_mut::<dns::Socket>(i.dns_socket); |
| 263 | let socket = s.sockets.get_mut::<dns::Socket>(dns_handle); | 249 | match socket.get_query_result(query) { |
| 264 | match socket.get_query_result(query) { | 250 | Ok(addrs) => Poll::Ready(Ok(addrs)), |
| 265 | Ok(addrs) => Poll::Ready(Ok(addrs)), | 251 | Err(dns::GetQueryResultError::Pending) => { |
| 266 | Err(dns::GetQueryResultError::Pending) => { | 252 | socket.register_query_waker(query, cx.waker()); |
| 267 | socket.register_query_waker(query, cx.waker()); | 253 | Poll::Pending |
| 268 | Poll::Pending | ||
| 269 | } | ||
| 270 | Err(e) => Poll::Ready(Err(e.into())), | ||
| 271 | } | 254 | } |
| 272 | } else { | 255 | Err(e) => Poll::Ready(Err(e.into())), |
| 273 | Poll::Ready(Err(dns::Error::Failed)) | ||
| 274 | } | 256 | } |
| 275 | }) | 257 | }) |
| 276 | }) | 258 | }) |
| @@ -322,11 +304,9 @@ impl<D: Driver + 'static> Inner<D> { | |||
| 322 | } | 304 | } |
| 323 | 305 | ||
| 324 | #[cfg(feature = "dns")] | 306 | #[cfg(feature = "dns")] |
| 325 | if let Some(dns_socket) = self.dns_socket { | 307 | let socket = s.sockets.get_mut::<smoltcp::socket::dns::Socket>(self.dns_socket); |
| 326 | let socket = s.sockets.get_mut::<smoltcp::socket::dns::Socket>(dns_socket); | 308 | let servers: Vec<IpAddress, 3> = config.dns_servers.iter().map(|c| IpAddress::Ipv4(*c)).collect(); |
| 327 | let servers: Vec<IpAddress, 3> = config.dns_servers.iter().map(|c| IpAddress::Ipv4(*c)).collect(); | 309 | socket.update_servers(&servers[..]); |
| 328 | socket.update_servers(&servers[..]); | ||
| 329 | } | ||
| 330 | 310 | ||
| 331 | self.config = Some(config) | 311 | self.config = Some(config) |
| 332 | } | 312 | } |
