Skip to main content

edge_nal/
multicast.rs

1use core::net::{Ipv4Addr, Ipv6Addr};
2
3use embedded_io_async::ErrorType;
4
5pub trait MulticastV4: ErrorType {
6    async fn join_v4(
7        &mut self,
8        multicast_addr: Ipv4Addr,
9        interface: Ipv4Addr,
10    ) -> Result<(), Self::Error>;
11    async fn leave_v4(
12        &mut self,
13        multicast_addr: Ipv4Addr,
14        interface: Ipv4Addr,
15    ) -> Result<(), Self::Error>;
16}
17
18impl<T> MulticastV4 for &mut T
19where
20    T: MulticastV4,
21{
22    async fn join_v4(
23        &mut self,
24        multicast_addr: Ipv4Addr,
25        interface: Ipv4Addr,
26    ) -> Result<(), Self::Error> {
27        (**self).join_v4(multicast_addr, interface).await
28    }
29
30    async fn leave_v4(
31        &mut self,
32        multicast_addr: Ipv4Addr,
33        interface: Ipv4Addr,
34    ) -> Result<(), Self::Error> {
35        (**self).leave_v4(multicast_addr, interface).await
36    }
37}
38
39pub trait MulticastV6: ErrorType {
40    async fn join_v6(
41        &mut self,
42        multicast_addr: Ipv6Addr,
43        interface: u32,
44    ) -> Result<(), Self::Error>;
45    async fn leave_v6(
46        &mut self,
47        multicast_addr: Ipv6Addr,
48        interface: u32,
49    ) -> Result<(), Self::Error>;
50}
51
52impl<T> MulticastV6 for &mut T
53where
54    T: MulticastV6,
55{
56    async fn join_v6(
57        &mut self,
58        multicast_addr: Ipv6Addr,
59        interface: u32,
60    ) -> Result<(), Self::Error> {
61        (**self).join_v6(multicast_addr, interface).await
62    }
63
64    async fn leave_v6(
65        &mut self,
66        multicast_addr: Ipv6Addr,
67        interface: u32,
68    ) -> Result<(), Self::Error> {
69        (**self).leave_v6(multicast_addr, interface).await
70    }
71}