/* Calculates the appropriate ethernet checksum, consisting of the addition of the one's compliment of each word, complimented. */
uint16_t Ethernet_Checksum16(void *Data, uint16_t Bytes)
/* Calculates the appropriate ethernet checksum, consisting of the addition of the one's compliment of each word, complimented. */
uint16_t Ethernet_Checksum16(void *Data, uint16_t Bytes)
{
	uint16_t* Words    = (uint16_t*)Data;
	uint32_t  Checksum = 0;
	for (uint16_t CurrWord = 0; CurrWord < (Bytes >> 1); CurrWord++)
	  Checksum += Words[CurrWord];
	while (Checksum & 0xFFFF0000)
	  Checksum = ((Checksum & 0xFFFF) + (Checksum >> 16));
	return ~Checksum;
}