Changeset cf9cb36 in mainline for uspace/lib/net


Ignore:
Timestamp:
2012-01-22T13:41:20Z (13 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
eb2efc7
Parents:
8d7ec69d
Message:

Decouple libnic from libnet.

Location:
uspace/lib/net
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/net/generic/net_checksum.c

    r8d7ec69d rcf9cb36  
    4545#define CRC_DIVIDER_LE  0xedb88320
    4646
    47 /** Polynomial used in multicast address hashing */
    48 #define CRC_MCAST_POLYNOMIAL  0x04c11db6
    49 
    5047/** Compacts the computed checksum to the 16 bit number adding the carries.
    5148 *
     
    224221}
    225222
    226 /** Compute the standard hash from MAC
    227  *
    228  * Hashing MAC into 64 possible values and using the value as index to
    229  * 64bit number.
    230  *
    231  * The code is copied from qemu-0.13's implementation of ne2000 and rt8139
    232  * drivers, but according to documentation there it originates in FreeBSD.
    233  *
    234  * @param[in] addr The 6-byte MAC address to be hashed
    235  *
    236  * @return 64-bit number with only single bit set to 1
    237  *
    238  */
    239 uint64_t multicast_hash(const uint8_t addr[6])
    240 {
    241         uint32_t crc;
    242     int carry, i, j;
    243     uint8_t b;
    244 
    245     crc = 0xffffffff;
    246     for (i = 0; i < 6; i++) {
    247         b = addr[i];
    248         for (j = 0; j < 8; j++) {
    249             carry = ((crc & 0x80000000L) ? 1 : 0) ^ (b & 0x01);
    250             crc <<= 1;
    251             b >>= 1;
    252             if (carry)
    253                 crc = ((crc ^ CRC_MCAST_POLYNOMIAL) | carry);
    254         }
    255     }
    256        
    257     uint64_t one64 = 1;
    258     return one64 << (crc >> 26);
    259 }
    260 
    261223/** @}
    262224 */
  • uspace/lib/net/include/net_checksum.h

    r8d7ec69d rcf9cb36  
    6767extern uint16_t flip_checksum(uint16_t);
    6868extern uint16_t ip_checksum(uint8_t *, size_t);
    69 extern uint64_t multicast_hash(const uint8_t addr[6]);
    7069
    7170#endif
Note: See TracChangeset for help on using the changeset viewer.