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

#include <CsmaCaMac.h>

Inheritance diagram for inet::CsmaCaMac:
inet::MACProtocolBase inet::LayeredProtocolBase inet::OperationalBase inet::ILifecycle

Public Member Functions

Construction functions
virtual ~CsmaCaMac ()
 
- Public Member Functions inherited from inet::OperationalBase
 OperationalBase ()
 
- Public Member Functions inherited from inet::ILifecycle
virtual ~ILifecycle ()
 

Protected Member Functions

Initialization functions
virtual void initialize (int stage) override
 Initialization of the module and its variables. More...
 
virtual void initializeQueueModule ()
 
virtual void finish () override
 
virtual InterfaceEntrycreateInterfaceEntry () override
 
Message handing functions

Functions called from other classes to notify about state changes and to handle messages.

virtual void handleSelfMessage (cMessage *msg) override
 
virtual void handleUpperPacket (cPacket *msg) override
 
virtual void handleLowerPacket (cPacket *msg) override
 
virtual void handleWithFsm (cMessage *msg)
 
virtual void receiveSignal (cComponent *source, simsignal_t signalID, long value, cObject *details) override
 
virtual CsmaCaMacDataFrameencapsulate (cPacket *msg)
 
virtual cPacket * decapsulate (CsmaCaMacDataFrame *frame)
 
Timer functions

These functions have the side effect of starting the corresponding timers.

virtual void scheduleSifsTimer (CsmaCaMacFrame *frame)
 
virtual void scheduleDifsTimer ()
 
virtual void cancelDifsTimer ()
 
virtual void scheduleAckTimeout (CsmaCaMacDataFrame *frame)
 
virtual void cancelAckTimer ()
 
virtual void invalidateBackoffPeriod ()
 
virtual bool isInvalidBackoffPeriod ()
 
virtual void generateBackoffPeriod ()
 
virtual void decreaseBackoffPeriod ()
 
virtual void scheduleBackoffTimer ()
 
virtual void cancelBackoffTimer ()
 
Frame transmission functions
virtual void sendDataFrame (CsmaCaMacDataFrame *frameToSend)
 
virtual void sendAckFrame ()
 
Utility functions
virtual void finishCurrentTransmission ()
 
virtual void giveUpCurrentTransmission ()
 
virtual void retryCurrentTransmission ()
 
virtual CsmaCaMacDataFramegetCurrentTransmission ()
 
virtual void popTransmissionQueue ()
 
virtual void resetStateVariables ()
 
virtual bool isMediumFree ()
 
virtual bool isReceiving ()
 
virtual bool isAck (CsmaCaMacFrame *frame)
 
virtual bool isBroadcast (CsmaCaMacFrame *msg)
 
virtual bool isForUs (CsmaCaMacFrame *msg)
 
- Protected Member Functions inherited from inet::MACProtocolBase
 MACProtocolBase ()
 
virtual void registerInterface ()
 
virtual void sendUp (cMessage *message)
 
virtual void sendDown (cMessage *message)
 
virtual bool isUpperMessage (cMessage *message) override
 
virtual bool isLowerMessage (cMessage *message) override
 
virtual bool isInitializeStage (int stage) override
 
virtual bool isNodeStartStage (int stage) override
 
virtual bool isNodeShutdownStage (int stage) override
 
- Protected Member Functions inherited from inet::LayeredProtocolBase
virtual void handleMessageWhenUp (cMessage *message) override
 
virtual void handleUpperCommand (cMessage *message)
 
virtual void handleLowerCommand (cMessage *message)
 
- Protected Member Functions inherited from inet::OperationalBase
virtual int numInitStages () const override
 
virtual void handleMessage (cMessage *msg) override
 
virtual void handleMessageWhenDown (cMessage *msg)
 
virtual bool handleOperationStage (LifecycleOperation *operation, int stage, IDoneCallback *doneCallback) override
 Perform one stage of a lifecycle operation. More...
 
virtual bool handleNodeStart (IDoneCallback *doneCallback)
 
virtual bool handleNodeShutdown (IDoneCallback *doneCallback)
 
virtual void handleNodeCrash ()
 
virtual void setOperational (bool isOperational)
 

Protected Attributes

Configuration parameters
MACAddress address
 
bool useAck = true
 
double bitrate = NaN
 
int headerLength = -1
 
int ackLength = -1
 
simtime_t ackTimeout = -1
 
simtime_t slotTime = -1
 
simtime_t sifsTime = -1
 
simtime_t difsTime = -1
 
int maxQueueSize = -1
 
int retryLimit = -1
 
int cwMin = -1
 
int cwMax = -1
 
int cwMulticast = -1
 
Timer messages
cMessage * endSifs = nullptr
 End of the Short Inter-Frame Time period. More...
 
cMessage * endDifs = nullptr
 End of the Data Inter-Frame Time period. More...
 
cMessage * endBackoff = nullptr
 End of the backoff period. More...
 
cMessage * endAckTimeout = nullptr
 End of the ack timeout. More...
 
cMessage * endData = nullptr
 Timeout after the transmission of a Data frame. More...
 
cMessage * mediumStateChange = nullptr
 Radio state change self message. More...
 
Statistics
long numRetry
 
long numSentWithoutRetry
 
long numGivenUp
 
long numCollision
 
long numSent
 
long numReceived
 
long numSentBroadcast
 
long numReceivedBroadcast
 
- Protected Attributes inherited from inet::OperationalBase
bool isOperational
 
simtime_t lastChange
 

CsmaCaMac state variables

Various state information checked and modified according to the state machine.

enum  State {
  IDLE, DEFER, WAITDIFS, BACKOFF,
  TRANSMIT, WAITACK, RECEIVE, WAITSIFS
}
 
IRadioradio = nullptr
 
IRadio::TransmissionState transmissionState = IRadio::TRANSMISSION_STATE_UNDEFINED
 
cFSM fsm
 
simtime_t backoffPeriod = -1
 Remaining backoff period in seconds. More...
 
int retryCounter = -1
 Number of frame retransmission attempts. More...
 
PacketQueue transmissionQueue
 Messages received from upper layer and to be transmitted later. More...
 
IPassiveQueuequeueModule = nullptr
 Passive queue module to request messages from. More...
 

Additional Inherited Members

- Public Attributes inherited from inet::MACProtocolBase
InterfaceEntryinterfaceEntry
 
int upperLayerInGateId
 Gate ids. More...
 
int upperLayerOutGateId
 
int lowerLayerInGateId
 
int lowerLayerOutGateId
 
- Static Public Attributes inherited from inet::LayeredProtocolBase
static simsignal_t packetSentToUpperSignal = registerSignal("packetSentToUpper")
 
static simsignal_t packetReceivedFromUpperSignal = registerSignal("packetReceivedFromUpper")
 
static simsignal_t packetFromUpperDroppedSignal = registerSignal("packetFromUpperDropped")
 
static simsignal_t packetSentToLowerSignal = registerSignal("packetSentToLower")
 
static simsignal_t packetReceivedFromLowerSignal = registerSignal("packetReceivedFromLower")
 
static simsignal_t packetFromLowerDroppedSignal = registerSignal("packetFromLowerDropped")
 

Member Enumeration Documentation

enum inet::CsmaCaMac::State
protected
Enumerator
IDLE 
DEFER 
WAITDIFS 
BACKOFF 
TRANSMIT 
WAITACK 
RECEIVE 
WAITSIFS 
60  {
61  IDLE,
62  DEFER,
63  WAITDIFS,
64  BACKOFF,
65  TRANSMIT,
66  WAITACK,
67  RECEIVE,
68  WAITSIFS,
69  };
Definition: CsmaCaMac.h:66
Definition: CsmaCaMac.h:63
Definition: CsmaCaMac.h:64
Definition: CsmaCaMac.h:65
Definition: CsmaCaMac.h:67
Definition: CsmaCaMac.h:62
Definition: CsmaCaMac.h:68
Definition: CsmaCaMac.h:61

Constructor & Destructor Documentation

inet::CsmaCaMac::~CsmaCaMac ( )
virtual
40 {
41  cancelAndDelete(endSifs);
42  cancelAndDelete(endDifs);
43  cancelAndDelete(endBackoff);
44  cancelAndDelete(endAckTimeout);
45  cancelAndDelete(endData);
46  cancelAndDelete(mediumStateChange);
47 }
cMessage * endSifs
End of the Short Inter-Frame Time period.
Definition: CsmaCaMac.h:92
cMessage * endAckTimeout
End of the ack timeout.
Definition: CsmaCaMac.h:101
cMessage * endBackoff
End of the backoff period.
Definition: CsmaCaMac.h:98
cMessage * mediumStateChange
Radio state change self message.
Definition: CsmaCaMac.h:107
cMessage * endDifs
End of the Data Inter-Frame Time period.
Definition: CsmaCaMac.h:95
cMessage * endData
Timeout after the transmission of a Data frame.
Definition: CsmaCaMac.h:104

Member Function Documentation

void inet::CsmaCaMac::cancelAckTimer ( )
protectedvirtual

Referenced by handleWithFsm().

483 {
484  EV << "canceling ACK timer\n";
485  cancelEvent(endAckTimeout);
486 }
cMessage * endAckTimeout
End of the ack timeout.
Definition: CsmaCaMac.h:101
void inet::CsmaCaMac::cancelBackoffTimer ( )
protectedvirtual

Referenced by handleWithFsm().

531 {
532  EV << "canceling backoff timer\n";
533  cancelEvent(endBackoff);
534 }
cMessage * endBackoff
End of the backoff period.
Definition: CsmaCaMac.h:98
void inet::CsmaCaMac::cancelDifsTimer ( )
protectedvirtual

Referenced by handleWithFsm().

471 {
472  EV << "canceling DIFS timer\n";
473  cancelEvent(endDifs);
474 }
cMessage * endDifs
End of the Data Inter-Frame Time period.
Definition: CsmaCaMac.h:95
InterfaceEntry * inet::CsmaCaMac::createInterfaceEntry ( )
overrideprotectedvirtual

Implements inet::MACProtocolBase.

166 {
167  InterfaceEntry *e = new InterfaceEntry(this);
168 
169  // data rate
170  e->setDatarate(bitrate);
171 
172  // generate a link-layer address to be used as interface token for IPv6
173  e->setMACAddress(address);
174  e->setInterfaceToken(address.formInterfaceIdentifier());
175 
176  // capabilities
177  e->setMtu(par("mtu"));
178  e->setMulticast(true);
179  e->setBroadcast(true);
180  e->setPointToPoint(false);
181 
182  return e;
183 }
const value< double, units::C > e(1.602176487e-19)
InterfaceToken formInterfaceIdentifier() const
Create interface identifier (IEEE EUI-64) which can be used by IPv6 stateless address autoconfigurati...
Definition: MACAddress.cc:136
MACAddress address
Definition: CsmaCaMac.h:39
double bitrate
Definition: CsmaCaMac.h:41
cPacket * inet::CsmaCaMac::decapsulate ( CsmaCaMacDataFrame frame)
protectedvirtual

Referenced by handleWithFsm().

441 {
442  cPacket *payload = frame->decapsulate();
443 
444  Ieee802Ctrl *ctrl = new Ieee802Ctrl();
445  ctrl->setSrc(frame->getTransmitterAddress());
446  ctrl->setDest(frame->getReceiverAddress());
447  ctrl->setUserPriority(frame->getPriority());
448  payload->setControlInfo(ctrl);
449 
450  delete frame;
451  return payload;
452 }
void inet::CsmaCaMac::decreaseBackoffPeriod ( )
protectedvirtual

Referenced by handleWithFsm().

515 {
516  simtime_t elapsedBackoffTime = simTime() - endBackoff->getSendingTime();
517  backoffPeriod -= ((int)(elapsedBackoffTime / slotTime)) * slotTime;
518  ASSERT(backoffPeriod >= 0);
519  EV << "backoff period decreased to " << backoffPeriod << endl;
520 }
simtime_t backoffPeriod
Remaining backoff period in seconds.
Definition: CsmaCaMac.h:77
simtime_t slotTime
Definition: CsmaCaMac.h:45
cMessage * endBackoff
End of the backoff period.
Definition: CsmaCaMac.h:98
CsmaCaMacDataFrame * inet::CsmaCaMac::encapsulate ( cPacket *  msg)
protectedvirtual

Referenced by handleUpperPacket().

423 {
424  CsmaCaMacDataFrame *frame = new CsmaCaMacDataFrame(msg->getName());
425  frame->setByteLength(headerLength);
426  // TODO: kludge to make isUpperMessage work
427  frame->setArrival(msg->getArrivalModuleId(), msg->getArrivalGateId());
428 
429  Ieee802Ctrl *ctrl = check_and_cast<Ieee802Ctrl *>(msg->removeControlInfo());
430  frame->setTransmitterAddress(address);
431  frame->setReceiverAddress(ctrl->getDest());
432  int up = ctrl->getUserPriority();
433  frame->setPriority(up == -1 ? UP_BE : up); // -1 is unset
434  delete ctrl;
435 
436  frame->encapsulate(msg);
437  return frame;
438 }
Definition: UserPriority.h:33
int headerLength
Definition: CsmaCaMac.h:42
MACAddress address
Definition: CsmaCaMac.h:39
void inet::CsmaCaMac::finish ( )
overrideprotectedvirtual
154 {
155  recordScalar("numRetry", numRetry);
156  recordScalar("numSentWithoutRetry", numSentWithoutRetry);
157  recordScalar("numGivenUp", numGivenUp);
158  recordScalar("numCollision", numCollision);
159  recordScalar("numSent", numSent);
160  recordScalar("numReceived", numReceived);
161  recordScalar("numSentBroadcast", numSentBroadcast);
162  recordScalar("numReceivedBroadcast", numReceivedBroadcast);
163 }
long numSentWithoutRetry
Definition: CsmaCaMac.h:113
long numReceivedBroadcast
Definition: CsmaCaMac.h:119
long numGivenUp
Definition: CsmaCaMac.h:114
long numSentBroadcast
Definition: CsmaCaMac.h:118
long numReceived
Definition: CsmaCaMac.h:117
long numSent
Definition: CsmaCaMac.h:116
long numCollision
Definition: CsmaCaMac.h:115
long numRetry
Definition: CsmaCaMac.h:112
void inet::CsmaCaMac::finishCurrentTransmission ( )
protectedvirtual

Referenced by handleWithFsm().

563 {
566 }
virtual void resetStateVariables()
Definition: CsmaCaMac.cc:600
virtual void popTransmissionQueue()
Definition: CsmaCaMac.cc:589
void inet::CsmaCaMac::generateBackoffPeriod ( )
protectedvirtual

Referenced by retryCurrentTransmission(), and scheduleBackoffTimer().

499 {
500  ASSERT(0 <= retryCounter && retryCounter <= retryLimit);
501  EV << "generating backoff slot number for retry: " << retryCounter << endl;
502  int cw;
503  if (getCurrentTransmission()->getReceiverAddress().isMulticast())
504  cw = cwMulticast;
505  else
506  cw = std::min(cwMax, (cwMin + 1) * (1 << retryCounter) - 1);
507  int slots = intrand(cw + 1);
508  EV << "generated backoff slot number: " << slots << " , cw: " << cw << endl;
509  backoffPeriod = slots * slotTime;
510  ASSERT(backoffPeriod >= 0);
511  EV << "backoff period set to " << backoffPeriod << endl;
512 }
int cwMin
Definition: CsmaCaMac.h:50
virtual CsmaCaMacDataFrame * getCurrentTransmission()
Definition: CsmaCaMac.cc:584
double min(const double a, const double b)
Returns the minimum of a and b.
Definition: SCTPAssociation.h:270
simtime_t backoffPeriod
Remaining backoff period in seconds.
Definition: CsmaCaMac.h:77
int retryLimit
Definition: CsmaCaMac.h:49
simtime_t slotTime
Definition: CsmaCaMac.h:45
int retryCounter
Number of frame retransmission attempts.
Definition: CsmaCaMac.h:80
int cwMulticast
Definition: CsmaCaMac.h:52
int cwMax
Definition: CsmaCaMac.h:51
CsmaCaMacDataFrame * inet::CsmaCaMac::getCurrentTransmission ( )
protectedvirtual

Referenced by generateBackoffPeriod(), giveUpCurrentTransmission(), and handleWithFsm().

585 {
586  return static_cast<CsmaCaMacDataFrame*>(transmissionQueue.front());
587 }
PacketQueue transmissionQueue
Messages received from upper layer and to be transmitted later.
Definition: CsmaCaMac.h:83
void inet::CsmaCaMac::giveUpCurrentTransmission ( )
protectedvirtual

Referenced by handleWithFsm().

569 {
573  numGivenUp++;
574 }
simsignal_t NF_LINK_BREAK
Definition: NotifierConsts.cc:43
long numGivenUp
Definition: CsmaCaMac.h:114
virtual CsmaCaMacDataFrame * getCurrentTransmission()
Definition: CsmaCaMac.cc:584
virtual void resetStateVariables()
Definition: CsmaCaMac.cc:600
virtual void popTransmissionQueue()
Definition: CsmaCaMac.cc:589
void inet::CsmaCaMac::handleLowerPacket ( cPacket *  msg)
overrideprotectedvirtual

Implements inet::LayeredProtocolBase.

213 {
214  EV << "received message from lower layer: " << msg << endl;
215 
216  CsmaCaMacFrame *frame = check_and_cast<CsmaCaMacFrame *>(msg);
217  EV << "Self address: " << address
218  << ", receiver address: " << frame->getReceiverAddress()
219  << ", received frame is for us: " << isForUs(frame) << endl;
220 
221  handleWithFsm(msg);
222 }
virtual bool isForUs(CsmaCaMacFrame *msg)
Definition: CsmaCaMac.cc:626
virtual void handleWithFsm(cMessage *msg)
Definition: CsmaCaMac.cc:224
MACAddress address
Definition: CsmaCaMac.h:39
void inet::CsmaCaMac::handleSelfMessage ( cMessage *  msg)
overrideprotectedvirtual

Reimplemented from inet::LayeredProtocolBase.

189 {
190  EV << "received self message: " << msg << endl;
191  handleWithFsm(msg);
192 }
virtual void handleWithFsm(cMessage *msg)
Definition: CsmaCaMac.cc:224
void inet::CsmaCaMac::handleUpperPacket ( cPacket *  msg)
overrideprotectedvirtual

Implements inet::LayeredProtocolBase.

195 {
196  if (maxQueueSize != -1 && (int)transmissionQueue.getLength() == maxQueueSize) {
197  EV << "message " << msg << " received from higher layer but MAC queue is full, dropping message\n";
199  delete msg;
200  return;
201  }
202  CsmaCaMacDataFrame *frame = encapsulate(msg);
203  EV << "frame " << frame << " received from higher layer, receiver = " << frame->getReceiverAddress() << endl;
204  ASSERT(!frame->getReceiverAddress().isUnspecified());
205  transmissionQueue.insert(frame);
206  if (fsm.getState() != IDLE)
207  EV << "deferring upper message transmission in " << fsm.getStateName() << " state\n";
208  else
209  handleWithFsm(frame);
210 }
cFSM fsm
Definition: CsmaCaMac.h:74
virtual CsmaCaMacDataFrame * encapsulate(cPacket *msg)
Definition: CsmaCaMac.cc:422
PacketQueue transmissionQueue
Messages received from upper layer and to be transmitted later.
Definition: CsmaCaMac.h:83
int maxQueueSize
Definition: CsmaCaMac.h:48
static simsignal_t packetFromUpperDroppedSignal
Definition: LayeredProtocolBase.h:30
virtual void handleWithFsm(cMessage *msg)
Definition: CsmaCaMac.cc:224
Definition: CsmaCaMac.h:61
virtual void insert(cPacket *packet)
Definition: PacketQueue.cc:34
void inet::CsmaCaMac::handleWithFsm ( cMessage *  msg)
protectedvirtual

Referenced by handleLowerPacket(), handleSelfMessage(), handleUpperPacket(), and receiveSignal().

225 {
226  CsmaCaMacFrame *frame = dynamic_cast<CsmaCaMacFrame*>(msg);
228  {
230  {
231  FSMA_Event_Transition(Defer-Transmit,
232  isUpperMessage(msg) && !isMediumFree(),
233  DEFER,
234  );
235  FSMA_Event_Transition(Start-Backoff,
236  isUpperMessage(msg) && isMediumFree() && !useAck,
237  BACKOFF,
238  );
239  FSMA_Event_Transition(Start-Difs,
240  isUpperMessage(msg) && isMediumFree() && useAck,
241  WAITDIFS,
242  );
243  FSMA_Event_Transition(Start-Receive,
244  msg == mediumStateChange && isReceiving(),
245  RECEIVE,
246  );
247  }
249  {
250  FSMA_Event_Transition(Start-Backoff,
251  msg == mediumStateChange && isMediumFree() && !useAck,
252  BACKOFF,
253  );
254  FSMA_Event_Transition(Start-Difs,
255  msg == mediumStateChange && isMediumFree() && useAck,
256  WAITDIFS,
257  );
258  FSMA_Event_Transition(Start-Receive,
259  msg == mediumStateChange && isReceiving(),
260  RECEIVE,
261  );
262  }
264  {
266  FSMA_Event_Transition(Start-Backoff,
267  msg == endDifs,
268  BACKOFF,
269  );
270  FSMA_Event_Transition(Start-Receive,
271  msg == mediumStateChange && isReceiving(),
272  RECEIVE,
273  cancelDifsTimer();
274  );
275  FSMA_Event_Transition(Defer-Difs,
276  msg == mediumStateChange && !isMediumFree(),
277  DEFER,
278  cancelDifsTimer();
279  );
280  }
282  {
284  FSMA_Event_Transition(Start-Transmit,
285  msg == endBackoff,
286  TRANSMIT,
288  );
289  FSMA_Event_Transition(Start-Receive,
290  msg == mediumStateChange && isReceiving(),
291  RECEIVE,
294  );
295  FSMA_Event_Transition(Defer-Backoff,
296  msg == mediumStateChange && !isMediumFree(),
297  DEFER,
300  );
301  }
303  {
305  FSMA_Event_Transition(Transmit-Broadcast,
307  IDLE,
310  );
311  FSMA_Event_Transition(Transmit-Unicast-No-Ack,
313  IDLE,
315  numSent++;
316  );
317  FSMA_Event_Transition(Transmit-Unicast-Use-Ack,
319  WAITACK,
320  );
321  }
323  {
325  FSMA_Event_Transition(Receive-Ack,
326  isLowerMessage(msg) && isForUs(frame) && isAck(frame),
327  IDLE,
328  if (retryCounter == 0) numSentWithoutRetry++;
329  numSent++;
330  cancelAckTimer();
332  delete frame;
333  );
334  FSMA_Event_Transition(Give-Up-Transmission,
336  IDLE,
338  );
339  FSMA_Event_Transition(Retry-Transmission,
340  msg == endAckTimeout,
341  IDLE,
343  );
344  }
346  {
347  FSMA_Event_Transition(Receive-Bit-Error,
348  isLowerMessage(msg) && frame->hasBitError(),
349  IDLE,
350  // TODO: reason? emit(LayeredProtocolBase::packetFromLowerDroppedSignal, frame);
351  delete frame;
352  numCollision++;
354  );
355  FSMA_Event_Transition(Receive-Unexpected-Ack,
356  isLowerMessage(msg) && isAck(frame),
357  IDLE,
358  delete frame;
360  );
361  FSMA_Event_Transition(Receive-Broadcast,
362  isLowerMessage(msg) && isBroadcast(frame),
363  IDLE,
364  sendUp(decapsulate(check_and_cast<CsmaCaMacDataFrame *>(frame)));
367  );
368  FSMA_Event_Transition(Receive-Unicast-No-Ack,
369  isLowerMessage(msg) && isForUs(frame) && !useAck,
370  IDLE,
371  sendUp(decapsulate(check_and_cast<CsmaCaMacDataFrame *>(frame)));
372  numReceived++;
374  );
375  FSMA_Event_Transition(Receive-Unicast-Use-Ack,
376  isLowerMessage(msg) && isForUs(frame) && useAck,
377  WAITSIFS,
378  sendUp(decapsulate(check_and_cast<CsmaCaMacDataFrame *>(frame->dup())));
379  numReceived++;
380  );
381  FSMA_Event_Transition(Receive-Unicast-Not-For-Us,
382  isLowerMessage(msg) && !isForUs(frame),
383  IDLE,
384  delete frame;
386  );
387  }
389  {
391  FSMA_Event_Transition(Transmit-Ack,
392  msg == endSifs,
393  IDLE,
394  sendAckFrame();
396  );
397  }
398  }
399  if (fsm.getState() == IDLE) {
400  if (isReceiving())
402  else if (!transmissionQueue.isEmpty())
404  }
405 }
virtual void cancelDifsTimer()
Definition: CsmaCaMac.cc:470
virtual void giveUpCurrentTransmission()
Definition: CsmaCaMac.cc:568
virtual void scheduleBackoffTimer()
Definition: CsmaCaMac.cc:522
cFSM fsm
Definition: CsmaCaMac.h:74
long numSentWithoutRetry
Definition: CsmaCaMac.h:113
PacketQueue transmissionQueue
Messages received from upper layer and to be transmitted later.
Definition: CsmaCaMac.h:83
virtual void scheduleDifsTimer()
Definition: CsmaCaMac.cc:464
virtual bool isReceiving()
Definition: CsmaCaMac.cc:611
long numReceivedBroadcast
Definition: CsmaCaMac.h:119
virtual CsmaCaMacDataFrame * getCurrentTransmission()
Definition: CsmaCaMac.cc:584
virtual bool isAck(CsmaCaMacFrame *frame)
Definition: CsmaCaMac.cc:616
Definition: CsmaCaMac.h:66
#define FSMA_State(s)
Definition: FSMA.h:117
virtual void decreaseBackoffPeriod()
Definition: CsmaCaMac.cc:514
virtual bool isForUs(CsmaCaMacFrame *msg)
Definition: CsmaCaMac.cc:626
virtual bool isUpperMessage(cMessage *message) override
Definition: MACProtocolBase.cc:66
long numSentBroadcast
Definition: CsmaCaMac.h:118
Definition: CsmaCaMac.h:63
virtual void finishCurrentTransmission()
Definition: CsmaCaMac.cc:562
virtual bool isMediumFree()
Definition: CsmaCaMac.cc:606
virtual void scheduleAckTimeout(CsmaCaMacDataFrame *frame)
Definition: CsmaCaMac.cc:476
#define FSMA_Switch(fsm)
Definition: FSMA.h:101
cMessage * endSifs
End of the Short Inter-Frame Time period.
Definition: CsmaCaMac.h:92
virtual void cancelAckTimer()
Definition: CsmaCaMac.cc:482
virtual void sendUp(cMessage *message)
Definition: MACProtocolBase.cc:52
int retryLimit
Definition: CsmaCaMac.h:49
#define FSMA_Event_Transition(transition, condition, target, action)
Definition: FSMA.h:127
virtual void resetStateVariables()
Definition: CsmaCaMac.cc:600
virtual cPacket * decapsulate(CsmaCaMacDataFrame *frame)
Definition: CsmaCaMac.cc:440
Definition: CsmaCaMac.h:64
long numReceived
Definition: CsmaCaMac.h:117
virtual void sendAckFrame()
Definition: CsmaCaMac.cc:546
virtual void cancelBackoffTimer()
Definition: CsmaCaMac.cc:530
cMessage * endAckTimeout
End of the ack timeout.
Definition: CsmaCaMac.h:101
Definition: CsmaCaMac.h:65
Definition: CsmaCaMac.h:67
bool useAck
Definition: CsmaCaMac.h:40
virtual bool isBroadcast(CsmaCaMacFrame *msg)
Definition: CsmaCaMac.cc:621
int retryCounter
Number of frame retransmission attempts.
Definition: CsmaCaMac.h:80
cMessage * endBackoff
End of the backoff period.
Definition: CsmaCaMac.h:98
Definition: CsmaCaMac.h:62
long numSent
Definition: CsmaCaMac.h:116
#define FSMA_Enter(action)
Definition: FSMA.h:119
cMessage * mediumStateChange
Radio state change self message.
Definition: CsmaCaMac.h:107
virtual void handleWithFsm(cMessage *msg)
Definition: CsmaCaMac.cc:224
cMessage * endDifs
End of the Data Inter-Frame Time period.
Definition: CsmaCaMac.h:95
virtual void retryCurrentTransmission()
Definition: CsmaCaMac.cc:576
Definition: CsmaCaMac.h:68
long numCollision
Definition: CsmaCaMac.h:115
cMessage * endData
Timeout after the transmission of a Data frame.
Definition: CsmaCaMac.h:104
virtual bool isLowerMessage(cMessage *message) override
Definition: MACProtocolBase.cc:71
virtual void sendDataFrame(CsmaCaMacDataFrame *frameToSend)
Definition: CsmaCaMac.cc:539
virtual void invalidateBackoffPeriod()
Definition: CsmaCaMac.cc:488
virtual void scheduleSifsTimer(CsmaCaMacFrame *frame)
Definition: CsmaCaMac.cc:457
Definition: CsmaCaMac.h:61
void inet::CsmaCaMac::initialize ( int  stage)
overrideprotectedvirtual

Initialization of the module and its variables.

Reimplemented from inet::MACProtocolBase.

53 {
55 
56  if (stage == INITSTAGE_LOCAL) {
57  EV << "Initializing stage 0\n";
58 
59  maxQueueSize = par("maxQueueSize");
60  useAck = par("useAck");
61  bitrate = par("bitrate");
62  headerLength = par("headerLength");
63  ackLength = par("ackLength");
64  ackTimeout = par("ackTimeout");
65  slotTime = par("slotTime");
66  sifsTime = par("sifsTime");
67  difsTime = par("difsTime");
68  cwMin = par("cwMin");
69  cwMax = par("cwMax");
70  cwMulticast = par("cwMulticast");
71  retryLimit = par("retryLimit");
72 
73  const char *addressString = par("address");
74  if (!strcmp(addressString, "auto")) {
75  // assign automatic address
77  // change module parameter from "auto" to concrete address
78  par("address").setStringValue(address.str().c_str());
79  }
80  else
81  address.setAddress(addressString);
83 
84  // subscribe for the information of the carrier sense
85  cModule *radioModule = getModuleFromPar<cModule>(par("radioModule"), this);
86  radioModule->subscribe(IRadio::receptionStateChangedSignal, this);
87  radioModule->subscribe(IRadio::transmissionStateChangedSignal, this);
88  radio = check_and_cast<IRadio *>(radioModule);
89 
90  // initialize self messages
91  endSifs = new cMessage("SIFS");
92  endDifs = new cMessage("DIFS");
93  endBackoff = new cMessage("Backoff");
94  endAckTimeout = new cMessage("AckTimeout");
95  endData = new cMessage("Data");
96  mediumStateChange = new cMessage("MediumStateChange");
97 
98  // set up internal queue
100  transmissionQueue.setName("transmissionQueue");
101  if (par("prioritizeByUP"))
102  transmissionQueue.setup(&compareFramesByPriority);
103 
104  // obtain pointer to external queue
106 
107  // state variables
108  fsm.setName("CsmaCaMac State Machine");
109  backoffPeriod = -1;
110  retryCounter = 0;
111 
112  // statistics
113  numRetry = 0;
115  numGivenUp = 0;
116  numCollision = 0;
117  numSent = 0;
118  numReceived = 0;
119  numSentBroadcast = 0;
121 
122  // initialize watches
123  WATCH(fsm);
124  WATCH(backoffPeriod);
125  WATCH(retryCounter);
126  WATCH(numRetry);
127  WATCH(numSentWithoutRetry);
128  WATCH(numGivenUp);
129  WATCH(numCollision);
130  WATCH(numSent);
131  WATCH(numReceived);
132  WATCH(numSentBroadcast);
133  WATCH(numReceivedBroadcast);
134  }
135  else if (stage == INITSTAGE_LINK_LAYER)
137 }
simtime_t sifsTime
Definition: CsmaCaMac.h:46
int cwMin
Definition: CsmaCaMac.h:50
cFSM fsm
Definition: CsmaCaMac.h:74
long numSentWithoutRetry
Definition: CsmaCaMac.h:113
PacketQueue transmissionQueue
Messages received from upper layer and to be transmitted later.
Definition: CsmaCaMac.h:83
long numReceivedBroadcast
Definition: CsmaCaMac.h:119
long numGivenUp
Definition: CsmaCaMac.h:114
virtual void setRadioMode(RadioMode radioMode)=0
Changes the current radio mode.
virtual void initialize(int stage) override
Definition: MACProtocolBase.cc:31
long numSentBroadcast
Definition: CsmaCaMac.h:118
simtime_t difsTime
Definition: CsmaCaMac.h:47
cMessage * endSifs
End of the Short Inter-Frame Time period.
Definition: CsmaCaMac.h:92
IRadio * radio
Definition: CsmaCaMac.h:71
std::string str() const
Converts address to a hex string.
Definition: MACAddress.cc:121
simtime_t backoffPeriod
Remaining backoff period in seconds.
Definition: CsmaCaMac.h:77
int retryLimit
Definition: CsmaCaMac.h:49
Local initializations.
Definition: InitStages.h:35
Initialization of link-layer protocols.
Definition: InitStages.h:59
int maxQueueSize
Definition: CsmaCaMac.h:48
void setAddress(const char *hexstr)
Converts address value from hex string (12 hex digits, may also contain spaces, hyphens and colons) ...
Definition: MACAddress.cc:102
The radio is prepared for frame reception, frame transmission is not possible, power consumption is l...
Definition: IRadio.h:109
static MACAddress generateAutoAddress()
Generates a unique address which begins with 0a:aa and ends in a unique suffix.
Definition: MACAddress.cc:143
static simsignal_t receptionStateChangedSignal
This signal is emitted every time the radio reception state changes.
Definition: IRadio.h:66
long numReceived
Definition: CsmaCaMac.h:117
virtual void registerInterface()
Definition: MACProtocolBase.cc:42
simtime_t slotTime
Definition: CsmaCaMac.h:45
cMessage * endAckTimeout
End of the ack timeout.
Definition: CsmaCaMac.h:101
virtual void initializeQueueModule()
Definition: CsmaCaMac.cc:139
int ackLength
Definition: CsmaCaMac.h:43
bool useAck
Definition: CsmaCaMac.h:40
int retryCounter
Number of frame retransmission attempts.
Definition: CsmaCaMac.h:80
cMessage * endBackoff
End of the backoff period.
Definition: CsmaCaMac.h:98
long numSent
Definition: CsmaCaMac.h:116
int headerLength
Definition: CsmaCaMac.h:42
static simsignal_t transmissionStateChangedSignal
This signal is emitted every time the radio transmission state changes.
Definition: IRadio.h:72
cMessage * mediumStateChange
Radio state change self message.
Definition: CsmaCaMac.h:107
virtual void setMaxPacketLength(int maxPacketLength)
Definition: PacketQueue.h:42
cMessage * endDifs
End of the Data Inter-Frame Time period.
Definition: CsmaCaMac.h:95
simtime_t ackTimeout
Definition: CsmaCaMac.h:44
long numCollision
Definition: CsmaCaMac.h:115
cMessage * endData
Timeout after the transmission of a Data frame.
Definition: CsmaCaMac.h:104
int cwMulticast
Definition: CsmaCaMac.h:52
int cwMax
Definition: CsmaCaMac.h:51
MACAddress address
Definition: CsmaCaMac.h:39
double bitrate
Definition: CsmaCaMac.h:41
long numRetry
Definition: CsmaCaMac.h:112
void inet::CsmaCaMac::initializeQueueModule ( )
protectedvirtual

Referenced by initialize().

140 {
141  // use of external queue module is optional -- find it if there's one specified
142  if (par("queueModule").stringValue()[0]) {
143  cModule *module = getParentModule()->getSubmodule(par("queueModule").stringValue());
144  queueModule = check_and_cast<IPassiveQueue *>(module);
145 
146  EV << "Requesting first two frames from queue module\n";
148  // needed for backoff: mandatory if next message is already present
150  }
151 }
virtual void requestPacket()=0
The queue should send a packet whenever this method is invoked.
IPassiveQueue * queueModule
Passive queue module to request messages from.
Definition: CsmaCaMac.h:86
#define stringValue()
Definition: NedFunctions.cc:24
void inet::CsmaCaMac::invalidateBackoffPeriod ( )
protectedvirtual

Referenced by handleWithFsm().

489 {
490  backoffPeriod = -1;
491 }
simtime_t backoffPeriod
Remaining backoff period in seconds.
Definition: CsmaCaMac.h:77
bool inet::CsmaCaMac::isAck ( CsmaCaMacFrame frame)
protectedvirtual

Referenced by handleWithFsm().

617 {
618  return dynamic_cast<CsmaCaMacAckFrame *>(frame);
619 }
bool inet::CsmaCaMac::isBroadcast ( CsmaCaMacFrame msg)
protectedvirtual

Referenced by handleWithFsm().

622 {
623  return frame->getReceiverAddress().isBroadcast();
624 }
bool inet::CsmaCaMac::isForUs ( CsmaCaMacFrame msg)
protectedvirtual

Referenced by handleLowerPacket(), and handleWithFsm().

627 {
628  return frame->getReceiverAddress() == address;
629 }
MACAddress address
Definition: CsmaCaMac.h:39
bool inet::CsmaCaMac::isInvalidBackoffPeriod ( )
protectedvirtual

Referenced by scheduleBackoffTimer().

494 {
495  return backoffPeriod == -1;
496 }
simtime_t backoffPeriod
Remaining backoff period in seconds.
Definition: CsmaCaMac.h:77
bool inet::CsmaCaMac::isMediumFree ( )
protectedvirtual

Referenced by handleWithFsm().

607 {
609 }
IRadio * radio
Definition: CsmaCaMac.h:71
The radio medium is free, no signal is detected.
Definition: IRadio.h:148
virtual ReceptionState getReceptionState() const =0
Returns the current radio reception state.
bool inet::CsmaCaMac::isReceiving ( )
protectedvirtual

Referenced by handleWithFsm().

612 {
614 }
The radio medium is busy, a signal strong enough to receive is detected.
Definition: IRadio.h:161
IRadio * radio
Definition: CsmaCaMac.h:71
virtual ReceptionState getReceptionState() const =0
Returns the current radio reception state.
void inet::CsmaCaMac::popTransmissionQueue ( )
protectedvirtual

Referenced by finishCurrentTransmission(), and giveUpCurrentTransmission().

590 {
591  EV << "dropping frame from transmission queue\n";
592  delete transmissionQueue.pop();
593  if (queueModule) {
594  // tell queue module that we've become idle
595  EV << "requesting another frame from queue module\n";
597  }
598 }
virtual void requestPacket()=0
The queue should send a packet whenever this method is invoked.
PacketQueue transmissionQueue
Messages received from upper layer and to be transmitted later.
Definition: CsmaCaMac.h:83
IPassiveQueue * queueModule
Passive queue module to request messages from.
Definition: CsmaCaMac.h:86
void inet::CsmaCaMac::receiveSignal ( cComponent *  source,
simsignal_t  signalID,
long  value,
cObject *  details 
)
overrideprotectedvirtual
408 {
409  Enter_Method_Silent();
410  if (signalID == IRadio::receptionStateChangedSignal)
412  else if (signalID == IRadio::transmissionStateChangedSignal) {
413  IRadio::TransmissionState newRadioTransmissionState = (IRadio::TransmissionState)value;
417  }
418  transmissionState = newRadioTransmissionState;
419  }
420 }
TransmissionState
This enumeration specifies the transmission state of the radio.
Definition: IRadio.h:167
virtual void setRadioMode(RadioMode radioMode)=0
Changes the current radio mode.
The radio is not transmitting a signal on the radio medium.
Definition: IRadio.h:178
IRadio * radio
Definition: CsmaCaMac.h:71
The radio medium is busy, the radio is currently transmitting a signal.
Definition: IRadio.h:183
The radio is prepared for frame reception, frame transmission is not possible, power consumption is l...
Definition: IRadio.h:109
static simsignal_t receptionStateChangedSignal
This signal is emitted every time the radio reception state changes.
Definition: IRadio.h:66
IRadio::TransmissionState transmissionState
Definition: CsmaCaMac.h:72
static simsignal_t transmissionStateChangedSignal
This signal is emitted every time the radio transmission state changes.
Definition: IRadio.h:72
cMessage * mediumStateChange
Radio state change self message.
Definition: CsmaCaMac.h:107
virtual void handleWithFsm(cMessage *msg)
Definition: CsmaCaMac.cc:224
cMessage * endData
Timeout after the transmission of a Data frame.
Definition: CsmaCaMac.h:104
void inet::CsmaCaMac::resetStateVariables ( )
protectedvirtual

Referenced by finishCurrentTransmission(), giveUpCurrentTransmission(), and handleWithFsm().

601 {
602  backoffPeriod = -1;
603  retryCounter = 0;
604 }
simtime_t backoffPeriod
Remaining backoff period in seconds.
Definition: CsmaCaMac.h:77
int retryCounter
Number of frame retransmission attempts.
Definition: CsmaCaMac.h:80
void inet::CsmaCaMac::retryCurrentTransmission ( )
protectedvirtual

Referenced by handleWithFsm().

577 {
578  ASSERT(retryCounter < retryLimit);
579  retryCounter++;
580  numRetry++;
582 }
int retryLimit
Definition: CsmaCaMac.h:49
int retryCounter
Number of frame retransmission attempts.
Definition: CsmaCaMac.h:80
virtual void generateBackoffPeriod()
Definition: CsmaCaMac.cc:498
long numRetry
Definition: CsmaCaMac.h:112
void inet::CsmaCaMac::scheduleAckTimeout ( CsmaCaMacDataFrame frame)
protectedvirtual

Referenced by handleWithFsm().

477 {
478  EV << "scheduling ACK timeout\n";
479  scheduleAt(simTime() + ackTimeout, endAckTimeout);
480 }
cMessage * endAckTimeout
End of the ack timeout.
Definition: CsmaCaMac.h:101
simtime_t ackTimeout
Definition: CsmaCaMac.h:44
void inet::CsmaCaMac::scheduleBackoffTimer ( )
protectedvirtual

Referenced by handleWithFsm().

523 {
524  EV << "scheduling backoff timer\n";
527  scheduleAt(simTime() + backoffPeriod, endBackoff);
528 }
virtual bool isInvalidBackoffPeriod()
Definition: CsmaCaMac.cc:493
simtime_t backoffPeriod
Remaining backoff period in seconds.
Definition: CsmaCaMac.h:77
cMessage * endBackoff
End of the backoff period.
Definition: CsmaCaMac.h:98
virtual void generateBackoffPeriod()
Definition: CsmaCaMac.cc:498
void inet::CsmaCaMac::scheduleDifsTimer ( )
protectedvirtual

Referenced by handleWithFsm().

465 {
466  EV << "scheduling DIFS timer\n";
467  scheduleAt(simTime() + difsTime, endDifs);
468 }
simtime_t difsTime
Definition: CsmaCaMac.h:47
cMessage * endDifs
End of the Data Inter-Frame Time period.
Definition: CsmaCaMac.h:95
void inet::CsmaCaMac::scheduleSifsTimer ( CsmaCaMacFrame frame)
protectedvirtual

Referenced by handleWithFsm().

458 {
459  EV << "scheduling SIFS timer\n";
460  endSifs->setContextPointer(frame);
461  scheduleAt(simTime() + sifsTime, endSifs);
462 }
simtime_t sifsTime
Definition: CsmaCaMac.h:46
cMessage * endSifs
End of the Short Inter-Frame Time period.
Definition: CsmaCaMac.h:92
void inet::CsmaCaMac::sendAckFrame ( )
protectedvirtual

Referenced by handleWithFsm().

547 {
548  EV << "sending Ack frame\n";
549  auto frameToAck = static_cast<CsmaCaMacDataFrame *>(endSifs->getContextPointer());
550  endSifs->setContextPointer(nullptr);
551  auto ackFrame = new CsmaCaMacAckFrame("CsmaAck");
552  ackFrame->setReceiverAddress(frameToAck->getTransmitterAddress());
553  ackFrame->setByteLength(ackLength);
555  sendDown(ackFrame);
556  delete frameToAck;
557 }
virtual void setRadioMode(RadioMode radioMode)=0
Changes the current radio mode.
The radio is prepared for frame transmission, frame reception is not possible, power consumption is l...
Definition: IRadio.h:116
cMessage * endSifs
End of the Short Inter-Frame Time period.
Definition: CsmaCaMac.h:92
IRadio * radio
Definition: CsmaCaMac.h:71
int ackLength
Definition: CsmaCaMac.h:43
virtual void sendDown(cMessage *message)
Definition: MACProtocolBase.cc:59
void inet::CsmaCaMac::sendDataFrame ( CsmaCaMacDataFrame frameToSend)
protectedvirtual

Referenced by handleWithFsm().

540 {
541  EV << "sending Data frame " << frameToSend->getName() << endl;
543  sendDown(frameToSend->dup());
544 }
virtual void setRadioMode(RadioMode radioMode)=0
Changes the current radio mode.
The radio is prepared for frame transmission, frame reception is not possible, power consumption is l...
Definition: IRadio.h:116
IRadio * radio
Definition: CsmaCaMac.h:71
virtual void sendDown(cMessage *message)
Definition: MACProtocolBase.cc:59

Member Data Documentation

int inet::CsmaCaMac::ackLength = -1
protected

Referenced by initialize(), and sendAckFrame().

simtime_t inet::CsmaCaMac::ackTimeout = -1
protected

Referenced by initialize(), and scheduleAckTimeout().

MACAddress inet::CsmaCaMac::address
protected
simtime_t inet::CsmaCaMac::backoffPeriod = -1
protected
double inet::CsmaCaMac::bitrate = NaN
protected

Referenced by createInterfaceEntry(), and initialize().

int inet::CsmaCaMac::cwMax = -1
protected
int inet::CsmaCaMac::cwMin = -1
protected
int inet::CsmaCaMac::cwMulticast = -1
protected
simtime_t inet::CsmaCaMac::difsTime = -1
protected

Referenced by initialize(), and scheduleDifsTimer().

cMessage* inet::CsmaCaMac::endAckTimeout = nullptr
protected

End of the ack timeout.

Referenced by cancelAckTimer(), handleWithFsm(), initialize(), scheduleAckTimeout(), and ~CsmaCaMac().

cMessage* inet::CsmaCaMac::endBackoff = nullptr
protected
cMessage* inet::CsmaCaMac::endData = nullptr
protected

Timeout after the transmission of a Data frame.

Referenced by handleWithFsm(), initialize(), receiveSignal(), and ~CsmaCaMac().

cMessage* inet::CsmaCaMac::endDifs = nullptr
protected

End of the Data Inter-Frame Time period.

Referenced by cancelDifsTimer(), handleWithFsm(), initialize(), scheduleDifsTimer(), and ~CsmaCaMac().

cMessage* inet::CsmaCaMac::endSifs = nullptr
protected

End of the Short Inter-Frame Time period.

Referenced by handleWithFsm(), initialize(), scheduleSifsTimer(), sendAckFrame(), and ~CsmaCaMac().

cFSM inet::CsmaCaMac::fsm
protected
int inet::CsmaCaMac::headerLength = -1
protected

Referenced by encapsulate(), and initialize().

int inet::CsmaCaMac::maxQueueSize = -1
protected

Referenced by handleUpperPacket(), and initialize().

cMessage* inet::CsmaCaMac::mediumStateChange = nullptr
protected

Radio state change self message.

Currently this is optimized away and sent directly

Referenced by handleWithFsm(), initialize(), receiveSignal(), and ~CsmaCaMac().

long inet::CsmaCaMac::numCollision
protected

Referenced by finish(), handleWithFsm(), and initialize().

long inet::CsmaCaMac::numGivenUp
protected
long inet::CsmaCaMac::numReceived
protected

Referenced by finish(), handleWithFsm(), and initialize().

long inet::CsmaCaMac::numReceivedBroadcast
protected

Referenced by finish(), handleWithFsm(), and initialize().

long inet::CsmaCaMac::numRetry
protected
long inet::CsmaCaMac::numSent
protected

Referenced by finish(), handleWithFsm(), and initialize().

long inet::CsmaCaMac::numSentBroadcast
protected

Referenced by finish(), handleWithFsm(), and initialize().

long inet::CsmaCaMac::numSentWithoutRetry
protected

Referenced by finish(), handleWithFsm(), and initialize().

IPassiveQueue* inet::CsmaCaMac::queueModule = nullptr
protected

Passive queue module to request messages from.

Referenced by initializeQueueModule(), and popTransmissionQueue().

IRadio* inet::CsmaCaMac::radio = nullptr
protected
int inet::CsmaCaMac::retryCounter = -1
protected

Number of frame retransmission attempts.

Referenced by generateBackoffPeriod(), handleWithFsm(), initialize(), resetStateVariables(), and retryCurrentTransmission().

int inet::CsmaCaMac::retryLimit = -1
protected
simtime_t inet::CsmaCaMac::sifsTime = -1
protected

Referenced by initialize(), and scheduleSifsTimer().

simtime_t inet::CsmaCaMac::slotTime = -1
protected
PacketQueue inet::CsmaCaMac::transmissionQueue
protected

Messages received from upper layer and to be transmitted later.

Referenced by getCurrentTransmission(), handleUpperPacket(), handleWithFsm(), initialize(), and popTransmissionQueue().

IRadio::TransmissionState inet::CsmaCaMac::transmissionState = IRadio::TRANSMISSION_STATE_UNDEFINED
protected

Referenced by receiveSignal().

bool inet::CsmaCaMac::useAck = true
protected

Referenced by handleWithFsm(), and initialize().


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