diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index f426c0b..f13db51 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -110,40 +110,40 @@ jobs: # some additional configuration for cross-compilation on linux cat >>~/.cargo/config < Vec { for peer in device_list { let name = peer.name; let virtual_ip = peer.virtual_ip.to_string(); - let (nat_type, public_ips, local_ip) = + let (nat_type, public_ips, local_ip,ipv6) = if let Some(nat_info) = vnt.peer_nat_info(&peer.virtual_ip) { let nat_type = format!("{:?}", nat_info.nat_type); let public_ips: Vec = nat_info.public_ips.iter().map(|v| v.to_string()).collect(); let public_ips = public_ips.join(","); let local_ip = nat_info.local_ipv4_addr.ip().to_string(); - (nat_type, public_ips, local_ip) + let ipv6 = nat_info.ipv6_addr.ip().to_string(); + (nat_type, public_ips, local_ip,ipv6) } else { - ("".to_string(), "".to_string(), "".to_string()) + ("".to_string(), "".to_string(), "".to_string(), "".to_string()) }; let (nat_traversal_type, rt) = if let Some(route) = vnt.route(&peer.virtual_ip) { let nat_traversal_type = if route.metric == 1 { @@ -118,6 +119,7 @@ pub fn command_list(vnt: &Vnt) -> Vec { nat_type, public_ips, local_ip, + ipv6, nat_traversal_type, rt, status, diff --git a/vnt-cli/src/console_out/mod.rs b/vnt-cli/src/console_out/mod.rs index 22ed850..8bb746f 100644 --- a/vnt-cli/src/console_out/mod.rs +++ b/vnt-cli/src/console_out/mod.rs @@ -125,6 +125,7 @@ pub fn console_device_list_all(mut list: Vec) { ("NAT Type".to_string(), Style::new()), ("Public Ips".to_string(), Style::new()), ("Local Ip".to_string(), Style::new()), + ("IPv6".to_string(), Style::new()), ]); for item in list { if &item.status == "Online" { @@ -138,6 +139,7 @@ pub fn console_device_list_all(mut list: Vec) { (item.nat_type, Style::new().green()), (item.public_ips, Style::new().green()), (item.local_ip, Style::new().green()), + (item.ipv6, Style::new().green()), ]); } else { out_list.push(vec![ @@ -149,6 +151,7 @@ pub fn console_device_list_all(mut list: Vec) { (item.nat_type, Style::new().yellow()), (item.public_ips, Style::new().yellow()), (item.local_ip, Style::new().yellow()), + (item.ipv6, Style::new().yellow()), ]); } } else { @@ -161,6 +164,7 @@ pub fn console_device_list_all(mut list: Vec) { ("".to_string(), Style::new().color256(102)), ("".to_string(), Style::new().color256(102)), ("".to_string(), Style::new().color256(102)), + ("".to_string(), Style::new().color256(102)), ]); } } diff --git a/vnt-cli/src/main.rs b/vnt-cli/src/main.rs index 80b62af..f010bb8 100644 --- a/vnt-cli/src/main.rs +++ b/vnt-cli/src/main.rs @@ -424,8 +424,9 @@ async fn main0(config: Config, show_cmd: bool) { } } } - #[cfg(unix)] - tokio::select! { + } + #[cfg(unix)] + tokio::select! { _ = vnt.wait_stop()=>{ return; } @@ -439,8 +440,8 @@ async fn main0(config: Config, show_cmd: bool) { vnt.wait_stop_ms(std::time::Duration::from_secs(3)).await; return; } - } } + #[cfg(windows)] vnt.wait_stop().await; } diff --git a/vnt/src/core/status.rs b/vnt/src/core/status.rs index e71e887..b954d66 100644 --- a/vnt/src/core/status.rs +++ b/vnt/src/core/status.rs @@ -10,7 +10,7 @@ pub enum VntStatus { } pub struct VntWorker { - _name: String, + name: String, wg: WaitGroup, status_s: Arc>, status_r: Receiver, @@ -20,7 +20,7 @@ impl VntWorker { pub fn worker(&self, name: &str) -> Self { self.wg.add(); VntWorker { - _name: name.to_string(), + name: name.to_string(), wg: self.wg.clone(), status_s: self.status_s.clone(), status_r: self.status_r.clone(), @@ -30,6 +30,7 @@ impl VntWorker { impl Drop for VntWorker { fn drop(&mut self) { + log::info!("任务停止:{}", self.name); self.wg.done(); } } @@ -82,7 +83,7 @@ impl VntStatusManger { pub fn worker(&self, name: &str) -> VntWorker { self.wg.add(); VntWorker { - _name: name.to_string(), + name: name.to_string(), wg: self.wg.clone(), status_s: self.status_s.clone(), status_r: self.status_r.clone(), diff --git a/vnt/src/handle/heartbeat_handler.rs b/vnt/src/handle/heartbeat_handler.rs index e03bf91..efa4a69 100644 --- a/vnt/src/handle/heartbeat_handler.rs +++ b/vnt/src/handle/heartbeat_handler.rs @@ -178,17 +178,28 @@ async fn start_heartbeat_( peer.virtual_ip, ); if let Some(route) = sender.route_one(&peer.virtual_ip) { - let _ = sender + if let Err(e) = sender .send_by_key(client_packet.buffer(), &route.route_key()) - .await; + .await + { + log::warn!("virtual_ip:{},route:{:?},e:{:?}", peer.virtual_ip, route, e); + } if route.is_p2p() { continue; } } else { //没有直连路由则发送到网关 - let _ = sender + if let Err(e) = sender .send_main(client_packet.buffer(), current_dev.connect_server) - .await; + .await + { + log::warn!( + "virtual_ip:{},connect_server:{:?},e:{:?}", + peer.virtual_ip, + current_dev.connect_server, + e + ); + } } //再随机发送到其他地址,看有没有客户端符合转发条件 @@ -201,8 +212,16 @@ async fn start_heartbeat_( 'a: for (peer_ip, route_list) in route_list.iter() { for route in route_list { if peer_ip != &peer.virtual_ip && route.is_p2p() { - let _ = - sender.try_send_by_key(client_packet.buffer(), &route.route_key()); + if let Err(e) = + sender.try_send_by_key(client_packet.buffer(), &route.route_key()) + { + log::warn!( + "virtual_ip:{},route:{:?},e:{:?}", + peer.virtual_ip, + route, + e + ); + } num += 1; break; }