diff --git a/pcsx2/CMakeLists.txt b/pcsx2/CMakeLists.txt
index 5742c441ee..558d42a9cb 100644
--- a/pcsx2/CMakeLists.txt
+++ b/pcsx2/CMakeLists.txt
@@ -380,6 +380,7 @@ set(pcsx2DEV9Headers
DEV9/PacketReader/IP/IP_Packet.h
DEV9/PacketReader/IP/IP_Payload.h
DEV9/PacketReader/EthernetFrame.h
+ DEV9/PacketReader/MAC_Address.h
DEV9/PacketReader/NetLib.h
DEV9/PacketReader/Payload.h
DEV9/pcap_io.h
diff --git a/pcsx2/DEV9/PacketReader/MAC_Address.h b/pcsx2/DEV9/PacketReader/MAC_Address.h
new file mode 100644
index 0000000000..cba0783b67
--- /dev/null
+++ b/pcsx2/DEV9/PacketReader/MAC_Address.h
@@ -0,0 +1,37 @@
+/* PCSX2 - PS2 Emulator for PCs
+ * Copyright (C) 2002-2023 PCSX2 Dev Team
+ *
+ * PCSX2 is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU Lesser General Public License as published by the Free Software Found-
+ * ation, either version 3 of the License, or (at your option) any later version.
+ *
+ * PCSX2 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with PCSX2.
+ * If not, see .
+ */
+
+#pragma once
+
+namespace PacketReader
+{
+#pragma pack(push, 1)
+ struct MAC_Address
+ {
+ union
+ {
+ u8 bytes[6];
+ struct
+ {
+ u32 integer03;
+ u16 short45;
+ } u;
+ };
+
+ bool operator==(const MAC_Address& other) const { return (this->u.integer03 == other.u.integer03) && (this->u.short45 == other.u.short45); }
+ bool operator!=(const MAC_Address& other) const { return (this->u.integer03 != other.u.integer03) || (this->u.short45 != other.u.short45); }
+ };
+#pragma pack(pop)
+} // namespace PacketReader
diff --git a/pcsx2/DEV9/PacketReader/NetLib.cpp b/pcsx2/DEV9/PacketReader/NetLib.cpp
index 8d2c660f22..cfc1496f2e 100644
--- a/pcsx2/DEV9/PacketReader/NetLib.cpp
+++ b/pcsx2/DEV9/PacketReader/NetLib.cpp
@@ -23,6 +23,7 @@
#include
#endif
+using namespace PacketReader;
using namespace PacketReader::IP;
namespace PacketReader::NetLib
@@ -44,6 +45,11 @@ namespace PacketReader::NetLib
}
//Special
+ void WriteMACAddress(u8* data, int* index, MAC_Address value)
+ {
+ *(MAC_Address*)&data[*index] = value;
+ *index += sizeof(MAC_Address);
+ }
void WriteIPAddress(u8* data, int* index, IP_Address value)
{
*(IP_Address*)&data[*index] = value;
@@ -74,6 +80,11 @@ namespace PacketReader::NetLib
}
//Special
+ void ReadMACAddress(u8* data, int* index, MAC_Address* value)
+ {
+ *value = *(MAC_Address*)&data[*index];
+ *index += sizeof(MAC_Address);
+ }
void ReadIPAddress(u8* data, int* index, IP_Address* value)
{
*value = *(IP_Address*)&data[*index];
diff --git a/pcsx2/DEV9/PacketReader/NetLib.h b/pcsx2/DEV9/PacketReader/NetLib.h
index 5860819f40..29c20d7d1c 100644
--- a/pcsx2/DEV9/PacketReader/NetLib.h
+++ b/pcsx2/DEV9/PacketReader/NetLib.h
@@ -15,6 +15,7 @@
#pragma once
+#include "DEV9/PacketReader/MAC_Address.h"
#include "DEV9/PacketReader/IP/IP_Address.h"
namespace PacketReader::NetLib
@@ -23,6 +24,7 @@ namespace PacketReader::NetLib
void WriteUInt16(u8* data, int* index, u16 value);
void WriteUInt32(u8* data, int* index, u32 value);
+ void WriteMACAddress(u8* data, int* index, PacketReader::MAC_Address value);
void WriteIPAddress(u8* data, int* index, PacketReader::IP::IP_Address value);
void WriteByteArray(u8* data, int* index, int length, u8* value);
@@ -30,6 +32,7 @@ namespace PacketReader::NetLib
void ReadUInt16(u8* data, int* index, u16* value);
void ReadUInt32(u8* data, int* index, u32* value);
+ void ReadMACAddress(u8* data, int* index, PacketReader::MAC_Address* value);
void ReadIPAddress(u8* data, int* index, PacketReader::IP::IP_Address* value);
void ReadByteArray(u8* data, int* index, int length, u8* value);
} // namespace PacketReader::NetLib
diff --git a/pcsx2/pcsx2core.vcxproj b/pcsx2/pcsx2core.vcxproj
index c56d592599..82afd4c657 100644
--- a/pcsx2/pcsx2core.vcxproj
+++ b/pcsx2/pcsx2core.vcxproj
@@ -512,6 +512,7 @@
+
diff --git a/pcsx2/pcsx2core.vcxproj.filters b/pcsx2/pcsx2core.vcxproj.filters
index 9d3d90b7b3..8ae95fd31f 100644
--- a/pcsx2/pcsx2core.vcxproj.filters
+++ b/pcsx2/pcsx2core.vcxproj.filters
@@ -1834,6 +1834,9 @@
System\Ps2\DEV9\PacketReader
+
+ System\Ps2\DEV9\PacketReader
+
System\Ps2\DEV9\PacketReader