- Uint8 buf[MAX_PACKET_SIZE];
- tEthernetHeader *hdr = (void*)buf;
- int ret, i;
- Uint32 checksum;
-
- // Wait for a packet (Read on a network device is blocking)
- //Log_Debug("NET", "Waiting on adapter FD#0x%x", Adapter->DeviceFD);
- ret = VFS_Read(Adapter->DeviceFD, MAX_PACKET_SIZE, buf);
- if(ret == -1) break;
-
- if(ret < sizeof(tEthernetHeader)) {
- Log_Log("Net Link", "Recieved an undersized packet (%i < %i)",
- ret, sizeof(tEthernetHeader));
- continue;
- }
-
- Log_Log("Net Link",
- "Packet from %02x:%02x:%02x:%02x:%02x:%02x"
- " to %02x:%02x:%02x:%02x:%02x:%02x (Type=%04x)",
- hdr->Src.B[0], hdr->Src.B[1], hdr->Src.B[2],
- hdr->Src.B[3], hdr->Src.B[4], hdr->Src.B[5],
- hdr->Dest.B[0], hdr->Dest.B[1], hdr->Dest.B[2],
- hdr->Dest.B[3], hdr->Dest.B[4], hdr->Dest.B[5],
- ntohs(hdr->Type)
- );
- checksum = *(Uint32*)&hdr->Data[ret-sizeof(tEthernetHeader)-4];
- //Log_Log("NET", "Checksum 0x%08x", checksum);
- // TODO: Check checksum
-
- // Check if there is a registered callback for this packet type
- for( i = giRegisteredTypes; i--; )
- {
- if(gaRegisteredTypes[i].Type == ntohs(hdr->Type)) break;
- }
- // No? Ignore it
- if( i == -1 ) {
- Log_Log("Net Link", "Unregistered type 0x%x", ntohs(hdr->Type));
- continue;
- }
-
- // Call the callback
- gaRegisteredTypes[i].Callback(
- Adapter,
- hdr->Src,
- ret - sizeof(tEthernetHeader),
- hdr->Data
- );
+ IPStack_Buffer_AppendSubBuffer(Buffer, sizeof(tEthernetHeader), ofs + 4, hdr, NULL, NULL);
+ *checksum = htonl( Link_CalculateCRC(Buffer) );
+ Log_Debug("Net Link", "Non-Offloaded: 0x%x, 0x%x", *checksum, ntohl(*checksum));