gem5  v20.0.0.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
Classes | Public Member Functions | Protected Member Functions | Protected Attributes | Private Attributes | List of all members
EtherSwitch::Interface Class Reference

Model for an Ethernet switch port. More...

#include <etherswitch.hh>

Inheritance diagram for EtherSwitch::Interface:
EtherInt Serializable Port

Classes

class  PortFifo
 
struct  PortFifoEntry
 

Public Member Functions

 Interface (const std::string &name, EtherSwitch *_etherSwitch, uint64_t outputBufferSize, Tick delay, Tick delay_var, double rate, unsigned id)
 
bool recvPacket (EthPacketPtr packet)
 When a packet is received from a device, route it through an (several) output queue(s) More...
 
void enqueue (EthPacketPtr packet, unsigned senderId)
 enqueue packet to the outputFifo More...
 
void sendDone ()
 
Tick switchingDelay ()
 
InterfacelookupDestPort (Net::EthAddr destAddr)
 
void learnSenderAddr (Net::EthAddr srcMacAddr, Interface *sender)
 
void serialize (CheckpointOut &cp) const
 Serialize an object. More...
 
void unserialize (CheckpointIn &cp)
 Unserialize an object. More...
 
- Public Member Functions inherited from EtherInt
 EtherInt (const std::string &name, int idx=InvalidPortID)
 
virtual ~EtherInt ()
 
const std::string & name () const
 Return port name (for DPRINTF). More...
 
void bind (Port &peer) override
 Attach to a peer port. More...
 
void unbind () override
 Dettach from a peer port. More...
 
void setPeer (EtherInt *p)
 
EtherIntgetPeer ()
 
void recvDone ()
 
bool sendPacket (EthPacketPtr packet)
 
bool askBusy ()
 
virtual bool isBusy ()
 
- Public Member Functions inherited from Port
virtual ~Port ()
 Virtual destructor due to inheritance. More...
 
PortgetPeer ()
 Return a reference to this port's peer. More...
 
const std::string name () const
 Return port name (for DPRINTF). More...
 
PortID getId () const
 Get the port id. More...
 
bool isConnected () const
 Is this port currently connected to a peer? More...
 
void takeOverFrom (Port *old)
 A utility function to make it easier to swap out ports. More...
 
- Public Member Functions inherited from Serializable
 Serializable ()
 
virtual ~Serializable ()
 
void serializeSection (CheckpointOut &cp, const char *name) const
 Serialize an object into a new section. More...
 
void serializeSection (CheckpointOut &cp, const std::string &name) const
 
void unserializeSection (CheckpointIn &cp, const char *name)
 Unserialize an a child object. More...
 
void unserializeSection (CheckpointIn &cp, const std::string &name)
 

Protected Member Functions

void transmit ()
 
- Protected Member Functions inherited from Port
 Port (const std::string &_name, PortID _id)
 Abstract base class for ports. More...
 

Protected Attributes

PortFifo outputFifo
 output fifo at each interface More...
 
EventFunctionWrapper txEvent
 
- Protected Attributes inherited from EtherInt
std::string portName
 
EtherIntpeer
 
- Protected Attributes inherited from Port
const PortID id
 A numeric identifier to distinguish ports in a vector, and set to InvalidPortID in case this port is not part of a vector. More...
 
Port_peer
 A pointer to this port's peer. More...
 
bool _connected
 Whether this port is currently connected to a peer port. More...
 

Private Attributes

const double ticksPerByte
 
const Tick switchDelay
 
const Tick delayVar
 
const unsigned interfaceId
 
EtherSwitchparent
 

Additional Inherited Members

- Static Public Member Functions inherited from Serializable
static const std::string & currentSection ()
 Gets the fully-qualified name of the active section. More...
 
static void serializeAll (const std::string &cpt_dir)
 
static void unserializeGlobals (CheckpointIn &cp)
 

Detailed Description

Model for an Ethernet switch port.

Definition at line 68 of file etherswitch.hh.

Constructor & Destructor Documentation

◆ Interface()

EtherSwitch::Interface::Interface ( const std::string &  name,
EtherSwitch _etherSwitch,
uint64_t  outputBufferSize,
Tick  delay,
Tick  delay_var,
double  rate,
unsigned  id 
)

Definition at line 124 of file etherswitch.cc.

References EtherInt::name(), and transmit().

Member Function Documentation

◆ enqueue()

void EtherSwitch::Interface::enqueue ( EthPacketPtr  packet,
unsigned  senderId 
)

enqueue packet to the outputFifo

Definition at line 163 of file etherswitch.cc.

References curTick(), outputFifo, parent, EtherSwitch::Interface::PortFifo::push(), EventManager::reschedule(), switchingDelay(), and txEvent.

Referenced by recvPacket().

◆ learnSenderAddr()

void EtherSwitch::Interface::learnSenderAddr ( Net::EthAddr  srcMacAddr,
Interface sender 
)

◆ lookupDestPort()

EtherSwitch::Interface * EtherSwitch::Interface::lookupDestPort ( Net::EthAddr  destAddr)

Definition at line 211 of file etherswitch.cc.

References curTick(), DPRINTF, EtherSwitch::forwardingTable, parent, and EtherSwitch::ttl.

Referenced by recvPacket(), and sendDone().

◆ recvPacket()

bool EtherSwitch::Interface::recvPacket ( EthPacketPtr  packet)
virtual

When a packet is received from a device, route it through an (several) output queue(s)

Implements EtherInt.

Definition at line 136 of file etherswitch.cc.

References Net::EthAddr::broadcast(), DPRINTF, enqueue(), interfaceId, EtherSwitch::interfaces, learnSenderAddr(), lookupDestPort(), Net::EthAddr::multicast(), EtherInt::name(), and parent.

◆ sendDone()

void EtherSwitch::Interface::sendDone ( )
inlinevirtual

Implements EtherInt.

Definition at line 83 of file etherswitch.hh.

References learnSenderAddr(), lookupDestPort(), serialize(), switchingDelay(), and unserialize().

◆ serialize()

void EtherSwitch::Interface::serialize ( CheckpointOut cp) const
virtual

Serialize an object.

Output an object's state into the current checkpoint section.

Parameters
cpCheckpoint state

Implements Serializable.

Definition at line 274 of file etherswitch.cc.

References outputFifo, Event::scheduled(), SERIALIZE_SCALAR, Serializable::serializeSection(), txEvent, and Event::when().

Referenced by sendDone().

◆ switchingDelay()

Tick EtherSwitch::Interface::switchingDelay ( )

◆ transmit()

void EtherSwitch::Interface::transmit ( )
protected

◆ unserialize()

void EtherSwitch::Interface::unserialize ( CheckpointIn cp)
virtual

Unserialize an object.

Read an object's state from the current checkpoint section.

Parameters
cpCheckpoint state

Implements Serializable.

Definition at line 287 of file etherswitch.cc.

References outputFifo, parent, EventManager::schedule(), txEvent, UNSERIALIZE_SCALAR, and Serializable::unserializeSection().

Referenced by sendDone().

Member Data Documentation

◆ delayVar

const Tick EtherSwitch::Interface::delayVar
private

Definition at line 95 of file etherswitch.hh.

Referenced by switchingDelay().

◆ interfaceId

const unsigned EtherSwitch::Interface::interfaceId
private

Definition at line 96 of file etherswitch.hh.

Referenced by recvPacket().

◆ outputFifo

PortFifo EtherSwitch::Interface::outputFifo
protected

output fifo at each interface

Definition at line 171 of file etherswitch.hh.

Referenced by enqueue(), serialize(), switchingDelay(), transmit(), and unserialize().

◆ parent

EtherSwitch* EtherSwitch::Interface::parent
private

◆ switchDelay

const Tick EtherSwitch::Interface::switchDelay
private

Definition at line 94 of file etherswitch.hh.

Referenced by switchingDelay().

◆ ticksPerByte

const double EtherSwitch::Interface::ticksPerByte
private

Definition at line 93 of file etherswitch.hh.

Referenced by switchingDelay().

◆ txEvent

EventFunctionWrapper EtherSwitch::Interface::txEvent
protected

Definition at line 173 of file etherswitch.hh.

Referenced by enqueue(), serialize(), transmit(), and unserialize().


The documentation for this class was generated from the following files:

Generated on Thu May 28 2020 16:21:44 for gem5 by doxygen 1.8.13