ethernet.h File Reference

Ethernet. More...

#include "core/net.h"

Go to the source code of this file.

Data Structures

struct  MacFilterEntry
 MAC filter table entry. More...
 

Macros

#define ETH_SUPPORT   ENABLED
 
#define ETH_VLAN_SUPPORT   DISABLED
 
#define ETH_VMAN_SUPPORT   DISABLED
 
#define ETH_PORT_TAGGING_SUPPORT   DISABLED
 
#define MAC_ADDR_FILTER_SIZE   12
 
#define ETH_FAST_CRC_SUPPORT   DISABLED
 
#define ETH_MIN_FRAME_SIZE   64
 
#define ETH_MAX_FRAME_SIZE   1518
 
#define ETH_MTU   1500
 
#define ETH_CRC_SIZE   4
 
#define VLAN_PCP_MASK   0xE000
 
#define VLAN_CFI_MASK   0x1000
 
#define VLAN_VID_MASK   0x0FFF
 
#define macCopyAddr(destMacAddr, srcMacAddr)   memcpy(destMacAddr, srcMacAddr, sizeof(MacAddr))
 
#define macCompAddr(macAddr1, macAddr2)   (!memcmp(macAddr1, macAddr2, sizeof(MacAddr)))
 
#define macIsMulticastAddr(macAddr)   ((macAddr)->b[0] & 0x01)
 
#define eui64CopyAddr(destEui64Addr, srcEui64Addr)   memcpy(destEui64Addr, srcEui64Addr, sizeof(Eui64))
 
#define eui64CompAddr(eui64Addr1, eui64Addr2)   (!memcmp(eui64Addr1, eui64Addr2, sizeof(Eui64)))
 

Typedefs

struct {
   union {
      uint8_t   b [6]
 
      uint16_t   w [3]
 
   } 
 
MacAddr
 MAC address. More...
 
struct {
   union {
      uint8_t   b [8]
 
      uint16_t   w [4]
 
      uint32_t   dw [2]
 
   } 
 
Eui64
 EUI-64 identifier. More...
 
struct {
   MacAddr   destAddr
 
   MacAddr   srcAddr
 
   uint16_t   type
 
   uint8_t   data []
 
EthHeader
 Ethernet frame header. More...
 
struct {
   uint16_t   tci
 
   uint16_t   type
 
VlanTag
 VLAN tag. More...
 

Enumerations

enum  MacAddrFlags { MAC_ADDR_FLAG_MULTICAST = 0x01, MAC_ADDR_FLAG_LOCAL = 0x02 }
 MAC address flags. More...
 
enum  EthType {
  ETH_TYPE_IPV4 = 0x0800, ETH_TYPE_ARP = 0x0806, ETH_TYPE_RARP = 0x8035, ETH_TYPE_VLAN = 0x8100,
  ETH_TYPE_IPV6 = 0x86DD, ETH_TYPE_EAPOL = 0x888E, ETH_TYPE_VMAN = 0x88A8
}
 Ethernet Type field. More...
 

Functions

error_t ethInit (NetInterface *interface)
 Ethernet related initialization. More...
 
void ethProcessFrame (NetInterface *interface, uint8_t *frame, size_t length)
 Process an incoming Ethernet frame. More...
 
error_t ethSendFrame (NetInterface *interface, const MacAddr *destAddr, NetBuffer *buffer, size_t offset, uint16_t type)
 Send an Ethernet frame. More...
 
error_t ethPadFrame (NetBuffer *buffer, size_t *length)
 Ethernet frame padding. More...
 
error_t ethCheckDestAddr (NetInterface *interface, const MacAddr *macAddr)
 Destination MAC address filtering. More...
 
error_t ethAcceptMacAddr (NetInterface *interface, const MacAddr *macAddr)
 Add a unicast/multicast address to the MAC filter table. More...
 
error_t ethDropMacAddr (NetInterface *interface, const MacAddr *macAddr)
 Remove a unicast/multicast address from the MAC filter table. More...
 
void ethUpdateInStats (NetInterface *interface, const MacAddr *destMacAddr)
 Update Ethernet input statistics. More...
 
void ethUpdateOutStats (NetInterface *interface, const MacAddr *destMacAddr, size_t length)
 Update Ethernet output statistics. More...
 
void ethUpdateErrorStats (NetInterface *interface, error_t error)
 Update Ethernet error statistics. More...
 
uint32_t ethCalcCrc (const void *data, size_t length)
 Ethernet CRC calculation. More...
 
uint32_t ethCalcCrcEx (const NetBuffer *buffer, size_t offset, size_t length)
 Calculate CRC over a multi-part buffer. More...
 
NetBufferethAllocBuffer (size_t length, size_t *offset)
 Allocate a buffer to hold an Ethernet frame. More...
 
error_t macStringToAddr (const char_t *str, MacAddr *macAddr)
 Convert a string representation of a MAC address to a binary MAC address. More...
 
char_tmacAddrToString (const MacAddr *macAddr, char_t *str)
 Convert a MAC address to a dash delimited string. More...
 
void macAddrToEui64 (const MacAddr *macAddr, Eui64 *interfaceId)
 Map a MAC address to the IPv6 modified EUI-64 identifier. More...
 
void ethDumpHeader (const EthHeader *ethHeader)
 Dump Ethernet header for debugging purpose. More...
 
error_t eui64StringToAddr (const char_t *str, Eui64 *eui64)
 Convert a string representation of an EUI-64 address to a binary EUI-64 address. More...
 
char_teui64AddrToString (const Eui64 *eui64, char_t *str)
 Convert an EUI-64 address to a dash delimited string. More...
 

Variables

const MacAddr MAC_UNSPECIFIED_ADDR
 
const MacAddr MAC_BROADCAST_ADDR
 
const Eui64 EUI64_UNSPECIFIED_ADDR
 
const uint8_t ethPadding [64]
 

Detailed Description

Ethernet.

License

Copyright (C) 2010-2018 Oryx Embedded SARL. All rights reserved.

This file is part of CycloneTCP Open.

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

Author
Oryx Embedded SARL (www.oryx-embedded.com)
Version
1.9.0

Definition in file ethernet.h.

Macro Definition Documentation

◆ ETH_CRC_SIZE

#define ETH_CRC_SIZE   4

Definition at line 84 of file ethernet.h.

◆ ETH_FAST_CRC_SUPPORT

#define ETH_FAST_CRC_SUPPORT   DISABLED

Definition at line 72 of file ethernet.h.

◆ ETH_MAX_FRAME_SIZE

#define ETH_MAX_FRAME_SIZE   1518

Definition at line 80 of file ethernet.h.

◆ ETH_MIN_FRAME_SIZE

#define ETH_MIN_FRAME_SIZE   64

Definition at line 78 of file ethernet.h.

◆ ETH_MTU

#define ETH_MTU   1500

Definition at line 82 of file ethernet.h.

◆ ETH_PORT_TAGGING_SUPPORT

#define ETH_PORT_TAGGING_SUPPORT   DISABLED

Definition at line 58 of file ethernet.h.

◆ ETH_SUPPORT

#define ETH_SUPPORT   ENABLED

Definition at line 37 of file ethernet.h.

◆ ETH_VLAN_SUPPORT

#define ETH_VLAN_SUPPORT   DISABLED

Definition at line 44 of file ethernet.h.

◆ ETH_VMAN_SUPPORT

#define ETH_VMAN_SUPPORT   DISABLED

Definition at line 51 of file ethernet.h.

◆ eui64CompAddr

#define eui64CompAddr (   eui64Addr1,
  eui64Addr2 
)    (!memcmp(eui64Addr1, eui64Addr2, sizeof(Eui64)))

Definition at line 104 of file ethernet.h.

◆ eui64CopyAddr

#define eui64CopyAddr (   destEui64Addr,
  srcEui64Addr 
)    memcpy(destEui64Addr, srcEui64Addr, sizeof(Eui64))

Definition at line 101 of file ethernet.h.

◆ MAC_ADDR_FILTER_SIZE

#define MAC_ADDR_FILTER_SIZE   12

Definition at line 65 of file ethernet.h.

◆ macCompAddr

#define macCompAddr (   macAddr1,
  macAddr2 
)    (!memcmp(macAddr1, macAddr2, sizeof(MacAddr)))

Definition at line 95 of file ethernet.h.

◆ macCopyAddr

#define macCopyAddr (   destMacAddr,
  srcMacAddr 
)    memcpy(destMacAddr, srcMacAddr, sizeof(MacAddr))

Definition at line 92 of file ethernet.h.

◆ macIsMulticastAddr

#define macIsMulticastAddr (   macAddr)    ((macAddr)->b[0] & 0x01)

Definition at line 98 of file ethernet.h.

◆ VLAN_CFI_MASK

#define VLAN_CFI_MASK   0x1000

Definition at line 88 of file ethernet.h.

◆ VLAN_PCP_MASK

#define VLAN_PCP_MASK   0xE000

Definition at line 87 of file ethernet.h.

◆ VLAN_VID_MASK

#define VLAN_VID_MASK   0x0FFF

Definition at line 89 of file ethernet.h.

Typedef Documentation

◆ EthHeader

typedef { ... } EthHeader

Ethernet frame header.

◆ Eui64

typedef { ... } Eui64

EUI-64 identifier.

◆ MacAddr

typedef { ... } MacAddr

MAC address.

◆ VlanTag

typedef { ... } VlanTag

VLAN tag.

Enumeration Type Documentation

◆ EthType

enum EthType

Ethernet Type field.

Enumerator
ETH_TYPE_IPV4 
ETH_TYPE_ARP 
ETH_TYPE_RARP 
ETH_TYPE_VLAN 
ETH_TYPE_IPV6 
ETH_TYPE_EAPOL 
ETH_TYPE_VMAN 

Definition at line 127 of file ethernet.h.

◆ MacAddrFlags

MAC address flags.

Enumerator
MAC_ADDR_FLAG_MULTICAST 
MAC_ADDR_FLAG_LOCAL 

Definition at line 116 of file ethernet.h.

Function Documentation

◆ ethAcceptMacAddr()

error_t ethAcceptMacAddr ( NetInterface interface,
const MacAddr macAddr 
)

Add a unicast/multicast address to the MAC filter table.

Parameters
[in]interfaceUnderlying network interface
[in]macAddrMAC address to accept
Returns
Error code

Definition at line 733 of file ethernet.c.

◆ ethAllocBuffer()

NetBuffer* ethAllocBuffer ( size_t  length,
size_t *  offset 
)

Allocate a buffer to hold an Ethernet frame.

Parameters
[in]lengthDesired payload length
[out]offsetOffset to the first byte of the payload
Returns
The function returns a pointer to the newly allocated buffer. If the system is out of resources, NULL is returned

Definition at line 1107 of file ethernet.c.

◆ ethCalcCrc()

uint32_t ethCalcCrc ( const void *  data,
size_t  length 
)

Ethernet CRC calculation.

Parameters
[in]dataPointer to the data over which to calculate the CRC
[in]lengthNumber of bytes to process
Returns
Resulting CRC value

Definition at line 974 of file ethernet.c.

◆ ethCalcCrcEx()

uint32_t ethCalcCrcEx ( const NetBuffer buffer,
size_t  offset,
size_t  length 
)

Calculate CRC over a multi-part buffer.

Parameters
[in]bufferPointer to the multi-part buffer
[in]offsetOffset from the beginning of the buffer
[in]lengthNumber of bytes to process
Returns
Resulting CRC value

Definition at line 1034 of file ethernet.c.

◆ ethCheckDestAddr()

error_t ethCheckDestAddr ( NetInterface interface,
const MacAddr macAddr 
)

Destination MAC address filtering.

Parameters
[in]interfaceUnderlying network interface
[in]macAddrDestination MAC address to be checked
Returns
Error code

Definition at line 673 of file ethernet.c.

◆ ethDropMacAddr()

error_t ethDropMacAddr ( NetInterface interface,
const MacAddr macAddr 
)

Remove a unicast/multicast address from the MAC filter table.

Parameters
[in]interfaceUnderlying network interface
[in]macAddrMAC address to drop
Returns
Error code

Definition at line 803 of file ethernet.c.

◆ ethDumpHeader()

void ethDumpHeader ( const EthHeader ethHeader)

Dump Ethernet header for debugging purpose.

Parameters
[in]ethHeaderPointer to the Ethernet header

Definition at line 1293 of file ethernet.c.

◆ ethInit()

error_t ethInit ( NetInterface interface)

Ethernet related initialization.

Parameters
[in]interfaceUnderlying network interface
Returns
Error code

Definition at line 150 of file ethernet.c.

◆ ethPadFrame()

error_t ethPadFrame ( NetBuffer buffer,
size_t *  length 
)

Ethernet frame padding.

Parameters
[in]bufferMulti-part buffer containing the Ethernet frame
[in,out]lengthLength of the Ethernet frame, in bytes
Returns
Error code

Definition at line 634 of file ethernet.c.

◆ ethProcessFrame()

void ethProcessFrame ( NetInterface interface,
uint8_t *  frame,
size_t  length 
)

Process an incoming Ethernet frame.

Parameters
[in]interfaceUnderlying network interface
[in]frameIncoming Ethernet frame to process
[in]lengthTotal frame length

Definition at line 168 of file ethernet.c.

◆ ethSendFrame()

error_t ethSendFrame ( NetInterface interface,
const MacAddr destAddr,
NetBuffer buffer,
size_t  offset,
uint16_t  type 
)

Send an Ethernet frame.

Parameters
[in]interfaceUnderlying network interface
[in]destAddrMAC address of the destination host
[in]bufferMulti-part buffer containing the payload
[in]offsetOffset to the first payload byte
[in]typeEthernet type
Returns
Error code

Definition at line 476 of file ethernet.c.

◆ ethUpdateErrorStats()

void ethUpdateErrorStats ( NetInterface interface,
error_t  error 
)

Update Ethernet error statistics.

Parameters
[in]interfaceUnderlying network interface
[in]errorStatus code describing the error

Definition at line 936 of file ethernet.c.

◆ ethUpdateInStats()

void ethUpdateInStats ( NetInterface interface,
const MacAddr destMacAddr 
)

Update Ethernet input statistics.

Parameters
[in]interfaceUnderlying network interface
[in]destMacAddrDestination MAC address

Definition at line 856 of file ethernet.c.

◆ ethUpdateOutStats()

void ethUpdateOutStats ( NetInterface interface,
const MacAddr destMacAddr,
size_t  length 
)

Update Ethernet output statistics.

Parameters
[in]interfaceUnderlying network interface
[in]destMacAddrDestination MAC address
[in]lengthLength of the outgoing Ethernet frame

Definition at line 894 of file ethernet.c.

◆ eui64AddrToString()

char_t* eui64AddrToString ( const Eui64 eui64,
char_t str 
)

Convert an EUI-64 address to a dash delimited string.

Parameters
[in]eui64Pointer to the EUI-64 address
[out]strNULL-terminated string representing the EUI-64 address
Returns
Pointer to the formatted string

Definition at line 1407 of file ethernet.c.

◆ eui64StringToAddr()

error_t eui64StringToAddr ( const char_t str,
Eui64 eui64 
)

Convert a string representation of an EUI-64 address to a binary EUI-64 address.

Parameters
[in]strNULL-terminated string representing the EUI-64 address
[out]eui64Binary representation of the EUI-64 address
Returns
Error code

Definition at line 1315 of file ethernet.c.

◆ macAddrToEui64()

void macAddrToEui64 ( const MacAddr macAddr,
Eui64 interfaceId 
)

Map a MAC address to the IPv6 modified EUI-64 identifier.

Parameters
[in]macAddrHost MAC address
[out]interfaceIdIPv6 modified EUI-64 identifier

Definition at line 1266 of file ethernet.c.

◆ macAddrToString()

char_t* macAddrToString ( const MacAddr macAddr,
char_t str 
)

Convert a MAC address to a dash delimited string.

Parameters
[in]macAddrPointer to the MAC address
[out]strNULL-terminated string representing the MAC address
Returns
Pointer to the formatted string

Definition at line 1243 of file ethernet.c.

◆ macStringToAddr()

error_t macStringToAddr ( const char_t str,
MacAddr macAddr 
)

Convert a string representation of a MAC address to a binary MAC address.

Parameters
[in]strNULL-terminated string representing the MAC address
[out]macAddrBinary representation of the MAC address
Returns
Error code

Definition at line 1151 of file ethernet.c.

Variable Documentation

◆ b

uint8_t b[8]

Definition at line 153 of file ethernet.h.

◆ data

uint8_t data[]

Definition at line 183 of file ethernet.h.

◆ destAddr

MacAddr destAddr

Definition at line 180 of file ethernet.h.

◆ dw

uint32_t dw[2]

Definition at line 169 of file ethernet.h.

◆ ethPadding

const uint8_t ethPadding[64]

Definition at line 58 of file ethernet.c.

◆ EUI64_UNSPECIFIED_ADDR

const Eui64 EUI64_UNSPECIFIED_ADDR

Definition at line 1305 of file ethernet.c.

◆ MAC_BROADCAST_ADDR

const MacAddr MAC_BROADCAST_ADDR

Definition at line 55 of file ethernet.c.

◆ MAC_UNSPECIFIED_ADDR

const MacAddr MAC_UNSPECIFIED_ADDR

Definition at line 53 of file ethernet.c.

◆ srcAddr

MacAddr srcAddr

Definition at line 181 of file ethernet.h.

◆ tci

uint16_t tci

Definition at line 193 of file ethernet.h.

◆ type

uint16_t type

Definition at line 182 of file ethernet.h.

◆ w

uint16_t w[4]

Definition at line 154 of file ethernet.h.