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,
|
buffers: &mut MdnsUdpBuffers,
|
||||||
) -> Result<(), Error>
|
) -> Result<(), Error>
|
||||||
where
|
where
|
||||||
D: crate::transport::network::NetworkStackMulticastDriver
|
D: crate::transport::network::NetworkStackDriver,
|
||||||
+ crate::transport::network::NetworkStackDriver
|
|
||||||
+ 'static,
|
|
||||||
{
|
{
|
||||||
let mut udp = crate::transport::udp::UdpListener::new(
|
let mut udp = crate::transport::udp::UdpListener::new(
|
||||||
stack,
|
stack,
|
||||||
|
@ -139,11 +137,13 @@ impl<'a> MdnsRunner<'a> {
|
||||||
)
|
)
|
||||||
.await?;
|
.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(
|
udp.join_multicast_v4(
|
||||||
IP_BROADCAST_ADDR,
|
IP_BROADCAST_ADDR,
|
||||||
crate::transport::network::Ipv4Addr::from(self.0.host.ip),
|
crate::transport::network::Ipv4Addr::from(self.0.host.ip),
|
||||||
)?;
|
)
|
||||||
|
.await?;
|
||||||
|
|
||||||
let tx_pipe = Pipe::new(unsafe { buffers.tx_buf.assume_init_mut() });
|
let tx_pipe = Pipe::new(unsafe { buffers.tx_buf.assume_init_mut() });
|
||||||
let rx_pipe = Pipe::new(unsafe { buffers.rx_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 () {}
|
impl NetworkStackDriver for () {}
|
||||||
|
|
||||||
pub trait NetworkStackMulticastDriver {}
|
|
||||||
|
|
||||||
impl NetworkStackMulticastDriver for () {}
|
|
||||||
|
|
||||||
pub struct NetworkStack<D>(D);
|
pub struct NetworkStack<D>(D);
|
||||||
|
|
||||||
impl NetworkStack<()> {
|
impl NetworkStack<()> {
|
||||||
|
@ -85,5 +81,4 @@ pub mod std_stack {
|
||||||
pub mod embassy_net_stack {
|
pub mod embassy_net_stack {
|
||||||
pub use embassy_net::Stack as NetworkStack;
|
pub use embassy_net::Stack as NetworkStack;
|
||||||
pub use embassy_net_driver::Driver as NetworkStackDriver;
|
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,
|
handler: &H,
|
||||||
) -> Result<(), Error>
|
) -> Result<(), Error>
|
||||||
where
|
where
|
||||||
D: crate::transport::network::NetworkStackDriver
|
D: crate::transport::network::NetworkStackDriver,
|
||||||
+ crate::transport::network::NetworkStackMulticastDriver
|
|
||||||
+ 'static,
|
|
||||||
H: DataModelHandler,
|
H: DataModelHandler,
|
||||||
{
|
{
|
||||||
let mut mdns_runner = crate::mdns::MdnsRunner::new(mdns);
|
let mut mdns_runner = crate::mdns::MdnsRunner::new(mdns);
|
||||||
|
|
|
@ -31,9 +31,7 @@ pub mod async_io {
|
||||||
|
|
||||||
use log::{debug, info, warn};
|
use log::{debug, info, warn};
|
||||||
|
|
||||||
use crate::transport::network::std_stack::{
|
use crate::transport::network::std_stack::{NetworkStack, NetworkStackDriver};
|
||||||
NetworkStack, NetworkStackDriver, NetworkStackMulticastDriver,
|
|
||||||
};
|
|
||||||
use crate::transport::network::{Ipv4Addr, Ipv6Addr, SocketAddr};
|
use crate::transport::network::{Ipv4Addr, Ipv6Addr, SocketAddr};
|
||||||
|
|
||||||
pub struct UdpBuffers(());
|
pub struct UdpBuffers(());
|
||||||
|
@ -46,11 +44,11 @@ pub mod async_io {
|
||||||
|
|
||||||
pub struct UdpListener<'a, D>(Async<UdpSocket>, &'a NetworkStack<D>)
|
pub struct UdpListener<'a, D>(Async<UdpSocket>, &'a NetworkStack<D>)
|
||||||
where
|
where
|
||||||
D: NetworkStackDriver;
|
D: NetworkStackDriver + 'static;
|
||||||
|
|
||||||
impl<'a, D> UdpListener<'a, D>
|
impl<'a, D> UdpListener<'a, D>
|
||||||
where
|
where
|
||||||
D: NetworkStackDriver + 'a,
|
D: NetworkStackDriver + 'a + 'static,
|
||||||
{
|
{
|
||||||
pub async fn new(
|
pub async fn new(
|
||||||
stack: &'a NetworkStack<D>,
|
stack: &'a NetworkStack<D>,
|
||||||
|
@ -64,14 +62,11 @@ pub mod async_io {
|
||||||
Ok(listener)
|
Ok(listener)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn join_multicast_v6(
|
pub async fn join_multicast_v6(
|
||||||
&mut self,
|
&mut self,
|
||||||
multiaddr: Ipv6Addr,
|
multiaddr: Ipv6Addr,
|
||||||
interface: u32,
|
interface: u32,
|
||||||
) -> Result<(), Error>
|
) -> Result<(), Error> {
|
||||||
where
|
|
||||||
D: NetworkStackMulticastDriver + 'static,
|
|
||||||
{
|
|
||||||
self.0.get_ref().join_multicast_v6(&multiaddr, interface)?;
|
self.0.get_ref().join_multicast_v6(&multiaddr, interface)?;
|
||||||
|
|
||||||
info!("Joined IPV6 multicast {}/{}", multiaddr, interface);
|
info!("Joined IPV6 multicast {}/{}", multiaddr, interface);
|
||||||
|
@ -79,14 +74,11 @@ pub mod async_io {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn join_multicast_v4(
|
pub async fn join_multicast_v4(
|
||||||
&mut self,
|
&mut self,
|
||||||
multiaddr: Ipv4Addr,
|
multiaddr: Ipv4Addr,
|
||||||
interface: Ipv4Addr,
|
interface: Ipv4Addr,
|
||||||
) -> Result<(), Error>
|
) -> Result<(), Error> {
|
||||||
where
|
|
||||||
D: NetworkStackMulticastDriver + 'static,
|
|
||||||
{
|
|
||||||
#[cfg(not(target_os = "espidf"))]
|
#[cfg(not(target_os = "espidf"))]
|
||||||
self.0.get_ref().join_multicast_v4(&multiaddr, &interface)?;
|
self.0.get_ref().join_multicast_v4(&multiaddr, &interface)?;
|
||||||
|
|
||||||
|
@ -181,9 +173,7 @@ pub mod embassy_net {
|
||||||
|
|
||||||
use log::{debug, info, warn};
|
use log::{debug, info, warn};
|
||||||
|
|
||||||
use crate::transport::network::embassy_net_stack::{
|
use crate::transport::network::embassy_net_stack::{NetworkStack, NetworkStackDriver};
|
||||||
NetworkStack, NetworkStackDriver, NetworkStackMulticastDriver,
|
|
||||||
};
|
|
||||||
use crate::transport::network::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr};
|
use crate::transport::network::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr};
|
||||||
|
|
||||||
const RX_BUF_SIZE: usize = 4096;
|
const RX_BUF_SIZE: usize = 4096;
|
||||||
|
@ -210,11 +200,11 @@ pub mod embassy_net {
|
||||||
|
|
||||||
pub struct UdpListener<'a, D>(UdpSocket<'a>, &'a NetworkStack<D>)
|
pub struct UdpListener<'a, D>(UdpSocket<'a>, &'a NetworkStack<D>)
|
||||||
where
|
where
|
||||||
D: NetworkStackDriver;
|
D: NetworkStackDriver + 'static;
|
||||||
|
|
||||||
impl<'a, D> UdpListener<'a, D>
|
impl<'a, D> UdpListener<'a, D>
|
||||||
where
|
where
|
||||||
D: NetworkStackDriver + 'a,
|
D: NetworkStackDriver + 'a + 'static,
|
||||||
{
|
{
|
||||||
pub async fn new(
|
pub async fn new(
|
||||||
stack: &'a NetworkStack<D>,
|
stack: &'a NetworkStack<D>,
|
||||||
|
@ -239,16 +229,14 @@ pub mod embassy_net {
|
||||||
Ok(UdpListener(socket, stack))
|
Ok(UdpListener(socket, stack))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn join_multicast_v6(
|
pub async fn join_multicast_v6(
|
||||||
&mut self,
|
&mut self,
|
||||||
multiaddr: Ipv6Addr,
|
multiaddr: Ipv6Addr,
|
||||||
_interface: u32,
|
_interface: u32,
|
||||||
) -> Result<(), Error>
|
) -> Result<(), Error> {
|
||||||
where
|
|
||||||
D: NetworkStackMulticastDriver + 'static,
|
|
||||||
{
|
|
||||||
self.1
|
self.1
|
||||||
.join_multicast_group(Self::from_ip_addr(IpAddr::V6(multiaddr)))
|
.join_multicast_group(Self::from_ip_addr(IpAddr::V6(multiaddr)))
|
||||||
|
.await
|
||||||
.map_err(|e| {
|
.map_err(|e| {
|
||||||
warn!("Error on the network: {:?}", e);
|
warn!("Error on the network: {:?}", e);
|
||||||
ErrorCode::Network
|
ErrorCode::Network
|
||||||
|
@ -259,16 +247,14 @@ pub mod embassy_net {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn join_multicast_v4(
|
pub async fn join_multicast_v4(
|
||||||
&mut self,
|
&mut self,
|
||||||
multiaddr: Ipv4Addr,
|
multiaddr: Ipv4Addr,
|
||||||
_interface: Ipv4Addr,
|
_interface: Ipv4Addr,
|
||||||
) -> Result<(), Error>
|
) -> Result<(), Error> {
|
||||||
where
|
|
||||||
D: NetworkStackMulticastDriver + 'static,
|
|
||||||
{
|
|
||||||
self.1
|
self.1
|
||||||
.join_multicast_group(Self::from_ip_addr(IpAddr::V4(multiaddr)))
|
.join_multicast_group(Self::from_ip_addr(IpAddr::V4(multiaddr)))
|
||||||
|
.await
|
||||||
.map_err(|e| {
|
.map_err(|e| {
|
||||||
warn!("Error on the network: {:?}", e);
|
warn!("Error on the network: {:?}", e);
|
||||||
ErrorCode::Network
|
ErrorCode::Network
|
||||||
|
|
Loading…
Add table
Reference in a new issue