diff --git a/kernel/include/kernel/Networking/ICMP.h b/kernel/include/kernel/Networking/ICMP.h index 689bde47..ba766c52 100644 --- a/kernel/include/kernel/Networking/ICMP.h +++ b/kernel/include/kernel/Networking/ICMP.h @@ -18,6 +18,7 @@ namespace Kernel enum ICMPType : uint8_t { EchoReply = 0x00, + DestinationUnreachable = 0x03, EchoRequest = 0x08, }; diff --git a/kernel/kernel/Networking/IPv4Layer.cpp b/kernel/kernel/Networking/IPv4Layer.cpp index 42fca57a..00f2f217 100644 --- a/kernel/kernel/Networking/IPv4Layer.cpp +++ b/kernel/kernel/Networking/IPv4Layer.cpp @@ -212,6 +212,13 @@ namespace Kernel TRY(interface.send_bytes(dst_mac, EtherType::IPv4, packet)); break; } + case ICMPType::DestinationUnreachable: + { + auto& ipv4_header = ipv4_data.slice(sizeof(ICMPHeader)).as(); + dprintln("Destination '{}' unreachable, code {2H}", ipv4_header.dst_address, icmp_header.code); + // FIXME: inform the socket + break; + } default: dprintln("Unhandleded ICMP packet (type {2H})", icmp_header.type); break;