浏览代码

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.
Gunnar Beutner 4 年之前
父节点
当前提交
790d68ac5e
共有 1 个文件被更改,包括 8 次插入0 次删除
  1. 8 0
      Kernel/Net/Routing.cpp

+ 8 - 0
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) };