INET Framework for OMNeT++/OMNEST
inet::MacRelayUnitBase Class Reference

#include <MacRelayUnitBase.h>

Inheritance diagram for inet::MacRelayUnitBase:
inet::LayeredProtocolBase inet::StringFormat::IDirectiveResolver inet::OperationalBase inet::OperationalMixin< cSimpleModule > inet::ILifecycle inet::Ieee8021dRelay inet::MacRelayUnit

Protected Member Functions

virtual void initialize (int stage) override
 
virtual void finish () override
 
virtual void updateDisplayString () const
 
virtual const char * resolveDirective (char directive) const override
 
virtual bool isForwardingInterface (NetworkInterface *networkInterface) const
 
virtual void broadcastPacket (Packet *packet, const MacAddress &destinationAddress, NetworkInterface *incomingInterface)
 
virtual void sendPacket (Packet *packet, const MacAddress &destinationAddress, NetworkInterface *outgoingInterface)
 
virtual void updatePeerAddress (NetworkInterface *incomingInterface, MacAddress sourceAddress, unsigned int vlanId)
 
virtual void handleStartOperation (LifecycleOperation *operation) override
 
virtual void handleStopOperation (LifecycleOperation *operation) override
 
virtual void handleCrashOperation (LifecycleOperation *operation) override
 
virtual bool isUpperMessage (cMessage *message) const override
 
virtual bool isLowerMessage (cMessage *message) const override
 
virtual bool isInitializeStage (int stage) const override
 
virtual bool isModuleStartStage (int stage) const override
 
virtual bool isModuleStopStage (int stage) const override
 
- Protected Member Functions inherited from inet::LayeredProtocolBase
virtual void handleMessageWhenUp (cMessage *message) override
 
virtual void handleSelfMessage (cMessage *message)
 
virtual void handleUpperMessage (cMessage *message)
 
virtual void handleLowerMessage (cMessage *message)
 
virtual void handleUpperCommand (cMessage *message)
 
virtual void handleLowerCommand (cMessage *message)
 
virtual void handleUpperPacket (Packet *packet)
 
virtual void handleLowerPacket (Packet *packet)
 
- Protected Member Functions inherited from inet::OperationalMixin< cSimpleModule >
virtual int numInitStages () const override
 
virtual void refreshDisplay () const override
 
virtual void handleMessage (cMessage *msg) override
 
virtual void handleMessageWhenDown (cMessage *msg)
 
virtual bool handleOperationStage (LifecycleOperation *operation, IDoneCallback *doneCallback) override
 Perform one stage of a lifecycle operation. More...
 
virtual State getInitialOperationalState () const
 Returns initial operational state: OPERATING or NOT_OPERATING. More...
 
virtual void handleActiveOperationTimeout (cMessage *message)
 
virtual bool isUp () const
 utility functions More...
 
virtual bool isDown () const
 
virtual void setOperationalState (State newState)
 
virtual void scheduleOperationTimeout (simtime_t timeout)
 
virtual void setupActiveOperation (LifecycleOperation *operation, IDoneCallback *doneCallback, State)
 
virtual void delayActiveOperationFinish (simtime_t timeout)
 
virtual void startActiveOperationExtraTime (simtime_t delay=SIMTIME_ZERO)
 
virtual void startActiveOperationExtraTimeOrFinish (simtime_t extraTime)
 
virtual void finishActiveOperation ()
 

Protected Attributes

ModuleRefByPar< IInterfaceTableinterfaceTable
 
ModuleRefByPar< IMacForwardingTablemacForwardingTable
 
long numProcessedFrames = 0
 
long numDroppedFrames = 0
 
- Protected Attributes inherited from inet::OperationalMixin< cSimpleModule >
State operationalState
 
simtime_t lastChange
 
Operation activeOperation
 
cMessage * activeOperationTimeout
 
cMessage * activeOperationExtraTimer
 

Additional Inherited Members

- Public Member Functions inherited from inet::OperationalMixin< cSimpleModule >
virtual ~OperationalMixin ()
 }@ More...
 
- Public Member Functions inherited from inet::ILifecycle
virtual ~ILifecycle ()
 
- Protected Types inherited from inet::OperationalMixin< cSimpleModule >
enum  State
 

Member Function Documentation

◆ broadcastPacket()

void inet::MacRelayUnitBase::broadcastPacket ( Packet packet,
const MacAddress destinationAddress,
NetworkInterface incomingInterface 
)
protectedvirtual
62 {
63  if (incomingInterface == nullptr)
64  EV_INFO << "Broadcasting packet to all interfaces" << EV_FIELD(destinationAddress) << EV_FIELD(outgoingPacket) << EV_ENDL;
65  else
66  EV_INFO << "Broadcasting packet to all interfaces except incoming interface" << EV_FIELD(destinationAddress) << EV_FIELD(incomingInterface) << EV_FIELD(outgoingPacket) << EV_ENDL;
67  for (int i = 0; i < interfaceTable->getNumInterfaces(); i++) {
68  auto outgoingInterface = interfaceTable->getInterface(i);
69  if (incomingInterface != outgoingInterface && isForwardingInterface(outgoingInterface))
70  sendPacket(outgoingPacket->dup(), destinationAddress, outgoingInterface);
71  }
72  delete outgoingPacket;
73 }

Referenced by inet::MacRelayUnit::handleLowerPacket(), inet::Ieee8021dRelay::handleLowerPacket(), and inet::Ieee8021dRelay::handleUpperPacket().

◆ finish()

void inet::MacRelayUnitBase::finish ( )
overrideprotectedvirtual

Reimplemented in inet::Ieee8021dRelay.

98 {
99  recordScalar("processed frames", numProcessedFrames);
100  recordScalar("discarded frames", numDroppedFrames);
101 }

Referenced by inet::Ieee8021dRelay::finish().

◆ handleCrashOperation()

virtual void inet::MacRelayUnitBase::handleCrashOperation ( LifecycleOperation operation)
inlineoverrideprotectedvirtual

Implements inet::OperationalMixin< cSimpleModule >.

Reimplemented in inet::Ieee8021dRelay.

44 {}

◆ handleStartOperation()

virtual void inet::MacRelayUnitBase::handleStartOperation ( LifecycleOperation operation)
inlineoverrideprotectedvirtual

Implements inet::OperationalMixin< cSimpleModule >.

Reimplemented in inet::Ieee8021dRelay.

42 {}

◆ handleStopOperation()

virtual void inet::MacRelayUnitBase::handleStopOperation ( LifecycleOperation operation)
inlineoverrideprotectedvirtual

Implements inet::OperationalMixin< cSimpleModule >.

Reimplemented in inet::Ieee8021dRelay.

43 {}

◆ initialize()

void inet::MacRelayUnitBase::initialize ( int  stage)
overrideprotectedvirtual

Reimplemented from inet::OperationalMixin< cSimpleModule >.

Reimplemented in inet::Ieee8021dRelay.

22 {
24  if (stage == INITSTAGE_LOCAL) {
25  macForwardingTable.reference(this, "macTableModule", true);
26  interfaceTable.reference(this, "interfaceTableModule", true);
28  WATCH(numProcessedFrames);
29  WATCH(numDroppedFrames);
30  }
31  else if (stage == INITSTAGE_NETWORK_LAYER) {
32  registerAnyService(gate("upperLayerIn"), gate("upperLayerOut"));
33  registerAnyProtocol(gate("lowerLayerOut"), gate("lowerLayerIn"));
34  }
35 }

Referenced by inet::Ieee8021dRelay::initialize().

◆ isForwardingInterface()

virtual bool inet::MacRelayUnitBase::isForwardingInterface ( NetworkInterface networkInterface) const
inlineprotectedvirtual

Reimplemented in inet::Ieee8021dRelay.

36 { return !networkInterface->isLoopback() && networkInterface->isBroadcast(); }

Referenced by broadcastPacket(), and inet::Ieee8021dRelay::isForwardingInterface().

◆ isInitializeStage()

virtual bool inet::MacRelayUnitBase::isInitializeStage ( int  stage) const
inlineoverrideprotectedvirtual

Implements inet::OperationalMixin< cSimpleModule >.

48 { return stage == INITSTAGE_LINK_LAYER; }

◆ isLowerMessage()

virtual bool inet::MacRelayUnitBase::isLowerMessage ( cMessage *  message) const
inlineoverrideprotectedvirtual

Implements inet::LayeredProtocolBase.

46 { return message->arrivedOn("lowerLayerIn"); }

◆ isModuleStartStage()

virtual bool inet::MacRelayUnitBase::isModuleStartStage ( int  stage) const
inlineoverrideprotectedvirtual

◆ isModuleStopStage()

virtual bool inet::MacRelayUnitBase::isModuleStopStage ( int  stage) const
inlineoverrideprotectedvirtual

◆ isUpperMessage()

virtual bool inet::MacRelayUnitBase::isUpperMessage ( cMessage *  message) const
inlineoverrideprotectedvirtual

Implements inet::LayeredProtocolBase.

45 { return message->arrivedOn("upperLayerIn"); }

◆ resolveDirective()

const char * inet::MacRelayUnitBase::resolveDirective ( char  directive) const
overrideprotectedvirtual

Implements inet::StringFormat::IDirectiveResolver.

38 {
39  static std::string result;
40  switch (directive) {
41  case 'p':
42  result = std::to_string(numProcessedFrames);
43  break;
44  case 'd':
45  result = std::to_string(numDroppedFrames);
46  break;
47  default:
48  throw cRuntimeError("Unknown directive: %c", directive);
49  }
50  return result.c_str();
51 }

◆ sendPacket()

void inet::MacRelayUnitBase::sendPacket ( Packet packet,
const MacAddress destinationAddress,
NetworkInterface outgoingInterface 
)
protectedvirtual
76 {
77  EV_INFO << "Sending packet to peer" << EV_FIELD(destinationAddress) << EV_FIELD(outgoingInterface) << EV_FIELD(packet) << EV_ENDL;
78  packet->addTagIfAbsent<DirectionTag>()->setDirection(DIRECTION_OUTBOUND);
79  packet->addTagIfAbsent<InterfaceReq>()->setInterfaceId(outgoingInterface->getInterfaceId());
80  auto protocol = outgoingInterface->getProtocol();
81  if (protocol != nullptr)
82  packet->addTagIfAbsent<DispatchProtocolReq>()->setProtocol(protocol);
83  else
84  packet->removeTagIfPresent<DispatchProtocolReq>();
85  emit(packetSentToLowerSignal, packet);
86  send(packet, "lowerLayerOut");
87 }

Referenced by broadcastPacket(), inet::MacRelayUnit::handleLowerPacket(), inet::Ieee8021dRelay::handleLowerPacket(), and inet::Ieee8021dRelay::handleUpperPacket().

◆ updateDisplayString()

void inet::MacRelayUnitBase::updateDisplayString ( ) const
protectedvirtual
54 {
55  if (getEnvir()->isGUI()) {
56  auto text = StringFormat::formatString(par("displayStringTextFormat"), this);
57  getDisplayString().setTagArg("t", 0, text);
58  }
59 }

Referenced by inet::MacRelayUnit::handleLowerPacket(), and inet::Ieee8021dRelay::handleLowerPacket().

◆ updatePeerAddress()

void inet::MacRelayUnitBase::updatePeerAddress ( NetworkInterface incomingInterface,
MacAddress  sourceAddress,
unsigned int  vlanId 
)
protectedvirtual

Reimplemented in inet::Ieee8021dRelay.

90 {
91  if (!sourceAddress.isMulticast()) {
92  EV_INFO << "Learning peer address" << EV_FIELD(sourceAddress) << EV_FIELD(incomingInterface) << EV_ENDL;
93  macForwardingTable->learnUnicastAddressForwardingInterface(incomingInterface->getInterfaceId(), sourceAddress, vlanId);
94  }
95 }

Referenced by inet::MacRelayUnit::handleLowerPacket(), and inet::Ieee8021dRelay::updatePeerAddress().

Member Data Documentation

◆ interfaceTable

◆ macForwardingTable

◆ numDroppedFrames

◆ numProcessedFrames

long inet::MacRelayUnitBase::numProcessedFrames = 0
protected

The documentation for this class was generated from the following files:
inet::MacRelayUnitBase::isForwardingInterface
virtual bool isForwardingInterface(NetworkInterface *networkInterface) const
Definition: MacRelayUnitBase.h:36
inet::DIRECTION_OUTBOUND
@ DIRECTION_OUTBOUND
Definition: DirectionTag_m.h:58
protocol
removed DscpReq Ipv4ControlInfo Ipv6ControlInfo up L3AddressInd DispatchProtocolReq L4PortInd Ipv4ControlInfo Ipv6ControlInfo down protocol
Definition: IUdp-gates.txt:25
inet::OperationalMixin< cSimpleModule >::initialize
virtual void initialize(int stage) override
Definition: OperationalMixinImpl.h:26
inet::registerAnyProtocol
void registerAnyProtocol(cGate *gate, ServicePrimitive servicePrimitive)
Definition: IProtocolRegistrationListener.cc:129
InterfaceReq
removed InterfaceReq
Definition: IUdp-gates.txt:11
DispatchProtocolReq
removed DscpReq Ipv4ControlInfo Ipv6ControlInfo up L3AddressInd DispatchProtocolReq L4PortInd Ipv4ControlInfo Ipv6ControlInfo down DispatchProtocolReq
Definition: IUdp-gates.txt:25
inet::INITSTAGE_NETWORK_LAYER
INET_API InitStage INITSTAGE_NETWORK_LAYER
Initialization of network layer protocols.
inet::MacRelayUnitBase::numProcessedFrames
long numProcessedFrames
Definition: MacRelayUnitBase.h:27
inet::registerAnyService
void registerAnyService(cGate *gate, ServicePrimitive servicePrimitive)
Definition: IProtocolRegistrationListener.cc:60
inet::MacRelayUnitBase::interfaceTable
ModuleRefByPar< IInterfaceTable > interfaceTable
Definition: MacRelayUnitBase.h:24
EV_FIELD
#define EV_FIELD(...)
Definition: INETDefs.h:112
inet::ModuleStopOperation::STAGE_LINK_LAYER
@ STAGE_LINK_LAYER
Definition: ModuleOperations.h:54
inet::MacRelayUnitBase::macForwardingTable
ModuleRefByPar< IMacForwardingTable > macForwardingTable
Definition: MacRelayUnitBase.h:25
inet::INITSTAGE_LOCAL
INET_API InitStage INITSTAGE_LOCAL
Initialization of local state that don't use or affect other modules includes:
inet::MacRelayUnitBase::sendPacket
virtual void sendPacket(Packet *packet, const MacAddress &destinationAddress, NetworkInterface *outgoingInterface)
Definition: MacRelayUnitBase.cc:75
inet::MacRelayUnitBase::numDroppedFrames
long numDroppedFrames
Definition: MacRelayUnitBase.h:28
inet::StringFormat::formatString
const char * formatString(IDirectiveResolver *resolver) const
Definition: StringFormat.cc:17
inet::ModuleStartOperation::STAGE_LINK_LAYER
@ STAGE_LINK_LAYER
Definition: ModuleOperations.h:28
EV_ENDL
#define EV_ENDL
Definition: INETDefs.h:114
inet::INITSTAGE_LINK_LAYER
INET_API InitStage INITSTAGE_LINK_LAYER
Initialization of link-layer protocols.
inet::packetSentToLowerSignal
simsignal_t packetSentToLowerSignal
Definition: Simsignals.cc:90