mirror of
https://github.com/EasyTier/EasyTier.git
synced 2026-05-07 10:14:35 +00:00
fix ipv4 map use old peer_id, fix direct connector use ring
This commit is contained in:
@@ -240,8 +240,13 @@ impl DirectConnectorManager {
|
|||||||
})
|
})
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
let listener = ip_list
|
let available_listeners = ip_list
|
||||||
.listeners
|
.listeners
|
||||||
|
.iter()
|
||||||
|
.filter_map(|l| if l.scheme() != "ring" { Some(l) } else { None })
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
|
let listener = available_listeners
|
||||||
.get(0)
|
.get(0)
|
||||||
.ok_or(anyhow::anyhow!("peer {} have no listener", dst_peer_id))?;
|
.ok_or(anyhow::anyhow!("peer {} have no listener", dst_peer_id))?;
|
||||||
|
|
||||||
|
|||||||
@@ -392,10 +392,8 @@ impl RouteTable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn build_from_synced_info(&self, my_peer_id: PeerId, synced_info: &SyncedRouteInfo) {
|
fn build_from_synced_info(&self, my_peer_id: PeerId, synced_info: &SyncedRouteInfo) {
|
||||||
// build ipv4_peer_id_map, cidr_peer_id_map and peer_infos
|
// build peer_infos
|
||||||
self.peer_infos.clear();
|
self.peer_infos.clear();
|
||||||
self.ipv4_peer_id_map.clear();
|
|
||||||
self.cidr_peer_id_map.clear();
|
|
||||||
for item in synced_info.peer_infos.iter() {
|
for item in synced_info.peer_infos.iter() {
|
||||||
let peer_id = item.key();
|
let peer_id = item.key();
|
||||||
let info = item.value();
|
let info = item.value();
|
||||||
@@ -405,15 +403,6 @@ impl RouteTable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
self.peer_infos.insert(*peer_id, info.clone());
|
self.peer_infos.insert(*peer_id, info.clone());
|
||||||
|
|
||||||
if let Some(ipv4_addr) = info.ipv4_addr {
|
|
||||||
self.ipv4_peer_id_map.insert(ipv4_addr, *peer_id);
|
|
||||||
}
|
|
||||||
|
|
||||||
for cidr in info.proxy_cidrs.iter() {
|
|
||||||
self.cidr_peer_id_map
|
|
||||||
.insert(cidr.parse().unwrap(), *peer_id);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// build next hop map
|
// build next hop map
|
||||||
@@ -441,6 +430,28 @@ impl RouteTable {
|
|||||||
.insert(peer_id, (path[1], (path.len() - 1) as i32));
|
.insert(peer_id, (path[1], (path.len() - 1) as i32));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// build ipv4_peer_id_map, cidr_peer_id_map
|
||||||
|
self.ipv4_peer_id_map.clear();
|
||||||
|
self.cidr_peer_id_map.clear();
|
||||||
|
for item in self.peer_infos.iter() {
|
||||||
|
// only set ipv4 map for peers we can reach.
|
||||||
|
if !self.next_hop_map.contains_key(item.key()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
let peer_id = item.key();
|
||||||
|
let info = item.value();
|
||||||
|
|
||||||
|
if let Some(ipv4_addr) = info.ipv4_addr {
|
||||||
|
self.ipv4_peer_id_map.insert(ipv4_addr, *peer_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
for cidr in info.proxy_cidrs.iter() {
|
||||||
|
self.cidr_peer_id_map
|
||||||
|
.insert(cidr.parse().unwrap(), *peer_id);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_peer_id_for_proxy(&self, ipv4: &Ipv4Addr) -> Option<PeerId> {
|
fn get_peer_id_for_proxy(&self, ipv4: &Ipv4Addr) -> Option<PeerId> {
|
||||||
|
|||||||
Reference in New Issue
Block a user