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