diff options
Diffstat (limited to 'Kernel/Net/Routing.cpp')
-rw-r--r-- | Kernel/Net/Routing.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/Kernel/Net/Routing.cpp b/Kernel/Net/Routing.cpp index 3c6a6d0aac..d3d0355654 100644 --- a/Kernel/Net/Routing.cpp +++ b/Kernel/Net/Routing.cpp @@ -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) }; |