mirror of
https://mirror.suhoan.cn/https://github.com/EasyTier/EasyTier.git
synced 2025-12-16 14:47:25 +08:00
add verbose cli mode; add list foreign network (#156)
This commit is contained in:
@@ -22,6 +22,7 @@ use crate::{
|
||||
global_ctx::{ArcGlobalCtx, GlobalCtxEvent, NetworkIdentity},
|
||||
PeerId,
|
||||
},
|
||||
rpc::{ForeignNetworkEntryPb, ListForeignNetworkResponse, PeerInfo},
|
||||
tunnel::packet_def::{PacketType, ZCPacket},
|
||||
};
|
||||
|
||||
@@ -306,15 +307,16 @@ impl ForeignNetworkManager {
|
||||
self.register_peer_rpc_service().await;
|
||||
}
|
||||
|
||||
pub async fn list_foreign_networks(&self) -> DashMap<String, Vec<PeerId>> {
|
||||
let ret = DashMap::new();
|
||||
for item in self.data.network_peer_maps.iter() {
|
||||
let network_name = item.key().clone();
|
||||
ret.insert(network_name, vec![]);
|
||||
}
|
||||
pub async fn list_foreign_networks(&self) -> ListForeignNetworkResponse {
|
||||
let mut ret = ListForeignNetworkResponse::default();
|
||||
let networks = self
|
||||
.data
|
||||
.network_peer_maps
|
||||
.iter()
|
||||
.map(|v| v.key().clone())
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
for mut n in ret.iter_mut() {
|
||||
let network_name = n.key().clone();
|
||||
for network_name in networks {
|
||||
let Some(item) = self
|
||||
.data
|
||||
.network_peer_maps
|
||||
@@ -323,7 +325,16 @@ impl ForeignNetworkManager {
|
||||
else {
|
||||
continue;
|
||||
};
|
||||
n.value_mut().extend(item.peer_map.list_peers().await);
|
||||
|
||||
let mut entry = ForeignNetworkEntryPb::default();
|
||||
for peer in item.peer_map.list_peers().await {
|
||||
let mut peer_info = PeerInfo::default();
|
||||
peer_info.peer_id = peer;
|
||||
peer_info.conns = item.peer_map.list_peer_conns(peer).await.unwrap_or(vec![]);
|
||||
entry.peers.push(peer_info);
|
||||
}
|
||||
|
||||
ret.foreign_networks.insert(network_name, entry);
|
||||
}
|
||||
ret
|
||||
}
|
||||
@@ -379,6 +390,13 @@ mod tests {
|
||||
.unwrap();
|
||||
assert_eq!(1, pma_net1.list_routes().await.len());
|
||||
assert_eq!(1, pmb_net1.list_routes().await.len());
|
||||
|
||||
let rpc_resp = pm_center
|
||||
.get_foreign_network_manager()
|
||||
.list_foreign_networks()
|
||||
.await;
|
||||
assert_eq!(1, rpc_resp.foreign_networks.len());
|
||||
assert_eq!(2, rpc_resp.foreign_networks["net1"].peers.len());
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
@@ -484,6 +502,14 @@ mod tests {
|
||||
.len()
|
||||
);
|
||||
|
||||
let rpc_resp = pm_center
|
||||
.get_foreign_network_manager()
|
||||
.list_foreign_networks()
|
||||
.await;
|
||||
assert_eq!(2, rpc_resp.foreign_networks.len());
|
||||
assert_eq!(3, rpc_resp.foreign_networks["net1"].peers.len());
|
||||
assert_eq!(2, rpc_resp.foreign_networks["net2"].peers.len());
|
||||
|
||||
drop(pmb_net2);
|
||||
tokio::time::sleep(std::time::Duration::from_secs(1)).await;
|
||||
assert_eq!(
|
||||
|
||||
@@ -2,7 +2,8 @@ use std::sync::Arc;
|
||||
|
||||
use crate::rpc::{
|
||||
cli::PeerInfo, peer_manage_rpc_server::PeerManageRpc, DumpRouteRequest, DumpRouteResponse,
|
||||
ListPeerRequest, ListPeerResponse, ListRouteRequest, ListRouteResponse,
|
||||
ListForeignNetworkRequest, ListForeignNetworkResponse, ListPeerRequest, ListPeerResponse,
|
||||
ListRouteRequest, ListRouteResponse,
|
||||
};
|
||||
use tonic::{Request, Response, Status};
|
||||
|
||||
@@ -68,4 +69,16 @@ impl PeerManageRpc for PeerManagerRpcService {
|
||||
reply.result = self.peer_manager.dump_route().await;
|
||||
Ok(Response::new(reply))
|
||||
}
|
||||
|
||||
async fn list_foreign_network(
|
||||
&self,
|
||||
_request: Request<ListForeignNetworkRequest>, // Accept request of type HelloRequest
|
||||
) -> Result<Response<ListForeignNetworkResponse>, Status> {
|
||||
let reply = self
|
||||
.peer_manager
|
||||
.get_foreign_network_manager()
|
||||
.list_foreign_networks()
|
||||
.await;
|
||||
Ok(Response::new(reply))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user