From 790d68ac5efed1880c42fe64ae6e75da49753964 Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Wed, 12 May 2021 14:43:14 +0200 Subject: 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. --- Kernel/Net/Routing.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'Kernel/Net/Routing.cpp') 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) }; -- cgit v1.2.3