Merge #1264
1264: Add multicast to udp socket r=Dirbaio a=28Smiles This should make it possible to implement mDNS for embassy-net, which in turn is essential for smart home Co-authored-by: Leon Camus <leon.c@gmx.de> Co-authored-by: 28Smiles <Leon.c@gmx.de>
This commit is contained in:
commit
c9d89f391b
@ -8,7 +8,7 @@ license = "MIT OR Apache-2.0"
|
|||||||
[package.metadata.embassy_docs]
|
[package.metadata.embassy_docs]
|
||||||
src_base = "https://github.com/embassy-rs/embassy/blob/embassy-net-v$VERSION/embassy-net/src/"
|
src_base = "https://github.com/embassy-rs/embassy/blob/embassy-net-v$VERSION/embassy-net/src/"
|
||||||
src_base_git = "https://github.com/embassy-rs/embassy/blob/$COMMIT/embassy-net/src/"
|
src_base_git = "https://github.com/embassy-rs/embassy/blob/$COMMIT/embassy-net/src/"
|
||||||
features = ["nightly", "unstable-traits", "defmt", "tcp", "udp", "dns", "dhcpv4", "proto-ipv6", "medium-ethernet", "medium-ip"]
|
features = ["nightly", "unstable-traits", "defmt", "tcp", "udp", "dns", "dhcpv4", "proto-ipv6", "medium-ethernet", "medium-ip", "igmp"]
|
||||||
target = "thumbv7em-none-eabi"
|
target = "thumbv7em-none-eabi"
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
@ -27,6 +27,7 @@ dhcpv4 = ["medium-ethernet", "smoltcp/socket-dhcpv4"]
|
|||||||
proto-ipv6 = ["smoltcp/proto-ipv6"]
|
proto-ipv6 = ["smoltcp/proto-ipv6"]
|
||||||
medium-ethernet = ["smoltcp/medium-ethernet"]
|
medium-ethernet = ["smoltcp/medium-ethernet"]
|
||||||
medium-ip = ["smoltcp/medium-ip"]
|
medium-ip = ["smoltcp/medium-ip"]
|
||||||
|
igmp = ["smoltcp/proto-igmp"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|
||||||
|
@ -304,6 +304,37 @@ impl<D: Driver + 'static> Stack<D> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "igmp")]
|
||||||
|
impl<D: Driver + smoltcp::phy::Device + 'static> Stack<D> {
|
||||||
|
pub fn join_multicast_group<T>(&self, addr: T) -> Result<bool, smoltcp::iface::MulticastError>
|
||||||
|
where
|
||||||
|
T: Into<IpAddress>,
|
||||||
|
{
|
||||||
|
let addr = addr.into();
|
||||||
|
|
||||||
|
self.with_mut(|s, i| {
|
||||||
|
s.iface
|
||||||
|
.join_multicast_group(&mut i.device, addr, instant_to_smoltcp(Instant::now()))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn leave_multicast_group<T>(&self, addr: T) -> Result<bool, smoltcp::iface::MulticastError>
|
||||||
|
where
|
||||||
|
T: Into<IpAddress>,
|
||||||
|
{
|
||||||
|
let addr = addr.into();
|
||||||
|
|
||||||
|
self.with_mut(|s, i| {
|
||||||
|
s.iface
|
||||||
|
.leave_multicast_group(&mut i.device, addr, instant_to_smoltcp(Instant::now()))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn has_multicast_group<T: Into<IpAddress>>(&self, addr: T) -> bool {
|
||||||
|
self.socket.borrow().iface.has_multicast_group(addr)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl SocketStack {
|
impl SocketStack {
|
||||||
#[allow(clippy::absurd_extreme_comparisons, dead_code)]
|
#[allow(clippy::absurd_extreme_comparisons, dead_code)]
|
||||||
pub fn get_local_port(&mut self) -> u16 {
|
pub fn get_local_port(&mut self) -> u16 {
|
||||||
|
Loading…
Reference in New Issue
Block a user