TEMU  4.4
The Terma Emulator
Ethernet.h File Reference
#include "temu-c/Support/Bitmanip.h"
#include "temu-c/Support/Buffer.h"
#include "temu-c/Support/Objsys.h"
#include <stdint.h>
Include dependency graph for Ethernet.h:

Go to the source code of this file.

Data Structures

struct  temu_EthFrame
 
struct  temu_MACIface
 
struct  temu_PHYIface
 
struct  temu_EthernetIface
 
struct  temu_MDIOIface
 
struct  temu_EthDelayIface
 

Macros

#define TEMU_ETH_CRC_ERR   1
 
#define TEMU_ETH_ETH_CRC_NOT_SET   (1 << 1)
 
#define TEMU_ETH_IP_CRC_NOT_SET   (1 << 2)
 
#define TEMU_ETH_UDP_CRC_NOT_SET   (1 << 3)
 
#define TEMU_ETH_TCP_CRC_NOT_SET   (1 << 4)
 
#define TEMU_ETH_NON_STANDARD_PREAMBLE   (1 << 5)
 
#define TEMU_ETH_PREAMBLE_LENGTH_MASK   (0xf << 6)
 
#define TEMU_ETH_PREAMBLE_LENGTH_SHIFT   6
 
#define TEMU_MAC_IFACE_TYPE   "temu::MACIface"
 
#define TEMU_PHY_IFACE_TYPE   "temu::PHYIface"
 
#define TEMU_ETH_100BASE_T4   (1 << (15 - 8))
 
#define TEMU_ETH_100BASE_X_FD   (1 << (14 - 8))
 
#define TEMU_ETH_100BASE_X_HD   (1 << (13 - 8))
 
#define TEMU_ETH_10BASE_FD   (1 << (12 - 8))
 
#define TEMU_ETH_10BASE_HD   (1 << (11 - 8))
 
#define TEMU_ETH_100BASE_T2_FD   (1 << (10 - 8))
 
#define TEMU_ETH_100BASE_T2_HD   (1 << (9 - 8))
 
#define TEMU_ETH_1000BASE_X_FD   (1 << 15)
 
#define TEMU_ETH_1000BASE_X_HD   (1 << 14)
 
#define TEMU_ETH_1000BASE_T_FD   (1 << 13)
 
#define TEMU_ETH_1000BASE_T_HD   (1 << 12)
 
#define TEMU_ETHERNET_IFACE_TYPE   "temu::EthernetIface"
 
#define TEMU_MDIO_IFACE_TYPE   "temu::MDIOIface"
 
#define TEMU_ETH_DELAY_IFACE_TYPE   "temu::EthDelayIface"
 
#define TEMU_ETH_MIN_PAYLOAD   46
 
#define TEMU_ETH_MAX_PAYLOAD   1500
 
#define TEMU_ETH_LAYER1_HEADER_LENGTH   (7 + 1 + 12 + 2)
 
#define TEMU_ETH_LAYER2_HEADER_LENGTH   (6 + 6 + 2)
 
#define TEMU_ETH_CRC_LENGTH   4
 
#define TEMU_ETH_INTERPACKET_GAP   12
 
#define TEMU_ETH_PAYLOAD_OFFSET   (6 + 6 + 2)
 
#define TEMU_ETH_MAX_FRAME_LENGTH   1518
 
#define TEMU_ETH_802_1Q_TAG_BYTES   4
 
#define TEMU_ETH_802_1Q_MAX_FRAME_LENGTH   1522
 
#define TEMU_ETHTYPE_IPV4   0x0800
 
#define TEMU_ETHTYPE_ARP   0x0806
 
#define TEMU_ETHTYPE_WAKE_ON_LAN   0x0842
 
#define TEMU_ETHTYPE_SRP   0x22ea
 
#define TEMU_ETHTYPE_RARP   0x8035
 
#define TEMU_ETHTYPE_802_1Q   0x8100
 
#define TEMU_ETHTYPE_IPV6   0x86dd
 
#define TEMU_ETHTYPE_PTP   0x88f7
 
#define TEMU_ETHTYPE_TTE_CTRL   0x891d
 
#define TEMU_ETH_IPV4_VERS_IHL_OFFSET   (TEMU_ETH_PAYLOAD_OFFSET + 0)
 
#define TEMU_ETH_IPV4_DSCP_ECN_OFFSET   (TEMU_ETH_PAYLOAD_OFFSET + 1)
 
#define TEMU_ETH_IPV4_TOTAL_LENGTH_OFFSET   (TEMU_ETH_PAYLOAD_OFFSET + 2)
 
#define TEMU_ETH_IPV4_FRAGMENTATION_INFO_OFFSET   (TEMU_ETH_PAYLOAD_OFFSET + 6)
 
#define TEMU_ETH_IPV4_TTL_OFFSET   (TEMU_ETH_PAYLOAD_OFFSET + 8)
 
#define TEMU_ETH_IPV4_PROTOCOL_OFFSET   (TEMU_ETH_PAYLOAD_OFFSET + 9)
 
#define TEMU_ETH_IPV4_CRC_OFFSET   (TEMU_ETH_PAYLOAD_OFFSET + 10)
 
#define TEMU_ETH_IPV4_SRC_IP_OFFSET   (TEMU_ETH_PAYLOAD_OFFSET + 12)
 
#define TEMU_ETH_IPV4_DST_IP_OFFSET   (TEMU_ETH_PAYLOAD_OFFSET + 16)
 
#define TEMU_IP_PROT_TCP   0x06
 
#define TEMU_IP_PROT_UDP   0x11
 
#define TEMU_TCP_CRC_OFFSET   16
 
#define TEMU_UDP_CRC_OFFSET   6
 
#define ETH_BCAST_ADDR   UINT64_C(0xffffffffffff)
 
#define ETH_ETHERTYPE_MIN   1536
 
#define ETH_CRC_MAGIC   0xC704DD7B
 
#define ETH_CRC_POLY_NORM   0x04C11DB7
 
#define ETH_CRC_POLY_REV   0xEDB88320
 
#define ETH_CRC_POLY_REV_RECIP   0x82608EDB
 
#define ETH_CRC_POLY_LE   0xedb88320
 
#define ETH_CRC_POLY_BE   0x04c11db6
 

Typedefs

typedef struct temu_PHYIface temu_PHYIface
 
typedef struct temu_MACIface temu_MACIface
 
typedef struct temu_EthernetIface temu_EthernetIface
 

Functions

 TEMU_IFACE_REFERENCE_TYPE (temu_MAC)
 
 TEMU_IFACE_REFERENCE_TYPE (temu_PHY)
 
 TEMU_IFACE_REFERENCE_TYPE (temu_Ethernet)
 
 TEMU_IFACE_REFERENCE_TYPE (temu_MDIO)
 

Macro Definition Documentation

◆ ETH_BCAST_ADDR

#define ETH_BCAST_ADDR   UINT64_C(0xffffffffffff)

◆ ETH_CRC_MAGIC

#define ETH_CRC_MAGIC   0xC704DD7B

◆ ETH_CRC_POLY_BE

#define ETH_CRC_POLY_BE   0x04c11db6

◆ ETH_CRC_POLY_LE

#define ETH_CRC_POLY_LE   0xedb88320

◆ ETH_CRC_POLY_NORM

#define ETH_CRC_POLY_NORM   0x04C11DB7

◆ ETH_CRC_POLY_REV

#define ETH_CRC_POLY_REV   0xEDB88320

◆ ETH_CRC_POLY_REV_RECIP

#define ETH_CRC_POLY_REV_RECIP   0x82608EDB

◆ ETH_ETHERTYPE_MIN

#define ETH_ETHERTYPE_MIN   1536

◆ TEMU_ETH_1000BASE_T_FD

#define TEMU_ETH_1000BASE_T_FD   (1 << 13)

◆ TEMU_ETH_1000BASE_T_HD

#define TEMU_ETH_1000BASE_T_HD   (1 << 12)

◆ TEMU_ETH_1000BASE_X_FD

#define TEMU_ETH_1000BASE_X_FD   (1 << 15)

◆ TEMU_ETH_1000BASE_X_HD

#define TEMU_ETH_1000BASE_X_HD   (1 << 14)

◆ TEMU_ETH_100BASE_T2_FD

#define TEMU_ETH_100BASE_T2_FD   (1 << (10 - 8))

◆ TEMU_ETH_100BASE_T2_HD

#define TEMU_ETH_100BASE_T2_HD   (1 << (9 - 8))

◆ TEMU_ETH_100BASE_T4

#define TEMU_ETH_100BASE_T4   (1 << (15 - 8))

◆ TEMU_ETH_100BASE_X_FD

#define TEMU_ETH_100BASE_X_FD   (1 << (14 - 8))

◆ TEMU_ETH_100BASE_X_HD

#define TEMU_ETH_100BASE_X_HD   (1 << (13 - 8))

◆ TEMU_ETH_10BASE_FD

#define TEMU_ETH_10BASE_FD   (1 << (12 - 8))

◆ TEMU_ETH_10BASE_HD

#define TEMU_ETH_10BASE_HD   (1 << (11 - 8))

◆ TEMU_ETH_802_1Q_MAX_FRAME_LENGTH

#define TEMU_ETH_802_1Q_MAX_FRAME_LENGTH   1522

◆ TEMU_ETH_802_1Q_TAG_BYTES

#define TEMU_ETH_802_1Q_TAG_BYTES   4

◆ TEMU_ETH_CRC_ERR

#define TEMU_ETH_CRC_ERR   1

◆ TEMU_ETH_CRC_LENGTH

#define TEMU_ETH_CRC_LENGTH   4

◆ TEMU_ETH_DELAY_IFACE_TYPE

#define TEMU_ETH_DELAY_IFACE_TYPE   "temu::EthDelayIface"

◆ TEMU_ETH_ETH_CRC_NOT_SET

#define TEMU_ETH_ETH_CRC_NOT_SET   (1 << 1)

◆ TEMU_ETH_INTERPACKET_GAP

#define TEMU_ETH_INTERPACKET_GAP   12

◆ TEMU_ETH_IP_CRC_NOT_SET

#define TEMU_ETH_IP_CRC_NOT_SET   (1 << 2)

◆ TEMU_ETH_IPV4_CRC_OFFSET

#define TEMU_ETH_IPV4_CRC_OFFSET   (TEMU_ETH_PAYLOAD_OFFSET + 10)

◆ TEMU_ETH_IPV4_DSCP_ECN_OFFSET

#define TEMU_ETH_IPV4_DSCP_ECN_OFFSET   (TEMU_ETH_PAYLOAD_OFFSET + 1)

◆ TEMU_ETH_IPV4_DST_IP_OFFSET

#define TEMU_ETH_IPV4_DST_IP_OFFSET   (TEMU_ETH_PAYLOAD_OFFSET + 16)

◆ TEMU_ETH_IPV4_FRAGMENTATION_INFO_OFFSET

#define TEMU_ETH_IPV4_FRAGMENTATION_INFO_OFFSET   (TEMU_ETH_PAYLOAD_OFFSET + 6)

◆ TEMU_ETH_IPV4_PROTOCOL_OFFSET

#define TEMU_ETH_IPV4_PROTOCOL_OFFSET   (TEMU_ETH_PAYLOAD_OFFSET + 9)

◆ TEMU_ETH_IPV4_SRC_IP_OFFSET

#define TEMU_ETH_IPV4_SRC_IP_OFFSET   (TEMU_ETH_PAYLOAD_OFFSET + 12)

◆ TEMU_ETH_IPV4_TOTAL_LENGTH_OFFSET

#define TEMU_ETH_IPV4_TOTAL_LENGTH_OFFSET   (TEMU_ETH_PAYLOAD_OFFSET + 2)

◆ TEMU_ETH_IPV4_TTL_OFFSET

#define TEMU_ETH_IPV4_TTL_OFFSET   (TEMU_ETH_PAYLOAD_OFFSET + 8)

◆ TEMU_ETH_IPV4_VERS_IHL_OFFSET

#define TEMU_ETH_IPV4_VERS_IHL_OFFSET   (TEMU_ETH_PAYLOAD_OFFSET + 0)

◆ TEMU_ETH_LAYER1_HEADER_LENGTH

#define TEMU_ETH_LAYER1_HEADER_LENGTH   (7 + 1 + 12 + 2)

◆ TEMU_ETH_LAYER2_HEADER_LENGTH

#define TEMU_ETH_LAYER2_HEADER_LENGTH   (6 + 6 + 2)

◆ TEMU_ETH_MAX_FRAME_LENGTH

#define TEMU_ETH_MAX_FRAME_LENGTH   1518

◆ TEMU_ETH_MAX_PAYLOAD

#define TEMU_ETH_MAX_PAYLOAD   1500

◆ TEMU_ETH_MIN_PAYLOAD

#define TEMU_ETH_MIN_PAYLOAD   46

◆ TEMU_ETH_NON_STANDARD_PREAMBLE

#define TEMU_ETH_NON_STANDARD_PREAMBLE   (1 << 5)

◆ TEMU_ETH_PAYLOAD_OFFSET

#define TEMU_ETH_PAYLOAD_OFFSET   (6 + 6 + 2)

◆ TEMU_ETH_PREAMBLE_LENGTH_MASK

#define TEMU_ETH_PREAMBLE_LENGTH_MASK   (0xf << 6)

◆ TEMU_ETH_PREAMBLE_LENGTH_SHIFT

#define TEMU_ETH_PREAMBLE_LENGTH_SHIFT   6

◆ TEMU_ETH_TCP_CRC_NOT_SET

#define TEMU_ETH_TCP_CRC_NOT_SET   (1 << 4)

◆ TEMU_ETH_UDP_CRC_NOT_SET

#define TEMU_ETH_UDP_CRC_NOT_SET   (1 << 3)

◆ TEMU_ETHERNET_IFACE_TYPE

#define TEMU_ETHERNET_IFACE_TYPE   "temu::EthernetIface"

◆ TEMU_ETHTYPE_802_1Q

#define TEMU_ETHTYPE_802_1Q   0x8100

◆ TEMU_ETHTYPE_ARP

#define TEMU_ETHTYPE_ARP   0x0806

◆ TEMU_ETHTYPE_IPV4

#define TEMU_ETHTYPE_IPV4   0x0800

◆ TEMU_ETHTYPE_IPV6

#define TEMU_ETHTYPE_IPV6   0x86dd

◆ TEMU_ETHTYPE_PTP

#define TEMU_ETHTYPE_PTP   0x88f7

◆ TEMU_ETHTYPE_RARP

#define TEMU_ETHTYPE_RARP   0x8035

◆ TEMU_ETHTYPE_SRP

#define TEMU_ETHTYPE_SRP   0x22ea

◆ TEMU_ETHTYPE_TTE_CTRL

#define TEMU_ETHTYPE_TTE_CTRL   0x891d

◆ TEMU_ETHTYPE_WAKE_ON_LAN

#define TEMU_ETHTYPE_WAKE_ON_LAN   0x0842

◆ TEMU_IP_PROT_TCP

#define TEMU_IP_PROT_TCP   0x06

◆ TEMU_IP_PROT_UDP

#define TEMU_IP_PROT_UDP   0x11

◆ TEMU_MAC_IFACE_TYPE

#define TEMU_MAC_IFACE_TYPE   "temu::MACIface"

◆ TEMU_MDIO_IFACE_TYPE

#define TEMU_MDIO_IFACE_TYPE   "temu::MDIOIface"

◆ TEMU_PHY_IFACE_TYPE

#define TEMU_PHY_IFACE_TYPE   "temu::PHYIface"

◆ TEMU_TCP_CRC_OFFSET

#define TEMU_TCP_CRC_OFFSET   16

◆ TEMU_UDP_CRC_OFFSET

#define TEMU_UDP_CRC_OFFSET   6

Typedef Documentation

◆ temu_EthernetIface

◆ temu_MACIface

typedef struct temu_MACIface temu_MACIface

◆ temu_PHYIface

typedef struct temu_PHYIface temu_PHYIface

Function Documentation

◆ TEMU_IFACE_REFERENCE_TYPE() [1/4]

TEMU_IFACE_REFERENCE_TYPE ( temu_Ethernet  )

◆ TEMU_IFACE_REFERENCE_TYPE() [2/4]

TEMU_IFACE_REFERENCE_TYPE ( temu_MAC  )

◆ TEMU_IFACE_REFERENCE_TYPE() [3/4]

TEMU_IFACE_REFERENCE_TYPE ( temu_MDIO  )

◆ TEMU_IFACE_REFERENCE_TYPE() [4/4]

TEMU_IFACE_REFERENCE_TYPE ( temu_PHY  )