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

Implements the SCTPPeer simple module. More...

#include <SCTPPeer.h>

Inheritance diagram for inet::SCTPPeer:
inet::SCTPSocket::CallbackInterface inet::ILifecycle

Classes

struct  PathStatus
 

Public Member Functions

 SCTPPeer ()
 
 ~SCTPPeer ()
 
- Public Member Functions inherited from inet::SCTPSocket::CallbackInterface
virtual ~CallbackInterface ()
 
virtual void socketEstablished (int assocId, void *yourPtr, unsigned long int buffer)
 
virtual void socketDeleted (int assocId, void *yourPtr)
 
virtual void sendqueueAbatedArrived (int connId, unsigned long int buffer)
 
virtual void addressAddedArrived (int assocId, L3Address localAddr, L3Address remoteAddr)
 
- Public Member Functions inherited from inet::ILifecycle
virtual ~ILifecycle ()
 

Protected Types

typedef std::map< int, long > RcvdPacketsPerAssoc
 
typedef std::map< int, long > SentPacketsPerAssoc
 
typedef std::map< int, long > RcvdBytesPerAssoc
 
typedef std::map< int, cOutVector * > BytesPerAssoc
 
typedef std::map< int, cDoubleHistogram * > HistEndToEndDelay
 
typedef std::map< int, cOutVector * > EndToEndDelay
 
typedef std::map< L3Address, PathStatusSCTPPathStatus
 

Protected Member Functions

virtual void initialize (int stage) override
 
virtual int numInitStages () const override
 
virtual void handleMessage (cMessage *msg) override
 
virtual void finish () override
 
void handleTimer (cMessage *msg)
 
void connect ()
 
void socketEstablished (int connId, void *yourPtr)
 
void socketDataArrived (int connId, void *yourPtr, cPacket *msg, bool urgent) override
 
void socketDataNotificationArrived (int connId, void *yourPtr, cPacket *msg) override
 
void socketPeerClosed (int connId, void *yourPtr) override
 
void socketClosed (int connId, void *yourPtr) override
 
void socketFailure (int connId, void *yourPtr, int code) override
 
void socketStatusArrived (int connId, void *yourPtr, SCTPStatusInfo *status) override
 
void sendRequest (bool last=true)
 
void sendOrSchedule (cMessage *msg)
 
void generateAndSend (SCTPConnectInfo *connectInfo)
 
void sendRequestArrived () override
 
void sendQueueRequest ()
 
void shutdownReceivedArrived (int connId) override
 
void sendqueueFullArrived (int connId) override
 
void msgAbandonedArrived (int assocId) override
 
void setStatusString (const char *s)
 
virtual bool handleOperationStage (LifecycleOperation *operation, int stage, IDoneCallback *doneCallback) override
 Perform one stage of a lifecycle operation. More...
 

Protected Attributes

double delay
 
bool echo
 
bool ordered
 
bool schedule
 
int queueSize
 
int outboundStreams
 
int inboundStreams
 
SCTPPathStatus sctpPathStatus
 
SCTPSocket clientSocket
 
SCTPSocket listeningSocket
 
cMessage * timeoutMsg
 
cMessage * timeMsg
 
cMessage * connectTimer
 
bool shutdownReceived
 
bool sendAllowed
 
int serverAssocId
 
int numRequestsToSend
 
int lastStream
 
int numPacketsToReceive
 
RcvdPacketsPerAssoc rcvdPacketsPerAssoc
 
SentPacketsPerAssoc sentPacketsPerAssoc
 
RcvdBytesPerAssoc rcvdBytesPerAssoc
 
BytesPerAssoc bytesPerAssoc
 
HistEndToEndDelay histEndToEndDelay
 
EndToEndDelay endToEndDelay
 
long bytesSent
 
int echoedBytesSent
 
int packetsSent
 
int bytesRcvd
 
int packetsRcvd
 
int notificationsReceived
 
int numSessions
 
int chunksAbandoned
 

Static Protected Attributes

static simsignal_t sentPkSignal = registerSignal("sentPk")
 
static simsignal_t echoedPkSignal = registerSignal("echoedPk")
 
static simsignal_t rcvdPkSignal = registerSignal("rcvdPk")
 

Detailed Description

Implements the SCTPPeer simple module.

See the NED file for more info.

Member Typedef Documentation

typedef std::map<int, cOutVector *> inet::SCTPPeer::BytesPerAssoc
protected
typedef std::map<int, cOutVector *> inet::SCTPPeer::EndToEndDelay
protected
typedef std::map<int, cDoubleHistogram *> inet::SCTPPeer::HistEndToEndDelay
protected
typedef std::map<int, long> inet::SCTPPeer::RcvdBytesPerAssoc
protected
typedef std::map<int, long> inet::SCTPPeer::RcvdPacketsPerAssoc
protected
typedef std::map<L3Address, PathStatus> inet::SCTPPeer::SCTPPathStatus
protected
typedef std::map<int, long> inet::SCTPPeer::SentPacketsPerAssoc
protected

Constructor & Destructor Documentation

inet::SCTPPeer::SCTPPeer ( )
47 {
48  timeoutMsg = nullptr;
49  timeMsg = nullptr;
50  connectTimer = nullptr;
51  delay = 0;
52  echo = false;
53  ordered = true;
54  schedule = false;
55  queueSize = 0;
56  outboundStreams = 1;
57  inboundStreams = 17;
58  shutdownReceived = false;
59  sendAllowed = true;
60  serverAssocId = 0;
62  lastStream = 0;
64  bytesSent = 0;
65  echoedBytesSent = 0;
66  packetsSent = 0;
67  bytesRcvd = 0;
68  packetsRcvd = 0;
70  numSessions = 0;
71  chunksAbandoned = 0;
72 }
cMessage * connectTimer
Definition: SCTPPeer.h:66
cMessage * timeoutMsg
Definition: SCTPPeer.h:64
bool echo
Definition: SCTPPeer.h:53
int echoedBytesSent
Definition: SCTPPeer.h:82
int serverAssocId
Definition: SCTPPeer.h:69
int packetsRcvd
Definition: SCTPPeer.h:85
int bytesRcvd
Definition: SCTPPeer.h:84
int chunksAbandoned
Definition: SCTPPeer.h:88
int numPacketsToReceive
Definition: SCTPPeer.h:72
bool schedule
Definition: SCTPPeer.h:55
int queueSize
Definition: SCTPPeer.h:56
int numRequestsToSend
Definition: SCTPPeer.h:70
bool sendAllowed
Definition: SCTPPeer.h:68
int lastStream
Definition: SCTPPeer.h:71
int outboundStreams
Definition: SCTPPeer.h:57
long bytesSent
Definition: SCTPPeer.h:81
double delay
Definition: SCTPPeer.h:52
bool shutdownReceived
Definition: SCTPPeer.h:67
bool ordered
Definition: SCTPPeer.h:54
int packetsSent
Definition: SCTPPeer.h:83
cMessage * timeMsg
Definition: SCTPPeer.h:65
int numSessions
Definition: SCTPPeer.h:87
int inboundStreams
Definition: SCTPPeer.h:58
int notificationsReceived
Definition: SCTPPeer.h:86
inet::SCTPPeer::~SCTPPeer ( )
75 {
76  cancelAndDelete(timeMsg);
77  cancelAndDelete(timeoutMsg);
78  cancelAndDelete(connectTimer);
79  for (auto & elem : bytesPerAssoc)
80  delete elem.second;
81  bytesPerAssoc.clear();
82 
83  for (auto & elem : endToEndDelay)
84  delete elem.second;
85  endToEndDelay.clear();
86 
87  for (auto & elem : histEndToEndDelay)
88  delete elem.second;
89  histEndToEndDelay.clear();
90 
91  rcvdPacketsPerAssoc.clear();
92  sentPacketsPerAssoc.clear();
93  rcvdBytesPerAssoc.clear();
94 }
cMessage * connectTimer
Definition: SCTPPeer.h:66
cMessage * timeoutMsg
Definition: SCTPPeer.h:64
RcvdBytesPerAssoc rcvdBytesPerAssoc
Definition: SCTPPeer.h:77
RcvdPacketsPerAssoc rcvdPacketsPerAssoc
Definition: SCTPPeer.h:75
BytesPerAssoc bytesPerAssoc
Definition: SCTPPeer.h:78
cMessage * timeMsg
Definition: SCTPPeer.h:65
HistEndToEndDelay histEndToEndDelay
Definition: SCTPPeer.h:79
SentPacketsPerAssoc sentPacketsPerAssoc
Definition: SCTPPeer.h:76
EndToEndDelay endToEndDelay
Definition: SCTPPeer.h:80

Member Function Documentation

void inet::SCTPPeer::connect ( )
protected

Referenced by handleTimer().

195 {
196  const char *connectAddress = par("connectAddress");
197  int connectPort = par("connectPort");
198  int outStreams = par("outboundStreams");
199  clientSocket.setOutboundStreams(outStreams);
200 
201  EV_INFO << "issuing OPEN command\n";
202  EV_INFO << "Assoc " << clientSocket.getConnectionId() << "::connect to address " << connectAddress << ", port " << connectPort << "\n";
203  numSessions++;
204  bool streamReset = par("streamReset");
205  L3Address destination;
206  L3AddressResolver().tryResolve(connectAddress, destination);
207  if (destination.isUnspecified())
208  EV << "cannot resolve destination address: " << connectAddress << endl;
209  else {
210  clientSocket.connect(destination, connectPort, streamReset, (int)par("prMethod"), (unsigned int)par("numRequestsPerSession"));
211  }
212 
213  if (streamReset) {
214  cMessage *cmsg = new cMessage("StreamReset");
215  cmsg->setKind(MSGKIND_RESET);
216  EV_INFO << "StreamReset Timer scheduled at " << simTime() << "\n";
217  scheduleAt(simTime() + par("streamRequestTime"), cmsg);
218  }
219 
220  unsigned int streamNum = 0;
221  cStringTokenizer tokenizer(par("streamPriorities").stringValue());
222  while (tokenizer.hasMoreTokens()) {
223  const char *token = tokenizer.nextToken();
224  clientSocket.setStreamPriority(streamNum, (unsigned int)atoi(token));
225 
226  streamNum++;
227  }
228 }
void connect(L3Address remoteAddress, int32 remotePort, bool streamReset=false, int32 prMethod=0, uint32 numRequests=0)
Active OPEN to the given remote socket.
Definition: SCTPSocket.cc:237
int getConnectionId() const
Returns the internal connection Id.
Definition: SCTPSocket.h:141
#define MSGKIND_RESET
Definition: SCTPPeer.cc:37
#define stringValue()
Definition: NedFunctions.cc:24
void setOutboundStreams(int streams)
Setter and getter methods for socket and API Parameters.
Definition: SCTPSocket.h:182
void setStreamPriority(uint32 stream, uint32 priority)
Definition: SCTPSocket.cc:611
SCTPSocket clientSocket
Definition: SCTPPeer.h:62
int numSessions
Definition: SCTPPeer.h:87
void inet::SCTPPeer::finish ( )
overrideprotectedvirtual
741 {
742  EV_INFO << getFullPath() << ": opened " << numSessions << " sessions\n";
743  EV_INFO << getFullPath() << ": sent " << bytesSent << " bytes in " << packetsSent << " packets\n";
744 
745  for (auto & elem : rcvdBytesPerAssoc)
746  EV_DETAIL << getFullPath() << ": received " << elem.second << " bytes in assoc " << elem.first << "\n";
747 
748  EV_INFO << getFullPath() << "Over all " << packetsRcvd << " packets received\n ";
749  EV_INFO << getFullPath() << "Over all " << notificationsReceived << " notifications received\n ";
750 }
int packetsRcvd
Definition: SCTPPeer.h:85
RcvdBytesPerAssoc rcvdBytesPerAssoc
Definition: SCTPPeer.h:77
long bytesSent
Definition: SCTPPeer.h:81
int packetsSent
Definition: SCTPPeer.h:83
int numSessions
Definition: SCTPPeer.h:87
int notificationsReceived
Definition: SCTPPeer.h:86
void inet::SCTPPeer::generateAndSend ( SCTPConnectInfo connectInfo)
protected

Referenced by handleMessage(), and handleTimer().

160 {
161  cPacket *cmsg = new cPacket("SCTP_C_SEND");
162  SCTPSimpleMessage *msg = new SCTPSimpleMessage("Server");
163  int numBytes = par("requestLength");
164  msg->setDataArraySize(numBytes);
165 
166  for (int i = 0; i < numBytes; i++)
167  msg->setData(i, 's');
168 
169  msg->setDataLen(numBytes);
170  msg->setByteLength(numBytes);
171  msg->setEncaps(false);
172  cmsg->encapsulate(msg);
173  SCTPSendInfo *cmd = new SCTPSendInfo();
174  cmd->setAssocId(serverAssocId);
175 
176  if (ordered)
177  cmd->setSendUnordered(COMPLETE_MESG_ORDERED);
178  else
179  cmd->setSendUnordered(COMPLETE_MESG_UNORDERED);
180 
182  cmd->setSid(lastStream);
183  cmd->setPrValue(par("prValue"));
184  cmd->setPrMethod(par("prMethod"));
185  cmd->setLast(true);
186  cmsg->setKind(SCTP_C_SEND);
187  cmsg->setControlInfo(cmd);
188  packetsSent++;
189  bytesSent += msg->getByteLength();
190  emit(sentPkSignal, msg);
191  sendOrSchedule(cmsg);
192 }
Definition: SCTPCommand.h:33
int serverAssocId
Definition: SCTPPeer.h:69
void sendOrSchedule(cMessage *msg)
Definition: SCTPPeer.cc:149
static simsignal_t sentPkSignal
Definition: SCTPPeer.h:89
int lastStream
Definition: SCTPPeer.h:71
int outboundStreams
Definition: SCTPPeer.h:57
long bytesSent
Definition: SCTPPeer.h:81
bool ordered
Definition: SCTPPeer.h:54
Definition: SCTPCommand.h:87
int packetsSent
Definition: SCTPPeer.h:83
Definition: SCTPCommand.h:88
void inet::SCTPPeer::handleMessage ( cMessage *  msg)
overrideprotectedvirtual
231 {
232  int id = -1;
233 
234  if (msg->isSelfMessage())
235  handleTimer(msg);
236 
237  switch (msg->getKind()) {
238  case SCTP_I_PEER_CLOSED:
239  case SCTP_I_ABORT: {
240  SCTPCommand *ind = check_and_cast<SCTPCommand *>(msg->getControlInfo()->dup());
241  cMessage *cmsg = new cMessage("SCTP_C_ABORT");
242  SCTPSendInfo *cmd = new SCTPSendInfo();
243  id = ind->getAssocId();
244  cmd->setAssocId(id);
245  cmd->setSid(ind->getSid());
246  cmd->setNumMsgs(ind->getNumMsgs());
247  cmsg->setControlInfo(cmd);
248  delete ind;
249  delete msg;
250  cmsg->setKind(SCTP_C_ABORT);
251  sendOrSchedule(cmsg);
252  break;
253  }
254 
255  case SCTP_I_ESTABLISHED: {
258  else {
259  SCTPConnectInfo *connectInfo = check_and_cast<SCTPConnectInfo *>(msg->removeControlInfo());
260  numSessions++;
261  serverAssocId = connectInfo->getAssocId();
262  id = serverAssocId;
263  outboundStreams = connectInfo->getOutboundStreams();
264  rcvdPacketsPerAssoc[serverAssocId] = par("numPacketsToReceivePerClient");
265  sentPacketsPerAssoc[serverAssocId] = par("numPacketsToSendPerClient");
266  char text[50];
267  sprintf(text, "App: Received Bytes of assoc %d", serverAssocId);
268  bytesPerAssoc[serverAssocId] = new cOutVector(text);
270  sprintf(text, "App: EndToEndDelay of assoc %d", serverAssocId);
271  endToEndDelay[serverAssocId] = new cOutVector(text);
272  sprintf(text, "Hist: EndToEndDelay of assoc %d", serverAssocId);
273  histEndToEndDelay[serverAssocId] = new cDoubleHistogram(text);
274 
275  //delete connectInfo;
276  delete msg;
277 
278  if (par("numPacketsToSendPerClient").longValue() > 0) {
279  auto i = sentPacketsPerAssoc.find(serverAssocId);
280  numRequestsToSend = i->second;
281  if (par("thinkTime").doubleValue() > 0) {
282  generateAndSend(connectInfo);
283  timeoutMsg->setKind(SCTP_C_SEND);
284  scheduleAt(simTime() + par("thinkTime"), timeoutMsg);
286  i->second = numRequestsToSend;
287  }
288  else {
289  if (queueSize == 0) {
290  while (numRequestsToSend > 0) {
291  generateAndSend(connectInfo);
293  i->second = numRequestsToSend;
294  }
295  }
296  else if (queueSize > 0) {
297  int count = 0;
298  while (numRequestsToSend > 0 && count++ < queueSize * 2) {
299  generateAndSend(connectInfo);
301  i->second = numRequestsToSend;
302  }
303 
304  cMessage *cmsg = new cMessage("SCTP_C_QUEUE_MSGS_LIMIT");
305  SCTPInfo *qinfo = new SCTPInfo();
306  qinfo->setText(queueSize);
307  cmsg->setKind(SCTP_C_QUEUE_MSGS_LIMIT);
308  qinfo->setAssocId(id);
309  cmsg->setControlInfo(qinfo);
310  sendOrSchedule(cmsg);
311  }
312 
313  EV_INFO << "!!!!!!!!!!!!!!!All data sent from Server !!!!!!!!!!\n";
314 
315  auto j = rcvdPacketsPerAssoc.find(serverAssocId);
316  if (j->second == 0 && par("waitToClose").doubleValue() > 0) {
317  char as[5];
318  sprintf(as, "%d", serverAssocId);
319  cMessage *abortMsg = new cMessage(as);
320  abortMsg->setKind(SCTP_I_ABORT);
321  scheduleAt(simTime() + par("waitToClose"), abortMsg);
322  }
323  else {
324  EV_INFO << "no more packets to send, call shutdown for assoc " << serverAssocId << "\n";
325  cMessage *cmsg = new cMessage("SCTP_C_SHUTDOWN");
326  SCTPCommand *cmd = new SCTPCommand();
327  cmsg->setKind(SCTP_C_SHUTDOWN);
328  cmd->setAssocId(serverAssocId);
329  cmsg->setControlInfo(cmd);
330  sendOrSchedule(cmsg);
331  }
332  }
333  }
334  }
335  break;
336  }
337 
340  SCTPCommand *ind = check_and_cast<SCTPCommand *>(msg->removeControlInfo());
341  cMessage *cmsg = new cMessage("SCTP_C_RECEIVE");
342  SCTPSendInfo *cmd = new SCTPSendInfo();
343  id = ind->getAssocId();
344  cmd->setAssocId(id);
345  cmd->setSid(ind->getSid());
346  cmd->setNumMsgs(ind->getNumMsgs());
347  cmsg->setKind(SCTP_C_RECEIVE);
348  cmsg->setControlInfo(cmd);
349  delete ind;
350  delete msg;
351  if (!cmsg->isScheduled() && schedule == false) {
352  scheduleAt(simTime() + par("delayFirstRead"), cmsg);
353  }
354  else if (schedule == true)
355  sendOrSchedule(cmsg);
356  break;
357  }
358 
359  case SCTP_I_DATA: {
360  SCTPCommand *ind = check_and_cast<SCTPCommand *>(msg->getControlInfo());
361  id = ind->getAssocId();
362  auto j = rcvdBytesPerAssoc.find(id);
365  else if (j != rcvdBytesPerAssoc.end()) {
366  j->second += PK(msg)->getByteLength();
367  auto k = bytesPerAssoc.find(id);
368  k->second->record(j->second);
369  packetsRcvd++;
370 
371  if (!echo) {
372  if (par("numPacketsToReceivePerClient").longValue() > 0) {
373  auto i = rcvdPacketsPerAssoc.find(id);
374  i->second--;
375  SCTPSimpleMessage *smsg = check_and_cast<SCTPSimpleMessage *>(msg);
376  auto j = endToEndDelay.find(id);
377  j->second->record(simTime() - smsg->getCreationTime());
378  auto k = histEndToEndDelay.find(id);
379  k->second->collect(simTime() - smsg->getCreationTime());
380 
381  if (i->second == 0) {
382  cMessage *cmsg = new cMessage("SCTP_C_NO_OUTSTANDING");
383  SCTPInfo *qinfo = new SCTPInfo();
384  cmsg->setKind(SCTP_C_NO_OUTSTANDING);
385  qinfo->setAssocId(id);
386  cmsg->setControlInfo(qinfo);
387  sendOrSchedule(cmsg);
388  }
389  }
390  delete msg;
391  }
392  else {
393  SCTPSendInfo *cmd = new SCTPSendInfo();
394  cmd->setAssocId(id);
395 
396  SCTPSimpleMessage *smsg = check_and_cast<SCTPSimpleMessage *>(msg);
397  auto j = endToEndDelay.find(id);
398  j->second->record(simTime() - smsg->getCreationTime());
399  auto k = histEndToEndDelay.find(id);
400  k->second->collect(simTime() - smsg->getCreationTime());
401  cPacket *cmsg = new cPacket("SCTP_C_SEND");
402  bytesSent += smsg->getByteLength();
403  cmd->setPrValue(0);
404  emit(sentPkSignal, smsg);
405  cmd->setSendUnordered(cmd->getSendUnordered());
407  cmd->setSid(lastStream);
408  cmd->setLast(true);
409  cmsg->encapsulate(smsg);
410  cmsg->setKind(SCTP_C_SEND);
411  cmsg->setControlInfo(cmd);
412  packetsSent++;
413  sendOrSchedule(cmsg);
414  }
415  } else {
416  delete msg;
417  }
418  break;
419  }
420 
422  SCTPCommand *command = check_and_cast<SCTPCommand *>(msg->removeControlInfo());
423  id = command->getAssocId();
424  EV_INFO << "server: SCTP_I_SHUTDOWN_RECEIVED for assoc " << id << "\n";
425  auto i = rcvdPacketsPerAssoc.find(id);
426 
429  else if (i != rcvdPacketsPerAssoc.end()) {
430  if (i->second == 0) {
431  cMessage *cmsg = new cMessage("SCTP_C_NO_OUTSTANDING");
432  SCTPInfo *qinfo = new SCTPInfo();
433  cmsg->setKind(SCTP_C_NO_OUTSTANDING);
434  qinfo->setAssocId(id);
435  cmsg->setControlInfo(qinfo);
436  sendOrSchedule(cmsg);
437  }
438 
439  delete command;
440  shutdownReceived = true;
441  }
442  delete msg;
443  break;
444  }
445 
448  EV_INFO << "Streams have been resetted\n";
449  break;
450  }
451 
452  case SCTP_I_CLOSED:
453  delete msg;
454  break;
455  }
456 
457  if (hasGUI()) {
458  char buf[32];
459  auto l = rcvdBytesPerAssoc.find(id);
460  sprintf(buf, "rcvd: %ld bytes\nsent: %ld bytes", l->second, bytesSent);
461  getDisplayString().setTagArg("t", 0, buf);
462  }
463 }
cMessage * timeoutMsg
Definition: SCTPPeer.h:64
bool echo
Definition: SCTPPeer.h:53
Definition: SCTPCommand.h:80
Definition: SCTPCommand.h:67
int count(const std::vector< T > &v, const T &a)
Definition: stlutils.h:58
Definition: SCTPCommand.h:33
Definition: SCTPCommand.h:43
int serverAssocId
Definition: SCTPPeer.h:69
int packetsRcvd
Definition: SCTPPeer.h:85
void sendOrSchedule(cMessage *msg)
Definition: SCTPPeer.cc:149
Definition: SCTPCommand.h:79
Definition: SCTPSocket.h:87
Definition: SCTPCommand.h:63
static simsignal_t sentPkSignal
Definition: SCTPPeer.h:89
Definition: SCTPCommand.h:35
Definition: SCTPCommand.h:37
RcvdBytesPerAssoc rcvdBytesPerAssoc
Definition: SCTPPeer.h:77
bool schedule
Definition: SCTPPeer.h:55
int getState()
Returns the socket state, one of NOT_BOUND, CLOSED, LISTENING, CONNECTING, CONNECTED, etc.
Definition: SCTPSocket.h:154
Definition: SCTPCommand.h:65
Definition: SCTPCommand.h:42
void handleTimer(cMessage *msg)
Definition: SCTPPeer.cc:465
int queueSize
Definition: SCTPPeer.h:56
Definition: SCTPCommand.h:75
Definition: SCTPCommand.h:44
int numRequestsToSend
Definition: SCTPPeer.h:70
Definition: SCTPCommand.h:66
Definition: SCTPCommand.h:64
int lastStream
Definition: SCTPPeer.h:71
Definition: SCTPCommand.h:72
int outboundStreams
Definition: SCTPPeer.h:57
long bytesSent
Definition: SCTPPeer.h:81
#define PK(msg)
Definition: INETDefs.h:92
RcvdPacketsPerAssoc rcvdPacketsPerAssoc
Definition: SCTPPeer.h:75
bool shutdownReceived
Definition: SCTPPeer.h:67
void generateAndSend(SCTPConnectInfo *connectInfo)
Definition: SCTPPeer.cc:159
int packetsSent
Definition: SCTPPeer.h:83
SCTPSocket clientSocket
Definition: SCTPPeer.h:62
BytesPerAssoc bytesPerAssoc
Definition: SCTPPeer.h:78
const double k
Definition: QAM16Modulation.cc:24
int numSessions
Definition: SCTPPeer.h:87
HistEndToEndDelay histEndToEndDelay
Definition: SCTPPeer.h:79
void processMessage(cMessage *msg)
Examines the message (which should have arrived from SCTPMain), updates socket state, and if there is a callback object installed (see setCallbackObject(), class CallbackInterface), dispatches to the appropriate method of it with the same yourPtr that you gave in the setCallbackObject() call.
Definition: SCTPSocket.cc:479
SentPacketsPerAssoc sentPacketsPerAssoc
Definition: SCTPPeer.h:76
Definition: SCTPSocket.h:87
int notificationsReceived
Definition: SCTPPeer.h:86
EndToEndDelay endToEndDelay
Definition: SCTPPeer.h:80
virtual bool inet::SCTPPeer::handleOperationStage ( LifecycleOperation operation,
int  stage,
IDoneCallback doneCallback 
)
inlineoverrideprotectedvirtual

Perform one stage of a lifecycle operation.

Processing may be done entirely within this method, or may be a longer process that involves nonzero simulation time or several events, and is triggered by this method call.

Return value: true = "done"; false = "not yet done, will invoke doneCallback when done"

Implements inet::ILifecycle.

123  { Enter_Method_Silent(); throw cRuntimeError("Unsupported lifecycle operation '%s'", operation->getClassName()); return true; }
void inet::SCTPPeer::handleTimer ( cMessage *  msg)
protected

Referenced by handleMessage().

466 {
467  EV_TRACE << "SCTPPeer::handleTimer\n";
468 
469  SCTPConnectInfo *connectInfo = dynamic_cast<SCTPConnectInfo *>(msg->getControlInfo());
470 
471  switch (msg->getKind()) {
472  case MSGKIND_CONNECT:
473  EV_INFO << "starting session call connect\n";
474  connect();
475  break;
476 
477  case SCTP_C_SEND:
478  if (numRequestsToSend > 0) {
479  generateAndSend(connectInfo);
480  if (par("thinkTime").doubleValue() > 0)
481  scheduleAt(simTime() + par("thinkTime"), timeoutMsg);
483  }
484  break;
485 
486  case SCTP_I_ABORT: {
487  cMessage *cmsg = new cMessage("CLOSE", SCTP_C_CLOSE);
488  SCTPCommand *cmd = new SCTPCommand();
489  int id = atoi(msg->getName());
490  cmd->setAssocId(id);
491  cmsg->setControlInfo(cmd);
492  sendOrSchedule(cmsg);
493  }
494  break;
495 
496  case SCTP_C_RECEIVE:
497  schedule = true;
498  sendOrSchedule(PK(msg));
499  break;
500 
501  default:
502  break;
503  }
504 }
cMessage * timeoutMsg
Definition: SCTPPeer.h:64
Definition: SCTPCommand.h:33
void sendOrSchedule(cMessage *msg)
Definition: SCTPPeer.cc:149
void connect()
Definition: SCTPPeer.cc:194
Definition: SCTPCommand.h:37
bool schedule
Definition: SCTPPeer.h:55
int numRequestsToSend
Definition: SCTPPeer.h:70
Definition: SCTPCommand.h:72
#define MSGKIND_CONNECT
Definition: SCTPPeer.cc:33
#define PK(msg)
Definition: INETDefs.h:92
void generateAndSend(SCTPConnectInfo *connectInfo)
Definition: SCTPPeer.cc:159
Definition: SCTPCommand.h:34
void inet::SCTPPeer::initialize ( int  stage)
overrideprotectedvirtual
97 {
98  cSimpleModule::initialize(stage);
99 
100  if (stage == INITSTAGE_LOCAL) {
101  WATCH(numSessions);
102  WATCH(packetsSent);
103  WATCH(packetsRcvd);
104  WATCH(bytesSent);
105  WATCH(numRequestsToSend);
106  }
107  else if (stage == INITSTAGE_APPLICATION_LAYER) {
108  // parameters
109  const char *addressesString = par("localAddress");
110  AddressVector addresses = L3AddressResolver().resolve(cStringTokenizer(addressesString).asVector());
111  int port = par("localPort");
112  echo = par("echo");
113  delay = par("echoDelay");
114  outboundStreams = par("outboundStreams");
115  inboundStreams = par("inboundStreams");
116  ordered = par("ordered").boolValue();
117  queueSize = par("queueSize");
118  timeoutMsg = new cMessage("SrvAppTimer");
119  listeningSocket.setOutputGate(gate("sctpOut"));
122 
123  if (addresses.size() == 0) {
124  listeningSocket.bind(port);
125  clientSocket.bind(port);
126  }
127  else {
128  listeningSocket.bindx(addresses, port);
129  clientSocket.bindx(addresses, port);
130  }
131  listeningSocket.listen(true, par("streamReset").boolValue(), par("numPacketsToSendPerClient").longValue());
132  EV_DEBUG << "SCTPPeer::initialized listen port=" << port << "\n";
134  clientSocket.setOutputGate(gate("sctpOut"));
135 
136  if ((simtime_t)par("startTime") > SIMTIME_ZERO) { //FIXME is invalid the startTime == 0 ????
137  connectTimer = new cMessage("ConnectTimer");
138  connectTimer->setKind(MSGKIND_CONNECT);
139  scheduleAt(par("startTime"), connectTimer);
140  }
141 
142  NodeStatus *nodeStatus = dynamic_cast<NodeStatus *>(findContainingNode(this)->getSubmodule("status"));
143  bool isOperational = (!nodeStatus) || nodeStatus->getState() == NodeStatus::UP;
144  if (!isOperational)
145  throw cRuntimeError("This module doesn't support starting in node DOWN state");
146  }
147 }
cMessage * connectTimer
Definition: SCTPPeer.h:66
cMessage * timeoutMsg
Definition: SCTPPeer.h:64
bool echo
Definition: SCTPPeer.h:53
void setCallbackObject(CallbackInterface *cb, void *yourPtr=nullptr)
Sets a callback object, to be used with processMessage().
Definition: SCTPSocket.cc:473
void bindx(AddressVector localAddr, int localPort)
Definition: SCTPSocket.cc:165
SCTPSocket listeningSocket
Definition: SCTPPeer.h:63
int packetsRcvd
Definition: SCTPPeer.h:85
std::vector< L3Address > AddressVector
Definition: SCTPCommand_m.h:41
void bind(int localPort)
Bind the socket to a local port number.
Definition: SCTPSocket.cc:136
cModule * findContainingNode(const cModule *from)
Find the node containing the given module.
Definition: ModuleAccess.cc:56
Local initializations.
Definition: InitStages.h:35
int queueSize
Definition: SCTPPeer.h:56
int numRequestsToSend
Definition: SCTPPeer.h:70
int outboundStreams
Definition: SCTPPeer.h:57
#define MSGKIND_CONNECT
Definition: SCTPPeer.cc:33
long bytesSent
Definition: SCTPPeer.h:81
double delay
Definition: SCTPPeer.h:52
void setInboundStreams(int streams)
Definition: SCTPSocket.h:183
void setOutboundStreams(int streams)
Setter and getter methods for socket and API Parameters.
Definition: SCTPSocket.h:182
bool ordered
Definition: SCTPPeer.h:54
int packetsSent
Definition: SCTPPeer.h:83
void listen(bool fork=true, bool streamReset=false, uint32 requests=0, uint32 messagesToPush=0)
Initiates passive OPEN.
Definition: SCTPSocket.cc:177
void setOutputGate(cGate *toSctp)
Sets the gate on which to send to SCTP.
Definition: SCTPSocket.h:177
SCTPSocket clientSocket
Definition: SCTPPeer.h:62
int numSessions
Definition: SCTPPeer.h:87
int inboundStreams
Definition: SCTPPeer.h:58
Initialization of applications.
Definition: InitStages.h:106
Definition: NodeStatus.h:40
void inet::SCTPPeer::msgAbandonedArrived ( int  assocId)
overrideprotectedvirtual

Reimplemented from inet::SCTPSocket::CallbackInterface.

731 {
732  chunksAbandoned++;
733 }
int chunksAbandoned
Definition: SCTPPeer.h:88
virtual int inet::SCTPPeer::numInitStages ( ) const
inlineoverrideprotectedvirtual
96 { return NUM_INIT_STAGES; }
The number of initialization stages.
Definition: InitStages.h:116
void inet::SCTPPeer::sendOrSchedule ( cMessage *  msg)
protected

Referenced by generateAndSend(), handleMessage(), and handleTimer().

150 {
151  if (delay == 0) {
152  send(msg, "sctpOut");
153  }
154  else {
155  scheduleAt(simTime() + delay, msg);
156  }
157 }
double delay
Definition: SCTPPeer.h:52
void inet::SCTPPeer::sendqueueFullArrived ( int  connId)
overrideprotectedvirtual

Reimplemented from inet::SCTPSocket::CallbackInterface.

736 {
737  sendAllowed = false;
738 }
bool sendAllowed
Definition: SCTPPeer.h:68
void inet::SCTPPeer::sendQueueRequest ( )
protected

Referenced by socketEstablished().

660 {
661  cMessage *cmsg = new cMessage("SCTP_C_QUEUE_MSGS_LIMIT");
662  SCTPInfo *qinfo = new SCTPInfo();
663  qinfo->setText(queueSize);
664  cmsg->setKind(SCTP_C_QUEUE_MSGS_LIMIT);
665  qinfo->setAssocId(clientSocket.getConnectionId());
666  cmsg->setControlInfo(qinfo);
668 }
void sendRequest(cMessage *msg)
Send request.
Definition: SCTPSocket.cc:405
int getConnectionId() const
Returns the internal connection Id.
Definition: SCTPSocket.h:141
Definition: SCTPCommand.h:42
int queueSize
Definition: SCTPPeer.h:56
SCTPSocket clientSocket
Definition: SCTPPeer.h:62
void inet::SCTPPeer::sendRequest ( bool  last = true)
protected

Referenced by sendRequestArrived(), and socketEstablished().

571 {
572  EV_INFO << "sending request, " << numRequestsToSend - 1 << " more to go\n";
573  long numBytes = par("requestLength");
574 
575  if (numBytes < 1)
576  numBytes = 1;
577 
578  EV_INFO << "SCTPClient: sending " << numBytes << " data bytes\n";
579 
580  cPacket *cmsg = new cPacket("SCTP_C_SEND");
581  SCTPSimpleMessage *msg = new SCTPSimpleMessage("data");
582 
583  msg->setDataArraySize(numBytes);
584 
585  for (int i = 0; i < numBytes; i++)
586  msg->setData(i, 'a');
587 
588  msg->setDataLen(numBytes);
589  msg->setEncaps(false);
590  msg->setBitLength(numBytes * 8);
591  msg->setCreationTime(simTime());
592  cmsg->encapsulate(msg);
594 
595  SCTPSendInfo* sendCommand = new SCTPSendInfo;
596  sendCommand->setLast(last);
597  cmsg->setControlInfo(sendCommand);
598 
599  // send SCTPMessage with SCTPSimpleMessage enclosed
600  emit(sentPkSignal, msg);
601  clientSocket.sendMsg(cmsg);
602  bytesSent += numBytes;
603 }
Definition: SCTPCommand.h:38
static simsignal_t sentPkSignal
Definition: SCTPPeer.h:89
int numRequestsToSend
Definition: SCTPPeer.h:70
long bytesSent
Definition: SCTPPeer.h:81
void sendMsg(cMessage *cmsg)
Send data message (provided within control message).
Definition: SCTPSocket.cc:369
bool ordered
Definition: SCTPPeer.h:54
SCTPSocket clientSocket
Definition: SCTPPeer.h:62
Definition: SCTPCommand.h:39
void inet::SCTPPeer::sendRequestArrived ( )
overrideprotectedvirtual

Reimplemented from inet::SCTPSocket::CallbackInterface.

671 {
672  int count = 0;
673 
674  EV_INFO << "sendRequestArrived numRequestsToSend=" << numRequestsToSend << "\n";
675 
676  while (numRequestsToSend > 0 && count++ < queueSize && sendAllowed) {
677  numRequestsToSend--;
678  sendRequest(count == queueSize || numRequestsToSend == 0);
679  if (numRequestsToSend == 0) {
680  EV_INFO << "no more packets to send, call shutdown\n";
682  }
683  }
684 }
int count(const std::vector< T > &v, const T &a)
Definition: stlutils.h:58
void shutdown(int id=-1)
Definition: SCTPSocket.cc:425
void sendRequest(bool last=true)
Definition: SCTPPeer.cc:570
int queueSize
Definition: SCTPPeer.h:56
int numRequestsToSend
Definition: SCTPPeer.h:70
bool sendAllowed
Definition: SCTPPeer.h:68
SCTPSocket clientSocket
Definition: SCTPPeer.h:62
void inet::SCTPPeer::setStatusString ( const char *  s)
protected

Referenced by socketClosed(), socketDataArrived(), socketEstablished(), socketFailure(), and socketPeerClosed().

565 {
566  if (hasGUI())
567  getDisplayString().setTagArg("t", 0, s);
568 }
value< double, units::s > s
Definition: Units.h:1049
void inet::SCTPPeer::shutdownReceivedArrived ( int  connId)
overrideprotectedvirtual

Reimplemented from inet::SCTPSocket::CallbackInterface.

719 {
720  if (numRequestsToSend == 0) {
721  cMessage *cmsg = new cMessage("SCTP_C_NO_OUTSTANDING");
722  SCTPInfo *qinfo = new SCTPInfo();
723  cmsg->setKind(SCTP_C_NO_OUTSTANDING);
724  qinfo->setAssocId(connId);
725  cmsg->setControlInfo(qinfo);
727  }
728 }
az accept haszálja pcb új connId
Definition: lwip_tcp.txt:38
Definition: SCTPCommand.h:44
int numRequestsToSend
Definition: SCTPPeer.h:70
void sendNotification(cMessage *msg)
Send notification.
Definition: SCTPSocket.cc:393
SCTPSocket clientSocket
Definition: SCTPPeer.h:62
void inet::SCTPPeer::socketClosed ( int  connId,
void *  yourPtr 
)
overrideprotectedvirtual

Reimplemented from inet::SCTPSocket::CallbackInterface.

531 {
532  // *redefine* to start another session etc.
533  EV_INFO << "connection closed\n";
534  setStatusString("closed");
535 }
void setStatusString(const char *s)
Definition: SCTPPeer.cc:564
void inet::SCTPPeer::socketDataArrived ( int  connId,
void *  yourPtr,
cPacket *  msg,
bool  urgent 
)
overrideprotectedvirtual

Implements inet::SCTPSocket::CallbackInterface.

687 {
688  // *redefine* to perform or schedule next sending
689  packetsRcvd++;
690 
691  EV_INFO << "Client received packet Nr " << packetsRcvd << " from SCTP\n";
692 
693  SCTPCommand *ind = check_and_cast<SCTPCommand *>(msg->getControlInfo());
694 
695  emit(rcvdPkSignal, msg);
696  bytesRcvd += msg->getByteLength();
697 
698  if (echo) {
699  SCTPSimpleMessage *smsg = check_and_cast<SCTPSimpleMessage *>(msg);
700  cPacket *cmsg = new cPacket("SCTP_C_SEND");
701  echoedBytesSent += smsg->getByteLength();
702  emit(echoedPkSignal, smsg);
703  cmsg->encapsulate(smsg);
704  cmsg->setKind(ind->getSendUnordered() ? SCTP_C_SEND_UNORDERED : SCTP_C_SEND_ORDERED);
705  packetsSent++;
706  clientSocket.sendMsg(cmsg);
707  }
708 
709  if (par("numPacketsToReceive").longValue() > 0) {
711  if (numPacketsToReceive == 0) {
712  setStatusString("closing");
714  }
715  }
716 }
bool echo
Definition: SCTPPeer.h:53
int echoedBytesSent
Definition: SCTPPeer.h:82
int packetsRcvd
Definition: SCTPPeer.h:85
void close(int id=-1)
Closes the local end of the connection.
Definition: SCTPSocket.cc:410
int bytesRcvd
Definition: SCTPPeer.h:84
int numPacketsToReceive
Definition: SCTPPeer.h:72
Definition: SCTPCommand.h:38
void setStatusString(const char *s)
Definition: SCTPPeer.cc:564
static simsignal_t rcvdPkSignal
Definition: SCTPPeer.h:91
void sendMsg(cMessage *cmsg)
Send data message (provided within control message).
Definition: SCTPSocket.cc:369
int packetsSent
Definition: SCTPPeer.h:83
static simsignal_t echoedPkSignal
Definition: SCTPPeer.h:90
SCTPSocket clientSocket
Definition: SCTPPeer.h:62
Definition: SCTPCommand.h:39
void inet::SCTPPeer::socketDataNotificationArrived ( int  connId,
void *  yourPtr,
cPacket *  msg 
)
overrideprotectedvirtual

Implements inet::SCTPSocket::CallbackInterface.

507 {
508  SCTPCommand *ind = check_and_cast<SCTPCommand *>(msg->removeControlInfo());
509  cMessage *cmsg = new cMessage("CMSG");
510  SCTPSendInfo *cmd = new SCTPSendInfo();
511  cmd->setAssocId(ind->getAssocId());
512  cmd->setSid(ind->getSid());
513  cmd->setNumMsgs(ind->getNumMsgs());
514  cmsg->setKind(SCTP_C_RECEIVE);
515  cmsg->setControlInfo(cmd);
516  delete ind;
518 }
Definition: SCTPCommand.h:37
void sendNotification(cMessage *msg)
Send notification.
Definition: SCTPSocket.cc:393
SCTPSocket clientSocket
Definition: SCTPPeer.h:62
void inet::SCTPPeer::socketEstablished ( int  connId,
void *  yourPtr 
)
protected
606 {
607  int count = 0;
608  // *redefine* to perform or schedule first sending
609  EV_INFO << "SCTPClient: connected\n";
610  setStatusString("connected");
611  // determine number of requests in this session
612  numRequestsToSend = par("numRequestsPerSession");
613  numPacketsToReceive = par("numPacketsToReceive");
614 
615  if (numRequestsToSend < 1)
616  numRequestsToSend = 0;
617 
618  // perform first request (next one will be sent when reply arrives)
619  if (numRequestsToSend > 0) {
620  if (par("thinkTime").doubleValue() > 0) {
621  if (sendAllowed) {
622  sendRequest();
624  }
625 
626  timeMsg->setKind(MSGKIND_SEND);
627  scheduleAt(simTime() + par("thinkTime"), timeMsg);
628  }
629  else {
630  if (queueSize > 0) {
631  while (numRequestsToSend > 0 && count++ < queueSize * 2 && sendAllowed) {
632  sendRequest(count == queueSize * 2);
634  }
635 
636  if (numRequestsToSend > 0 && sendAllowed)
638  }
639  else {
640  while (numRequestsToSend > 0 && sendAllowed) {
641  sendRequest();
643  }
644  }
645 
646  if (numPacketsToReceive == 0 && par("waitToClose").doubleValue() > 0) {
647  timeMsg->setKind(MSGKIND_ABORT);
648  scheduleAt(simTime() + par("waitToClose"), timeMsg);
649  }
650 
651  if (numRequestsToSend == 0 && par("waitToClose").doubleValue() == 0) {
652  EV_INFO << "socketEstablished:no more packets to send, call shutdown\n";
654  }
655  }
656  }
657 }
int count(const std::vector< T > &v, const T &a)
Definition: stlutils.h:58
void shutdown(int id=-1)
Definition: SCTPSocket.cc:425
void sendRequest(bool last=true)
Definition: SCTPPeer.cc:570
int numPacketsToReceive
Definition: SCTPPeer.h:72
void setStatusString(const char *s)
Definition: SCTPPeer.cc:564
#define MSGKIND_ABORT
Definition: SCTPPeer.cc:35
#define MSGKIND_SEND
Definition: SCTPPeer.cc:34
void sendQueueRequest()
Definition: SCTPPeer.cc:659
int queueSize
Definition: SCTPPeer.h:56
int numRequestsToSend
Definition: SCTPPeer.h:70
bool sendAllowed
Definition: SCTPPeer.h:68
SCTPSocket clientSocket
Definition: SCTPPeer.h:62
cMessage * timeMsg
Definition: SCTPPeer.h:65
void inet::SCTPPeer::socketFailure ( int  connId,
void *  yourPtr,
int  code 
)
overrideprotectedvirtual

Reimplemented from inet::SCTPSocket::CallbackInterface.

538 {
539  // subclasses may override this function, and add code try to reconnect after a delay.
540  EV_WARN << "connection broken\n";
541  setStatusString("broken");
542  // reconnect after a delay
543  timeMsg->setKind(MSGKIND_CONNECT);
544  scheduleAt(simTime() + par("reconnectInterval"), timeMsg);
545 }
void setStatusString(const char *s)
Definition: SCTPPeer.cc:564
#define MSGKIND_CONNECT
Definition: SCTPPeer.cc:33
cMessage * timeMsg
Definition: SCTPPeer.h:65
void inet::SCTPPeer::socketPeerClosed ( int  connId,
void *  yourPtr 
)
overrideprotectedvirtual

Reimplemented from inet::SCTPSocket::CallbackInterface.

521 {
522  // close the connection (if not already closed)
524  EV_INFO << "remote SCTP closed, closing here as well\n";
525  setStatusString("closing");
527  }
528 }
void close(int id=-1)
Closes the local end of the connection.
Definition: SCTPSocket.cc:410
void setStatusString(const char *s)
Definition: SCTPPeer.cc:564
int getState()
Returns the socket state, one of NOT_BOUND, CLOSED, LISTENING, CONNECTING, CONNECTED, etc.
Definition: SCTPSocket.h:154
Definition: SCTPSocket.h:87
SCTPSocket clientSocket
Definition: SCTPPeer.h:62
void inet::SCTPPeer::socketStatusArrived ( int  connId,
void *  yourPtr,
SCTPStatusInfo status 
)
overrideprotectedvirtual

Reimplemented from inet::SCTPSocket::CallbackInterface.

548 {
549  struct PathStatus ps;
550  auto i = sctpPathStatus.find(status->getPathId());
551 
552  if (i != sctpPathStatus.end()) {
553  ps = i->second;
554  ps.active = status->getActive();
555  }
556  else {
557  ps.active = status->getActive();
558  ps.primaryPath = false;
559  sctpPathStatus[ps.pid] = ps;
560  }
561  delete status;
562 }
SCTPPathStatus sctpPathStatus
Definition: SCTPPeer.h:61

Member Data Documentation

BytesPerAssoc inet::SCTPPeer::bytesPerAssoc
protected

Referenced by handleMessage(), and ~SCTPPeer().

int inet::SCTPPeer::bytesRcvd
protected

Referenced by SCTPPeer(), and socketDataArrived().

long inet::SCTPPeer::bytesSent
protected
int inet::SCTPPeer::chunksAbandoned
protected

Referenced by msgAbandonedArrived(), and SCTPPeer().

cMessage* inet::SCTPPeer::connectTimer
protected

Referenced by initialize(), SCTPPeer(), and ~SCTPPeer().

double inet::SCTPPeer::delay
protected
bool inet::SCTPPeer::echo
protected
int inet::SCTPPeer::echoedBytesSent
protected

Referenced by SCTPPeer(), and socketDataArrived().

simsignal_t inet::SCTPPeer::echoedPkSignal = registerSignal("echoedPk")
staticprotected

Referenced by socketDataArrived().

EndToEndDelay inet::SCTPPeer::endToEndDelay
protected

Referenced by handleMessage(), and ~SCTPPeer().

HistEndToEndDelay inet::SCTPPeer::histEndToEndDelay
protected

Referenced by handleMessage(), and ~SCTPPeer().

int inet::SCTPPeer::inboundStreams
protected

Referenced by initialize(), and SCTPPeer().

int inet::SCTPPeer::lastStream
protected
SCTPSocket inet::SCTPPeer::listeningSocket
protected

Referenced by initialize().

int inet::SCTPPeer::notificationsReceived
protected

Referenced by finish(), handleMessage(), and SCTPPeer().

int inet::SCTPPeer::numPacketsToReceive
protected
int inet::SCTPPeer::numSessions
protected
bool inet::SCTPPeer::ordered
protected
int inet::SCTPPeer::outboundStreams
protected
int inet::SCTPPeer::packetsRcvd
protected
int inet::SCTPPeer::packetsSent
protected
int inet::SCTPPeer::queueSize
protected
RcvdBytesPerAssoc inet::SCTPPeer::rcvdBytesPerAssoc
protected

Referenced by finish(), handleMessage(), and ~SCTPPeer().

RcvdPacketsPerAssoc inet::SCTPPeer::rcvdPacketsPerAssoc
protected

Referenced by handleMessage(), and ~SCTPPeer().

simsignal_t inet::SCTPPeer::rcvdPkSignal = registerSignal("rcvdPk")
staticprotected

Referenced by socketDataArrived().

bool inet::SCTPPeer::schedule
protected
SCTPPathStatus inet::SCTPPeer::sctpPathStatus
protected

Referenced by socketStatusArrived().

bool inet::SCTPPeer::sendAllowed
protected
SentPacketsPerAssoc inet::SCTPPeer::sentPacketsPerAssoc
protected

Referenced by handleMessage(), and ~SCTPPeer().

simsignal_t inet::SCTPPeer::sentPkSignal = registerSignal("sentPk")
staticprotected
int inet::SCTPPeer::serverAssocId
protected
bool inet::SCTPPeer::shutdownReceived
protected

Referenced by handleMessage(), and SCTPPeer().

cMessage* inet::SCTPPeer::timeMsg
protected
cMessage* inet::SCTPPeer::timeoutMsg
protected

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