Rev 4708 | Rev 4722 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4708 | Rev 4711 | ||
---|---|---|---|
Line 40... | Line 40... | ||
40 | 40 | ||
41 | #define CRC_DIVIDER_BE 0x04C11DB7 |
41 | #define CRC_DIVIDER_BE 0x04C11DB7 |
42 | 42 | ||
43 | #define CRC_DIVIDER_LE 0xEDB88320 |
43 | #define CRC_DIVIDER_LE 0xEDB88320 |
44 | 44 | ||
- | 45 | /** IP checksum value for computed zero checksum. |
|
- | 46 | * Zero is returned as 0xFFFF (not flipped) |
|
- | 47 | */ |
|
- | 48 | #define IP_CHECKSUM_ZERO 0xFFFFu |
|
- | 49 | ||
45 | uint32_t compute_crc32_le( uint32_t seed, uint8_t * data, size_t length ){ |
50 | uint32_t compute_crc32_le( uint32_t seed, uint8_t * data, size_t length ){ |
46 | size_t index; |
51 | size_t index; |
47 | 52 | ||
48 | while( length >= 8 ){ |
53 | while( length >= 8 ){ |
49 | seed ^= ( * data ); |
54 | seed ^= ( * data ); |
Line 121... | Line 126... | ||
121 | while( sum >> 16 ) sum = ( sum & 0xFFFF ) + ( sum >> 16 ); |
126 | while( sum >> 16 ) sum = ( sum & 0xFFFF ) + ( sum >> 16 ); |
122 | 127 | ||
123 | return ( uint16_t ) sum; |
128 | return ( uint16_t ) sum; |
124 | } |
129 | } |
125 | 130 | ||
- | 131 | uint16_t ip_checksum( uint8_t * data, size_t length ){ |
|
- | 132 | uint16_t checksum; |
|
- | 133 | ||
- | 134 | checksum = compact_checksum(compute_checksum( 0, data, length )); |
|
- | 135 | ||
- | 136 | // flip, zero is returned as 0xFFFF (not flipped) |
|
- | 137 | return ( ~ checksum ) ? ( uint16_t ) ( ~ checksum ) : IP_CHECKSUM_ZERO; |
|
- | 138 | } |
|
- | 139 | ||
126 | /** @} |
140 | /** @} |
127 | */ |
141 | */ |