|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [Tsvwg] [SCTP checksum problems]
Lloyd,
I am aware of efforts to compare CRC with Alder-32. CRC that is primarily
aimed at providing burst error detection but if while trying various
techniques, this modification may be interesting.
#define BASE 65521
unsigned s1 = 0x5555;
unsigned s2 = 0;
unsigned short dat_buf*
while (length -= 2)
{
s1 += ntoh(*dat_buf++); /* 16 bit summing */
s2 += s1;
if (s2 >= BASE) /* Adler modulo for s2 only */
s2 -= BASE;
}
return (s2 << 16) | (s1 & 0xffff);
This would exercise more bits for small packets, improve burst error
sensitivity and trade a modulo function for a network to host swap in some
cases. It seems to become a comparison against burst errors vs. missing
segment and stuck bit sensitivity.
The alternative code for CRC would look something like this.
Here is an example using a 256 entry (512 byte) table.
unsigned char* dat_buf;
unsigned long crc_syn = 0xffffffff;
while(length--)
crc_syn = (crc_syn >> 8) ^ crc32_table[(crc_syn & 0xff) ^ *dat_buf++];
return (crc_syn ^ 0xffffffff);
Doug
Home Last updated: Tue Sep 04 01:04:59 2001 6315 messages in chronological order |