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

#include <ResidenceTimeMeasurer.h>

Inheritance diagram for inet::ResidenceTimeMeasurer:

Public Member Functions

virtual void receiveSignal (cComponent *source, simsignal_t signal, cObject *object, cObject *details) override
 

Static Public Attributes

static simsignal_t packetStayedSignal = cComponent::registerSignal("packetStayed")
 

Protected Member Functions

virtual void initialize (int stage) override
 

Member Function Documentation

◆ initialize()

void inet::ResidenceTimeMeasurer::initialize ( int  stage)
overrideprotectedvirtual
22 {
23  if (stage == INITSTAGE_LOCAL) {
24  auto subscriptionModule = getModuleFromPar<cModule>(par("subscriptionModule"), this);
25  auto measurementStartSignal = registerSignal(par("measurementStartSignal"));
26  auto measurementEndSignal = registerSignal(par("measurementEndSignal"));
27  subscriptionModule->subscribe(measurementStartSignal, this);
28  subscriptionModule->subscribe(measurementEndSignal, this);
29  subscriptionModule->subscribe(packetCreatedSignal, this);
30  subscriptionModule->subscribe(packetDroppedSignal, this);
31  }
32 }

◆ receiveSignal()

void inet::ResidenceTimeMeasurer::receiveSignal ( cComponent *  source,
simsignal_t  signal,
cObject *  object,
cObject *  details 
)
overridevirtual
35 {
36  if (signal == packetCreatedSignal) {
37  auto packet = check_and_cast<Packet *>(object);
38  b offset = b(0);
39  b length = packet->getDataLength();
40  packet->addRegionTagsWhereAbsent<ResidenceTimeTag>(offset, length);
41  packet->mapAllRegionTagsForUpdate<ResidenceTimeTag>(offset, length, [&] (b o, b l, const Ptr<ResidenceTimeTag>& tag) {
42  tag->setStartTime(simTime());
43  });
44  }
45  else if (signal == packetDroppedSignal) {
46  auto packet = check_and_cast<Packet *>(object);
47  b offset = b(0);
48  b length = packet->getDataLength();
49  packet->mapAllRegionTagsForUpdate<ResidenceTimeTag>(offset, length, [&] (b o, b l, const Ptr<ResidenceTimeTag>& tag) {
50  tag->setEndTime(simTime());
51  });
52  emit(packetStayedSignal, packet);
53  packet->removeRegionTagsWherePresent<ResidenceTimeTag>(offset, length);
54  }
55  else {
56  auto physicalSignal = check_and_cast<cPacket *>(object);
57  auto packet = check_and_cast<Packet *>(physicalSignal->getEncapsulatedPacket());
58  b offset = b(0);
59  b length = packet->getDataLength();
60  if (signal == receptionStartedSignal) {
61  packet->addRegionTagsWhereAbsent<ResidenceTimeTag>(offset, length);
62  packet->mapAllRegionTagsForUpdate<ResidenceTimeTag>(offset, length, [&] (b o, b l, const Ptr<ResidenceTimeTag>& tag) {
63  tag->setStartTime(simTime());
64  });
65  }
66  else if (signal == receptionEndedSignal) {
67  packet->addRegionTagsWhereAbsent<ResidenceTimeTag>(offset, length);
68  packet->mapAllRegionTagsForUpdate<ResidenceTimeTag>(offset, length, [&] (b o, b l, const Ptr<ResidenceTimeTag>& tag) {
69  tag->setStartTime(simTime());
70  });
71  }
72  else if (signal == transmissionStartedSignal) {
73  packet->mapAllRegionTagsForUpdate<ResidenceTimeTag>(offset, length, [&] (b o, b l, const Ptr<ResidenceTimeTag>& tag) {
74  tag->setEndTime(simTime());
75  });
76  emit(packetStayedSignal, packet);
77  packet->removeRegionTagsWherePresent<ResidenceTimeTag>(offset, length);
78  }
79  else if (signal == transmissionEndedSignal) {
80  packet->mapAllRegionTagsForUpdate<ResidenceTimeTag>(offset, length, [&] (b o, b l, const Ptr<ResidenceTimeTag>& tag) {
81  tag->setEndTime(simTime());
82  });
83  emit(packetStayedSignal, packet);
84  packet->removeRegionTagsWherePresent<ResidenceTimeTag>(offset, length);
85  }
86  else
87  throw cRuntimeError("Unknown signal");
88  }
89 }

Member Data Documentation

◆ packetStayedSignal

simsignal_t inet::ResidenceTimeMeasurer::packetStayedSignal = cComponent::registerSignal("packetStayed")
static

Referenced by receiveSignal().


The documentation for this class was generated from the following files:
inet::receptionStartedSignal
simsignal_t receptionStartedSignal
Definition: Simsignals.cc:118
inet::packetDroppedSignal
simsignal_t packetDroppedSignal
Definition: Simsignals.cc:85
inet::transmissionEndedSignal
simsignal_t transmissionEndedSignal
Definition: Simsignals.cc:117
inet::receptionEndedSignal
simsignal_t receptionEndedSignal
Definition: Simsignals.cc:119
inet::transmissionStartedSignal
simsignal_t transmissionStartedSignal
Definition: Simsignals.cc:116
inet::INITSTAGE_LOCAL
INET_API InitStage INITSTAGE_LOCAL
Initialization of local state that don't use or affect other modules includes:
inet::units::values::b
value< int64_t, units::b > b
Definition: Units.h:1241
inet::packetCreatedSignal
simsignal_t packetCreatedSignal
Definition: Simsignals.cc:82
inet::ResidenceTimeMeasurer::packetStayedSignal
static simsignal_t packetStayedSignal
Definition: ResidenceTimeMeasurer.h:18