Skip to content

Commit 8a3a87b

Browse files
Adapt changes to upstream embassy-net
1 parent 42f59d2 commit 8a3a87b

File tree

4 files changed

+60
-71
lines changed

4 files changed

+60
-71
lines changed

edge-nal-embassy/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,4 @@ embedded-io-async = { workspace = true }
1919
edge-nal = { workspace = true }
2020
heapless = { workspace = true }
2121
# Do not require these features and conditionalize the code instead
22-
embassy-net = { version = "0.4", features = ["tcp", "udp", "dns", "proto-ipv6", "medium-ethernet", "proto-ipv4", "igmp"] }
22+
embassy-net = { version = "0.4", features = ["tcp", "udp", "dns", "proto-ipv6", "medium-ethernet", "proto-ipv4", "multicast"] }

edge-nal-embassy/src/dns.rs

+5-11
Original file line numberDiff line numberDiff line change
@@ -12,28 +12,22 @@ use embedded_io_async::ErrorKind;
1212
use crate::to_net_addr;
1313

1414
/// A struct that implements the `Dns` trait from `edge-nal`
15-
pub struct Dns<'a, D>
16-
where
17-
D: Driver + 'static,
15+
pub struct Dns<'a>
1816
{
19-
stack: &'a Stack<D>,
17+
stack: Stack<'a>,
2018
}
2119

22-
impl<'a, D> Dns<'a, D>
23-
where
24-
D: Driver + 'static,
20+
impl<'a> Dns<'a>
2521
{
2622
/// Create a new `Dns` instance for the provided Embassy networking stack
2723
///
2824
/// NOTE: If using DHCP, make sure it has reconfigured the stack to ensure the DNS servers are updated
29-
pub fn new(stack: &'a Stack<D>) -> Self {
25+
pub fn new(stack: Stack<'a>) -> Self {
3026
Self { stack }
3127
}
3228
}
3329

34-
impl<'a, D> edge_nal::Dns for Dns<'a, D>
35-
where
36-
D: Driver + 'static,
30+
impl<'a> edge_nal::Dns for Dns<'a>
3731
{
3832
type Error = DnsError;
3933

edge-nal-embassy/src/tcp.rs

+15-16
Original file line numberDiff line numberDiff line change
@@ -13,27 +13,27 @@ use crate::{to_emb_bind_socket, to_emb_socket, to_net_socket, Pool};
1313

1414
/// A struct that implements the `TcpConnect` and `TcpBind` factory traits from `edge-nal`
1515
/// Capable of managing up to N concurrent connections with TX and RX buffers according to TX_SZ and RX_SZ.
16-
pub struct Tcp<'d, D: Driver, const N: usize, const TX_SZ: usize = 1024, const RX_SZ: usize = 1024>
16+
pub struct Tcp<'d, const N: usize, const TX_SZ: usize = 1024, const RX_SZ: usize = 1024>
1717
{
18-
stack: &'d Stack<D>,
18+
stack: Stack<'d>,
1919
buffers: &'d TcpBuffers<N, TX_SZ, RX_SZ>,
2020
}
2121

22-
impl<'d, D: Driver, const N: usize, const TX_SZ: usize, const RX_SZ: usize>
23-
Tcp<'d, D, N, TX_SZ, RX_SZ>
22+
impl<'d, const N: usize, const TX_SZ: usize, const RX_SZ: usize>
23+
Tcp<'d, N, TX_SZ, RX_SZ>
2424
{
2525
/// Create a new `Tcp` instance for the provided Embassy networking stack, using the provided TCP buffers
2626
///
2727
/// Ensure that the number of buffers `N` fits within StackResources<N> of
2828
/// [embassy_net::Stack], while taking into account the sockets used for DHCP, DNS, etc. else
2929
/// [smoltcp::iface::SocketSet] will panic with `adding a socket to a full SocketSet`.
30-
pub fn new(stack: &'d Stack<D>, buffers: &'d TcpBuffers<N, TX_SZ, RX_SZ>) -> Self {
30+
pub fn new(stack: Stack<'d>, buffers: &'d TcpBuffers<N, TX_SZ, RX_SZ>) -> Self {
3131
Self { stack, buffers }
3232
}
3333
}
3434

35-
impl<'d, D: Driver, const N: usize, const TX_SZ: usize, const RX_SZ: usize> TcpConnect
36-
for Tcp<'d, D, N, TX_SZ, RX_SZ>
35+
impl<'d, const N: usize, const TX_SZ: usize, const RX_SZ: usize> TcpConnect
36+
for Tcp<'d, N, TX_SZ, RX_SZ>
3737
{
3838
type Error = TcpError;
3939

@@ -51,13 +51,13 @@ impl<'d, D: Driver, const N: usize, const TX_SZ: usize, const RX_SZ: usize> TcpC
5151
}
5252
}
5353

54-
impl<'d, D: Driver, const N: usize, const TX_SZ: usize, const RX_SZ: usize> TcpBind
55-
for Tcp<'d, D, N, TX_SZ, RX_SZ>
54+
impl<'d, const N: usize, const TX_SZ: usize, const RX_SZ: usize> TcpBind
55+
for Tcp<'d, N, TX_SZ, RX_SZ>
5656
{
5757
type Error = TcpError;
5858

5959
type Accept<'a>
60-
= TcpAccept<'a, D, N, TX_SZ, RX_SZ>
60+
= TcpAccept<'a, N, TX_SZ, RX_SZ>
6161
where
6262
Self: 'a;
6363

@@ -69,17 +69,16 @@ impl<'d, D: Driver, const N: usize, const TX_SZ: usize, const RX_SZ: usize> TcpB
6969
/// Represents an acceptor for incoming TCP client connections. Implements the `TcpAccept` factory trait from `edge-nal`
7070
pub struct TcpAccept<
7171
'd,
72-
D: Driver,
7372
const N: usize,
7473
const TX_SZ: usize = 1024,
7574
const RX_SZ: usize = 1024,
7675
> {
77-
stack: &'d Tcp<'d, D, N, TX_SZ, RX_SZ>,
76+
stack: &'d Tcp<'d, N, TX_SZ, RX_SZ>,
7877
local: SocketAddr,
7978
}
8079

81-
impl<'d, D: Driver, const N: usize, const TX_SZ: usize, const RX_SZ: usize> edge_nal::TcpAccept
82-
for TcpAccept<'d, D, N, TX_SZ, RX_SZ>
80+
impl<'d, const N: usize, const TX_SZ: usize, const RX_SZ: usize> edge_nal::TcpAccept
81+
for TcpAccept<'d, N, TX_SZ, RX_SZ>
8382
{
8483
type Error = TcpError;
8584

@@ -108,8 +107,8 @@ pub struct TcpSocket<'d, const N: usize, const TX_SZ: usize, const RX_SZ: usize>
108107
}
109108

110109
impl<'d, const N: usize, const TX_SZ: usize, const RX_SZ: usize> TcpSocket<'d, N, TX_SZ, RX_SZ> {
111-
fn new<D: Driver>(
112-
stack: &'d Stack<D>,
110+
fn new(
111+
stack: Stack<'d>,
113112
stack_buffers: &'d TcpBuffers<N, TX_SZ, RX_SZ>,
114113
) -> Result<Self, TcpError> {
115114
let mut socket_buffers = stack_buffers.pool.alloc().ok_or(TcpError::NoBuffers)?;

edge-nal-embassy/src/udp.rs

+39-43
Original file line numberDiff line numberDiff line change
@@ -15,32 +15,31 @@ use crate::{to_emb_addr, to_emb_bind_socket, to_emb_socket, to_net_socket, Pool}
1515
/// Capable of managing up to N concurrent connections with TX and RX buffers according to TX_SZ and RX_SZ, and packet metadata according to `M`.
1616
pub struct Udp<
1717
'd,
18-
D: Driver,
1918
const N: usize,
2019
const TX_SZ: usize = 1500,
2120
const RX_SZ: usize = 1500,
2221
const M: usize = 2,
2322
> {
24-
stack: &'d Stack<D>,
23+
stack: Stack<'d>,
2524
buffers: &'d UdpBuffers<N, TX_SZ, RX_SZ, M>,
2625
}
2726

28-
impl<'d, D: Driver, const N: usize, const TX_SZ: usize, const RX_SZ: usize, const M: usize>
29-
Udp<'d, D, N, TX_SZ, RX_SZ, M>
27+
impl<'d, const N: usize, const TX_SZ: usize, const RX_SZ: usize, const M: usize>
28+
Udp<'d, N, TX_SZ, RX_SZ, M>
3029
{
3130
/// Create a new `Udp` instance for the provided Embassy networking stack using the provided UDP buffers.
32-
pub fn new(stack: &'d Stack<D>, buffers: &'d UdpBuffers<N, TX_SZ, RX_SZ, M>) -> Self {
31+
pub fn new(stack: Stack<'d>, buffers: &'d UdpBuffers<N, TX_SZ, RX_SZ, M>) -> Self {
3332
Self { stack, buffers }
3433
}
3534
}
3635

37-
impl<'d, D: Driver, const N: usize, const TX_SZ: usize, const RX_SZ: usize, const M: usize> UdpBind
38-
for Udp<'d, D, N, TX_SZ, RX_SZ, M>
36+
impl<'d, const N: usize, const TX_SZ: usize, const RX_SZ: usize, const M: usize> UdpBind
37+
for Udp<'d, N, TX_SZ, RX_SZ, M>
3938
{
4039
type Error = UdpError;
4140

4241
type Socket<'a>
43-
= UdpSocket<'a, D, N, TX_SZ, RX_SZ, M>
42+
= UdpSocket<'a, N, TX_SZ, RX_SZ, M>
4443
where
4544
Self: 'a;
4645

@@ -57,24 +56,23 @@ impl<'d, D: Driver, const N: usize, const TX_SZ: usize, const RX_SZ: usize, cons
5756
/// Implements the `UdpReceive` `UdpSend` and `UdpSplit` traits from `edge-nal`
5857
pub struct UdpSocket<
5958
'd,
60-
D: Driver,
6159
const N: usize,
6260
const TX_SZ: usize,
6361
const RX_SZ: usize,
6462
const M: usize,
6563
> {
66-
stack: &'d embassy_net::Stack<D>,
64+
stack: embassy_net::Stack<'d>,
6765
socket: embassy_net::udp::UdpSocket<'d>,
6866
stack_buffers: &'d UdpBuffers<N, TX_SZ, RX_SZ, M>,
6967
socket_buffers: NonNull<([u8; TX_SZ], [u8; RX_SZ])>,
7068
socket_meta_buffers: NonNull<([PacketMetadata; M], [PacketMetadata; M])>,
7169
}
7270

73-
impl<'d, D: Driver, const N: usize, const TX_SZ: usize, const RX_SZ: usize, const M: usize>
74-
UdpSocket<'d, D, N, TX_SZ, RX_SZ, M>
71+
impl<'d, const N: usize, const TX_SZ: usize, const RX_SZ: usize, const M: usize>
72+
UdpSocket<'d, N, TX_SZ, RX_SZ, M>
7573
{
7674
fn new(
77-
stack: &'d Stack<D>,
75+
stack: Stack<'d>,
7876
stack_buffers: &'d UdpBuffers<N, TX_SZ, RX_SZ, M>,
7977
) -> Result<Self, UdpError> {
8078
let mut socket_buffers = stack_buffers.pool.alloc().ok_or(UdpError::NoBuffers)?;
@@ -98,8 +96,8 @@ impl<'d, D: Driver, const N: usize, const TX_SZ: usize, const RX_SZ: usize, cons
9896
}
9997
}
10098

101-
impl<'d, D: Driver, const N: usize, const TX_SZ: usize, const RX_SZ: usize, const M: usize> Drop
102-
for UdpSocket<'d, D, N, TX_SZ, RX_SZ, M>
99+
impl<'d, const N: usize, const TX_SZ: usize, const RX_SZ: usize, const M: usize> Drop
100+
for UdpSocket<'d, N, TX_SZ, RX_SZ, M>
103101
{
104102
fn drop(&mut self) {
105103
unsafe {
@@ -110,24 +108,24 @@ impl<'d, D: Driver, const N: usize, const TX_SZ: usize, const RX_SZ: usize, cons
110108
}
111109
}
112110

113-
impl<'d, D: Driver, const N: usize, const TX_SZ: usize, const RX_SZ: usize, const M: usize>
114-
ErrorType for UdpSocket<'d, D, N, TX_SZ, RX_SZ, M>
111+
impl<'d, const N: usize, const TX_SZ: usize, const RX_SZ: usize, const M: usize>
112+
ErrorType for UdpSocket<'d, N, TX_SZ, RX_SZ, M>
115113
{
116114
type Error = UdpError;
117115
}
118116

119-
impl<'d, D: Driver, const N: usize, const TX_SZ: usize, const RX_SZ: usize, const M: usize>
120-
UdpReceive for UdpSocket<'d, D, N, TX_SZ, RX_SZ, M>
117+
impl<'d, const N: usize, const TX_SZ: usize, const RX_SZ: usize, const M: usize>
118+
UdpReceive for UdpSocket<'d, N, TX_SZ, RX_SZ, M>
121119
{
122120
async fn receive(&mut self, buffer: &mut [u8]) -> Result<(usize, SocketAddr), Self::Error> {
123121
let (len, remote_endpoint) = self.socket.recv_from(buffer).await?;
124122

125-
Ok((len, to_net_socket(remote_endpoint)))
123+
Ok((len, to_net_socket(remote_endpoint.endpoint)))
126124
}
127125
}
128126

129-
impl<'d, D: Driver, const N: usize, const TX_SZ: usize, const RX_SZ: usize, const M: usize> UdpSend
130-
for UdpSocket<'d, D, N, TX_SZ, RX_SZ, M>
127+
impl<'d, const N: usize, const TX_SZ: usize, const RX_SZ: usize, const M: usize> UdpSend
128+
for UdpSocket<'d, N, TX_SZ, RX_SZ, M>
131129
{
132130
async fn send(&mut self, remote: SocketAddr, data: &[u8]) -> Result<(), Self::Error> {
133131
self.socket.send_to(data, to_emb_socket(remote)).await?;
@@ -136,24 +134,24 @@ impl<'d, D: Driver, const N: usize, const TX_SZ: usize, const RX_SZ: usize, cons
136134
}
137135
}
138136

139-
impl<'d, D: Driver, const N: usize, const TX_SZ: usize, const RX_SZ: usize, const M: usize>
140-
ErrorType for &UdpSocket<'d, D, N, TX_SZ, RX_SZ, M>
137+
impl<'d, const N: usize, const TX_SZ: usize, const RX_SZ: usize, const M: usize>
138+
ErrorType for &UdpSocket<'d, N, TX_SZ, RX_SZ, M>
141139
{
142140
type Error = UdpError;
143141
}
144142

145-
impl<'d, D: Driver, const N: usize, const TX_SZ: usize, const RX_SZ: usize, const M: usize>
146-
UdpReceive for &UdpSocket<'d, D, N, TX_SZ, RX_SZ, M>
143+
impl<'d, const N: usize, const TX_SZ: usize, const RX_SZ: usize, const M: usize>
144+
UdpReceive for &UdpSocket<'d, N, TX_SZ, RX_SZ, M>
147145
{
148146
async fn receive(&mut self, buffer: &mut [u8]) -> Result<(usize, SocketAddr), Self::Error> {
149147
let (len, remote_endpoint) = self.socket.recv_from(buffer).await?;
150148

151-
Ok((len, to_net_socket(remote_endpoint)))
149+
Ok((len, to_net_socket(remote_endpoint.endpoint)))
152150
}
153151
}
154152

155-
impl<'d, D: Driver, const N: usize, const TX_SZ: usize, const RX_SZ: usize, const M: usize> UdpSend
156-
for &UdpSocket<'d, D, N, TX_SZ, RX_SZ, M>
153+
impl<'d, const N: usize, const TX_SZ: usize, const RX_SZ: usize, const M: usize> UdpSend
154+
for &UdpSocket<'d, N, TX_SZ, RX_SZ, M>
157155
{
158156
async fn send(&mut self, remote: SocketAddr, data: &[u8]) -> Result<(), Self::Error> {
159157
self.socket.send_to(data, to_emb_socket(remote)).await?;
@@ -162,16 +160,16 @@ impl<'d, D: Driver, const N: usize, const TX_SZ: usize, const RX_SZ: usize, cons
162160
}
163161
}
164162

165-
impl<'d, D: Driver, const N: usize, const TX_SZ: usize, const RX_SZ: usize, const M: usize> Readable
166-
for &UdpSocket<'d, D, N, TX_SZ, RX_SZ, M>
163+
impl<'d, const N: usize, const TX_SZ: usize, const RX_SZ: usize, const M: usize> Readable
164+
for &UdpSocket<'d, N, TX_SZ, RX_SZ, M>
167165
{
168166
async fn readable(&mut self) -> Result<(), Self::Error> {
169167
panic!("Not implemented yet")
170168
}
171169
}
172170

173-
impl<'d, D: Driver, const N: usize, const TX_SZ: usize, const RX_SZ: usize, const M: usize> UdpSplit
174-
for UdpSocket<'d, D, N, TX_SZ, RX_SZ, M>
171+
impl<'d, const N: usize, const TX_SZ: usize, const RX_SZ: usize, const M: usize> UdpSplit
172+
for UdpSocket<'d, N, TX_SZ, RX_SZ, M>
175173
{
176174
type Receive<'a>
177175
= &'a Self
@@ -188,17 +186,16 @@ impl<'d, D: Driver, const N: usize, const TX_SZ: usize, const RX_SZ: usize, cons
188186
}
189187
}
190188

191-
impl<'d, D: Driver, const N: usize, const TX_SZ: usize, const RX_SZ: usize, const M: usize>
192-
MulticastV4 for UdpSocket<'d, D, N, TX_SZ, RX_SZ, M>
189+
impl<'d, const N: usize, const TX_SZ: usize, const RX_SZ: usize, const M: usize>
190+
MulticastV4 for UdpSocket<'d, N, TX_SZ, RX_SZ, M>
193191
{
194192
async fn join_v4(
195193
&mut self,
196194
multicast_addr: Ipv4Addr,
197195
_interface: Ipv4Addr,
198196
) -> Result<(), Self::Error> {
199197
self.stack
200-
.join_multicast_group(to_emb_addr(IpAddr::V4(multicast_addr)))
201-
.await?;
198+
.join_multicast_group(to_emb_addr(IpAddr::V4(multicast_addr)))?;
202199

203200
Ok(())
204201
}
@@ -209,15 +206,14 @@ impl<'d, D: Driver, const N: usize, const TX_SZ: usize, const RX_SZ: usize, cons
209206
_interface: Ipv4Addr,
210207
) -> Result<(), Self::Error> {
211208
self.stack
212-
.leave_multicast_group(to_emb_addr(IpAddr::V4(multicast_addr)))
213-
.await?;
209+
.leave_multicast_group(to_emb_addr(IpAddr::V4(multicast_addr)))?;
214210

215211
Ok(())
216212
}
217213
}
218214

219-
impl<'d, D: Driver, const N: usize, const TX_SZ: usize, const RX_SZ: usize, const M: usize>
220-
MulticastV6 for UdpSocket<'d, D, N, TX_SZ, RX_SZ, M>
215+
impl<'d, const N: usize, const TX_SZ: usize, const RX_SZ: usize, const M: usize>
216+
MulticastV6 for UdpSocket<'d, N, TX_SZ, RX_SZ, M>
221217
{
222218
async fn join_v6(
223219
&mut self,
@@ -236,8 +232,8 @@ impl<'d, D: Driver, const N: usize, const TX_SZ: usize, const RX_SZ: usize, cons
236232
}
237233
}
238234

239-
impl<'d, D: Driver, const N: usize, const TX_SZ: usize, const RX_SZ: usize, const M: usize> Readable
240-
for UdpSocket<'d, D, N, TX_SZ, RX_SZ, M>
235+
impl<'d, const N: usize, const TX_SZ: usize, const RX_SZ: usize, const M: usize> Readable
236+
for UdpSocket<'d, N, TX_SZ, RX_SZ, M>
241237
{
242238
async fn readable(&mut self) -> Result<(), Self::Error> {
243239
panic!("Not implemented yet")

0 commit comments

Comments
 (0)