summaryrefslogtreecommitdiff
path: root/Kernel/Net/MACAddress.h
diff options
context:
space:
mode:
Diffstat (limited to 'Kernel/Net/MACAddress.h')
-rw-r--r--Kernel/Net/MACAddress.h47
1 files changed, 47 insertions, 0 deletions
diff --git a/Kernel/Net/MACAddress.h b/Kernel/Net/MACAddress.h
new file mode 100644
index 0000000000..0c2de93b27
--- /dev/null
+++ b/Kernel/Net/MACAddress.h
@@ -0,0 +1,47 @@
+#pragma once
+
+#include <AK/Assertions.h>
+#include <AK/AKString.h>
+#include <AK/Types.h>
+#include <Kernel/StdLib.h>
+
+class [[gnu::packed]] MACAddress {
+public:
+ MACAddress() { }
+ MACAddress(const byte data[6])
+ {
+ memcpy(m_data, data, 6);
+ }
+ ~MACAddress() { }
+
+ byte operator[](int i) const
+ {
+ ASSERT(i >= 0 && i < 6);
+ return m_data[i];
+ }
+
+ bool operator==(const MACAddress& other) const
+ {
+ return !memcmp(m_data, other.m_data, sizeof(m_data));
+ }
+
+ String to_string() const
+ {
+ return String::format("%b:%b:%b:%b:%b:%b", m_data[0], m_data[1], m_data[2], m_data[3], m_data[4], m_data[5]);
+ }
+
+private:
+ byte m_data[6];
+};
+
+static_assert(sizeof(MACAddress) == 6);
+
+namespace AK {
+
+template<>
+struct Traits<MACAddress> {
+ static unsigned hash(const MACAddress& address) { return string_hash((const char*)&address, sizeof(address)); }
+ static void dump(const MACAddress& address) { kprintf("%s", address.to_string().characters()); }
+};
+
+}