From fddb59992bc3703d335f458ae410661f768b9406 Mon Sep 17 00:00:00 2001 From: lubeilin <1791778603@qq.com> Date: Mon, 31 Jul 2023 19:15:58 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=84=E7=90=86=E9=BB=98=E8=AE=A4=E8=B7=AF?= =?UTF-8?q?=E7=94=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vnt-cli/src/main.rs | 2 +- vnt/src/channel/channel.rs | 2 +- vnt/src/handle/recv_handler.rs | 9 ++++----- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/vnt-cli/src/main.rs b/vnt-cli/src/main.rs index 959db1e..bd3e4bf 100644 --- a/vnt-cli/src/main.rs +++ b/vnt-cli/src/main.rs @@ -39,7 +39,7 @@ async fn main0() { opts.optopt("e", "", "NAT探测服务器地址,使用逗号分隔", ""); opts.optflag("a", "", "使用tap模式,默认使用tun模式"); opts.optmulti("i", "", "配置点对网(IP代理)时使用,-i 192.168.0.0/24,10.26.0.3 \n表示允许接收网段192.168.0.0/24的数据并转发到10.26.0.3", ""); - opts.optmulti("o", "", "配置点对网时使用,-o 192.168.0.0/24 \n表示允许目标为192.168.0.0/24的数据转发出去", ""); + opts.optmulti("o", "", "配置点对网时使用,-o 192.168.0.0/24 \n表示允许将数据转发到192.168.0.0/24", ""); opts.optopt("w", "", "使用该密码生成的密钥对客户端数据进行加密,并且服务端无法解密,使用相同密码的客户端才能通信", ""); opts.optflag("m", "", "模拟组播,默认情况下组播数据会被当作广播发送,开启后会模拟真实组播的数据发送"); opts.optopt("u", "", "自定义mtu(默认为1430)", ""); diff --git a/vnt/src/channel/channel.rs b/vnt/src/channel/channel.rs index 30751ed..cd0b500 100644 --- a/vnt/src/channel/channel.rs +++ b/vnt/src/channel/channel.rs @@ -251,7 +251,7 @@ impl Context { } pub fn route_one(&self, id: &Ipv4Addr) -> Option { if let Some(v) = self.inner.route_table.get(id) { - v.value().iter().max_by_key(|k| k.sort_key()).map(|k| *k) + v.value().first().map(|v| *v) } else { None } diff --git a/vnt/src/handle/recv_handler.rs b/vnt/src/handle/recv_handler.rs index c26f0ad..afbe2a8 100644 --- a/vnt/src/handle/recv_handler.rs +++ b/vnt/src/handle/recv_handler.rs @@ -99,6 +99,7 @@ impl ChannelDataHandler { return Ok(()); } let source = net_packet.source(); + context.update_read_time(&source, route_key); let current_device = self.current_device.load(); let destination = net_packet.destination(); let not_broadcast = !destination.is_broadcast() && !destination.is_multicast() && destination != current_device.broadcast_address; @@ -361,17 +362,15 @@ impl ChannelDataHandler { let metric = net_packet.source_ttl() - net_packet.ttl() + 1; match ControlPacket::new(net_packet.transport_protocol(), net_packet.payload())? { ControlPacket::PingPacket(_) => { - context.update_read_time(&source, route_key); net_packet.set_transport_protocol(control_packet::Protocol::Pong.into()); net_packet.set_source(current_device.virtual_ip()); net_packet.set_destination(source); net_packet.first_set_ttl(MAX_TTL); context.send_by_key(net_packet.buffer(), route_key).await?; - let route = Route::from(*route_key, metric, 99); + let route = Route::from(*route_key, metric, 199); context.add_route_if_absent(source, route); } ControlPacket::PongPacket(pong_packet) => { - context.update_read_time(&source, route_key); let current_time = crate::handle::now_time() as u16; if current_time < pong_packet.time() { return Ok(()); @@ -403,7 +402,7 @@ impl ChannelDataHandler { net_packet.set_destination(source); net_packet.first_set_ttl(1); context.send_by_key(net_packet.buffer(), route_key).await?; - let route = Route::from(*route_key, metric, 99); + let route = Route::from(*route_key, metric, 199); context.add_route_if_absent(source, route); } ControlPacket::PunchResponse => { @@ -411,7 +410,7 @@ impl ChannelDataHandler { return Ok(()); } // log::info!("PunchResponse route_key:{:?}",route_key); - let route = Route::from(*route_key, metric, 99); + let route = Route::from(*route_key, metric, 199); context.add_route_if_absent(source, route); } ControlPacket::AddrRequest => {