changed p2p registration
This commit is contained in:
parent
8f365e32db
commit
23a12e66f6
@ -522,19 +522,17 @@ async fn send_packet_to_net(eee: &Node, dst_ip: u32, pkt: &[u8], size: u64) {
|
|||||||
|
|
||||||
async fn find_peer_destination(eee: &Node, dst_ip: u32) -> (SdlanSock, bool) {
|
async fn find_peer_destination(eee: &Node, dst_ip: u32) -> (SdlanSock, bool) {
|
||||||
if is_multi_broadcast(dst_ip) {
|
if is_multi_broadcast(dst_ip) {
|
||||||
println!("find peer destination: is multi_broadcast");
|
|
||||||
return (
|
return (
|
||||||
eee.config.super_nodes[eee.config.super_node_index.load(Ordering::Relaxed) as usize]
|
eee.config.super_nodes[eee.config.super_node_index.load(Ordering::Relaxed) as usize]
|
||||||
.deepcopy(),
|
.deepcopy(),
|
||||||
false,
|
false,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
println!("find peer destination 1");
|
|
||||||
let mut is_p2p = false;
|
let mut is_p2p = false;
|
||||||
let result: SdlanSock;
|
let result: SdlanSock;
|
||||||
if let Some(dst) = eee.known_peers.get_peer(&dst_ip) {
|
if let Some(dst) = eee.known_peers.get_peer(&dst_ip) {
|
||||||
let now = get_current_timestamp();
|
let now = get_current_timestamp();
|
||||||
if now - dst.last_seen.load(Ordering::Relaxed) >= ((dst.timeout / 2) as u64) {
|
if now - dst.last_p2p.load(Ordering::Relaxed) >= ((dst.timeout / 2) as u64) {
|
||||||
// too much time elapsed since we saw the peer, need to register again
|
// too much time elapsed since we saw the peer, need to register again
|
||||||
eee.known_peers.delete_peer_with_ip(&dst_ip);
|
eee.known_peers.delete_peer_with_ip(&dst_ip);
|
||||||
result = eee.config.super_nodes
|
result = eee.config.super_nodes
|
||||||
|
|||||||
@ -528,6 +528,9 @@ pub struct EdgePeer {
|
|||||||
// 最近一次合法时间
|
// 最近一次合法时间
|
||||||
pub _last_valid_timestamp: AtomicU64,
|
pub _last_valid_timestamp: AtomicU64,
|
||||||
|
|
||||||
|
// 当时间超过重新注册的时间之后,
|
||||||
|
// pub has_sent_last_p2p: AtomicBool,
|
||||||
|
|
||||||
// 最近一次发送query
|
// 最近一次发送query
|
||||||
pub last_sent_query: AtomicU64,
|
pub last_sent_query: AtomicU64,
|
||||||
}
|
}
|
||||||
|
|||||||
@ -466,7 +466,6 @@ pub async fn check_peer_registration_needed(
|
|||||||
peer_sock: &SdlanSock,
|
peer_sock: &SdlanSock,
|
||||||
) {
|
) {
|
||||||
let mut p = eee.known_peers.get_peer(&src_ip);
|
let mut p = eee.known_peers.get_peer(&src_ip);
|
||||||
println!("check peer registration needed");
|
|
||||||
if let None = p {
|
if let None = p {
|
||||||
p = eee.known_peers.get_peer_by_sock(peer_sock);
|
p = eee.known_peers.get_peer_by_sock(peer_sock);
|
||||||
if let Some(ref k) = p {
|
if let Some(ref k) = p {
|
||||||
@ -475,20 +474,18 @@ pub async fn check_peer_registration_needed(
|
|||||||
}
|
}
|
||||||
match p {
|
match p {
|
||||||
None => {
|
None => {
|
||||||
println!("need register_with_new_peer");
|
|
||||||
let _ = register_with_new_peer(eee, from_sn, src_ip, v6_info, peer_sock).await;
|
let _ = register_with_new_peer(eee, from_sn, src_ip, v6_info, peer_sock).await;
|
||||||
// unimplemented!();
|
// unimplemented!();
|
||||||
}
|
}
|
||||||
Some(k) => {
|
Some(k) => {
|
||||||
println!("peer is known");
|
|
||||||
let now = get_current_timestamp();
|
let now = get_current_timestamp();
|
||||||
if !from_sn {
|
if !from_sn {
|
||||||
k.last_p2p.store(now, Ordering::Relaxed);
|
k.last_p2p.store(now, Ordering::Relaxed);
|
||||||
}
|
}
|
||||||
let last_seen = k.last_seen.load(Ordering::Relaxed);
|
let last_seen = k.last_seen.load(Ordering::Relaxed);
|
||||||
// more than 3 seconds
|
// more than 3 seconds
|
||||||
if now - last_seen > 3 {
|
if now - last_seen > 1 {
|
||||||
check_known_peer_sock_change(eee, from_sn, src_ip, v6_info, peer_sock).await;
|
check_known_peer_sock_change(eee, from_sn, src_ip, v6_info, peer_sock, now).await;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -501,6 +498,7 @@ async fn check_known_peer_sock_change(
|
|||||||
v6_info: &Option<V6Info>,
|
v6_info: &Option<V6Info>,
|
||||||
// dev_addr: &IpSubnet,
|
// dev_addr: &IpSubnet,
|
||||||
peersock: &SdlanSock,
|
peersock: &SdlanSock,
|
||||||
|
when: u64,
|
||||||
) {
|
) {
|
||||||
if is_multi_broadcast(ip) {
|
if is_multi_broadcast(ip) {
|
||||||
return;
|
return;
|
||||||
@ -517,8 +515,11 @@ async fn check_known_peer_sock_change(
|
|||||||
);
|
);
|
||||||
eee.known_peers.delete_peer_with_ip(&ip);
|
eee.known_peers.delete_peer_with_ip(&ip);
|
||||||
register_with_new_peer(eee, from_sn, ip, v6_info, peersock).await;
|
register_with_new_peer(eee, from_sn, ip, v6_info, peersock).await;
|
||||||
|
} else {
|
||||||
|
// from sn, sn could see a different sock with us, just ignore it
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
p.last_seen.store(when, Ordering::Relaxed);
|
||||||
// from sn, sn could see a different sock with us, just ignore it
|
// from sn, sn could see a different sock with us, just ignore it
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user