From 8fbecbcdd73e893f55df9ec9d84ba1e226b1bbaf Mon Sep 17 00:00:00 2001 From: TheLastRar Date: Mon, 16 Jan 2023 16:17:06 +0000 Subject: [PATCH] DEV9: Add MAC_Address struct --- pcsx2/CMakeLists.txt | 1 + pcsx2/DEV9/PacketReader/MAC_Address.h | 37 +++++++++++++++++++++++++++ pcsx2/DEV9/PacketReader/NetLib.cpp | 11 ++++++++ pcsx2/DEV9/PacketReader/NetLib.h | 3 +++ pcsx2/pcsx2core.vcxproj | 1 + pcsx2/pcsx2core.vcxproj.filters | 3 +++ 6 files changed, 56 insertions(+) create mode 100644 pcsx2/DEV9/PacketReader/MAC_Address.h 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