1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-28 16:15:10 +00:00

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
parent 2b6aa571d1
commit 790d68ac5e

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) };