From ea85aa1b762537db089a7cd4cd8d42d02ddf2233 Mon Sep 17 00:00:00 2001 From: alex Date: Sat, 4 Jul 2026 16:08:01 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9peerMap=E7=9A=84=E7=AB=9E?= =?UTF-8?q?=E6=80=81=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/network/packet.rs | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/network/packet.rs b/src/network/packet.rs index e8f3aa7..9e05d35 100755 --- a/src/network/packet.rs +++ b/src/network/packet.rs @@ -550,18 +550,19 @@ pub async fn check_peer_registration_needed( _v6_info: &Option, peer_sock: &SdlanSock, ) { - let p = eee.known_peers.peers.get(&src_mac); + let mut p = eee.known_peers.peers.get_mut(&src_mac); let last_seen; let now; match p { None => { + drop(p); debug!("check peer registration needed, not found in known peers"); let _ = register_with_new_peer(eee, from_sn, src_mac, _v6_info, remote_nat, peer_sock) .await; return; // unimplemented!(); } - Some(k) => { + Some(ref mut k) => { // let mut ipv4_to_ipv6 = false; now = get_current_timestamp(); if !from_sn { @@ -575,8 +576,8 @@ pub async fn check_peer_registration_needed( mac_to_string(&src_mac) ); - // k.sock = peer_sock.deepcopy(); - // k.last_seen.store(now, Ordering::Relaxed); + k.sock = peer_sock.deepcopy(); + k.last_seen.store(now, Ordering::Relaxed); } else { return; } @@ -594,6 +595,7 @@ pub async fn check_peer_registration_needed( // more than 3 seconds } } + drop(p); if now - last_seen > 3 { check_known_peer_sock_change(eee, from_sn, src_mac, peer_sock, now, false).await; @@ -673,6 +675,7 @@ async fn register_with_new_peer( peersock.to_string(), ); + drop(scan); if from_sn { // should send register to peer if eee.config.register_ttl == 1 { @@ -712,12 +715,15 @@ async fn register_with_new_peer( send_register(eee, remote_nat, peersock, mac, v6_info).await; } register_with_local_peers(eee).await; + if let Some(mut s) = eee.pending_peers.peers.get_mut(&mac) { + s.last_seen + .store(get_current_timestamp(), Ordering::Relaxed); + } } else { scan.sock = peersock.deepcopy(); + scan.last_seen + .store(get_current_timestamp(), Ordering::Relaxed); } - - scan.last_seen - .store(get_current_timestamp(), Ordering::Relaxed); } async fn register_with_local_peers(eee: &'static Node) {