aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2023-07-18 11:30:27 +0000
committerGitHub <[email protected]>2023-07-18 11:30:27 +0000
commit13964c7fca1fe387d502a0044014f276147bc6e6 (patch)
tree81767db8b8f9767a3d0d8bbd602ed32bfcbd5273
parenta1cc3f2c6076787796f58c121560c393660d3305 (diff)
parent6bf4717b0a17cf4ca3439f0b2726b7fb6f5f3b13 (diff)
Merge pull request #1668 from bjoernQ/fix-embassy-net-dual-stack
Make dual-stack work in embassy-net
-rw-r--r--embassy-net/src/lib.rs42
1 files changed, 28 insertions, 14 deletions
diff --git a/embassy-net/src/lib.rs b/embassy-net/src/lib.rs
index 0d0a986f6..ae595d0d6 100644
--- a/embassy-net/src/lib.rs
+++ b/embassy-net/src/lib.rs
@@ -531,11 +531,14 @@ impl<D: Driver + 'static> Inner<D> {
531 531
532 debug!(" IP address: {}", config.address); 532 debug!(" IP address: {}", config.address);
533 s.iface.update_ip_addrs(|addrs| { 533 s.iface.update_ip_addrs(|addrs| {
534 if addrs.is_empty() { 534 if let Some((index, _)) = addrs
535 addrs.push(IpCidr::Ipv4(config.address)).unwrap(); 535 .iter()
536 } else { 536 .enumerate()
537 addrs[0] = IpCidr::Ipv4(config.address); 537 .find(|(_, &addr)| matches!(addr, IpCidr::Ipv4(_)))
538 {
539 addrs.remove(index);
538 } 540 }
541 addrs.push(IpCidr::Ipv4(config.address)).unwrap();
539 }); 542 });
540 543
541 #[cfg(feature = "medium-ethernet")] 544 #[cfg(feature = "medium-ethernet")]
@@ -570,11 +573,14 @@ impl<D: Driver + 'static> Inner<D> {
570 573
571 debug!(" IP address: {}", config.address); 574 debug!(" IP address: {}", config.address);
572 s.iface.update_ip_addrs(|addrs| { 575 s.iface.update_ip_addrs(|addrs| {
573 if addrs.is_empty() { 576 if let Some((index, _)) = addrs
574 addrs.push(IpCidr::Ipv6(config.address)).unwrap(); 577 .iter()
575 } else { 578 .enumerate()
576 addrs[0] = IpCidr::Ipv6(config.address); 579 .find(|(_, &addr)| matches!(addr, IpCidr::Ipv6(_)))
580 {
581 addrs.remove(index);
577 } 582 }
583 addrs.push(IpCidr::Ipv6(config.address)).unwrap();
578 }); 584 });
579 585
580 #[cfg(feature = "medium-ethernet")] 586 #[cfg(feature = "medium-ethernet")]
@@ -642,13 +648,21 @@ impl<D: Driver + 'static> Inner<D> {
642 socket.set_retry_config(config.retry_config); 648 socket.set_retry_config(config.retry_config);
643 } 649 }
644 650
645 #[allow(unused)] // used only with dhcp 651 #[cfg(feature = "dhcpv4")]
646 fn unapply_config(&mut self, s: &mut SocketStack) { 652 fn unapply_config_v4(&mut self, s: &mut SocketStack) {
647 #[cfg(feature = "medium-ethernet")] 653 #[cfg(feature = "medium-ethernet")]
648 let medium = self.device.capabilities().medium; 654 let medium = self.device.capabilities().medium;
649
650 debug!("Lost IP configuration"); 655 debug!("Lost IP configuration");
651 s.iface.update_ip_addrs(|ip_addrs| ip_addrs.clear()); 656 s.iface.update_ip_addrs(|ip_addrs| {
657 #[cfg(feature = "proto-ipv4")]
658 if let Some((index, _)) = ip_addrs
659 .iter()
660 .enumerate()
661 .find(|(_, &addr)| matches!(addr, IpCidr::Ipv4(_)))
662 {
663 ip_addrs.remove(index);
664 }
665 });
652 #[cfg(feature = "medium-ethernet")] 666 #[cfg(feature = "medium-ethernet")]
653 if medium == Medium::Ethernet { 667 if medium == Medium::Ethernet {
654 #[cfg(feature = "proto-ipv4")] 668 #[cfg(feature = "proto-ipv4")]
@@ -695,7 +709,7 @@ impl<D: Driver + 'static> Inner<D> {
695 if self.link_up { 709 if self.link_up {
696 match socket.poll() { 710 match socket.poll() {
697 None => {} 711 None => {}
698 Some(dhcpv4::Event::Deconfigured) => self.unapply_config(s), 712 Some(dhcpv4::Event::Deconfigured) => self.unapply_config_v4(s),
699 Some(dhcpv4::Event::Configured(config)) => { 713 Some(dhcpv4::Event::Configured(config)) => {
700 let config = StaticConfigV4 { 714 let config = StaticConfigV4 {
701 address: config.address, 715 address: config.address,
@@ -707,7 +721,7 @@ impl<D: Driver + 'static> Inner<D> {
707 } 721 }
708 } else if old_link_up { 722 } else if old_link_up {
709 socket.reset(); 723 socket.reset();
710 self.unapply_config(s); 724 self.unapply_config_v4(s);
711 } 725 }
712 } 726 }
713 //if old_link_up || self.link_up { 727 //if old_link_up || self.link_up {