From 2e8ca89f3d40eb8649ffe89d42252f3872b2d977 Mon Sep 17 00:00:00 2001 From: TheLastRar Date: Wed, 13 Jan 2021 00:25:58 +0000 Subject: [PATCH] DEV9: Move Tap's packet verification into NetAdapter Make pcap use it for addition of bridge mode --- pcsx2/DEV9/Win32/tap-win32.cpp | 18 +----------------- pcsx2/DEV9/net.cpp | 17 +++++++++++++++++ pcsx2/DEV9/net.h | 2 ++ pcsx2/DEV9/pcap_io.cpp | 4 +--- pcsx2/DEV9/pcap_io.h | 3 --- 5 files changed, 21 insertions(+), 23 deletions(-) diff --git a/pcsx2/DEV9/Win32/tap-win32.cpp b/pcsx2/DEV9/Win32/tap-win32.cpp index cc476ba58f..441200067c 100644 --- a/pcsx2/DEV9/Win32/tap-win32.cpp +++ b/pcsx2/DEV9/Win32/tap-win32.cpp @@ -310,7 +310,6 @@ bool TAPAdapter::isInitialised() { return (htap != NULL); } -u8 broadcast_adddrrrr[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; //gets a packet.rv :true success bool TAPAdapter::recv(NetPacket* pkt) { @@ -340,23 +339,8 @@ bool TAPAdapter::recv(NetPacket* pkt) } } - if (result) - { - if ((memcmp(pkt->buffer, dev9.eeprom, 6) != 0) && (memcmp(pkt->buffer, &broadcast_adddrrrr, 6) != 0)) - { - //ignore strange packets - return false; - } - - if (memcmp(pkt->buffer + 6, dev9.eeprom, 6) == 0) - { - //avoid pcap looping packets - return false; - } - pkt->size = read_size; - return true; - } + return VerifyPkt(pkt, read_size); else return false; } diff --git a/pcsx2/DEV9/net.cpp b/pcsx2/DEV9/net.cpp index 6e81118aa0..acb4732d99 100644 --- a/pcsx2/DEV9/net.cpp +++ b/pcsx2/DEV9/net.cpp @@ -177,3 +177,20 @@ void NetAdapter::SetMACAddress(u8* mac) //The checksum seems to be all the values of the mac added up in 16bit chunks dev9.eeprom[3] = (dev9.eeprom[0] + dev9.eeprom[1] + dev9.eeprom[2]) & 0xffff; } + +bool NetAdapter::VerifyPkt(NetPacket* pkt, int read_size) +{ + if ((memcmp(pkt->buffer, ps2MAC, 6) != 0) && (memcmp(pkt->buffer, &broadcastMAC, 6) != 0)) + { + //ignore strange packets + return false; + } + + if (memcmp(pkt->buffer + 6, ps2MAC, 6) == 0) + { + //avoid pcap looping packets + return false; + } + pkt->size = read_size; + return true; +} diff --git a/pcsx2/DEV9/net.h b/pcsx2/DEV9/net.h index 46eb72feca..a0a5cf7c4a 100644 --- a/pcsx2/DEV9/net.h +++ b/pcsx2/DEV9/net.h @@ -61,6 +61,7 @@ class NetAdapter { protected: u8 ps2MAC[6]; + const u8 broadcastMAC[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; public: NetAdapter(); @@ -73,6 +74,7 @@ public: protected: void SetMACAddress(u8* mac); + bool VerifyPkt(NetPacket* pkt, int read_size); }; void tx_put(NetPacket* ptr); diff --git a/pcsx2/DEV9/pcap_io.cpp b/pcsx2/DEV9/pcap_io.cpp index a6070aeb82..264e58c7c1 100644 --- a/pcsx2/DEV9/pcap_io.cpp +++ b/pcsx2/DEV9/pcap_io.cpp @@ -38,7 +38,6 @@ pcap_t* adhandle; pcap_dumper_t* dump_pcap = nullptr; char errbuf[PCAP_ERRBUF_SIZE]; -mac_address broadcast_mac = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; int pcap_io_running = 0; extern u8 eeprom[]; @@ -279,8 +278,7 @@ bool PCAPAdapter::recv(NetPacket* pkt) } else { - pkt->size = size; - return true; + return VerifyPkt(pkt, size); } } //sends the packet .rv :true success diff --git a/pcsx2/DEV9/pcap_io.h b/pcsx2/DEV9/pcap_io.h index 28747cd6ba..18bc67b3d9 100644 --- a/pcsx2/DEV9/pcap_io.h +++ b/pcsx2/DEV9/pcap_io.h @@ -148,9 +148,6 @@ typedef struct _full_arp_packet #define ARP_REQUEST 0x0100 //values are big-endian -extern mac_address virtual_mac; -extern mac_address broadcast_mac; - #define mac_compare(a, b) (memcmp(&(a), &(b), 6)) #define ip_compare(a, b) (memcmp(&(a), &(b), 4))