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:
parent
2b6aa571d1
commit
790d68ac5e
1 changed files with 8 additions and 0 deletions
|
@ -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) };
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue