Files
Easytier_lkddi/easytier/src/peers/route_trait.rs
T

37 lines
939 B
Rust
Raw Normal View History

2023-09-23 01:53:45 +00:00
use std::{net::Ipv4Addr, sync::Arc};
use async_trait::async_trait;
use tokio_util::bytes::Bytes;
2024-03-13 00:15:22 +08:00
use crate::common::{error::Error, PeerId};
2023-09-23 01:53:45 +00:00
#[async_trait]
pub trait RouteInterface {
async fn list_peers(&self) -> Vec<PeerId>;
async fn send_route_packet(
&self,
msg: Bytes,
route_id: u8,
2024-03-13 00:15:22 +08:00
dst_peer_id: PeerId,
2023-09-23 01:53:45 +00:00
) -> Result<(), Error>;
2024-03-13 00:15:22 +08:00
fn my_peer_id(&self) -> PeerId;
2023-09-23 01:53:45 +00:00
}
pub type RouteInterfaceBox = Box<dyn RouteInterface + Send + Sync>;
#[async_trait]
#[auto_impl::auto_impl(Box, Arc)]
2023-09-23 01:53:45 +00:00
pub trait Route {
async fn open(&self, interface: RouteInterfaceBox) -> Result<u8, ()>;
async fn close(&self);
2024-03-13 00:15:22 +08:00
async fn get_next_hop(&self, peer_id: PeerId) -> Option<PeerId>;
2024-02-08 23:44:51 +08:00
async fn list_routes(&self) -> Vec<crate::rpc::Route>;
async fn get_peer_id_by_ipv4(&self, _ipv4: &Ipv4Addr) -> Option<PeerId> {
None
}
2023-09-23 01:53:45 +00:00
}
pub type ArcRoute = Arc<Box<dyn Route + Send + Sync>>;