summaryrefslogtreecommitdiff
path: root/Kernel/ARPPacket.h
diff options
context:
space:
mode:
Diffstat (limited to 'Kernel/ARPPacket.h')
-rw-r--r--Kernel/ARPPacket.h52
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);