network: implement NAT table reclaim

This commit is contained in:
Alex Zenla
2024-02-10 14:02:54 +00:00
parent 8ee93c5752
commit d2136b5d8c
4 changed files with 98 additions and 36 deletions

View File

@ -24,6 +24,7 @@ pub struct NetworkBackend {
enum NetworkStackSelect<'a> {
Receive(&'a [u8]),
Send(Option<Vec<u8>>),
Reclaim,
}
struct NetworkStack<'a> {
@ -40,6 +41,7 @@ impl NetworkStack<'_> {
let what = select! {
x = self.tx.recv() => NetworkStackSelect::Send(x),
x = self.kdev.read(receive_buffer) => NetworkStackSelect::Receive(&receive_buffer[0..x?]),
_ = self.router.process_reclaim() => NetworkStackSelect::Reclaim,
};
match what {
@ -59,6 +61,8 @@ impl NetworkStack<'_> {
self.interface
.poll(timestamp, &mut self.udev, &mut self.sockets);
}
NetworkStackSelect::Reclaim => {}
}
Ok(())