| /* |
| * Copyright (c) 2002-2003 The Regents of The University of Michigan |
| * All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions are |
| * met: redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer; |
| * redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in the |
| * documentation and/or other materials provided with the distribution; |
| * neither the name of the copyright holders nor the names of its |
| * contributors may be used to endorse or promote products derived from |
| * this software without specific prior written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| */ |
| |
| #include <sstream> |
| #include <string> |
| |
| #include "base/cprintf.hh" |
| #include "sim/host.hh" |
| #include "base/inet.hh" |
| |
| using namespace::std; |
| string |
| eaddr_string(const uint8_t a[6]) |
| { |
| stringstream stream; |
| ccprintf(stream, "%x:%x:%x:%x:%x:%x", a[0], a[1], a[2], a[3], a[4], a[5]); |
| |
| return stream.str(); |
| } |
| |
| /* |
| * Copyright (c) 1988, 1992, 1993 |
| * The Regents of the University of California. All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions |
| * are met: |
| * 1. Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * 2. Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in the |
| * documentation and/or other materials provided with the distribution. |
| * 3. All advertising materials mentioning features or use of this software |
| * must display the following acknowledgement: |
| * This product includes software developed by the University of |
| * California, Berkeley and its contributors. |
| * 4. Neither the name of the University nor the names of its contributors |
| * may be used to endorse or promote products derived from this software |
| * without specific prior written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
| * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
| * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
| * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
| * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
| * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| * SUCH DAMAGE. |
| */ |
| /*********************************************************************** |
| This section of code taken from NetBSD |
| ***********************************************************************/ |
| |
| #define ETHER_CRC_POLY_LE 0xedb88320 |
| #define ETHER_CRC_POLY_BE 0x04c11db6 |
| |
| #if 0 |
| /* |
| * This is for reference. We have a table-driven version |
| * of the little-endian crc32 generator, which is faster |
| * than the double-loop. |
| */ |
| uint32_t |
| crc32le(const uint8_t *buf, size_t len) |
| { |
| uint32_t c, crc, carry; |
| size_t i, j; |
| |
| crc = 0xffffffffU; /* initial value */ |
| |
| for (i = 0; i < len; i++) { |
| c = buf[i]; |
| for (j = 0; j < 8; j++) { |
| carry = ((crc & 0x01) ? 1 : 0) ^ (c & 0x01); |
| crc >>= 1; |
| c >>= 1; |
| if (carry) |
| crc = (crc ^ ETHER_CRC_POLY_LE); |
| } |
| } |
| |
| return (crc); |
| } |
| #else |
| uint32_t |
| crc32le(const uint8_t *buf, size_t len) |
| { |
| static const uint32_t crctab[] = { |
| 0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac, |
| 0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c, |
| 0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c, |
| 0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c |
| }; |
| uint32_t crc; |
| int i; |
| |
| crc = 0xffffffffU; /* initial value */ |
| |
| for (i = 0; i < len; i++) { |
| crc ^= buf[i]; |
| crc = (crc >> 4) ^ crctab[crc & 0xf]; |
| crc = (crc >> 4) ^ crctab[crc & 0xf]; |
| } |
| |
| return (crc); |
| } |
| #endif |
| |
| uint32_t |
| crc32be(const uint8_t *buf, size_t len) |
| { |
| uint32_t c, crc, carry; |
| size_t i, j; |
| |
| crc = 0xffffffffU; /* initial value */ |
| |
| for (i = 0; i < len; i++) { |
| c = buf[i]; |
| for (j = 0; j < 8; j++) { |
| carry = ((crc & 0x80000000U) ? 1 : 0) ^ (c & 0x01); |
| crc <<= 1; |
| c >>= 1; |
| if (carry) |
| crc = (crc ^ ETHER_CRC_POLY_BE) | carry; |
| } |
| } |
| |
| return (crc); |
| } |
| |
| /*********************************************************************** |
| This is the end of the NetBSD code |
| ***********************************************************************/ |