diff options
author | Andreas Kling <awesomekling@gmail.com> | 2019-04-02 19:54:38 +0200 |
---|---|---|
committer | Andreas Kling <awesomekling@gmail.com> | 2019-04-02 19:54:38 +0200 |
commit | 649c81a714e120a300439ca5d3fdd5e7f6f6b34d (patch) | |
tree | fe8b98b5facbbc517bd1d6505e8ba526c08534e4 /Kernel/Net/ICMP.h | |
parent | 718bea73b31d1deda79c787eaa4ab7107b8fa7ce (diff) | |
download | serenity-649c81a714e120a300439ca5d3fdd5e7f6f6b34d.zip |
Kernel: Move networking related files into Kernel/Net/.
Diffstat (limited to 'Kernel/Net/ICMP.h')
-rw-r--r-- | Kernel/Net/ICMP.h | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/Kernel/Net/ICMP.h b/Kernel/Net/ICMP.h new file mode 100644 index 0000000000..efc6cf4ca6 --- /dev/null +++ b/Kernel/Net/ICMP.h @@ -0,0 +1,45 @@ +#pragma once + +#include <Kernel/Net/MACAddress.h> +#include <Kernel/Net/IPv4.h> + +struct ICMPType { +enum { + EchoReply = 0, + EchoRequest = 8, +}; +}; + +class [[gnu::packed]] ICMPHeader { +public: + ICMPHeader() { } + ~ICMPHeader() { } + + byte type() const { return m_type; } + void set_type(byte b) { m_type = b; } + + byte code() const { return m_code; } + void set_code(byte b) { m_code = b; } + + word checksum() const { return m_checksum; } + void set_checksum(word w) { m_checksum = w; } + + const void* payload() const { return this + 1; } + void* payload() { return this + 1; } + +private: + byte m_type { 0 }; + byte m_code { 0 }; + NetworkOrdered<word> m_checksum { 0 }; + // NOTE: The rest of the header is 4 bytes +}; + +static_assert(sizeof(ICMPHeader) == 4); + +struct [[gnu::packed]] ICMPEchoPacket { + ICMPHeader header; + NetworkOrdered<word> identifier; + NetworkOrdered<word> sequence_number; + void* payload() { return this + 1; } + const void* payload() const { return this + 1; } +}; |