Compatibility with embassy-net fixed multicast support
This commit is contained in:
parent
24cdf079a6
commit
aa2d5dfe20
4 changed files with 22 additions and 43 deletions
|
@ -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() });
|
||||
|
|
|
@ -68,10 +68,6 @@ pub mod std_stack {
|
|||
|
||||
impl NetworkStackDriver for () {}
|
||||
|
||||
pub trait NetworkStackMulticastDriver {}
|
||||
|
||||
impl NetworkStackMulticastDriver for () {}
|
||||
|
||||
pub struct NetworkStack<D>(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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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<UdpSocket>, &'a NetworkStack<D>)
|
||||
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<D>,
|
||||
|
@ -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<D>)
|
||||
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<D>,
|
||||
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue