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

#include <Ieee8021dRelay.h>

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

Classes

struct  Comp
 

Public Member Functions

void registerAddress (MacAddress mac)
 Register single MAC address that this switch supports. More...
 
void registerAddresses (MacAddress startMac, MacAddress endMac)
 Register range of MAC addresses that this switch supports. More...
 
- Public Member Functions inherited from inet::OperationalMixin< cSimpleModule >
virtual ~OperationalMixin ()
 }@ More...
 
- Public Member Functions inherited from inet::ILifecycle
virtual ~ILifecycle ()
 

Protected Types

typedef std::pair< MacAddress, MacAddressMacAddressPair
 
- Protected Types inherited from inet::OperationalMixin< cSimpleModule >
enum  State
 

Protected Member Functions

bool in_range (const std::set< MacAddressPair, Comp > &ranges, MacAddress value)
 
virtual void initialize (int stage) override
 
virtual void finish () override
 
virtual void handleUpperPacket (Packet *packet) override
 
virtual void handleLowerPacket (Packet *packet) override
 
virtual void updatePeerAddress (NetworkInterface *incomingInterface, MacAddress sourceAddress, unsigned int vlanId) override
 
virtual void sendUp (Packet *packet)
 
virtual bool isForwardingInterface (NetworkInterface *networkInterface) const override
 
virtual NetworkInterfacechooseBridgeInterface ()
 
virtual void handleStartOperation (LifecycleOperation *operation) override
 
virtual void handleStopOperation (LifecycleOperation *operation) override
 
virtual void handleCrashOperation (LifecycleOperation *operation) override
 
- Protected Member Functions inherited from inet::MacRelayUnitBase
virtual void updateDisplayString () const
 
virtual const char * resolveDirective (char directive) const override
 
virtual void broadcastPacket (Packet *packet, const MacAddress &destinationAddress, NetworkInterface *incomingInterface)
 
virtual void sendPacket (Packet *packet, const MacAddress &destinationAddress, NetworkInterface *outgoingInterface)
 
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)
 
- 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

MacAddress bridgeAddress
 
NetworkInterfacebridgeNetworkInterface = nullptr
 
std::set< MacAddressPair, CompregisteredMacAddresses
 
int numReceivedNetworkFrames = 0
 
int numReceivedBPDUsFromSTP = 0
 
int numDeliveredBDPUsToSTP = 0
 
int numDispatchedNonBPDUFrames = 0
 
int numDispatchedBDPUFrames = 0
 
- Protected Attributes inherited from inet::MacRelayUnitBase
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
 

Member Typedef Documentation

◆ MacAddressPair

Member Function Documentation

◆ chooseBridgeInterface()

NetworkInterface * inet::Ieee8021dRelay::chooseBridgeInterface ( )
protectedvirtual
243 {
244  for (int i = 0; i < interfaceTable->getNumInterfaces(); i++) {
245  NetworkInterface *interface = interfaceTable->getInterface(i);
246  if (!interface->isLoopback())
247  return interface;
248  }
249  return nullptr;
250 }

Referenced by handleStartOperation().

◆ finish()

void inet::Ieee8021dRelay::finish ( )
overrideprotectedvirtual

Reimplemented from inet::MacRelayUnitBase.

253 {
255  recordScalar("number of received BPDUs from STP module", numReceivedBPDUsFromSTP);
256  recordScalar("number of received frames from network (including BPDUs)", numReceivedNetworkFrames);
257  recordScalar("number of dropped frames (including BPDUs)", numDroppedFrames);
258  recordScalar("number of delivered BPDUs to the STP module", numDeliveredBDPUsToSTP);
259  recordScalar("number of dispatched BPDU frames to the network", numDispatchedBDPUFrames);
260  recordScalar("number of dispatched non-BDPU frames to the network", numDispatchedNonBPDUFrames);
261 }

◆ handleCrashOperation()

void inet::Ieee8021dRelay::handleCrashOperation ( LifecycleOperation operation)
overrideprotectedvirtual

Reimplemented from inet::MacRelayUnitBase.

238 {
239  bridgeNetworkInterface = nullptr;
240 }

◆ handleLowerPacket()

void inet::Ieee8021dRelay::handleLowerPacket ( Packet packet)
overrideprotectedvirtual

Reimplemented from inet::LayeredProtocolBase.

52 {
54  auto protocol = incomingPacket->getTag<PacketProtocolTag>()->getProtocol();
55  auto macAddressInd = incomingPacket->getTag<MacAddressInd>();
56  auto sourceAddress = macAddressInd->getSrcAddress();
57  auto destinationAddress = macAddressInd->getDestAddress();
58  auto interfaceInd = incomingPacket->getTag<InterfaceInd>();
59  int incomingInterfaceId = interfaceInd->getInterfaceId();
60  auto incomingInterface = interfaceTable->getInterfaceById(incomingInterfaceId);
61  unsigned int vlanId = 0;
62  if (auto vlanInd = incomingPacket->findTag<VlanInd>())
63  vlanId = vlanInd->getVlanId();
64  EV_INFO << "Processing packet from network" << EV_FIELD(incomingInterface) << EV_FIELD(incomingPacket) << EV_ENDL;
65  updatePeerAddress(incomingInterface, sourceAddress, vlanId);
66 
67  const auto& incomingInterfaceData = incomingInterface->findProtocolData<Ieee8021dInterfaceData>();
68  // BPDU Handling
69  if ((!incomingInterfaceData || incomingInterfaceData->getRole() != Ieee8021dInterfaceData::DISABLED)
70  && (destinationAddress == bridgeAddress
71  || in_range(registeredMacAddresses, destinationAddress)
72  || incomingInterface->matchesMacAddress(destinationAddress))
73  && !destinationAddress.isBroadcast())
74  {
75  EV_DETAIL << "Deliver to upper layer" << endl;
76  sendUp(incomingPacket); // deliver to the STP/RSTP module
77  }
78  else if (incomingInterfaceData && !incomingInterfaceData->isForwarding()) {
79  EV_INFO << "Dropping packet because the incoming interface is currently not forwarding" << EV_FIELD(incomingInterface) << EV_FIELD(incomingPacket) << endl;
81  PacketDropDetails details;
82  details.setReason(NO_INTERFACE_FOUND);
83  emit(packetDroppedSignal, incomingPacket, &details);
84  delete incomingPacket;
85  }
86  else {
87  auto outgoingPacket = incomingPacket->dup();
88  outgoingPacket->trim();
89  outgoingPacket->clearTags();
90  outgoingPacket->addTag<PacketProtocolTag>()->setProtocol(protocol);
91  if (auto vlanInd = incomingPacket->findTag<VlanInd>())
92  outgoingPacket->addTag<VlanReq>()->setVlanId(vlanInd->getVlanId());
93  if (auto userPriorityInd = incomingPacket->findTag<UserPriorityInd>())
94  outgoingPacket->addTag<UserPriorityReq>()->setUserPriority(userPriorityInd->getUserPriority());
95  auto& macAddressReq = outgoingPacket->addTag<MacAddressReq>();
96  macAddressReq->setSrcAddress(sourceAddress);
97  macAddressReq->setDestAddress(destinationAddress);
98 
99  // TODO revise next "if"s: 2nd drops all packets for me if not forwarding port; 3rd sends up when dest==STP_MULTICAST_ADDRESS; etc.
100  // reordering, merge 1st and 3rd, ...
101 
102  if (destinationAddress.isBroadcast())
103  broadcastPacket(outgoingPacket, destinationAddress, incomingInterface);
104  else if (destinationAddress.isMulticast()) {
105  auto outgoingInterfaceIds = macForwardingTable->getMulticastAddressForwardingInterfaces(destinationAddress);
106  if (outgoingInterfaceIds.size() == 0)
107  broadcastPacket(outgoingPacket, destinationAddress, incomingInterface);
108  else {
109  for (auto outgoingInterfaceId : outgoingInterfaceIds) {
110  auto outgoingInterface = interfaceTable->getInterfaceById(outgoingInterfaceId);
111  if (outgoingInterfaceId != incomingInterfaceId) {
112  if (isForwardingInterface(outgoingInterface))
113  sendPacket(outgoingPacket->dup(), destinationAddress, outgoingInterface);
114  else {
115  EV_WARN << "Discarding packet because output interface is currently not forwarding" << EV_FIELD(outgoingInterface) << EV_FIELD(outgoingPacket) << endl;
117  PacketDropDetails details;
118  details.setReason(NO_INTERFACE_FOUND);
119  emit(packetDroppedSignal, outgoingPacket, &details);
120  }
121  }
122  else {
123  EV_WARN << "Discarding packet because outgoing interface is the same as incoming interface" << EV_FIELD(destinationAddress) << EV_FIELD(incomingInterface) << EV_FIELD(incomingPacket) << EV_ENDL;
125  PacketDropDetails details;
126  details.setReason(NO_INTERFACE_FOUND);
127  emit(packetDroppedSignal, outgoingPacket, &details);
128  }
129  }
130  delete outgoingPacket;
131  }
132  }
133  else {
134  auto outgoingInterfaceId = macForwardingTable->getUnicastAddressForwardingInterface(destinationAddress);
135  if (outgoingInterfaceId == -1)
136  broadcastPacket(outgoingPacket, destinationAddress, incomingInterface);
137  else {
138  auto outgoingInterface = interfaceTable->getInterfaceById(outgoingInterfaceId);
139  if (outgoingInterfaceId != incomingInterfaceId) {
140  if (isForwardingInterface(outgoingInterface))
141  sendPacket(outgoingPacket->dup(), destinationAddress, outgoingInterface);
142  else {
143  EV_WARN << "Discarding packet because output interface is currently not forwarding" << EV_FIELD(outgoingInterface) << EV_FIELD(outgoingPacket) << endl;
145  PacketDropDetails details;
146  details.setReason(NO_INTERFACE_FOUND);
147  emit(packetDroppedSignal, outgoingPacket, &details);
148  }
149  }
150  else {
151  EV_WARN << "Discarding packet because outgoing interface is the same as incoming interface" << EV_FIELD(destinationAddress) << EV_FIELD(incomingInterface) << EV_FIELD(incomingPacket) << EV_ENDL;
153  PacketDropDetails details;
154  details.setReason(NO_INTERFACE_FOUND);
155  emit(packetDroppedSignal, outgoingPacket, &details);
156  }
157  delete outgoingPacket;
158  }
159  }
160  delete incomingPacket;
161  }
163 }

◆ handleStartOperation()

void inet::Ieee8021dRelay::handleStartOperation ( LifecycleOperation operation)
overrideprotectedvirtual

Reimplemented from inet::MacRelayUnitBase.

222 {
225  bridgeAddress = bridgeNetworkInterface->getMacAddress(); // get the bridge's MAC address
226  registerAddress(bridgeAddress); // register bridge's MAC address
227  }
228  else
229  throw cRuntimeError("No non-loopback interface found!");
230 }

◆ handleStopOperation()

void inet::Ieee8021dRelay::handleStopOperation ( LifecycleOperation operation)
overrideprotectedvirtual

Reimplemented from inet::MacRelayUnitBase.

233 {
234  bridgeNetworkInterface = nullptr;
235 }

◆ handleUpperPacket()

void inet::Ieee8021dRelay::handleUpperPacket ( Packet packet)
overrideprotectedvirtual

Reimplemented from inet::LayeredProtocolBase.

166 {
167  EV_INFO << "Processing upper packet" << EV_FIELD(packet) << EV_ENDL;
168  auto macAddressReq = packet->getTag<MacAddressReq>();
169  auto destinationAddress = macAddressReq->getDestAddress();
170  auto interfaceReq = packet->findTag<InterfaceReq>();
171  if (interfaceReq != nullptr) {
172  auto networkInterface = interfaceTable->getInterfaceById(interfaceReq->getInterfaceId());
173  sendPacket(packet, destinationAddress, networkInterface);
174  }
175  else if (destinationAddress.isBroadcast())
176  broadcastPacket(packet, destinationAddress, nullptr);
177  else if (destinationAddress.isMulticast()) {
178  auto outgoingInterfaceIds = macForwardingTable->getMulticastAddressForwardingInterfaces(destinationAddress);
179  if (outgoingInterfaceIds.size() == 0)
180  broadcastPacket(packet, destinationAddress, nullptr);
181  else {
182  for (auto outgoingInterfaceId : outgoingInterfaceIds) {
183  auto outgoingInterface = interfaceTable->getInterfaceById(outgoingInterfaceId);
184  sendPacket(packet->dup(), destinationAddress, outgoingInterface);
185  }
186  delete packet;
187  }
188  }
189  else {
190  int interfaceId = macForwardingTable->getUnicastAddressForwardingInterface(destinationAddress);
191  if (interfaceId == -1)
192  broadcastPacket(packet, destinationAddress, nullptr);
193  else {
194  auto networkInterface = interfaceTable->getInterfaceById(interfaceId);
195  sendPacket(packet, destinationAddress, networkInterface);
196  }
197  }
198 }

◆ in_range()

bool inet::Ieee8021dRelay::in_range ( const std::set< MacAddressPair, Comp > &  ranges,
MacAddress  value 
)
inlineprotected
37  {
38  return contains(ranges, MacAddressPair(value, value));
39  }

Referenced by handleLowerPacket().

◆ initialize()

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

Reimplemented from inet::MacRelayUnitBase.

24 {
26  if (stage == INITSTAGE_LOCAL) {
29 
30  WATCH(bridgeAddress);
35  }
36  else if (stage == INITSTAGE_LINK_LAYER) {
37  registerService(Protocol::ethernetMac, gate("upperLayerIn"), gate("upperLayerOut"));
38  }
39 }

◆ isForwardingInterface()

bool inet::Ieee8021dRelay::isForwardingInterface ( NetworkInterface networkInterface) const
overrideprotectedvirtual

Reimplemented from inet::MacRelayUnitBase.

201 {
202  if (!MacRelayUnitBase::isForwardingInterface(networkInterface))
203  return false;
204  const auto& interfaceData = networkInterface->findProtocolData<Ieee8021dInterfaceData>();
205  return (interfaceData == nullptr || interfaceData->isForwarding());
206 }

Referenced by handleLowerPacket().

◆ registerAddress()

void inet::Ieee8021dRelay::registerAddress ( MacAddress  mac)

Register single MAC address that this switch supports.

42 {
43  registerAddresses(mac, mac);
44 }

Referenced by handleStartOperation().

◆ registerAddresses()

void inet::Ieee8021dRelay::registerAddresses ( MacAddress  startMac,
MacAddress  endMac 
)

Register range of MAC addresses that this switch supports.

47 {
48  registeredMacAddresses.insert(MacAddressPair(startMac, endMac));
49 }

Referenced by registerAddress().

◆ sendUp()

void inet::Ieee8021dRelay::sendUp ( Packet packet)
protectedvirtual
216 {
217  EV_INFO << "Sending frame to the upper layer" << EV_FIELD(packet) << EV_ENDL;
218  send(packet, "upperLayerOut");
219 }

Referenced by handleLowerPacket().

◆ updatePeerAddress()

void inet::Ieee8021dRelay::updatePeerAddress ( NetworkInterface incomingInterface,
MacAddress  sourceAddress,
unsigned int  vlanId 
)
overrideprotectedvirtual

Reimplemented from inet::MacRelayUnitBase.

209 {
210  const auto& interfaceData = incomingInterface->findProtocolData<Ieee8021dInterfaceData>();
211  if (interfaceData == nullptr || interfaceData->isLearning())
212  MacRelayUnitBase::updatePeerAddress(incomingInterface, sourceAddress, vlanId);
213 }

Referenced by handleLowerPacket().

Member Data Documentation

◆ bridgeAddress

MacAddress inet::Ieee8021dRelay::bridgeAddress
protected

◆ bridgeNetworkInterface

NetworkInterface* inet::Ieee8021dRelay::bridgeNetworkInterface = nullptr
protected

◆ numDeliveredBDPUsToSTP

int inet::Ieee8021dRelay::numDeliveredBDPUsToSTP = 0
protected

Referenced by finish(), and initialize().

◆ numDispatchedBDPUFrames

int inet::Ieee8021dRelay::numDispatchedBDPUFrames = 0
protected

Referenced by finish(), and initialize().

◆ numDispatchedNonBPDUFrames

int inet::Ieee8021dRelay::numDispatchedNonBPDUFrames = 0
protected

Referenced by finish(), and initialize().

◆ numReceivedBPDUsFromSTP

int inet::Ieee8021dRelay::numReceivedBPDUsFromSTP = 0
protected

Referenced by finish(), and initialize().

◆ numReceivedNetworkFrames

int inet::Ieee8021dRelay::numReceivedNetworkFrames = 0
protected

◆ registeredMacAddresses

std::set<MacAddressPair, Comp> inet::Ieee8021dRelay::registeredMacAddresses
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::Ieee8021dRelay::numDispatchedNonBPDUFrames
int numDispatchedNonBPDUFrames
Definition: Ieee8021dRelay.h:47
inet::Ieee8021dRelay::in_range
bool in_range(const std::set< MacAddressPair, Comp > &ranges, MacAddress value)
Definition: Ieee8021dRelay.h:36
protocol
removed DscpReq Ipv4ControlInfo Ipv6ControlInfo up L3AddressInd DispatchProtocolReq L4PortInd Ipv4ControlInfo Ipv6ControlInfo down protocol
Definition: IUdp-gates.txt:25
inet::Ieee8021dRelay::numDeliveredBDPUsToSTP
int numDeliveredBDPUsToSTP
Definition: Ieee8021dRelay.h:46
inet::NO_INTERFACE_FOUND
@ NO_INTERFACE_FOUND
Definition: Simsignals_m.h:74
inet::NetworkInterface::getMacAddress
const MacAddress & getMacAddress() const
Definition: NetworkInterface.h:245
inet::Ieee8021dRelay::updatePeerAddress
virtual void updatePeerAddress(NetworkInterface *incomingInterface, MacAddress sourceAddress, unsigned int vlanId) override
Definition: Ieee8021dRelay.cc:208
inet::Ieee8021dRelay::registeredMacAddresses
std::set< MacAddressPair, Comp > registeredMacAddresses
Definition: Ieee8021dRelay.h:41
inet::MacRelayUnitBase::updatePeerAddress
virtual void updatePeerAddress(NetworkInterface *incomingInterface, MacAddress sourceAddress, unsigned int vlanId)
Definition: MacRelayUnitBase.cc:89
InterfaceReq
removed InterfaceReq
Definition: IUdp-gates.txt:11
inet::Ieee8021dRelay::numReceivedBPDUsFromSTP
int numReceivedBPDUsFromSTP
Definition: Ieee8021dRelay.h:45
inet::MacRelayUnitBase::finish
virtual void finish() override
Definition: MacRelayUnitBase.cc:97
inet::MacRelayUnitBase::updateDisplayString
virtual void updateDisplayString() const
Definition: MacRelayUnitBase.cc:53
inet::registerService
void registerService(const Protocol &protocol, cGate *gate, ServicePrimitive servicePrimitive)
Registers a service primitive (SDU processing) at the given gate.
Definition: IProtocolRegistrationListener.cc:14
inet::packetDroppedSignal
simsignal_t packetDroppedSignal
Definition: Simsignals.cc:85
inet::MacRelayUnitBase::interfaceTable
ModuleRefByPar< IInterfaceTable > interfaceTable
Definition: MacRelayUnitBase.h:24
PacketProtocolTag
removed DscpReq Ipv4ControlInfo Ipv6ControlInfo up L3AddressInd DispatchProtocolReq L4PortInd Ipv4ControlInfo Ipv6ControlInfo down PacketProtocolTag
Definition: IUdp-gates.txt:25
inet::MacRelayUnitBase::broadcastPacket
virtual void broadcastPacket(Packet *packet, const MacAddress &destinationAddress, NetworkInterface *incomingInterface)
Definition: MacRelayUnitBase.cc:61
inet::MacRelayUnitBase::initialize
virtual void initialize(int stage) override
Definition: MacRelayUnitBase.cc:21
inet::Ieee8021dRelay::numReceivedNetworkFrames
int numReceivedNetworkFrames
Definition: Ieee8021dRelay.h:44
inet::Ieee8021dRelay::numDispatchedBDPUFrames
int numDispatchedBDPUFrames
Definition: Ieee8021dRelay.h:48
inet::Ieee8021dRelay::registerAddresses
void registerAddresses(MacAddress startMac, MacAddress endMac)
Register range of MAC addresses that this switch supports.
Definition: Ieee8021dRelay.cc:46
EV_FIELD
#define EV_FIELD(...)
Definition: INETDefs.h:112
inet::contains
bool contains(const std::vector< T > &v, const Tk &a)
Definition: stlutils.h:65
inet::Ieee8021dRelay::MacAddressPair
std::pair< MacAddress, MacAddress > MacAddressPair
Definition: Ieee8021dRelay.h:27
inet::Protocol::ethernetMac
static const Protocol ethernetMac
Definition: Protocol.h:65
inet::Ieee8021dRelay::isForwardingInterface
virtual bool isForwardingInterface(NetworkInterface *networkInterface) const override
Definition: Ieee8021dRelay.cc:200
inet::MacRelayUnitBase::macForwardingTable
ModuleRefByPar< IMacForwardingTable > macForwardingTable
Definition: MacRelayUnitBase.h:25
inet::Ieee8021dRelay::bridgeNetworkInterface
NetworkInterface * bridgeNetworkInterface
Definition: Ieee8021dRelay.h:25
inet::Ieee8021dRelay::chooseBridgeInterface
virtual NetworkInterface * chooseBridgeInterface()
Definition: Ieee8021dRelay.cc:242
inet::INITSTAGE_LOCAL
INET_API InitStage INITSTAGE_LOCAL
Initialization of local state that don't use or affect other modules includes:
inet::Ieee8021dInterfaceData::DISABLED
@ DISABLED
Definition: Ieee8021dInterfaceData.h:24
inet::Ieee8021dRelay::registerAddress
void registerAddress(MacAddress mac)
Register single MAC address that this switch supports.
Definition: Ieee8021dRelay.cc:41
inet::Ieee8021dRelay::bridgeAddress
MacAddress bridgeAddress
Definition: Ieee8021dRelay.h:24
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
EV_ENDL
#define EV_ENDL
Definition: INETDefs.h:114
inet::Ieee8021dRelay::sendUp
virtual void sendUp(Packet *packet)
Definition: Ieee8021dRelay.cc:215
inet::INITSTAGE_LINK_LAYER
INET_API InitStage INITSTAGE_LINK_LAYER
Initialization of link-layer protocols.