mirror of
https://mirror.suhoan.cn/https://github.com/EasyTier/EasyTier.git
synced 2025-12-14 05:37:23 +08:00
add ttl for packet
This commit is contained in:
@@ -324,14 +324,20 @@ impl PeerManager {
|
|||||||
self.tasks.lock().await.spawn(async move {
|
self.tasks.lock().await.spawn(async move {
|
||||||
log::trace!("start_peer_recv");
|
log::trace!("start_peer_recv");
|
||||||
while let Some(mut ret) = recv.next().await {
|
while let Some(mut ret) = recv.next().await {
|
||||||
let Some(hdr) = ret.peer_manager_header() else {
|
let Some(hdr) = ret.mut_peer_manager_header() else {
|
||||||
tracing::warn!(?ret, "invalid packet, skip");
|
tracing::warn!(?ret, "invalid packet, skip");
|
||||||
continue;
|
continue;
|
||||||
};
|
};
|
||||||
tracing::trace!(?hdr, ?ret, "peer recv a packet...");
|
tracing::trace!(?hdr, "peer recv a packet...");
|
||||||
let from_peer_id = hdr.from_peer_id.get();
|
let from_peer_id = hdr.from_peer_id.get();
|
||||||
let to_peer_id = hdr.to_peer_id.get();
|
let to_peer_id = hdr.to_peer_id.get();
|
||||||
if to_peer_id != my_peer_id {
|
if to_peer_id != my_peer_id {
|
||||||
|
if hdr.ttl <= 1 {
|
||||||
|
tracing::warn!(?hdr, "ttl is 0, drop packet");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
hdr.ttl -= 1;
|
||||||
tracing::trace!(?to_peer_id, ?my_peer_id, "need forward");
|
tracing::trace!(?to_peer_id, ?my_peer_id, "need forward");
|
||||||
let ret = peers.send_msg(ret, to_peer_id).await;
|
let ret = peers.send_msg(ret, to_peer_id).await;
|
||||||
if ret.is_err() {
|
if ret.is_err() {
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ use zerocopy::FromZeroes;
|
|||||||
|
|
||||||
type DefaultEndian = LittleEndian;
|
type DefaultEndian = LittleEndian;
|
||||||
|
|
||||||
|
pub const DEFAULT_TTL: u8 = 8;
|
||||||
|
|
||||||
// TCP TunnelHeader
|
// TCP TunnelHeader
|
||||||
#[repr(C, packed)]
|
#[repr(C, packed)]
|
||||||
#[derive(AsBytes, FromBytes, FromZeroes, Clone, Debug, Default)]
|
#[derive(AsBytes, FromBytes, FromZeroes, Clone, Debug, Default)]
|
||||||
@@ -69,7 +71,8 @@ pub struct PeerManagerHeader {
|
|||||||
pub to_peer_id: U32<DefaultEndian>,
|
pub to_peer_id: U32<DefaultEndian>,
|
||||||
pub packet_type: u8,
|
pub packet_type: u8,
|
||||||
pub flags: u8,
|
pub flags: u8,
|
||||||
reserved: U16<DefaultEndian>,
|
pub ttl: u8,
|
||||||
|
reserved: u8,
|
||||||
pub len: U32<DefaultEndian>,
|
pub len: U32<DefaultEndian>,
|
||||||
}
|
}
|
||||||
pub const PEER_MANAGER_HEADER_SIZE: usize = std::mem::size_of::<PeerManagerHeader>();
|
pub const PEER_MANAGER_HEADER_SIZE: usize = std::mem::size_of::<PeerManagerHeader>();
|
||||||
@@ -362,6 +365,7 @@ impl ZCPacket {
|
|||||||
hdr.to_peer_id.set(to_peer_id);
|
hdr.to_peer_id.set(to_peer_id);
|
||||||
hdr.packet_type = packet_type;
|
hdr.packet_type = packet_type;
|
||||||
hdr.flags = 0;
|
hdr.flags = 0;
|
||||||
|
hdr.ttl = DEFAULT_TTL;
|
||||||
hdr.len.set(payload_len as u32);
|
hdr.len.set(payload_len as u32);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user