32 #define TRACE_LEVEL ETH_TRACE_LEVEL
51 #if (ETH_SUPPORT == ENABLED)
56 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
57 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
58 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
59 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
60 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
61 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
62 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
63 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
67 #if (ETH_FAST_CRC_SUPPORT == ENABLED)
69 static const uint32_t crc32Table[256] =
71 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA,
72 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,
73 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,
74 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,
75 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,
76 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,
77 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC,
78 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,
79 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,
80 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,
81 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940,
82 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,
83 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116,
84 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,
85 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,
86 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,
87 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A,
88 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,
89 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818,
90 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,
91 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,
92 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,
93 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C,
94 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,
95 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,
96 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,
97 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,
98 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,
99 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086,
100 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
101 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4,
102 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,
103 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,
104 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,
105 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,
106 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,
107 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE,
108 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,
109 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,
110 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,
111 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252,
112 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,
113 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60,
114 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,
115 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,
116 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,
117 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04,
118 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,
119 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A,
120 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,
121 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,
122 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,
123 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E,
124 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,
125 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,
126 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,
127 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,
128 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,
129 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0,
130 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
131 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6,
132 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,
133 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,
134 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D
191 int8_t vlanPcp, int8_t vlanDei, uint16_t
type)
223 vlanTag->tci =
htons(vlanId);
293 if(
macCompAddr(macAddr, &logicalInterface->macAddr))
305 #if (IPV4_SUPPORT == ENABLED && IGMP_ROUTER_SUPPORT == ENABLED)
307 if(interface->igmpRouterContext != NULL &&
308 interface->igmpRouterContext->running)
319 entry = &interface->macAddrFilter[i];
358 #if (IPV4_SUPPORT == ENABLED)
505 #if (ETH_FAST_CRC_SUPPORT == ENABLED)
509 const uint8_t *
p = (uint8_t *)
data;
511 uint32_t crc = 0xFFFFFFFF;
514 for(i = 0; i <
length; i++)
517 crc = (crc >> 8) ^ crc32Table[(crc & 0xFF) ^
p[i]];
529 const uint8_t *
p = (uint8_t *)
data;
531 uint32_t crc = 0xFFFFFFFF;
534 for(i = 0; i <
length; i++)
540 for(j = 0; j < 8; j++)
544 crc = (crc >> 1) ^ 0xEDB88320;
573 #if (ETH_FAST_CRC_SUPPORT == DISABLED)
584 if(offset < buffer->chunk[i].
length)
596 #if (ETH_FAST_CRC_SUPPORT == ENABLED)
598 crc = (crc >> 8) ^ crc32Table[(crc & 0xFF) ^ *
p];
604 for(k = 0; k < 8; k++)
608 crc = (crc >> 1) ^ 0xEDB88320;
657 if(!interface->nicDriver->autoCrcVerif)
ARP (Address Resolution Protocol)
@ ERROR_INVALID_PARAMETER
Invalid parameter.
const MacAddr MAC_BROADCAST_ADDR
#define macIsMulticastAddr(macAddr)
#define macCompAddr(macAddr1, macAddr2)
#define ETH_MIN_FRAME_SIZE
#define MAC_ADDR_FILTER_SIZE
void ethUpdateErrorStats(NetInterface *interface, error_t error)
Update Ethernet error statistics.
bool_t ethTrapIgmpPacket(EthHeader *header, uint8_t *data, size_t length)
Trap IGMP packets.
error_t ethCheckCrc(NetInterface *interface, const uint8_t *frame, size_t length)
Ethernet CRC verification.
error_t ethPadFrame(NetBuffer *buffer, size_t *length)
Ethernet frame padding.
void ethUpdateOutStats(NetInterface *interface, const MacAddr *destMacAddr, size_t length)
Update Ethernet output statistics.
uint32_t ethCalcCrcEx(const NetBuffer *buffer, size_t offset, size_t length)
Calculate CRC over a multi-part buffer.
error_t ethCheckDestAddr(NetInterface *interface, const MacAddr *macAddr)
Destination MAC address filtering.
error_t ethEncodeVlanTag(NetBuffer *buffer, size_t *offset, uint16_t vlanId, int8_t vlanPcp, int8_t vlanDei, uint16_t type)
VLAN tag encoding.
void ethUpdateInStats(NetInterface *interface, const MacAddr *destMacAddr)
Update Ethernet input statistics.
const uint8_t ethPadding[64]
uint32_t ethCalcCrc(const void *data, size_t length)
Ethernet CRC calculation.
error_t ethDecodeVlanTag(const uint8_t *frame, size_t length, uint16_t *vlanId, uint16_t *type)
VLAN tag decoding.
Helper functions for Ethernet.
Interfaces Group MIB module.
#define IF_MIB_INC_COUNTER32(name, value)
#define IF_MIB_INC_COUNTER64(name, value)
IPv4 (Internet Protocol Version 4)
bool_t ipv4TrapIgmpPacket(Ipv4Header *header)
Trap IGMP packets.
Helper functions for IPv4.
IPv6 (Internet Protocol Version 6)
#define MIB2_IF_INC_COUNTER32(name, value)
void * netBufferAt(const NetBuffer *buffer, size_t offset)
Returns a pointer to the data at the specified position.
error_t netBufferAppend(NetBuffer *dest, const void *src, size_t length)
Append data a multi-part buffer.
NetInterface * nicGetLogicalInterface(NetInterface *interface)
Retrieve logical interface.
Network interface controller abstraction layer.
uint_t refCount
Reference count for the current entry.
Structure describing a buffer that spans multiple chunks.