#include "Ethernet.h"\r
\r
/* Global Variables: */\r
-/** Ethernet Frame buffer structure, to hold the incoming Ethernet frame from the host. */\r
-Ethernet_Frame_Info_t FrameIN;\r
-\r
-/** Ethernet Frame buffer structure, to hold the outgoing Ethernet frame to the host. */\r
-Ethernet_Frame_Info_t FrameOUT;\r
-\r
/** Constant for convenience when checking against or setting a MAC address to the virtual server MAC address. */\r
const MAC_Address_t ServerMACAddress = {SERVER_MAC_ADDRESS};\r
\r
/** Processes an incoming Ethernet frame, and writes the appropriate response to the output Ethernet\r
* frame buffer if the sub protocol handlers create a valid response.\r
*/\r
-void Ethernet_ProcessPacket(void)\r
+void Ethernet_ProcessPacket(Ethernet_Frame_Info_t* FrameIN, Ethernet_Frame_Info_t* FrameOUT)\r
{\r
- DecodeEthernetFrameHeader(FrameIN.FrameData);\r
+ DecodeEthernetFrameHeader(FrameIN->FrameData);\r
\r
/* Cast the incoming Ethernet frame to the Ethernet header type */\r
- Ethernet_Frame_Header_t* FrameINHeader = (Ethernet_Frame_Header_t*)&FrameIN.FrameData;\r
- Ethernet_Frame_Header_t* FrameOUTHeader = (Ethernet_Frame_Header_t*)&FrameOUT.FrameData;\r
+ Ethernet_Frame_Header_t* FrameINHeader = (Ethernet_Frame_Header_t*)&FrameIN->FrameData;\r
+ Ethernet_Frame_Header_t* FrameOUTHeader = (Ethernet_Frame_Header_t*)&FrameOUT->FrameData;\r
\r
int16_t RetSize = NO_RESPONSE;\r
\r
/* Ensure frame is addressed to either all (broadcast) or the virtual webserver, and is a type II frame */\r
if ((MAC_COMPARE(&FrameINHeader->Destination, &ServerMACAddress) ||\r
- MAC_COMPARE(&FrameINHeader->Destination, &BroadcastMACAddress)) &&\r
- (SwapEndian_16(FrameIN.FrameLength) > ETHERNET_VER2_MINSIZE))\r
+ MAC_COMPARE(&FrameINHeader->Destination, &BroadcastMACAddress)))\r
{\r
/* Process the packet depending on its protocol */\r
switch (SwapEndian_16(FrameINHeader->EtherType))\r
{\r
case ETHERTYPE_ARP:\r
- RetSize = ARP_ProcessARPPacket(&FrameIN.FrameData[sizeof(Ethernet_Frame_Header_t)],\r
- &FrameOUT.FrameData[sizeof(Ethernet_Frame_Header_t)]);\r
+ RetSize = ARP_ProcessARPPacket(&FrameIN->FrameData[sizeof(Ethernet_Frame_Header_t)],\r
+ &FrameOUT->FrameData[sizeof(Ethernet_Frame_Header_t)]);\r
break; \r
case ETHERTYPE_IPV4:\r
- RetSize = IP_ProcessIPPacket(&FrameIN.FrameData[sizeof(Ethernet_Frame_Header_t)],\r
- &FrameOUT.FrameData[sizeof(Ethernet_Frame_Header_t)]);\r
+ RetSize = IP_ProcessIPPacket(FrameIN,\r
+ &FrameIN->FrameData[sizeof(Ethernet_Frame_Header_t)],\r
+ &FrameOUT->FrameData[sizeof(Ethernet_Frame_Header_t)]);\r
break;\r
}\r
\r
FrameOUTHeader->EtherType = FrameINHeader->EtherType;\r
\r
/* Set the response length in the buffer and indicate that a response is ready to be sent */\r
- FrameOUT.FrameLength = (sizeof(Ethernet_Frame_Header_t) + RetSize);\r
- FrameOUT.FrameInBuffer = true;\r
+ FrameOUT->FrameLength = (sizeof(Ethernet_Frame_Header_t) + RetSize);\r
+ FrameOUT->FrameInBuffer = true;\r
}\r
}\r
\r
if (RetSize != NO_PROCESS)\r
{\r
/* Clear the frame buffer */\r
- FrameIN.FrameInBuffer = false;\r
+ FrameIN->FrameInBuffer = false;\r
}\r
}\r
\r