remove src modified flag from pm hdr (#1857)

This commit is contained in:
KKRainbow
2026-02-02 16:47:26 +08:00
committed by GitHub
parent cd2cf56358
commit bf3edbd28f
5 changed files with 63 additions and 55 deletions
+9 -3
View File
@@ -12,7 +12,7 @@ use pnet::packet::{
use tokio::io::{copy_bidirectional, AsyncRead, AsyncWrite};
use tokio_util::io::InspectReader;
use crate::tunnel::packet_def::PeerManagerHeader;
use crate::tunnel::packet_def::{PacketType, PeerManagerHeader};
use crate::{
common::{acl_processor::PacketInfo, error::Result},
gateway::tcp_proxy::{NatDstConnector, TcpProxy},
@@ -69,7 +69,7 @@ impl ProxyAclHandler {
pub(crate) trait TcpProxyForWrappedSrcTrait: Send + Sync + 'static {
type Connector: NatDstConnector;
fn get_tcp_proxy(&self) -> &Arc<TcpProxy<Self::Connector>>;
fn set_src_modified(hdr: &mut PeerManagerHeader, modified: bool) -> &mut PeerManagerHeader;
fn mark_src_modified(hdr: &mut PeerManagerHeader) -> &mut PeerManagerHeader;
async fn check_dst_allow_wrapped_input(&self, dst_ip: &Ipv4Addr) -> bool;
}
@@ -84,6 +84,12 @@ impl<C: NatDstConnector, T: TcpProxyForWrappedSrcTrait<Connector = C>> NicPacket
return true;
}
let hdr = zc_packet.mut_peer_manager_header().unwrap();
if hdr.packet_type != PacketType::Data as u8 {
// already handled by other proxy
return false;
}
let data = zc_packet.payload();
let ip_packet = Ipv4Packet::new(data).unwrap();
if ip_packet.get_version() != 4
@@ -141,7 +147,7 @@ impl<C: NatDstConnector, T: TcpProxyForWrappedSrcTrait<Connector = C>> NicPacket
let hdr = zc_packet.mut_peer_manager_header().unwrap();
hdr.to_peer_id = self.get_tcp_proxy().get_my_peer_id().into();
Self::set_src_modified(hdr, true);
Self::mark_src_modified(hdr);
true
}
}