|
INET Framework for OMNeT++/OMNEST
|
Ethernet MAC module which supports both half-duplex (CSMA/CD) and full-duplex operation.
More...
#include <EthernetCsmaMac.h>
|
| virtual int | numInitStages () const override |
| |
| virtual void | initialize (int stage) override |
| |
| virtual void | initializeFlags () override |
| |
| virtual void | initializeStatistics () override |
| |
| virtual void | handleMessageWhenUp (cMessage *msg) override |
| |
| virtual void | finish () override |
| |
| virtual void | handleSelfMessage (cMessage *msg) override |
| |
| virtual void | handleEndIFGPeriod () |
| |
| virtual void | handleEndPausePeriod () |
| |
| virtual void | handleEndTxPeriod () |
| |
| virtual void | handleEndRxPeriod () |
| |
| virtual void | handleEndBackoffPeriod () |
| |
| virtual void | handleEndJammingPeriod () |
| |
| virtual void | handleRetransmission () |
| |
| virtual void | readChannelParameters (bool errorWhenAsymmetric) override |
| | Calculates datarates, etc. More...
|
| |
| virtual void | handleUpperPacket (Packet *msg) override |
| |
| virtual void | processMsgFromNetwork (EthernetSignalBase *msg) |
| |
| virtual void | scheduleEndIFGPeriod () |
| |
| virtual void | fillIFGInBurst () |
| |
| virtual void | scheduleEndPausePeriod (int pauseUnits) |
| |
| virtual void | beginSendFrames () |
| |
| virtual void | sendJamSignal () |
| |
| virtual void | startFrameTransmission () |
| |
| virtual void | frameReceptionComplete () |
| |
| virtual void | processReceivedDataFrame (Packet *frame) |
| |
| virtual void | processReceivedControlFrame (Packet *packet) |
| |
| virtual void | processConnectDisconnect () override |
| |
| virtual void | processDetectedCollision () |
| |
| virtual void | sendSignal (EthernetSignalBase *signal, simtime_t_cref duration) |
| |
| virtual void | handleSignalFromNetwork (EthernetSignalBase *signal) |
| |
| virtual void | updateRxSignals (EthernetSignalBase *signal, simtime_t endRxTime) |
| |
| virtual void | dropCurrentTxFrame (PacketDropDetails &details) override |
| |
| bool | canContinueBurst (b remainingGapLength) |
| |
| B | calculateMinFrameLength () |
| |
| virtual void | printState () |
| |
| virtual bool | dropFrameNotForUs (Packet *packet, const Ptr< const EthernetMacHeader > &frame) |
| | Checks destination address and drops the frame when frame is not for us; returns true if frame is dropped. More...
|
| |
| virtual void | printParameters () |
| |
| virtual void | encapsulate (Packet *packet) |
| |
| virtual void | decapsulate (Packet *packet) |
| |
| bool | verifyCrcAndLength (Packet *packet) |
| | Verify ethernet packet: check FCS and payload length. More...
|
| |
| virtual void | configureNetworkInterface () override |
| |
| virtual void | refreshDisplay () const override |
| |
| virtual void | receiveSignal (cComponent *src, simsignal_t signalId, cObject *obj, cObject *details) override |
| |
| virtual void | refreshConnection () |
| |
| void | changeTransmissionState (MacTransmitState newState) |
| |
| void | changeReceptionState (MacReceiveState newState) |
| |
| virtual void | cutEthernetSignalEnd (EthernetSignalBase *signal, simtime_t duration) |
| |
| virtual void | txFinished () |
| |
| | MacProtocolBase () |
| |
| virtual | ~MacProtocolBase () |
| |
| virtual void | registerInterface () |
| |
| virtual MacAddress | parseMacAddressParameter (const char *addrstr) |
| |
| virtual void | deleteCurrentTxFrame () |
| |
| virtual void | handleMessageWhenDown (cMessage *msg) override |
| |
| virtual void | sendUp (cMessage *message) |
| |
| virtual void | sendDown (cMessage *message) |
| |
| 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 |
| |
| virtual void | flushQueue (PacketDropDetails &details) |
| | should clear queue and emit signal "packetDropped" with entire packets More...
|
| |
| virtual void | clearQueue () |
| | should clear queue silently More...
|
| |
| queueing::IPacketQueue * | getQueue (cGate *gate) const |
| |
| virtual bool | canDequeuePacket () const |
| |
| virtual Packet * | dequeuePacket () |
| |
| virtual void | handleUpperMessage (cMessage *message) |
| |
| virtual void | handleLowerMessage (cMessage *message) |
| |
| virtual void | handleUpperCommand (cMessage *message) |
| |
| virtual void | handleLowerCommand (cMessage *message) |
| |
| virtual void | handleLowerPacket (Packet *packet) |
| |
| virtual int | numInitStages () const override |
| |
| virtual void | refreshDisplay () const override |
| |
| virtual void | handleMessage (cMessage *msg) override |
| |
| 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 () |
| |
|
| enum | MacTransmitState {
TX_IDLE_STATE = 1,
WAIT_IFG_STATE,
SEND_IFG_STATE,
TRANSMITTING_STATE,
JAMMING_STATE,
BACKOFF_STATE,
PAUSE_STATE
} |
| |
| enum | MacReceiveState { RX_IDLE_STATE = 1,
RECEIVING_STATE,
RX_COLLISION_STATE,
RX_RECONNECT_STATE
} |
| |
| static const double | SPEED_OF_LIGHT_IN_CABLE = 200000000.0 |
| |
| enum | SelfMsgKindValues {
ENDIFG = 100,
ENDRECEPTION,
ENDBACKOFF,
ENDTRANSMISSION,
ENDJAMMING,
ENDPAUSE
} |
| |
| enum | { NUM_OF_ETHERDESCRS = 11
} |
| |
| enum | State |
| |
Ethernet MAC module which supports both half-duplex (CSMA/CD) and full-duplex operation.
(See also EthernetMac which has a considerably smaller code with all the CSMA/CD complexity removed.)
See NED file for more details.
◆ EthernetCsmaMac()
| inet::EthernetCsmaMac::EthernetCsmaMac |
( |
| ) |
|
|
inline |
◆ ~EthernetCsmaMac()
| inet::EthernetCsmaMac::~EthernetCsmaMac |
( |
| ) |
|
|
virtual |
◆ beginSendFrames()
| void inet::EthernetCsmaMac::beginSendFrames |
( |
| ) |
|
|
protectedvirtual |
849 EV_DETAIL <<
"Will transmit next frame in output queue after IFG period\n";
855 EV_DETAIL <<
"No more frames to send, transmitter set to idle\n";
Referenced by handleEndPausePeriod().
◆ calculateMinFrameLength()
| B inet::EthernetCsmaMac::calculateMinFrameLength |
( |
| ) |
|
|
protected |
◆ canContinueBurst()
| bool inet::EthernetCsmaMac::canContinueBurst |
( |
b |
remainingGapLength | ) |
|
|
protected |
◆ dropCurrentTxFrame()
◆ fillIFGInBurst()
| void inet::EthernetCsmaMac::fillIFGInBurst |
( |
| ) |
|
|
protectedvirtual |
816 EthernetFilledIfgSignal *gap =
new EthernetFilledIfgSignal(
"FilledIFG");
Referenced by handleEndTxPeriod().
◆ finish()
| void inet::EthernetCsmaMac::finish |
( |
| ) |
|
|
overrideprotectedvirtual |
Reimplemented from inet::EthernetMacBase.
684 simtime_t t = simTime();
686 recordScalar(
"rx channel idle (%)", 100 * (totalChannelIdleTime / t));
◆ frameReceptionComplete()
| void inet::EthernetCsmaMac::frameReceptionComplete |
( |
| ) |
|
|
protectedvirtual |
705 EthernetSignalBase *signal =
rxSignals[0].signal;
708 if (
dynamic_cast<EthernetFilledIfgSignal *
>(signal) !=
nullptr) {
712 if (signal->getSrcMacFullDuplex() !=
duplexMode)
713 throw cRuntimeError(
"Ethernet misconfiguration: MACs on the same link must be all in full duplex mode, or all in half-duplex mode");
717 bool hasBitError = signal->hasBitError();
718 auto packet = check_and_cast<Packet *>(signal->decapsulate());
725 PacketDropDetails details;
732 const auto& frame = packet->peekAtFront<EthernetMacHeader>();
733 auto macAddressInd = packet->addTag<MacAddressInd>();
734 macAddressInd->setSrcAddress(frame->getSrc());
735 macAddressInd->setDestAddress(frame->getDest());
743 EV_INFO <<
"Reception of " << packet <<
" successfully completed.\n";
Referenced by handleEndRxPeriod(), and processMsgFromNetwork().
◆ handleCanPullPacketChanged()
| void inet::EthernetCsmaMac::handleCanPullPacketChanged |
( |
cGate * |
gate | ) |
|
|
overridevirtual |
Notifies about a change in the possibility of pulling some packet from the passive packet source at the given gate.
This method is called, for example, when a new packet is inserted into a queue. It allows the sink to pull a new packet from the queue.
The gate parameter must be a valid gate of this module.
Implements inet::queueing::IActivePacketSink.
◆ handleEndBackoffPeriod()
| void inet::EthernetCsmaMac::handleEndBackoffPeriod |
( |
| ) |
|
|
protectedvirtual |
562 throw cRuntimeError(
"At end of BACKOFF and not in BACKOFF_STATE");
565 throw cRuntimeError(
"At end of BACKOFF and no frame to transmit");
568 EV_DETAIL <<
"Backoff period ended, wait IFG\n";
572 EV_DETAIL <<
"Backoff period ended but channel is not free, idling\n";
Referenced by handleSelfMessage().
◆ handleEndIFGPeriod()
| void inet::EthernetCsmaMac::handleEndIFGPeriod |
( |
| ) |
|
|
protectedvirtual |
359 EV_DETAIL <<
"IFG elapsed\n";
383 throw cRuntimeError(
"Not in WAIT_IFG_STATE at the end of IFG period");
Referenced by handleSelfMessage().
◆ handleEndJammingPeriod()
| void inet::EthernetCsmaMac::handleEndJammingPeriod |
( |
| ) |
|
|
protectedvirtual |
611 throw cRuntimeError(
"At end of JAMMING but not in JAMMING_STATE");
615 EV_DETAIL <<
"Jamming finished, executing backoff\n";
Referenced by handleSelfMessage().
◆ handleEndPausePeriod()
| void inet::EthernetCsmaMac::handleEndPausePeriod |
( |
| ) |
|
|
protectedvirtual |
696 throw cRuntimeError(
"At end of PAUSE and not in PAUSE_STATE");
698 EV_DETAIL <<
"Pause finished, resuming transmissions\n";
Referenced by handleSelfMessage().
◆ handleEndRxPeriod()
| void inet::EthernetCsmaMac::handleEndRxPeriod |
( |
| ) |
|
|
protectedvirtual |
531 EV_DETAIL <<
"Incoming signals finished after collision\n";
540 EV_DETAIL <<
"Incoming signals finished or reconnect time elapsed after reconnect\n";
548 throw cRuntimeError(
"model error: invalid receiveState %d",
receiveState);
554 EV_DETAIL <<
"Start IFG period\n";
Referenced by handleSelfMessage().
◆ handleEndTxPeriod()
| void inet::EthernetCsmaMac::handleEndTxPeriod |
( |
| ) |
|
|
protectedvirtual |
466 EV_DETAIL <<
"TX successfully finished\n";
470 throw cRuntimeError(
"End of transmission, and incorrect state detected");
473 throw cRuntimeError(
"Frame under transmission cannot be found");
486 const auto& pauseFrame = dynamicPtrCast<const EthernetPauseFrame>(controlFrame);
492 EV_INFO <<
"Transmission of " <<
currentTxFrame <<
" successfully completed.\n";
512 EV_DETAIL <<
"Start IFG period\n";
Referenced by handleSelfMessage().
◆ handleMessageWhenUp()
| void inet::EthernetCsmaMac::handleMessageWhenUp |
( |
cMessage * |
msg | ) |
|
|
overrideprotectedvirtual |
Reimplemented from inet::LayeredProtocolBase.
179 throw cRuntimeError(
"Inconsistent state -- transmitting and receiving at the same time");
181 if (msg->isSelfMessage())
188 throw cRuntimeError(
"Message received from unknown gate");
◆ handleRetransmission()
| void inet::EthernetCsmaMac::handleRetransmission |
( |
| ) |
|
|
protectedvirtual |
622 EV_DETAIL <<
"Number of retransmit attempts of frame exceeds maximum, cancelling transmission of frame\n";
623 PacketDropDetails details;
638 int slotNumber = intuniform(0, backoffRange - 1);
639 EV_DETAIL <<
"Executing backoff procedure (slotNumber=" << slotNumber <<
", backoffRange=[0," << backoffRange - 1 <<
"]" << endl;
Referenced by handleEndJammingPeriod().
◆ handleSelfMessage()
| void inet::EthernetCsmaMac::handleSelfMessage |
( |
cMessage * |
msg | ) |
|
|
overrideprotectedvirtual |
Reimplemented from inet::LayeredProtocolBase.
138 EV_TRACE <<
"Self-message " << msg <<
" received\n";
140 switch (msg->getKind()) {
166 throw cRuntimeError(
"Self-message with unexpected message kind %d", msg->getKind());
Referenced by handleMessageWhenUp().
◆ handleSignalFromNetwork()
196 EV_DETAIL <<
"Received " << signal <<
" from network.\n";
199 EV_WARN <<
"Interface is not connected -- dropping signal " << signal << endl;
200 if (!signal->isUpdate() &&
dynamic_cast<EthernetSignal *
>(signal)) {
201 auto packet = check_and_cast<Packet *>(signal->decapsulate());
204 PacketDropDetails details;
217 simtime_t propagationTime = simTime() - signal->getSendingTime();
219 throw cRuntimeError(
"Very long frame propagation time detected, maybe cable exceeds "
220 "maximum allowed length? (%s s corresponds to an approx. %s m cable)",
221 SIMTIME_STR(propagationTime),
226 EthernetJamSignal *jamSignal =
dynamic_cast<EthernetJamSignal *
>(signal);
229 throw cRuntimeError(
"Stray jam signal arrived in full-duplex mode");
231 if (
dynamic_cast<EthernetJamSignal *
>(signal)) {
Referenced by handleMessageWhenUp().
◆ handleUpperPacket()
| void inet::EthernetCsmaMac::handleUpperPacket |
( |
Packet * |
msg | ) |
|
|
overrideprotectedvirtual |
Reimplemented from inet::LayeredProtocolBase.
241 EV_INFO <<
"Received " << packet <<
" from upper layer." << endl;
248 auto macHeader = packet->peekAtFront<EthernetMacHeader>();
249 if (macHeader->getDest().equals(address)) {
250 throw cRuntimeError(
"Logic error: frame %s from higher layer has local MAC address as dest (%s)",
251 packet->getFullName(), macHeader->getDest().str().c_str());
255 throw cRuntimeError(
"Packet length from higher layer (%s) exceeds maximum Ethernet frame size (%s)",
260 EV_WARN <<
"Interface is not connected -- dropping packet " << packet << endl;
261 PacketDropDetails details;
271 if (macHeader->getSrc().isUnspecified()) {
274 auto newHeader = packet->removeAtFront<EthernetMacHeader>();
275 newHeader->setSrc(address);
276 packet->insertAtFront(newHeader);
277 macHeader = newHeader;
280 throw cRuntimeError(
"EthernetMac already has a transmit packet when packet arrived from upper layer");
Referenced by handleCanPullPacketChanged(), handleEndIFGPeriod(), handleMessageWhenUp(), and handleRetransmission().
◆ initialize()
| void inet::EthernetCsmaMac::initialize |
( |
int |
stage | ) |
|
|
overrideprotectedvirtual |
◆ initializeFlags()
| void inet::EthernetCsmaMac::initializeFlags |
( |
| ) |
|
|
overrideprotectedvirtual |
◆ initializeStatistics()
| void inet::EthernetCsmaMac::initializeStatistics |
( |
| ) |
|
|
overrideprotectedvirtual |
◆ numInitStages()
| virtual int inet::EthernetCsmaMac::numInitStages |
( |
| ) |
const |
|
inlineoverrideprotectedvirtual |
◆ printState()
| void inet::EthernetCsmaMac::printState |
( |
| ) |
|
|
protectedvirtual |
650 #define CASE(x) case x: \
651 EV_DETAIL << #x; break
653 EV_DETAIL <<
"transmitState: ";
664 EV_DETAIL <<
", receiveState: ";
672 EV_DETAIL <<
", backoffs: " <<
backoffs;
673 EV_DETAIL <<
", numConcurrentRxTransmissions: " <<
rxSignals.size();
674 EV_DETAIL <<
", queueLength: " <<
txQueue->getNumPackets();
Referenced by handleMessageWhenUp(), and startFrameTransmission().
◆ processConnectDisconnect()
| void inet::EthernetCsmaMac::processConnectDisconnect |
( |
| ) |
|
|
overrideprotectedvirtual |
Reimplemented from inet::EthernetMacBase.
117 EthernetSignalBase *signal =
new EthernetSignalBase(
"RECONNECT");
118 signal->setBitError(
true);
119 signal->setDuration(reconnectEndTime);
◆ processDetectedCollision()
| void inet::EthernetCsmaMac::processDetectedCollision |
( |
| ) |
|
|
protectedvirtual |
◆ processMsgFromNetwork()
288 simtime_t endRxTime = simTime() + signal->getRemainingDuration();
299 EV_DETAIL <<
"Transmission interrupted by incoming frame, handling collision\n";
302 EV_DETAIL <<
"Transmitting jam signal\n";
309 ASSERT(!signal->isUpdate());
311 EV_INFO <<
"Reception of " << signal <<
" started.\n";
322 EV_DETAIL <<
"Back-to-back frames: completing reception of current frame, starting reception of next one\n";
341 EV_DETAIL <<
"Overlapping receptions -- setting collision state\n";
Referenced by handleSignalFromNetwork().
◆ processReceivedControlFrame()
| void inet::EthernetCsmaMac::processReceivedControlFrame |
( |
Packet * |
packet | ) |
|
|
protectedvirtual |
770 packet->popAtFront<EthernetMacHeader>();
771 const auto& controlFrame = packet->peekAtFront<EthernetControlFrameBase>();
774 const auto& pauseFrame = packet->peekAtFront<EthernetPauseFrame>();
775 int pauseUnits = pauseFrame->getPauseTime();
781 EV_DETAIL <<
"PAUSE frame received, pausing for " <<
pauseUnitsRequested <<
" time units\n";
787 <<
" more time units from now\n";
796 EV_DETAIL <<
"PAUSE frame received, storing pause request\n";
Referenced by frameReceptionComplete().
◆ processReceivedDataFrame()
| void inet::EthernetCsmaMac::processReceivedDataFrame |
( |
Packet * |
frame | ) |
|
|
protectedvirtual |
751 unsigned long curBytes = packet->getByteLength();
759 packet->addTagIfAbsent<InterfaceInd>()->setInterfaceId(
networkInterface->getInterfaceId());
764 EV_INFO <<
"Sending " << packet <<
" to upper layer.\n";
765 send(packet,
"upperLayerOut");
Referenced by frameReceptionComplete().
◆ readChannelParameters()
| void inet::EthernetCsmaMac::readChannelParameters |
( |
bool |
errorWhenAsymmetric | ) |
|
|
overrideprotectedvirtual |
Calculates datarates, etc.
Verifies the datarates on the incoming/outgoing channels, and throws error when they differ and the parameter errorWhenAsymmetric is true.
Reimplemented from inet::EthernetMacBase.
131 throw cRuntimeError(
"%g bps Ethernet only supports full-duplex links",
curEtherDescr->
txrate);
Referenced by handleMessageWhenUp().
◆ scheduleEndIFGPeriod()
| void inet::EthernetCsmaMac::scheduleEndIFGPeriod |
( |
| ) |
|
|
protectedvirtual |
◆ scheduleEndPausePeriod()
| void inet::EthernetCsmaMac::scheduleEndPausePeriod |
( |
int |
pauseUnits | ) |
|
|
protectedvirtual |
◆ sendJamSignal()
| void inet::EthernetCsmaMac::sendJamSignal |
( |
| ) |
|
|
protectedvirtual |
◆ sendSignal()
| void inet::EthernetCsmaMac::sendSignal |
( |
EthernetSignalBase * |
signal, |
|
|
simtime_t_cref |
duration |
|
) |
| |
|
protectedvirtual |
◆ startFrameTransmission()
| void inet::EthernetCsmaMac::startFrameTransmission |
( |
| ) |
|
|
protectedvirtual |
397 EV_DETAIL <<
"Transmitting a copy of frame " <<
currentTxFrame << endl;
401 const auto& hdr = frame->
peekAtFront<EthernetMacHeader>();
403 ASSERT(!hdr->getSrc().isUnspecified());
406 B extensionLength = minFrameLengthWithExtension > frame->getDataLength() ? (minFrameLengthWithExtension - frame->getDataLength()) :
B(0);
411 B sentFrameByteLength = frame->getDataLength() + extensionLength;
415 *newPacketProtocolTag = *oldPacketProtocolTag;
416 EV_INFO <<
"Transmission of " << frame <<
" started.\n";
417 auto signal =
new EthernetSignal(frame->getName());
421 auto bytes = frame->peekDataAsBytes();
423 frame->insertAtFront(bytes);
425 signal->encapsulate(frame);
426 signal->addByteLength(extensionLength.get());
442 EV_DETAIL <<
"startFrameTransmission(): sending JAM signal.\n";
Referenced by beginSendFrames(), handleEndIFGPeriod(), and handleUpperPacket().
◆ updateRxSignals()
| void inet::EthernetCsmaMac::updateRxSignals |
( |
EthernetSignalBase * |
signal, |
|
|
simtime_t |
endRxTime |
|
) |
| |
|
protectedvirtual |
861 simtime_t maxEndRxTime = endRxTime;
863 bool isUpdate = signal->isUpdate();
864 long signalTransmissionId = signal->getTransmissionId();
867 if (isUpdate && rx.transmissionId == signalTransmissionId) {
872 rx.endRxTime = endRxTime;
875 if (rx.endRxTime > maxEndRxTime)
876 maxEndRxTime = rx.endRxTime;
880 rxSignals.push_back(RxSignal(signalTransmissionId, signal, endRxTime));
882 if (
endRxTimer->getArrivalTime() != maxEndRxTime || endRxTime == maxEndRxTime) {
Referenced by handleSignalFromNetwork(), processConnectDisconnect(), and processMsgFromNetwork().
◆ backoffs
| int inet::EthernetCsmaMac::backoffs = 0 |
|
protected |
◆ backoffSlotsGeneratedSignal
| simsignal_t inet::EthernetCsmaMac::backoffSlotsGeneratedSignal = registerSignal("backoffSlotsGenerated") |
|
staticprotected |
◆ bytesSentInBurst
| B inet::EthernetCsmaMac::bytesSentInBurst = B(0) |
|
protected |
◆ channelBusySince
| simtime_t inet::EthernetCsmaMac::channelBusySince |
|
protected |
◆ collisionSignal
| simsignal_t inet::EthernetCsmaMac::collisionSignal = registerSignal("collision") |
|
staticprotected |
◆ endBackoffTimer
| cMessage* inet::EthernetCsmaMac::endBackoffTimer = nullptr |
|
protected |
◆ endJammingTimer
| cMessage* inet::EthernetCsmaMac::endJammingTimer = nullptr |
|
protected |
◆ endRxTimer
| cMessage* inet::EthernetCsmaMac::endRxTimer = nullptr |
|
protected |
◆ framesSentInBurst
| int inet::EthernetCsmaMac::framesSentInBurst = 0 |
|
protected |
◆ numBackoffs
| unsigned long inet::EthernetCsmaMac::numBackoffs = 0 |
|
protected |
◆ numCollisions
| unsigned long inet::EthernetCsmaMac::numCollisions = 0 |
|
protected |
◆ rxSignals
| std::vector<RxSignal> inet::EthernetCsmaMac::rxSignals |
|
protected |
◆ totalCollisionTime
| simtime_t inet::EthernetCsmaMac::totalCollisionTime |
|
protected |
◆ totalSuccessfulRxTxTime
| simtime_t inet::EthernetCsmaMac::totalSuccessfulRxTxTime |
|
protected |
The documentation for this class was generated from the following files:
opp_component_ptr< NetworkInterface > networkInterface
Definition: MacProtocolBase.h:30
@ ENDIFG
Definition: EthernetMacBase.h:56
B frameInBurstMinBytes
Definition: EthernetMacBase.h:75
virtual void startFrameTransmission()
Definition: EthernetCsmaMac.cc:394
unsigned long numFramesSent
Definition: EthernetMacBase.h:115
virtual void initialize(int stage) override
Definition: EthernetMacBase.cc:188
virtual void txFinished()
Definition: EthernetMacBase.cc:720
std::string str() const
Definition: Units.h:101
static simsignal_t collisionSignal
Definition: EthernetCsmaMac.h:74
unsigned long numDroppedPkFromHLIfaceDown
Definition: EthernetMacBase.h:120
@ ENDTRANSMISSION
Definition: EthernetMacBase.h:59
const B MIN_ETHERNET_FRAME_BYTES
Definition: Ethernet.h:22
simtime_t totalSuccessfulRxTxTime
Definition: EthernetCsmaMac.h:67
B maxBytesInBurst
Definition: EthernetMacBase.h:73
virtual void frameReceptionComplete()
Definition: EthernetCsmaMac.cc:702
static simsignal_t rxPausePkUnitsSignal
Definition: EthernetMacBase.h:130
bool canContinueBurst(b remainingGapLength)
Definition: EthernetCsmaMac.cc:825
unsigned long numBytesSent
Definition: EthernetMacBase.h:117
virtual void encapsulate(Packet *packet)
Definition: EthernetMacBase.cc:380
@ INCORRECTLY_RECEIVED
Definition: Simsignals_m.h:71
unsigned long numDroppedIfaceDown
Definition: EthernetMacBase.h:121
virtual void updateRxSignals(EthernetSignalBase *signal, simtime_t endRxTime)
Definition: EthernetCsmaMac.cc:859
const B JAM_SIGNAL_BYTES
Definition: Ethernet.h:40
cMessage * endBackoffTimer
Definition: EthernetCsmaMac.h:54
virtual void handleEndTxPeriod()
Definition: EthernetCsmaMac.cc:464
simsignal_t packetReceivedFromUpperSignal
Definition: Simsignals.cc:88
const Ptr< const Chunk > peekAtFront(b length=b(-1), int flags=0) const
Returns the designated part from the beginning of the data part of the packet as an immutable chunk i...
Definition: Packet.h:245
virtual void handleRetransmission()
Definition: EthernetCsmaMac.cc:619
@ RETRY_LIMIT_REACHED
Definition: Simsignals_m.h:78
virtual void readChannelParameters(bool errorWhenAsymmetric) override
Calculates datarates, etc.
Definition: EthernetCsmaMac.cc:125
virtual EthernetSignalBase * dup() const override
Definition: EthernetSignal_m.h:85
#define PAUSE_UNIT_BITS
Definition: Ethernet.h:44
static simsignal_t txPausePkUnitsSignal
Definition: EthernetMacBase.h:129
const b INTERFRAME_GAP_BITS
Definition: Ethernet.h:24
removed DscpReq Ipv4ControlInfo Ipv6ControlInfo up L3AddressInd DispatchProtocolReq L4PortInd Ipv4ControlInfo Ipv6ControlInfo down DispatchProtocolReq
Definition: IUdp-gates.txt:25
virtual void scheduleEndPausePeriod(int pauseUnits)
Definition: EthernetCsmaMac.cc:837
void changeReceptionState(MacReceiveState newState)
Definition: EthernetMacBase.cc:655
virtual void cutEthernetSignalEnd(EthernetSignalBase *signal, simtime_t duration)
Definition: EthernetMacBase.cc:699
int backoffs
Definition: EthernetCsmaMac.h:51
virtual void dropCurrentTxFrame(PacketDropDetails &details)
Definition: MacProtocolBase.cc:99
bool verifyCrcAndLength(Packet *packet)
Verify ethernet packet: check FCS and payload length.
Definition: EthernetMacBase.cc:395
@ ENDJAMMING
Definition: EthernetMacBase.h:60
unsigned long numFramesFromHL
Definition: EthernetMacBase.h:119
cGate * physOutGate
Definition: EthernetMacBase.h:97
@ ETHERTYPE_FLOW_CONTROL
Definition: EtherType_m.h:92
@ WAIT_IFG_STATE
Definition: EthernetMacBase.h:36
virtual void printState()
Definition: EthernetCsmaMac.cc:648
static simsignal_t backoffSlotsGeneratedSignal
Definition: EthernetCsmaMac.h:75
simsignal_t receptionStartedSignal
Definition: Simsignals.cc:118
virtual void fillIFGInBurst()
Definition: EthernetCsmaMac.cc:812
const Ptr< const Chunk > peekDataAt(b offset, b length=b(-1), int flags=0) const
Returns the designated data part as an immutable chunk in the current representation.
Definition: Packet.h:332
virtual void processReceivedControlFrame(Packet *packet)
Definition: EthernetCsmaMac.cc:768
virtual void handleEndPausePeriod()
Definition: EthernetCsmaMac.cc:693
B bytesSentInBurst
Definition: EthernetCsmaMac.h:72
simsignal_t packetDroppedSignal
Definition: Simsignals.cc:85
unsigned long numBytesReceivedOK
Definition: EthernetMacBase.h:118
double slotTime
Definition: EthernetMacBase.h:76
@ ENDRECEPTION
Definition: EthernetMacBase.h:57
unsigned long numPauseFramesSent
Definition: EthernetMacBase.h:126
double txrate
Definition: EthernetMacBase.h:69
removed DscpReq Ipv4ControlInfo Ipv6ControlInfo up L3AddressInd DispatchProtocolReq L4PortInd Ipv4ControlInfo Ipv6ControlInfo down PacketProtocolTag
Definition: IUdp-gates.txt:25
virtual void processMsgFromNetwork(EthernetSignalBase *msg)
Definition: EthernetCsmaMac.cc:286
@ RECEIVING_STATE
Definition: EthernetMacBase.h:47
simtime_t lastTxFinishTime
Definition: EthernetMacBase.h:103
double halfBitTime
Definition: EthernetMacBase.h:70
@ PAUSE_STATE
Definition: EthernetMacBase.h:41
@ BACKOFF_STATE
Definition: EthernetMacBase.h:40
virtual bool dropFrameNotForUs(Packet *packet, const Ptr< const EthernetMacHeader > &frame)
Checks destination address and drops the frame when frame is not for us; returns true if frame is dro...
Definition: EthernetMacBase.cc:446
simtime_t channelBusySince
Definition: EthernetCsmaMac.h:68
simsignal_t transmissionEndedSignal
Definition: Simsignals.cc:117
intscale< b, 1, 8 > B
Definition: Units.h:1168
virtual Packet * dup() const override
Definition: Packet.h:171
virtual void handleSignalFromNetwork(EthernetSignalBase *signal)
Definition: EthernetCsmaMac.cc:194
simsignal_t receptionEndedSignal
Definition: Simsignals.cc:119
@ ETHERNET_CONTROL_PAUSE
Definition: EthernetControlFrame_m.h:55
simsignal_t transmissionStartedSignal
Definition: Simsignals.cc:116
int framesSentInBurst
Definition: EthernetCsmaMac.h:71
virtual MacAddress getMacAddress()
Definition: EthernetMacBase.h:142
Packet * currentTxFrame
Currently transmitted frame if any.
Definition: MacProtocolBase.h:35
virtual void processDetectedCollision()
Definition: EthernetCsmaMac.cc:347
virtual void handleEndRxPeriod()
Definition: EthernetCsmaMac.cc:520
simtime_t totalCollisionTime
Definition: EthernetCsmaMac.h:66
virtual void readChannelParameters(bool errorWhenAsymmetric)
Calculates datarates, etc.
Definition: EthernetMacBase.cc:485
cMessage * endRxTimer
Definition: EthernetCsmaMac.h:53
cMessage * endPauseTimer
Definition: EthernetMacBase.h:109
static const Protocol ethernetMac
Definition: Protocol.h:65
bool sendRawBytes
Definition: EthernetMacBase.h:86
cMessage * endJammingTimer
Definition: EthernetCsmaMac.h:55
@ ENDBACKOFF
Definition: EthernetMacBase.h:58
static simsignal_t rxPkOkSignal
Definition: EthernetMacBase.h:128
virtual void scheduleEndIFGPeriod()
Definition: EthernetCsmaMac.cc:803
int upperLayerInGateId
Gate ids.
Definition: MacProtocolBase.h:24
cMessage * endTxTimer
Definition: EthernetMacBase.h:107
INET_API InitStage INITSTAGE_LOCAL
Initialization of local state that don't use or affect other modules includes:
virtual void finish() override
Definition: EthernetMacBase.cc:566
virtual void handleEndIFGPeriod()
Definition: EthernetCsmaMac.cc:357
virtual void processConnectDisconnect()
Definition: EthernetMacBase.cc:347
bool connected
Definition: EthernetMacBase.h:89
void addPaddingAndSetFcs(Packet *packet, B requiredMinByteLength=MIN_ETHERNET_FRAME_BYTES) const
Inserts padding in front of FCS and calculate FCS.
Definition: EthernetMacBase.cc:661
value< int64_t, units::b > b
Definition: Units.h:1241
#define NUM_INIT_STAGES
Definition: InitStageRegistry.h:73
simsignal_t packetReceivedFromLowerSignal
Definition: Simsignals.cc:91
virtual void processAtHandleMessageFinished()
Definition: EthernetMacBase.cc:310
cGate * physInGate
Definition: EthernetMacBase.h:96
virtual void beginSendFrames()
Definition: EthernetCsmaMac.cc:845
const B MAX_ETHERNET_FRAME_BYTES
Definition: Ethernet.h:21
double max(const double a, const double b)
Returns the maximum of a and b.
Definition: SctpAssociation.h:266
unsigned long numDroppedBitError
Definition: EthernetMacBase.h:122
virtual void deleteCurrentTxFrame()
Definition: MacProtocolBase.cc:93
@ JAMMING_STATE
Definition: EthernetMacBase.h:39
cMessage * endIfgTimer
Definition: EthernetMacBase.h:108
@ RX_COLLISION_STATE
Definition: EthernetMacBase.h:48
virtual void sendSignal(EthernetSignalBase *signal, simtime_t_cref duration)
Definition: EthernetCsmaMac.cc:577
bool duplexMode
Definition: EthernetMacBase.h:91
double maxPropagationDelay
Definition: EthernetMacBase.h:77
@ INTERFACE_DOWN
Definition: Simsignals_m.h:72
B calculateMinFrameLength()
Definition: EthernetCsmaMac.cc:386
virtual void initializeStatistics()
Definition: EthernetMacBase.cc:247
virtual void handleEndJammingPeriod()
Definition: EthernetCsmaMac.cc:608
#define Enter_Method(...)
Definition: SelfDoc.h:71
bool channelsDiffer
Definition: EthernetMacBase.h:100
@ RX_IDLE_STATE
Definition: EthernetMacBase.h:46
@ SEND_IFG_STATE
Definition: EthernetMacBase.h:37
virtual void handleEndBackoffPeriod()
Definition: EthernetCsmaMac.cc:559
unsigned long numCollisions
Definition: EthernetCsmaMac.h:69
virtual Packet * dequeuePacket()
Definition: MacProtocolBase.cc:175
EthernetSignalBase * curTxSignal
Definition: EthernetMacBase.h:112
const B SFD_BYTES
Definition: Ethernet.h:42
#define MAX_ATTEMPTS
Definition: Ethernet.h:38
simsignal_t packetSentToUpperSignal
Definition: Simsignals.cc:87
opp_component_ptr< queueing::IPacketQueue > txQueue
Messages received from upper layer and to be transmitted later.
Definition: MacProtocolBase.h:38
virtual void handleUpperPacket(Packet *msg) override
Definition: EthernetCsmaMac.cc:239
bool frameBursting
Definition: EthernetMacBase.h:92
virtual void dropCurrentTxFrame(PacketDropDetails &details) override
Definition: EthernetCsmaMac.cc:887
virtual void sendJamSignal()
Definition: EthernetCsmaMac.cc:586
static const double SPEED_OF_LIGHT_IN_CABLE
Definition: EthernetMacBase.h:136
unsigned long numPauseFramesRcvd
Definition: EthernetMacBase.h:125
MacReceiveState receiveState
Definition: EthernetMacBase.h:102
@ ENDPAUSE
Definition: EthernetMacBase.h:61
const B PREAMBLE_BYTES
Definition: Ethernet.h:41
int pauseUnitsRequested
Definition: EthernetMacBase.h:104
virtual bool canDequeuePacket() const
Definition: MacProtocolBase.cc:170
MacTransmitState transmitState
Definition: EthernetMacBase.h:101
B halfDuplexFrameMinBytes
Definition: EthernetMacBase.h:74
@ TRANSMITTING_STATE
Definition: EthernetMacBase.h:38
unsigned long numFramesReceivedOK
Definition: EthernetMacBase.h:116
unsigned long numFramesPassedToHL
Definition: EthernetMacBase.h:124
@ TX_IDLE_STATE
Definition: EthernetMacBase.h:35
unsigned long numBackoffs
Definition: EthernetCsmaMac.h:70
virtual void handleSelfMessage(cMessage *msg) override
Definition: EthernetCsmaMac.cc:135
@ RX_RECONNECT_STATE
Definition: EthernetMacBase.h:49
virtual void initializeFlags()
Definition: EthernetMacBase.cc:229
const EtherDescr * curEtherDescr
Definition: EthernetMacBase.h:88
virtual void decapsulate(Packet *packet)
Definition: EthernetMacBase.cc:387
std::vector< RxSignal > rxSignals
Definition: EthernetCsmaMac.h:47
virtual void processReceivedDataFrame(Packet *frame)
Definition: EthernetCsmaMac.cc:748
void changeTransmissionState(MacTransmitState newState)
Definition: EthernetMacBase.cc:649
#define BACKOFF_RANGE_LIMIT
Definition: Ethernet.h:39
simsignal_t packetSentToLowerSignal
Definition: Simsignals.cc:90