diff options
Diffstat (limited to 'Kernel/ARPPacket.h')
-rw-r--r-- | Kernel/ARPPacket.h | 52 |
1 files changed, 43 insertions, 9 deletions
diff --git a/Kernel/ARPPacket.h b/Kernel/ARPPacket.h index f77f10b443..72cb75b625 100644 --- a/Kernel/ARPPacket.h +++ b/Kernel/ARPPacket.h @@ -1,14 +1,48 @@ #pragma once +#include <Kernel/MACAddress.h> +#include <Kernel/IPv4Address.h> +#include <Kernel/EtherType.h> + class [[gnu::packed]] ARPPacket { public: - word hardware_type; - word protocol_type; - word hardware_address_length; - word protocol_address_length; - word operation; - uint8_t sender_hardware_address[6]; // Sender hardware address. - uint8_t sender_protocol_address[4]; // Sender protocol address. - uint8_t target_hardware_address[6]; // target hardware address. - uint8_t target_protocol_address[4]; // target protocol address. + word hardware_type() const { return ntohs(m_hardware_type); } + void set_hardware_type(word w) { m_hardware_type = htons(w); } + + word protocol_type() const { return ntohs(m_protocol_type); } + void set_protocol_type(word w) { m_protocol_type = htons(w); } + + byte hardware_address_length() const { return m_hardware_address_length; } + void set_hardware_address_length(byte b) { m_hardware_address_length = b; } + + byte protocol_address_length() const { return m_protocol_address_length; } + void set_protocol_address_length(byte b) { m_protocol_address_length = b; } + + word operation() const { return ntohs(m_operation); } + void set_operation(word w) { m_operation = htons(w); } + + const MACAddress& sender_hardware_address() const { return m_sender_hardware_address; } + void set_sender_hardware_address(const MACAddress& address) { m_sender_hardware_address = address; } + + const IPv4Address& sender_protocol_address() const { return m_sender_protocol_address; } + void set_sender_protocol_address(const IPv4Address& address) { m_sender_protocol_address = address; } + + const MACAddress& target_hardware_address() const { return m_target_hardware_address; } + void set_target_hardware_address(const MACAddress& address) { m_target_hardware_address = address; } + + const IPv4Address& target_protocol_address() const { return m_target_protocol_address; } + void set_target_protocol_address(const IPv4Address& address) { m_target_protocol_address = address; } + +private: + word m_hardware_type { 0x0100 }; + word m_protocol_type { 0x0008 }; + byte m_hardware_address_length { sizeof(MACAddress) }; + byte m_protocol_address_length { sizeof(IPv4Address) }; + word m_operation { 0 }; + MACAddress m_sender_hardware_address; + IPv4Address m_sender_protocol_address; + MACAddress m_target_hardware_address; + IPv4Address m_target_protocol_address; }; + +static_assert(sizeof(ARPPacket) == 28); |