mod graph_algo; pub mod peer; // pub mod peer_conn; pub mod peer_conn; pub mod peer_conn_ping; pub mod peer_manager; pub mod peer_map; pub mod peer_ospf_route; pub mod peer_rpc; pub mod peer_rpc_service; pub mod route_trait; pub mod rpc_service; pub mod foreign_network_client; pub mod foreign_network_manager; pub mod encrypt; pub mod peer_task; #[cfg(test)] pub mod tests; use crate::tunnel::packet_def::ZCPacket; #[async_trait::async_trait] #[auto_impl::auto_impl(Arc)] pub trait PeerPacketFilter { async fn try_process_packet_from_peer(&self, _zc_packet: ZCPacket) -> Option { Some(_zc_packet) } } #[async_trait::async_trait] #[auto_impl::auto_impl(Arc)] pub trait NicPacketFilter { async fn try_process_packet_from_nic(&self, data: &mut ZCPacket) -> bool; fn id(&self) -> String { format!("{:p}", self) } } type BoxPeerPacketFilter = Box; type BoxNicPacketFilter = Box; // pub type PacketRecvChan = tachyonix::Sender; // pub type PacketRecvChanReceiver = tachyonix::Receiver; // pub fn create_packet_recv_chan() -> (PacketRecvChan, PacketRecvChanReceiver) { // tachyonix::channel(128) // } pub type PacketRecvChan = tokio::sync::mpsc::Sender; pub type PacketRecvChanReceiver = tokio::sync::mpsc::Receiver; pub fn create_packet_recv_chan() -> (PacketRecvChan, PacketRecvChanReceiver) { tokio::sync::mpsc::channel(128) } pub async fn recv_packet_from_chan( packet_recv_chan_receiver: &mut PacketRecvChanReceiver, ) -> Result { packet_recv_chan_receiver .recv() .await .ok_or(anyhow::anyhow!("recv_packet_from_chan failed")) }