From 4f10afd32346b12b39a86aae72efff20fce94402 Mon Sep 17 00:00:00 2001 From: Aram Peres Date: Wed, 13 Oct 2021 21:54:54 -0400 Subject: [PATCH] Working (slow for some reason) --- src/virtual_device.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/virtual_device.rs b/src/virtual_device.rs index ec43128..669980b 100644 --- a/src/virtual_device.rs +++ b/src/virtual_device.rs @@ -3,15 +3,20 @@ use smoltcp::phy::{Device, DeviceCapabilities, Medium}; use smoltcp::time::Instant; use std::sync::Arc; -#[derive(Clone)] pub struct VirtualIpDevice { /// Tunnel to send IP packets to. wg: Arc, + ip_broadcast_rx: tokio::sync::broadcast::Receiver>, } impl VirtualIpDevice { pub fn new(wg: Arc) -> Self { - Self { wg } + let ip_broadcast_rx = wg.subscribe(); + + Self { + wg, + ip_broadcast_rx, + } } } @@ -20,8 +25,7 @@ impl<'a> Device<'a> for VirtualIpDevice { type TxToken = TxToken; fn receive(&'a mut self) -> Option<(Self::RxToken, Self::TxToken)> { - let mut consumer = self.wg.subscribe(); - match consumer.try_recv() { + match self.ip_broadcast_rx.try_recv() { Ok(buffer) => Some(( Self::RxToken { buffer }, Self::TxToken {