Код
#define UDP_PACKET_SIZE 8
#define IP_UDP 17
// псевдозаголовок
crc=UDP_PACKET_SIZE+sizeof(sAUDIO_PACKET)+IP_UDP
+(((DWORD)dst_ip[0]<<8)|dst_ip[1])
+(((DWORD)dst_ip[2]<<8)|dst_ip[3])
+(((DWORD)src_ip[0]<<8)|src_ip[1])
+(((DWORD)src_ip[2]<<8)|src_ip[3]);
// заголовок
for(j=0;j<((UDP_PACKET_SIZE+sizeof(sAUDIO_PACKET)+1)>>1);j++)
crc+=(bl0_data[j*2+1+ETH_PACKET_SIZE+IP_PACKET_SIZE]
+((DWORD)bl0_data[j*2+0+ETH_PACKET_SIZE+IP_PACKET_SIZE]<<8));
crc=(crc+(crc>>16))^0xFFFF;
http://www.opennet.ru/docs/RUS/tcpip
udp->crc=SWAPBYTES(crc);
В поле CRC UDP заносим 0.
Сначала считаем сумму псевдозаголвка (тип пакета 17 + размер данных пакета IP (размер заголовка UDP+размер данных UDP)) + IP адреса источника и получателя.
Потом к полученной сумме добавляем все данные IP пакета (т.е. заголовок UDP и данные UDP).
Затем добавляем переполнение и инвертируем содержимое CRC
bl0_data[ETH_PACKET_SIZE+IP_PACKET_SIZE] - начало пакета UDP
Можно почитать
http://www.opennet.ru/docs/RUS/tcpip/