fix: allow self virtual IP loopback (#2161)

This commit is contained in:
KKRainbow
2026-04-25 21:26:16 +08:00
committed by GitHub
parent eb3b5aae51
commit b20075e3dc
2 changed files with 26 additions and 2 deletions
+6 -2
View File
@@ -1657,8 +1657,12 @@ impl PeerManager {
#[cfg(not(target_env = "ohos"))]
{
if not_send_to_self && *peer_id == self.my_peer_id {
// the packet may be sent to vpn portal, so we just set flags instead of drop it
if not_send_to_self
&& *peer_id == self.my_peer_id
&& !self.global_ctx.is_ip_local_virtual_ip(&ip_addr)
{
// Keep the loop-prevention flags for proxy-induced self-delivery where
// the destination is not this node's own virtual IP.
hdr.set_not_send_to_tun(true);
hdr.set_no_proxy(true);
}
+20
View File
@@ -475,6 +475,26 @@ pub async fn basic_three_node_test(
drop_insts(insts).await;
}
#[tokio::test]
#[serial_test::serial]
pub async fn ping_own_virtual_ip_should_work() {
let insts = init_three_node("udp").await;
wait_for_condition(
|| async { ping_test("net_a", "10.144.144.1", None).await },
Duration::from_secs(5),
)
.await;
wait_for_condition(
|| async { ping6_test("net_a", "fd00::1", None).await },
Duration::from_secs(5),
)
.await;
drop_insts(insts).await;
}
#[tokio::test]
#[serial_test::serial]
pub async fn subnet_proxy_loop_prevention_test() {