Kernel: Route packets destined for us through the loopback adapter

Without this patch we'd send packets through the physical adapter
and they'd incorrectly end up on the network.
This commit is contained in:
Gunnar Beutner 2021-05-12 14:43:14 +02:00 committed by Andreas Kling
commit 790d68ac5e
Notes: sideshowbarker 2024-07-18 18:17:41 +09:00

View file

@ -156,6 +156,11 @@ RoutingDecision route_to(const IPv4Address& target, const IPv4Address& source, c
auto adapter_addr = adapter.ipv4_address().to_u32();
auto adapter_mask = adapter.ipv4_netmask().to_u32();
if (target_addr == adapter_addr) {
local_adapter = LoopbackAdapter::the();
return;
}
if (source_addr != 0 && source_addr != adapter_addr)
return;
@ -205,6 +210,9 @@ RoutingDecision route_to(const IPv4Address& target, const IPv4Address& source, c
if (target_addr == 0xffffffff && matches(adapter))
return { adapter, { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff } };
if (adapter == LoopbackAdapter::the())
return { adapter, adapter->mac_address() };
if ((target_addr & IPv4Address { 240, 0, 0, 0 }.to_u32()) == IPv4Address { 224, 0, 0, 0 }.to_u32())
return { adapter, multicast_ethernet_address(target) };