Subversion Repositories HelenOS

Rev

Rev 4708 | 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
 */