diff options
| -rw-r--r-- | embassy-net/src/lib.rs | 49 |
1 files changed, 40 insertions, 9 deletions
diff --git a/embassy-net/src/lib.rs b/embassy-net/src/lib.rs index 9f83cb4ea..23ec33262 100644 --- a/embassy-net/src/lib.rs +++ b/embassy-net/src/lib.rs | |||
| @@ -444,14 +444,12 @@ impl<D: Driver + 'static> Inner<D> { | |||
| 444 | debug!(" DNS server {}: {}", i, s); | 444 | debug!(" DNS server {}: {}", i, s); |
| 445 | } | 445 | } |
| 446 | 446 | ||
| 447 | self.static_v4 = Some(config); | ||
| 448 | |||
| 447 | #[cfg(feature = "dns")] | 449 | #[cfg(feature = "dns")] |
| 448 | { | 450 | { |
| 449 | let socket = s.sockets.get_mut::<smoltcp::socket::dns::Socket>(self.dns_socket); | 451 | self.update_dns_servers(s) |
| 450 | let servers: Vec<IpAddress, 3> = config.dns_servers.iter().map(|c| IpAddress::Ipv4(*c)).collect(); | ||
| 451 | socket.update_servers(&servers[..]); | ||
| 452 | } | 452 | } |
| 453 | |||
| 454 | self.static_v4 = Some(config) | ||
| 455 | } | 453 | } |
| 456 | 454 | ||
| 457 | /// Replaces the current IPv6 static configuration with a newly supplied config. | 455 | /// Replaces the current IPv6 static configuration with a newly supplied config. |
| @@ -485,14 +483,47 @@ impl<D: Driver + 'static> Inner<D> { | |||
| 485 | debug!(" DNS server {}: {}", i, s); | 483 | debug!(" DNS server {}: {}", i, s); |
| 486 | } | 484 | } |
| 487 | 485 | ||
| 486 | self.static_v6 = Some(config); | ||
| 487 | |||
| 488 | #[cfg(feature = "dns")] | 488 | #[cfg(feature = "dns")] |
| 489 | { | 489 | { |
| 490 | let socket = s.sockets.get_mut::<smoltcp::socket::dns::Socket>(self.dns_socket); | 490 | self.update_dns_servers(s) |
| 491 | let servers: Vec<IpAddress, 3> = config.dns_servers.iter().map(|c| IpAddress::Ipv6(*c)).collect(); | 491 | } |
| 492 | socket.update_servers(&servers[..]); | 492 | } |
| 493 | |||
| 494 | #[cfg(feature = "dns")] | ||
| 495 | fn update_dns_servers(&mut self, s: &mut SocketStack) { | ||
| 496 | let socket = s.sockets.get_mut::<smoltcp::socket::dns::Socket>(self.dns_socket); | ||
| 497 | |||
| 498 | let servers_v4; | ||
| 499 | #[cfg(feature = "proto-ipv4")] | ||
| 500 | { | ||
| 501 | servers_v4 = self | ||
| 502 | .static_v4 | ||
| 503 | .iter() | ||
| 504 | .flat_map(|cfg| cfg.dns_servers.iter().map(|c| IpAddress::Ipv4(*c))); | ||
| 505 | }; | ||
| 506 | #[cfg(not(feature = "proto-ipv4"))] | ||
| 507 | { | ||
| 508 | servers_v4 = core::iter::empty(); | ||
| 509 | } | ||
| 510 | |||
| 511 | let servers_v6; | ||
| 512 | #[cfg(feature = "proto-ipv6")] | ||
| 513 | { | ||
| 514 | servers_v6 = self | ||
| 515 | .static_v6 | ||
| 516 | .iter() | ||
| 517 | .flat_map(|cfg| cfg.dns_servers.iter().map(|c| IpAddress::Ipv6(*c))); | ||
| 518 | } | ||
| 519 | #[cfg(not(feature = "proto-ipv6"))] | ||
| 520 | { | ||
| 521 | servers_v6 = core::iter::empty(); | ||
| 493 | } | 522 | } |
| 494 | 523 | ||
| 495 | self.static_v6 = Some(config) | 524 | // Prefer the v6 DNS servers over the v4 servers |
| 525 | let servers: Vec<IpAddress, 6> = servers_v6.chain(servers_v4).collect(); | ||
| 526 | socket.update_servers(&servers[..]); | ||
| 496 | } | 527 | } |
| 497 | 528 | ||
| 498 | #[cfg(feature = "dhcpv4")] | 529 | #[cfg(feature = "dhcpv4")] |
