mirror of
https://github.com/EasyTier/EasyTier.git
synced 2026-05-07 18:24:36 +00:00
fix: allow self virtual IP loopback (#2161)
This commit is contained in:
@@ -1657,8 +1657,12 @@ impl PeerManager {
|
|||||||
|
|
||||||
#[cfg(not(target_env = "ohos"))]
|
#[cfg(not(target_env = "ohos"))]
|
||||||
{
|
{
|
||||||
if not_send_to_self && *peer_id == self.my_peer_id {
|
if not_send_to_self
|
||||||
// the packet may be sent to vpn portal, so we just set flags instead of drop it
|
&& *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_not_send_to_tun(true);
|
||||||
hdr.set_no_proxy(true);
|
hdr.set_no_proxy(true);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -475,6 +475,26 @@ pub async fn basic_three_node_test(
|
|||||||
drop_insts(insts).await;
|
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]
|
#[tokio::test]
|
||||||
#[serial_test::serial]
|
#[serial_test::serial]
|
||||||
pub async fn subnet_proxy_loop_prevention_test() {
|
pub async fn subnet_proxy_loop_prevention_test() {
|
||||||
|
|||||||
Reference in New Issue
Block a user