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

IP traffic generator application. More...

#include <IpvxTrafGen.h>

Inheritance diagram for inet::IpvxTrafGen:
inet::ApplicationBase inet::OperationalBase inet::OperationalMixin< cSimpleModule > inet::ILifecycle

Public Member Functions

 IpvxTrafGen ()
 
virtual ~IpvxTrafGen ()
 
- Public Member Functions inherited from inet::ApplicationBase
 ApplicationBase ()
 
- Public Member Functions inherited from inet::OperationalMixin< cSimpleModule >
virtual ~OperationalMixin ()
 }@ More...
 
- Public Member Functions inherited from inet::ILifecycle
virtual ~ILifecycle ()
 

Protected Types

enum  Kinds { START = 100, NEXT }
 
- Protected Types inherited from inet::OperationalMixin< cSimpleModule >
enum  State
 

Protected Member Functions

virtual void scheduleNextPacket (simtime_t previous)
 
virtual void cancelNextPacket ()
 
virtual bool isEnabled ()
 
virtual L3Address chooseDestAddr ()
 
virtual void sendPacket ()
 
virtual int numInitStages () const override
 
virtual void initialize (int stage) override
 
virtual void handleMessageWhenUp (cMessage *msg) override
 
virtual void refreshDisplay () const override
 
virtual void startApp ()
 
virtual void printPacket (Packet *msg)
 
virtual void processPacket (Packet *msg)
 
virtual void handleStartOperation (LifecycleOperation *operation) override
 
virtual void handleStopOperation (LifecycleOperation *operation) override
 
virtual void handleCrashOperation (LifecycleOperation *operation) override
 
- Protected Member Functions inherited from inet::ApplicationBase
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::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

simtime_t startTime
 
simtime_t stopTime
 
cPar * sendIntervalPar = nullptr
 
cPar * packetLengthPar = nullptr
 
const Protocolprotocol = nullptr
 
std::vector< L3AddressdestAddresses
 
int numPackets = 0
 
cMessage * timer = nullptr
 
int numSent = 0
 
int numReceived = 0
 
- Protected Attributes inherited from inet::OperationalMixin< cSimpleModule >
State operationalState
 
simtime_t lastChange
 
Operation activeOperation
 
cMessage * activeOperationTimeout
 
cMessage * activeOperationExtraTimer
 

Static Protected Attributes

static std::vector< const Protocol * > allocatedProtocols
 

Friends

void ipvxTrafGenClearProtocols ()
 

Detailed Description

IP traffic generator application.

See NED for more info.

Member Enumeration Documentation

◆ Kinds

enum inet::IpvxTrafGen::Kinds
protected
Enumerator
START 
NEXT 
27 { START = 100, NEXT };

Constructor & Destructor Documentation

◆ IpvxTrafGen()

inet::IpvxTrafGen::IpvxTrafGen ( )
29 {
30 }

◆ ~IpvxTrafGen()

inet::IpvxTrafGen::~IpvxTrafGen ( )
virtual
33 {
34  cancelAndDelete(timer);
35 }

Member Function Documentation

◆ cancelNextPacket()

void inet::IpvxTrafGen::cancelNextPacket ( )
protectedvirtual
131 {
132  cancelEvent(timer);
133 }

Referenced by handleCrashOperation(), and handleStopOperation().

◆ chooseDestAddr()

L3Address inet::IpvxTrafGen::chooseDestAddr ( )
protectedvirtual
141 {
142  int k = intrand(destAddresses.size());
143  return destAddresses[k];
144 }

Referenced by sendPacket().

◆ handleCrashOperation()

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

Implements inet::OperationalMixin< cSimpleModule >.

213 {
215 }

◆ handleMessageWhenUp()

void inet::IpvxTrafGen::handleMessageWhenUp ( cMessage *  msg)
overrideprotectedvirtual

Implements inet::OperationalMixin< cSimpleModule >.

80 {
81  if (msg == timer) {
82  if (msg->getKind() == START) {
83  destAddresses.clear();
84  const char *destAddrs = par("destAddresses");
85  cStringTokenizer tokenizer(destAddrs);
86  const char *token;
87  while ((token = tokenizer.nextToken()) != nullptr) {
88  L3Address result;
89  L3AddressResolver().tryResolve(token, result);
90  if (result.isUnspecified())
91  EV_ERROR << "cannot resolve destination address: " << token << endl;
92  else
93  destAddresses.push_back(result);
94  }
95  }
96  if (!destAddresses.empty()) {
97  sendPacket();
98  if (isEnabled())
99  scheduleNextPacket(simTime());
100  }
101  }
102  else
103  processPacket(check_and_cast<Packet *>(msg));
104 }

◆ handleStartOperation()

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

Implements inet::OperationalMixin< cSimpleModule >.

203 {
204  startApp();
205 }

◆ handleStopOperation()

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

Implements inet::OperationalMixin< cSimpleModule >.

208 {
210 }

◆ initialize()

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

Reimplemented from inet::OperationalMixin< cSimpleModule >.

38 {
40 
41  if (stage == INITSTAGE_LOCAL) {
42  int protocolId = par("protocol");
43  if (protocolId < 143 || protocolId > 254)
44  throw cRuntimeError("invalid protocol id %d, accepts only between 143 and 254", protocolId);
46  if (!protocol) {
47  std::string name = "prot_" + std::to_string(protocolId);
48  protocol = new Protocol(name.c_str(), name.c_str());
49  allocatedProtocols.push_back(protocol);
51  }
52  numPackets = par("numPackets");
53  startTime = par("startTime");
54  stopTime = par("stopTime");
55  if (stopTime >= SIMTIME_ZERO && stopTime < startTime)
56  throw cRuntimeError("Invalid startTime/stopTime parameters");
57 
58  packetLengthPar = &par("packetLength");
59  sendIntervalPar = &par("sendInterval");
60 
61  timer = new cMessage("sendTimer");
62 
63  numSent = 0;
64  numReceived = 0;
65  WATCH(numSent);
66  WATCH(numReceived);
67  }
68  else if (stage == INITSTAGE_APPLICATION_LAYER) {
69  registerProtocol(*protocol, gate("ipOut"), gate("ipIn"));
70  }
71 }

◆ isEnabled()

bool inet::IpvxTrafGen::isEnabled ( )
protectedvirtual
136 {
137  return numPackets == -1 || numSent < numPackets;
138 }

Referenced by handleMessageWhenUp(), and startApp().

◆ numInitStages()

virtual int inet::IpvxTrafGen::numInitStages ( ) const
inlineoverrideprotectedvirtual
56 { return NUM_INIT_STAGES; }

◆ printPacket()

void inet::IpvxTrafGen::printPacket ( Packet msg)
protectedvirtual
171 {
172  L3Address src, dest;
173  int protocol = -1;
174  auto *ctrl = msg->getControlInfo();
175  if (ctrl != nullptr) {
177  }
178  Ptr<const L3AddressTagBase> addresses = msg->findTag<L3AddressReq>();
179  if (addresses == nullptr)
180  addresses = msg->findTag<L3AddressInd>();
181  if (addresses != nullptr) {
182  src = addresses->getSrcAddress();
183  dest = addresses->getDestAddress();
184  }
185 
186  EV_INFO << msg << endl;
187  EV_INFO << "Payload length: " << msg->getByteLength() << " bytes" << endl;
188 
189  if (protocol != -1)
190  EV_INFO << "src: " << src << " dest: " << dest << " protocol=" << protocol << "\n";
191 }

Referenced by processPacket(), and sendPacket().

◆ processPacket()

void inet::IpvxTrafGen::processPacket ( Packet msg)
protectedvirtual
194 {
195  emit(packetReceivedSignal, msg);
196  EV_INFO << "Received packet: ";
197  printPacket(msg);
198  delete msg;
199  numReceived++;
200 }

Referenced by handleMessageWhenUp().

◆ refreshDisplay()

void inet::IpvxTrafGen::refreshDisplay ( ) const
overrideprotectedvirtual
107 {
109 
110  char buf[40];
111  sprintf(buf, "rcvd: %d pks\nsent: %d pks", numReceived, numSent);
112  getDisplayString().setTagArg("t", 0, buf);
113 }

◆ scheduleNextPacket()

void inet::IpvxTrafGen::scheduleNextPacket ( simtime_t  previous)
protectedvirtual
116 {
117  simtime_t next;
118  if (previous == -1) {
119  next = simTime() <= startTime ? startTime : simTime();
120  timer->setKind(START);
121  }
122  else {
123  next = previous + *sendIntervalPar;
124  timer->setKind(NEXT);
125  }
126  if (stopTime < SIMTIME_ZERO || next < stopTime)
127  scheduleAt(next, timer);
128 }

Referenced by handleMessageWhenUp(), and startApp().

◆ sendPacket()

void inet::IpvxTrafGen::sendPacket ( )
protectedvirtual
147 {
148  char msgName[32];
149  sprintf(msgName, "appData-%d", numSent);
150 
151  Packet *packet = new Packet(msgName);
152  const auto& payload = makeShared<ByteCountChunk>(B(*packetLengthPar));
153  payload->addTag<CreationTimeTag>()->setCreationTime(simTime());
154  packet->insertAtBack(payload);
155 
156  L3Address destAddr = chooseDestAddr();
157 
158  IL3AddressType *addressType = destAddr.getAddressType();
159  packet->addTag<PacketProtocolTag>()->setProtocol(protocol);
160  packet->addTag<DispatchProtocolReq>()->setProtocol(addressType->getNetworkProtocol());
161  packet->addTag<L3AddressReq>()->setDestAddress(destAddr);
162 
163  EV_INFO << "Sending packet: ";
164  printPacket(packet);
165  emit(packetSentSignal, packet);
166  send(packet, "ipOut");
167  numSent++;
168 }

Referenced by handleMessageWhenUp().

◆ startApp()

void inet::IpvxTrafGen::startApp ( )
protectedvirtual
74 {
75  if (isEnabled())
77 }

Referenced by handleStartOperation().

Friends And Related Function Documentation

◆ ipvxTrafGenClearProtocols

void ipvxTrafGenClearProtocols ( )
friend
218 {
219  for (auto *p : IpvxTrafGen::allocatedProtocols)
220  delete p;
222 }

Member Data Documentation

◆ allocatedProtocols

std::vector< const Protocol * > inet::IpvxTrafGen::allocatedProtocols
staticprotected

◆ destAddresses

std::vector<L3Address> inet::IpvxTrafGen::destAddresses
protected

◆ numPackets

int inet::IpvxTrafGen::numPackets = 0
protected

Referenced by initialize(), and isEnabled().

◆ numReceived

int inet::IpvxTrafGen::numReceived = 0
protected

◆ numSent

int inet::IpvxTrafGen::numSent = 0
protected

◆ packetLengthPar

cPar* inet::IpvxTrafGen::packetLengthPar = nullptr
protected

Referenced by initialize(), and sendPacket().

◆ protocol

const Protocol* inet::IpvxTrafGen::protocol = nullptr
protected

Referenced by initialize(), printPacket(), and sendPacket().

◆ sendIntervalPar

cPar* inet::IpvxTrafGen::sendIntervalPar = nullptr
protected

Referenced by initialize(), and scheduleNextPacket().

◆ startTime

simtime_t inet::IpvxTrafGen::startTime
protected

Referenced by initialize(), and scheduleNextPacket().

◆ stopTime

simtime_t inet::IpvxTrafGen::stopTime
protected

Referenced by initialize(), and scheduleNextPacket().

◆ timer

cMessage* inet::IpvxTrafGen::timer = nullptr
protected

The documentation for this class was generated from the following files:
inet::ProtocolGroup::getProtocolNumber
int getProtocolNumber(const Protocol *protocol) const
Definition: ProtocolGroup.cc:46
inet::IpvxTrafGen::startApp
virtual void startApp()
Definition: IpvxTrafGen.cc:73
inet::IpvxTrafGen::printPacket
virtual void printPacket(Packet *msg)
Definition: IpvxTrafGen.cc:170
inet::IpvxTrafGen::protocol
const Protocol * protocol
Definition: IpvxTrafGen.h:34
inet::IpvxTrafGen::numPackets
int numPackets
Definition: IpvxTrafGen.h:36
inet::IpvxTrafGen::scheduleNextPacket
virtual void scheduleNextPacket(simtime_t previous)
Definition: IpvxTrafGen.cc:115
inet::IpvxTrafGen::processPacket
virtual void processPacket(Packet *msg)
Definition: IpvxTrafGen.cc:193
inet::IpvxTrafGen::chooseDestAddr
virtual L3Address chooseDestAddr()
Definition: IpvxTrafGen.cc:140
inet::OperationalMixin< cSimpleModule >::initialize
virtual void initialize(int stage) override
Definition: OperationalMixinImpl.h:26
inet::ProtocolGroup::findProtocol
const Protocol * findProtocol(int protocolNumber) const
Definition: ProtocolGroup.cc:25
DispatchProtocolReq
removed DscpReq Ipv4ControlInfo Ipv6ControlInfo up L3AddressInd DispatchProtocolReq L4PortInd Ipv4ControlInfo Ipv6ControlInfo down DispatchProtocolReq
Definition: IUdp-gates.txt:25
L3AddressInd
removed DscpReq Ipv4ControlInfo Ipv6ControlInfo up L3AddressInd L3AddressInd
Definition: IUdp-gates.txt:20
inet::IpvxTrafGen::numSent
int numSent
Definition: IpvxTrafGen.h:42
inet::packetSentSignal
simsignal_t packetSentSignal
Definition: Simsignals.cc:96
inet::ProtocolGroup::addProtocol
void addProtocol(int protocolId, const Protocol *protocol)
Definition: ProtocolGroup.cc:55
PacketProtocolTag
removed DscpReq Ipv4ControlInfo Ipv6ControlInfo up L3AddressInd DispatchProtocolReq L4PortInd Ipv4ControlInfo Ipv6ControlInfo down PacketProtocolTag
Definition: IUdp-gates.txt:25
ctrl
removed ctrl
Definition: IUdp-gates.txt:7
inet::units::units::B
intscale< b, 1, 8 > B
Definition: Units.h:1168
inet::packetReceivedSignal
simsignal_t packetReceivedSignal
Definition: Simsignals.cc:97
inet::IpvxTrafGen::sendPacket
virtual void sendPacket()
Definition: IpvxTrafGen.cc:146
inet::IpvxTrafGen::sendIntervalPar
cPar * sendIntervalPar
Definition: IpvxTrafGen.h:32
inet::INITSTAGE_LOCAL
INET_API InitStage INITSTAGE_LOCAL
Initialization of local state that don't use or affect other modules includes:
NUM_INIT_STAGES
#define NUM_INIT_STAGES
Definition: InitStageRegistry.h:73
inet::physicallayer::k
const double k
Definition: Qam1024Modulation.cc:14
inet::IpvxTrafGen::isEnabled
virtual bool isEnabled()
Definition: IpvxTrafGen.cc:135
inet::IpvxTrafGen::START
@ START
Definition: IpvxTrafGen.h:27
inet::INITSTAGE_APPLICATION_LAYER
INET_API InitStage INITSTAGE_APPLICATION_LAYER
Initialization of applications.
inet::IpvxTrafGen::startTime
simtime_t startTime
Definition: IpvxTrafGen.h:30
inet::IpvxTrafGen::destAddresses
std::vector< L3Address > destAddresses
Definition: IpvxTrafGen.h:35
inet::ProtocolGroup::ipprotocol
static ProtocolGroup ipprotocol
Definition: ProtocolGroup.h:42
inet::IpvxTrafGen::packetLengthPar
cPar * packetLengthPar
Definition: IpvxTrafGen.h:33
inet::IpvxTrafGen::cancelNextPacket
virtual void cancelNextPacket()
Definition: IpvxTrafGen.cc:130
inet::OperationalMixin< cSimpleModule >::refreshDisplay
virtual void refreshDisplay() const override
Definition: OperationalMixinImpl.h:200
inet::registerProtocol
void registerProtocol(const Protocol &protocol, cGate *gate, ServicePrimitive servicePrimitive)
Registers a protocol primitive (PDU processing) at the given gate.
Definition: IProtocolRegistrationListener.cc:83
inet::IpvxTrafGen::allocatedProtocols
static std::vector< const Protocol * > allocatedProtocols
Definition: IpvxTrafGen.h:44
inet::IpvxTrafGen::numReceived
int numReceived
Definition: IpvxTrafGen.h:43
inet::IpvxTrafGen::NEXT
@ NEXT
Definition: IpvxTrafGen.h:27
inet::IpvxTrafGen::stopTime
simtime_t stopTime
Definition: IpvxTrafGen.h:31
inet::IpvxTrafGen::timer
cMessage * timer
Definition: IpvxTrafGen.h:39