diff --git a/matter/src/mdns/builtin.rs b/matter/src/mdns/builtin.rs index f4a5c6e..c3049a5 100644 --- a/matter/src/mdns/builtin.rs +++ b/matter/src/mdns/builtin.rs @@ -128,9 +128,7 @@ impl<'a> MdnsRunner<'a> { buffers: &mut MdnsUdpBuffers, ) -> Result<(), Error> where - D: crate::transport::network::NetworkStackMulticastDriver - + crate::transport::network::NetworkStackDriver - + 'static, + D: crate::transport::network::NetworkStackDriver, { let mut udp = crate::transport::udp::UdpListener::new( stack, @@ -139,11 +137,13 @@ impl<'a> MdnsRunner<'a> { ) .await?; - udp.join_multicast_v6(IPV6_BROADCAST_ADDR, self.0.interface)?; + udp.join_multicast_v6(IPV6_BROADCAST_ADDR, self.0.interface) + .await?; udp.join_multicast_v4( IP_BROADCAST_ADDR, crate::transport::network::Ipv4Addr::from(self.0.host.ip), - )?; + ) + .await?; let tx_pipe = Pipe::new(unsafe { buffers.tx_buf.assume_init_mut() }); let rx_pipe = Pipe::new(unsafe { buffers.rx_buf.assume_init_mut() }); diff --git a/matter/src/transport/network.rs b/matter/src/transport/network.rs index 21cfd72..850dde3 100644 --- a/matter/src/transport/network.rs +++ b/matter/src/transport/network.rs @@ -68,10 +68,6 @@ pub mod std_stack { impl NetworkStackDriver for () {} - pub trait NetworkStackMulticastDriver {} - - impl NetworkStackMulticastDriver for () {} - pub struct NetworkStack(D); impl NetworkStack<()> { @@ -85,5 +81,4 @@ pub mod std_stack { pub mod embassy_net_stack { pub use embassy_net::Stack as NetworkStack; pub use embassy_net_driver::Driver as NetworkStackDriver; - pub use smoltcp::phy::Device as NetworkStackMulticastDriver; } diff --git a/matter/src/transport/runner.rs b/matter/src/transport/runner.rs index d46b3e3..554721b 100644 --- a/matter/src/transport/runner.rs +++ b/matter/src/transport/runner.rs @@ -138,9 +138,7 @@ impl<'a> TransportRunner<'a> { handler: &H, ) -> Result<(), Error> where - D: crate::transport::network::NetworkStackDriver - + crate::transport::network::NetworkStackMulticastDriver - + 'static, + D: crate::transport::network::NetworkStackDriver, H: DataModelHandler, { let mut mdns_runner = crate::mdns::MdnsRunner::new(mdns); diff --git a/matter/src/transport/udp.rs b/matter/src/transport/udp.rs index a9e2409..3d27d2d 100644 --- a/matter/src/transport/udp.rs +++ b/matter/src/transport/udp.rs @@ -31,9 +31,7 @@ pub mod async_io { use log::{debug, info, warn}; - use crate::transport::network::std_stack::{ - NetworkStack, NetworkStackDriver, NetworkStackMulticastDriver, - }; + use crate::transport::network::std_stack::{NetworkStack, NetworkStackDriver}; use crate::transport::network::{Ipv4Addr, Ipv6Addr, SocketAddr}; pub struct UdpBuffers(()); @@ -46,11 +44,11 @@ pub mod async_io { pub struct UdpListener<'a, D>(Async, &'a NetworkStack) where - D: NetworkStackDriver; + D: NetworkStackDriver + 'static; impl<'a, D> UdpListener<'a, D> where - D: NetworkStackDriver + 'a, + D: NetworkStackDriver + 'a + 'static, { pub async fn new( stack: &'a NetworkStack, @@ -64,14 +62,11 @@ pub mod async_io { Ok(listener) } - pub fn join_multicast_v6( + pub async fn join_multicast_v6( &mut self, multiaddr: Ipv6Addr, interface: u32, - ) -> Result<(), Error> - where - D: NetworkStackMulticastDriver + 'static, - { + ) -> Result<(), Error> { self.0.get_ref().join_multicast_v6(&multiaddr, interface)?; info!("Joined IPV6 multicast {}/{}", multiaddr, interface); @@ -79,14 +74,11 @@ pub mod async_io { Ok(()) } - pub fn join_multicast_v4( + pub async fn join_multicast_v4( &mut self, multiaddr: Ipv4Addr, interface: Ipv4Addr, - ) -> Result<(), Error> - where - D: NetworkStackMulticastDriver + 'static, - { + ) -> Result<(), Error> { #[cfg(not(target_os = "espidf"))] self.0.get_ref().join_multicast_v4(&multiaddr, &interface)?; @@ -181,9 +173,7 @@ pub mod embassy_net { use log::{debug, info, warn}; - use crate::transport::network::embassy_net_stack::{ - NetworkStack, NetworkStackDriver, NetworkStackMulticastDriver, - }; + use crate::transport::network::embassy_net_stack::{NetworkStack, NetworkStackDriver}; use crate::transport::network::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr}; const RX_BUF_SIZE: usize = 4096; @@ -210,11 +200,11 @@ pub mod embassy_net { pub struct UdpListener<'a, D>(UdpSocket<'a>, &'a NetworkStack) where - D: NetworkStackDriver; + D: NetworkStackDriver + 'static; impl<'a, D> UdpListener<'a, D> where - D: NetworkStackDriver + 'a, + D: NetworkStackDriver + 'a + 'static, { pub async fn new( stack: &'a NetworkStack, @@ -239,16 +229,14 @@ pub mod embassy_net { Ok(UdpListener(socket, stack)) } - pub fn join_multicast_v6( + pub async fn join_multicast_v6( &mut self, multiaddr: Ipv6Addr, _interface: u32, - ) -> Result<(), Error> - where - D: NetworkStackMulticastDriver + 'static, - { + ) -> Result<(), Error> { self.1 .join_multicast_group(Self::from_ip_addr(IpAddr::V6(multiaddr))) + .await .map_err(|e| { warn!("Error on the network: {:?}", e); ErrorCode::Network @@ -259,16 +247,14 @@ pub mod embassy_net { Ok(()) } - pub fn join_multicast_v4( + pub async fn join_multicast_v4( &mut self, multiaddr: Ipv4Addr, _interface: Ipv4Addr, - ) -> Result<(), Error> - where - D: NetworkStackMulticastDriver + 'static, - { + ) -> Result<(), Error> { self.1 .join_multicast_group(Self::from_ip_addr(IpAddr::V4(multiaddr))) + .await .map_err(|e| { warn!("Error on the network: {:?}", e); ErrorCode::Network