|
INET Framework for OMNeT++/OMNEST
|
Accepts any number of incoming connections, and sends back whatever arrives on them.
More...
#include <SctpNatPeer.h>
|
| | SctpNatPeer () |
| |
| virtual | ~SctpNatPeer () |
| |
| virtual int | numInitStages () const override |
| |
| void | initialize (int stage) override |
| |
| void | handleMessage (cMessage *msg) override |
| |
| void | finish () override |
| |
| void | handleTimer (cMessage *msg) |
| |
| void | generateAndSend () |
| |
| void | connect (L3Address connectAddress, int32_t connectPort) |
| |
| void | connectx (AddressVector connectAddressList, int32_t connectPort) |
| |
| virtual void | socketAvailable (SctpSocket *socket, Indication *indication) override |
| |
| void | socketEstablished (SctpSocket *socket, unsigned long int buffer) override |
| | Does nothing but update statistics/status. More...
|
| |
| void | socketDataArrived (SctpSocket *socket, Packet *msg, bool urgent) override |
| | Does nothing but update statistics/status. More...
|
| |
| void | socketDataNotificationArrived (SctpSocket *socket, Message *msg) override |
| |
| void | socketPeerClosed (SctpSocket *socket) override |
| | Since remote SCTP closed, invokes close(). More...
|
| |
| void | socketClosed (SctpSocket *socket) override |
| | Does nothing but update statistics/status. More...
|
| |
| void | socketFailure (SctpSocket *socket, int32_t code) override |
| | Does nothing but update statistics/status. More...
|
| |
| void | socketStatusArrived (SctpSocket *socket, SctpStatusReq *status) override |
| | Redefine to handle incoming SctpStatusInfo. More...
|
| |
| void | msgAbandonedArrived (SctpSocket *socket) override |
| |
| void | setPrimaryPath () |
| |
| void | sendStreamResetNotification () |
| |
| void | sendRequestArrived (SctpSocket *socket) override |
| |
| void | sendQueueRequest () |
| |
| void | shutdownReceivedArrived (SctpSocket *socket) override |
| |
| void | sendqueueFullArrived (SctpSocket *socket) override |
| |
| void | addressAddedArrived (SctpSocket *socket, L3Address localAddr, L3Address remoteAddr) override |
| |
| void | setStatusString (const char *s) |
| |
| virtual | ~ICallback () |
| |
| virtual void | socketOptionsArrived (SctpSocket *socket, Indication *indication) |
| |
| virtual void | socketFailure (SctpSocket *socket, int code) |
| |
| virtual void | socketDeleted (SctpSocket *socket) |
| |
| virtual void | sendqueueAbatedArrived (SctpSocket *socket, unsigned long int buffer) |
| |
| virtual bool | handleOperationStage (LifecycleOperation *operation, IDoneCallback *doneCallback) override |
| | Perform one stage of a lifecycle operation. More...
|
| |
| virtual | ~ILifecycle () |
| |
Accepts any number of incoming connections, and sends back whatever arrives on them.
◆ BytesPerAssoc
◆ EndToEndDelay
◆ HistEndToEndDelay
◆ RcvdBytesPerAssoc
◆ RcvdPacketsPerAssoc
◆ SctpPathStatus
◆ SentPacketsPerAssoc
◆ SctpNatPeer()
| inet::SctpNatPeer::SctpNatPeer |
( |
| ) |
|
◆ ~SctpNatPeer()
| inet::SctpNatPeer::~SctpNatPeer |
( |
| ) |
|
|
virtual |
◆ addressAddedArrived()
Reimplemented from inet::SctpSocket::ICallback.
846 EV << getFullPath() <<
": addressAddedArrived for remoteAddr " << remoteAddr <<
"\n";
852 struct nat_message *nat = (
struct nat_message *)(buffer);
853 nat->peer1 = par(
"ownName");
854 nat->peer2 = par(
"peerName");
855 nat->portPeer1 = par(
"localPort");
857 nat->numAddrPeer1 = 2;
858 nat->numAddrPeer2 = 2;
859 bool mul = par(
"multi");
866 nat->peer1Addresses[0] = L3Address().toIpv4().getInt();
867 nat->peer2Addresses[0] = L3Address().toIpv4().getInt();
868 nat->peer1Addresses[1] = L3Address().toIpv4().getInt();
869 nat->peer2Addresses[1] = L3Address().toIpv4().getInt();
870 buflen =
ADD_PADDING(buflen + 4 * (nat->numAddrPeer1 + nat->numAddrPeer2));
872 auto applicationData = makeShared<BytesChunk>(buffer, buflen);
873 applicationData->addTag<CreationTimeTag>()->setCreationTime(simTime());
875 applicationPacket->insertAtBack(applicationData);
876 auto sctpSendReq = applicationPacket->addTag<SctpSendReq>();
877 sctpSendReq->setLast(
true);
878 sctpSendReq->setPrMethod(0);
879 sctpSendReq->setPrValue(0);
880 sctpSendReq->setSid(0);
◆ connect()
| void inet::SctpNatPeer::connect |
( |
L3Address |
connectAddress, |
|
|
int32_t |
connectPort |
|
) |
| |
184 EV <<
"issuing OPEN command\n";
185 EV <<
"Assoc " <<
clientSocket.
getSocketId() <<
"::connect to address " << connectAddress <<
", port " << connectPort <<
"\n";
186 bool streamReset = par(
"streamReset");
187 clientSocket.
connect(connectAddress, connectPort, streamReset,
static_cast<int32_t
>(par(
"prMethod")),
static_cast<uint32_t
>(par(
"numRequestsPerSession")));
192 else if (streamReset ==
true) {
194 EV <<
"StreamReset Timer scheduled at " << simTime() <<
"\n";
195 scheduleAfter(par(
"streamRequestTime").doubleValue(), cmsg);
197 uint32_t streamNum = 0;
198 cStringTokenizer tokenizer(par(
"streamPriorities"));
199 while (tokenizer.hasMoreTokens()) {
200 const char *token = tokenizer.nextToken();
◆ connectx()
| void inet::SctpNatPeer::connectx |
( |
AddressVector |
connectAddressList, |
|
|
int32_t |
connectPort |
|
) |
| |
151 uint32_t outStreams = par(
"outboundStreams");
153 uint32_t inStreams = par(
"inboundStreams");
156 EV <<
"issuing OPEN command\n";
158 bool streamReset = par(
"streamReset");
159 clientSocket.
connectx(connectAddressList, connectPort, streamReset,
static_cast<uint32_t
>(par(
"prMethod")),
static_cast<uint32_t
>(par(
"numRequestsPerSession")));
164 else if (streamReset ==
true) {
166 EV <<
"StreamReset Timer scheduled at " << simTime() <<
"\n";
167 scheduleAfter(par(
"streamRequestTime").doubleValue(), cmsg);
169 uint32_t streamNum = 0;
170 cStringTokenizer tokenizer(par(
"streamPriorities"));
171 while (tokenizer.hasMoreTokens()) {
172 const char *token = tokenizer.nextToken();
◆ finish()
| void inet::SctpNatPeer::finish |
( |
| ) |
|
|
override |
887 EV << getFullPath() <<
": opened " <<
numSessions <<
" sessions\n";
890 EV << getFullPath() <<
": received " << elem.second <<
" bytes in assoc " << elem.first <<
"\n";
892 EV << getFullPath() <<
"Over all " <<
packetsRcvd <<
" packets received\n ";
893 EV << getFullPath() <<
"Over all " <<
notifications <<
" notifications received\n ";
◆ generateAndSend()
| void inet::SctpNatPeer::generateAndSend |
( |
| ) |
|
123 auto applicationPacket =
new Packet(
"ApplicationPacket");
124 auto applicationData = makeShared<BytesChunk>();
125 int numBytes = par(
"requestLength");
126 EV_INFO <<
"Send " << numBytes <<
" bytes of data, bytesSent = " <<
bytesSent << endl;
127 std::vector<uint8_t> vec;
128 vec.resize(numBytes);
129 for (
int i = 0; i < numBytes; i++)
131 applicationData->setBytes(vec);
132 applicationData->addTag<CreationTimeTag>()->setCreationTime(simTime());
133 applicationPacket->insertAtBack(applicationData);
134 auto sctpSendReq = applicationPacket->addTag<SctpSendReq>();
135 sctpSendReq->setLast(
true);
136 sctpSendReq->setPrMethod(par(
"prMethod"));
137 sctpSendReq->setPrValue(par(
"prValue"));
142 applicationPacket->addTag<SocketReq>()->setSocketId(
serverAssocId);
◆ handleMessage()
| void inet::SctpNatPeer::handleMessage |
( |
cMessage * |
msg | ) |
|
|
override |
211 if (msg->isSelfMessage()) {
216 switch (msg->getKind()) {
229 Message *message = check_and_cast<Message *>(msg);
230 auto& msgtags = message->getTags();
231 auto& command = msgtags.findTag<SctpCommandReq>();
232 Request *cmsg =
new Request(
"SCTP_C_ABORT",
SCTP_C_ABORT);
233 auto cmd = cmsg->addTag<SctpSendReq>();
234 int assocId = command->getSocketId();
235 cmsg->addTag<SocketReq>()->setSocketId(assocId);
237 cmd->setSocketId(assocId);
238 cmd->setSid(command->getSid());
239 cmd->setNumMsgs(command->getNumMsgs());
252 Message *message = check_and_cast<Message *>(msg);
253 auto&
tags = message->getTags();
254 auto& connectInfo =
tags.findTag<SctpConnectReq>();
263 sprintf(text,
"App: Received Bytes of assoc %d",
serverAssocId);
266 sprintf(text,
"App: EndToEndDelay of assoc %d",
serverAssocId);
268 sprintf(text,
"Hist: EndToEndDelay of assoc %d",
serverAssocId);
273 if (
static_cast<int64_t
>(par(
"numPacketsToSendPerClient")) > 0) {
276 if (par(
"thinkTime").doubleValue() > 0.0) {
299 auto qinfo = cmsg->addTag<SctpInfoReq>();
301 qinfo->setSocketId(
id);
305 EV <<
"!!!!!!!!!!!!!!!All data sent from Peer !!!!!!!!!!\n";
308 if (j->second == 0 && par(
"waitToClose").doubleValue() > 0.0) {
312 scheduleAfter(par(
"waitToClose"), abortMsg);
315 EV <<
"no more packets to send, call shutdown for assoc " <<
serverAssocId <<
"\n";
317 auto& cmd = cmsg->addTag<SctpCommandReq>();
328 EV_DETAIL <<
"NatPeer: SCTP_I_DATA_NOTIFICATION arrived\n";
330 Message *message = check_and_cast<Message *>(msg);
331 auto& intags = message->getTags();
332 auto& ind = intags.findTag<SctpCommandReq>();
333 id = ind->getSocketId();
335 auto cmd = cmsg->addTag<SctpSendReq>();
336 cmsg->addTag<SocketReq>()->setSocketId(
id);
338 cmd->setSocketId(
id);
339 cmd->setSid(ind->getSid());
340 cmd->setNumMsgs(ind->getNumMsgs());
342 if (!cmsg->isScheduled() &&
schedule ==
false) {
343 scheduleAfter(par(
"delayFirstRead"), cmsg);
351 Packet *message = check_and_cast<Packet *>(msg);
352 auto& ind = message->findTag<SctpRcvReq>();
353 id = ind->getSocketId();
355 const auto& smsg = message->peekDataAsBytes();
356 int bufferlen =
B(smsg->getChunkLength()).get();
357 uint8_t buffer[bufferlen];
358 std::vector<uint8_t> vec = smsg->getBytes();
359 for (
int i = 0; i < bufferlen; i++) {
362 struct nat_message *nat = (
struct nat_message *)buffer;
366 EV <<
"address 0: " << Ipv4Address(nat->peer2Addresses[0]).str() << endl;
368 EV <<
"address 1: " << Ipv4Address(nat->peer2Addresses[1]).str() << endl;
381 j->second +=
PK(msg)->getBitLength() / 8;
383 k->second->record(j->second);
386 if (par(
"numPacketsToReceivePerClient").intValue() > 0) {
389 SctpSimpleMessage *smsg = check_and_cast<SctpSimpleMessage *>(msg);
391 j->second->record(simTime() - smsg->getCreationTime());
393 k->second->collect(simTime() - smsg->getCreationTime());
395 if (i->second == 0) {
397 auto qinfo = cmsg->addTag<SctpCommandReq>();
398 qinfo->setSocketId(
id);
405 SctpSimpleMessage *smsg = check_and_cast<SctpSimpleMessage *>(msg->dup());
407 j->second->record(simTime() - smsg->getCreationTime());
409 k->second->collect(simTime() - smsg->getCreationTime());
410 Packet *cmsg =
new Packet(
"SCTP_C_SEND",
SCTP_C_SEND);
412 auto cmd = cmsg->addTag<SctpSendReq>();
413 cmd->setSendUnordered(cmd->getSendUnordered());
415 cmd->setSocketId(
id);
419 cmsg->encapsulate(smsg);
420 cmsg->setControlInfo(cmd.get());
434 Message *message = check_and_cast<Message *>(msg);
435 id = message->getTag<SocketInd>()->getSocketId();
436 EV <<
"peer: SCTP_I_SHUTDOWN_RECEIVED for assoc " <<
id <<
"\n";
442 if (i->second == 0) {
444 auto qinfo = cmsg->addTag<SctpCommandReq>();
445 qinfo->setSocketId(
id);
460 EV <<
"Streams have been resetted\n";
474 sprintf(buf,
"rcvd: %lld bytes\nsent: %lld bytes", (
long long int)l->second, (
long long int)
bytesSent);
475 getDisplayString().setTagArg(
"t", 0, buf);
◆ handleTimer()
| void inet::SctpNatPeer::handleTimer |
( |
cMessage * |
msg | ) |
|
483 EV <<
"SctpNatPeer::handleTimer\n";
485 switch (msg->getKind()) {
487 EV <<
"starting session call connect\n";
488 connect(L3AddressResolver().resolve(par(
"connectAddress"), 1), par(
"connectPort"));
494 EV <<
"SctpNatPeer:MSGKIND_SEND\n";
498 if (par(
"thinkTime").doubleValue() > 0.0)
505 EV <<
"SctpNatPeer:MsgKIND_ABORT for assoc " << atoi(msg->getName()) <<
"\n";
507 Request *cmsg =
new Request(
"SCTP_C_CLOSE",
SCTP_C_CLOSE);
508 auto& cmd = cmsg->addTag<SctpCommandReq>();
509 id = atoi(msg->getName());
510 cmd->setSocketId(
id);
511 cmsg->setControlInfo(cmd.get());
518 EV <<
"SctpNatPeer:SCTP_C_RECEIVE\n";
525 EV <<
"MsgKind =" << msg->getKind() <<
" unknown\n";
◆ initialize()
| void inet::SctpNatPeer::initialize |
( |
int |
stage | ) |
|
|
override |
73 cSimpleModule::initialize(stage);
74 EV_DEBUG <<
"initialize SCTP NAT Peer stage " << stage << endl;
86 const char *addressesString = par(
"localAddress");
87 AddressVector addresses = L3AddressResolver().resolve(cStringTokenizer(addressesString).asVector());
88 int32_t port = par(
"localPort");
90 delay = par(
"echoDelay");
96 if (addresses.size() == 0) {
104 if (par(
"startTime").doubleValue() > 0.0) {
106 scheduleAt(par(
"startTime"), msg);
◆ msgAbandonedArrived()
| void inet::SctpNatPeer::msgAbandonedArrived |
( |
SctpSocket * |
socket | ) |
|
|
overridevirtual |
◆ numInitStages()
| virtual int inet::SctpNatPeer::numInitStages |
( |
| ) |
const |
|
inlineoverridevirtual |
◆ sendOrSchedule()
| void inet::SctpNatPeer::sendOrSchedule |
( |
cMessage * |
msg | ) |
|
|
protected |
114 send(msg,
"socketOut");
117 scheduleAfter(
delay, msg);
◆ sendqueueFullArrived()
| void inet::SctpNatPeer::sendqueueFullArrived |
( |
SctpSocket * |
socket | ) |
|
|
overridevirtual |
◆ sendQueueRequest()
| void inet::SctpNatPeer::sendQueueRequest |
( |
| ) |
|
765 auto& qinfo = cmsg->addTag<SctpInfoReq>();
◆ sendRequest()
| void inet::SctpNatPeer::sendRequest |
( |
bool |
last = true | ) |
|
|
protected |
645 int64_t numBytes = par(
"requestLength");
649 EV <<
"SctpNatPeer: sending " << numBytes <<
" data bytes\n";
651 auto cmsg =
new Packet(
"ApplicationPacket");
653 auto msg = makeShared<BytesChunk>();
654 std::vector<uint8_t> vec;
655 vec.resize(numBytes);
656 for (
int i = 0; i < numBytes; i++)
659 msg->addTag<CreationTimeTag>()->setCreationTime(simTime());
660 cmsg->insertAtBack(msg);
661 auto sendCommand = cmsg->addTag<SctpSendReq>();
662 sendCommand->setLast(
true);
◆ sendRequestArrived()
| void inet::SctpNatPeer::sendRequestArrived |
( |
SctpSocket * |
socket | ) |
|
|
overridevirtual |
◆ sendStreamResetNotification()
| void inet::SctpNatPeer::sendStreamResetNotification |
( |
| ) |
|
◆ setPrimaryPath()
| void inet::SctpNatPeer::setPrimaryPath |
( |
| ) |
|
◆ setStatusString()
| void inet::SctpNatPeer::setStatusString |
( |
const char * |
s | ) |
|
639 getDisplayString().setTagArg(
"t", 0,
s);
◆ shutdownReceivedArrived()
| void inet::SctpNatPeer::shutdownReceivedArrived |
( |
SctpSocket * |
socket | ) |
|
|
overridevirtual |
Reimplemented from inet::SctpSocket::ICallback.
828 auto& qinfo = cmsg->addTag<SctpCommandReq>();
829 qinfo->setSocketId(socket->getSocketId());
◆ socketAvailable()
◆ socketClosed()
| void inet::SctpNatPeer::socketClosed |
( |
SctpSocket * |
socket | ) |
|
|
overridevirtual |
Does nothing but update statistics/status.
Redefine if you want to do something else, such as opening a new connection.
Reimplemented from inet::SctpSocket::ICallback.
580 EV <<
"connection closed\n";
584 const char *addressesString = par(
"localAddress");
585 AddressVector addresses = L3AddressResolver().resolve(cStringTokenizer(addressesString).asVector());
586 int32_t port = par(
"localPort");
590 if (addresses.size() == 0) {
599 if (par(
"multi").boolValue())
◆ socketDataArrived()
| void inet::SctpNatPeer::socketDataArrived |
( |
SctpSocket * |
socket, |
|
|
Packet * |
msg, |
|
|
bool |
urgent |
|
) |
| |
|
overridevirtual |
Does nothing but update statistics/status.
Redefine to perform or schedule next sending. Beware: this funcion deletes the incoming message, which might not be what you want.
Implements inet::SctpSocket::ICallback.
795 EV <<
"Client received packet Nr " <<
packetsRcvd <<
" from SCTP\n";
797 auto&
tags = msg->getTags();
798 const auto& ind =
tags.findTag<SctpRcvReq>();
803 const auto& smsg = msg->peekData();
804 auto cmsg =
new Packet(
"ApplicationPacket");
806 cmsg->insertAtBack(smsg);
807 auto cmd = cmsg->addTag<SctpSendReq>();
809 cmd->setSocketId(ind->getSocketId());
811 cmd->setSid(ind->getSid());
815 if (par(
"numPacketsToReceive").intValue() > 0) {
819 EV <<
"Peer: all packets received\n";
◆ socketDataNotificationArrived()
| void inet::SctpNatPeer::socketDataNotificationArrived |
( |
SctpSocket * |
socket, |
|
|
Message * |
msg |
|
) |
| |
|
overridevirtual |
Implements inet::SctpSocket::ICallback.
533 Message *message = check_and_cast<Message *>(msg);
534 auto& intags = message->getTags();
535 auto& ind = intags.findTag<SctpCommandReq>();
537 auto& cmd = cmesg->addTag<SctpSendReq>();
538 cmd->setSocketId(ind->getSocketId());
539 cmd->setSid(ind->getSid());
540 cmd->setNumMsgs(ind->getNumMsgs());
◆ socketEstablished()
| void inet::SctpNatPeer::socketEstablished |
( |
SctpSocket * |
socket, |
|
|
unsigned long int |
buffer |
|
) |
| |
|
overridevirtual |
Does nothing but update statistics/status.
Redefine to perform or schedule first sending.
Reimplemented from inet::SctpSocket::ICallback.
672 EV <<
"SctpNatPeer: socketEstablished\n";
677 struct nat_message *nat = (
struct nat_message *)(buffer);
679 nat->peer1 = par(
"ownName");
680 nat->peer2 = par(
"peerName");
681 nat->portPeer1 = par(
"localPort");
683 nat->peer1Addresses[0] = L3Address().toIpv4().getInt();
684 nat->peer2Addresses[0] = L3Address().toIpv4().getInt();
685 nat->numAddrPeer1 = 1;
686 nat->numAddrPeer2 = 1;
687 buflen =
ADD_PADDING(buflen + 4 * (nat->numAddrPeer1 + nat->numAddrPeer2));
688 bool mul = par(
"multi");
696 auto applicationData = makeShared<BytesChunk>(buffer, buflen);
697 applicationData->addTag<CreationTimeTag>()->setCreationTime(simTime());
699 applicationPacket->insertAtBack(applicationData);
700 auto sctpSendReq = applicationPacket->addTag<SctpSendReq>();
701 sctpSendReq->setLast(
true);
702 sctpSendReq->setPrMethod(0);
703 sctpSendReq->setPrValue(0);
704 sctpSendReq->setSid(0);
707 if (par(
"multi").boolValue()) {
709 auto& cmd = cmesg->addTag<SctpCommandReq>();
715 EV <<
" determine number of requests in this session\n";
722 if (par(
"thinkTime").doubleValue() > 0.0) {
728 scheduleAfter(par(
"thinkTime"),
timeMsg);
751 scheduleAfter(par(
"waitToClose"),
timeMsg);
754 EV <<
"socketEstablished:no more packets to send, call shutdown\n";
◆ socketFailure()
| void inet::SctpNatPeer::socketFailure |
( |
SctpSocket * |
socket, |
|
|
int32_t |
code |
|
) |
| |
|
override |
Does nothing but update statistics/status.
Redefine if you want to try reconnecting after a delay.
610 EV <<
"connection broken\n";
617 scheduleAfter(par(
"reconnectInterval"),
timeMsg);
◆ socketPeerClosed()
| void inet::SctpNatPeer::socketPeerClosed |
( |
SctpSocket * |
socket | ) |
|
|
overridevirtual |
Since remote SCTP closed, invokes close().
Redefine if you want to do something else.
Reimplemented from inet::SctpSocket::ICallback.
548 EV <<
"remote Sctp closed, closing here as well\n";
552 const char *addressesString = par(
"localAddress");
553 AddressVector addresses = L3AddressResolver().resolve(cStringTokenizer(addressesString).asVector());
554 int32_t port = par(
"localPort");
558 if (addresses.size() == 0) {
567 if (par(
"multi").boolValue())
◆ socketStatusArrived()
Redefine to handle incoming SctpStatusInfo.
Reimplemented from inet::SctpSocket::ICallback.
622 struct pathStatus
ps;
626 ps.active = status->getActive();
629 ps.active = status->getActive();
631 ps.primaryPath =
false;
◆ bytesPerAssoc
◆ bytesRcvd
| int32_t inet::SctpNatPeer::bytesRcvd |
|
protected |
◆ bytesSent
| int64_t inet::SctpNatPeer::bytesSent |
|
protected |
◆ chunksAbandoned
| int32_t inet::SctpNatPeer::chunksAbandoned |
|
protected |
◆ clientSocket
◆ delay
| double inet::SctpNatPeer::delay |
|
protected |
◆ echo
| bool inet::SctpNatPeer::echo |
|
protected |
◆ echoedBytesSent
| int32_t inet::SctpNatPeer::echoedBytesSent |
|
protected |
◆ endToEndDelay
◆ histEndToEndDelay
◆ inboundStreams
| int32_t inet::SctpNatPeer::inboundStreams |
|
protected |
◆ lastStream
| int32_t inet::SctpNatPeer::lastStream |
|
protected |
◆ localAddressList
◆ notifications
| int32_t inet::SctpNatPeer::notifications |
|
protected |
◆ numPacketsToReceive
| int32_t inet::SctpNatPeer::numPacketsToReceive |
|
protected |
◆ numRequestsToSend
| int32_t inet::SctpNatPeer::numRequestsToSend |
|
protected |
◆ numSessions
| int32_t inet::SctpNatPeer::numSessions |
|
protected |
◆ ordered
| bool inet::SctpNatPeer::ordered |
|
protected |
◆ outboundStreams
| int32_t inet::SctpNatPeer::outboundStreams |
|
protected |
◆ packetsRcvd
| int32_t inet::SctpNatPeer::packetsRcvd |
|
protected |
◆ packetsSent
| int32_t inet::SctpNatPeer::packetsSent |
|
protected |
◆ peerAddress
◆ peerAddressList
◆ peerPort
| int32_t inet::SctpNatPeer::peerPort |
|
protected |
◆ peerSocket
◆ queueSize
| int32_t inet::SctpNatPeer::queueSize |
|
protected |
◆ rcvdBytesPerAssoc
◆ rcvdPacketsPerAssoc
◆ rendezvous
| bool inet::SctpNatPeer::rendezvous |
|
protected |
◆ rendezvousSocket
◆ schedule
| bool inet::SctpNatPeer::schedule |
|
protected |
◆ sctpPathStatus
◆ sendAllowed
| bool inet::SctpNatPeer::sendAllowed |
|
protected |
◆ sentPacketsPerAssoc
◆ serverAssocId
| int32_t inet::SctpNatPeer::serverAssocId |
|
protected |
◆ shutdownReceived
| bool inet::SctpNatPeer::shutdownReceived |
|
protected |
◆ timeMsg
| cMessage* inet::SctpNatPeer::timeMsg |
|
protected |
◆ timeoutMsg
| cMessage* inet::SctpNatPeer::timeoutMsg |
|
protected |
The documentation for this class was generated from the following files:
@ SCTP_I_RCV_STREAMS_RESETTED
Definition: SctpCommand_m.h:214
void processMessage(cMessage *msg) override
Examines the message (which should have arrived from SctpMain), updates socket state,...
Definition: SctpSocket.cc:461
int32_t chunksAbandoned
Definition: SctpNatPeer.h:66
cMessage * timeoutMsg
Definition: SctpNatPeer.h:58
@ SCTP_C_SEND_UNORDERED
Definition: SctpCommand_m.h:138
@ SCTP_C_SEND_ASCONF
Definition: SctpCommand_m.h:148
@ SCTP_I_SENDSOCKETOPTIONS
Definition: SctpCommand_m.h:217
void handleTimer(cMessage *msg)
Definition: SctpNatPeer.cc:479
HistEndToEndDelay histEndToEndDelay
Definition: SctpNatPeer.h:83
void setStreamPriority(uint32_t stream, uint32_t priority)
Definition: SctpSocket.cc:620
std::vector< L3Address > AddressVector
Definition: SctpCommand_m.h:70
void setOutputGate(cGate *toSctp)
Sets the gate on which to send to SCTP.
Definition: SctpSocket.h:174
int32_t numRequestsToSend
Definition: SctpNatPeer.h:55
#define MSGKIND_CONNECT
Definition: SctpNatPeer.cc:27
static const char * indicationName(int32_t code)
Utility: returns name of SCTP_I_xxx constants.
Definition: SctpAssociationUtil.cc:205
AddressVector peerAddressList
Definition: SctpNatPeer.h:71
@ SCTP_I_CLOSED
Definition: SctpCommand_m.h:201
int getSocketId() const override
Returns the internal connection Id.
Definition: SctpSocket.h:138
SctpSocket rendezvousSocket
Definition: SctpNatPeer.h:45
#define MSGKIND_SEND
Definition: SctpNatPeer.cc:28
@ CONNECTED
Definition: SctpSocket.h:80
int32_t lastStream
Definition: SctpNatPeer.h:64
int count(const std::vector< T > &v, const Tk &a)
Definition: stlutils.h:54
int32_t packetsSent
Definition: SctpNatPeer.h:52
virtual void send(Packet *packet) override
Send data message.
Definition: SctpSocket.cc:355
void shutdown(int id=-1)
Definition: SctpSocket.cc:408
int32_t queueSize
Definition: SctpNatPeer.h:57
void sendRequest(cMessage *msg)
Send request.
Definition: SctpSocket.cc:389
int getState() const
Returns the socket state, one of NOT_BOUND, CLOSED, LISTENING, CONNECTING, CONNECTED,...
Definition: SctpSocket.h:151
void setCallback(ICallback *cb)
Sets a callback object, to be used with processMessage().
Definition: SctpSocket.cc:456
removed DscpReq Ipv4ControlInfo Ipv6ControlInfo up L3AddressInd DispatchProtocolReq L4PortInd Ipv4ControlInfo Ipv6ControlInfo down DispatchProtocolReq
Definition: IUdp-gates.txt:25
bool schedule
Definition: SctpNatPeer.h:48
@ SCTP_C_SEND
Definition: SctpCommand_m.h:132
@ SCTP_C_SHUTDOWN
Definition: SctpCommand_m.h:142
@ SCTP_I_SEND_STREAMS_RESETTED
Definition: SctpCommand_m.h:213
#define MSGKIND_ABORT
Definition: SctpNatPeer.cc:29
void sendNotification(cMessage *msg)
Send notification.
Definition: SctpSocket.cc:377
void sendOrSchedule(cMessage *msg)
Definition: SctpNatPeer.cc:111
int32_t packetsRcvd
Definition: SctpNatPeer.h:53
RcvdBytesPerAssoc rcvdBytesPerAssoc
Definition: SctpNatPeer.h:79
bool ordered
Definition: SctpNatPeer.h:56
bool sendAllowed
Definition: SctpNatPeer.h:65
@ SCTP_C_RECEIVE
Definition: SctpCommand_m.h:136
@ SCTP_I_DATA
Definition: SctpCommand_m.h:197
int32_t serverAssocId
Definition: SctpNatPeer.h:42
@ SCTP_C_ABORT
Definition: SctpCommand_m.h:134
#define MSGKIND_RESET
Definition: SctpNatPeer.cc:31
void close(int id)
Closes the local end of the connection.
Definition: SctpSocket.cc:394
int32_t numPacketsToReceive
Definition: SctpNatPeer.h:67
SentPacketsPerAssoc sentPacketsPerAssoc
Definition: SctpNatPeer.h:77
@ SCTP_I_ESTABLISHED
Definition: SctpCommand_m.h:199
value< double, units::s > s
Definition: Units.h:1235
intscale< b, 1, 8 > B
Definition: Units.h:1168
void listen(bool fork=true, bool streamReset=false, uint32_t requests=0, uint32_t messagesToPush=0)
Initiates passive OPEN.
Definition: SctpSocket.cc:183
@ SCTP_C_SEND_ORDERED
Definition: SctpCommand_m.h:137
void setOutboundStreams(int streams)
Setter and getter methods for socket and API Parameters.
Definition: SctpSocket.h:179
#define ADD_PADDING(x)
Definition: SctpAssociation.h:252
void setStatusString(const char *s)
Definition: SctpNatPeer.cc:636
@ SCTP_I_SHUTDOWN_RECEIVED
Definition: SctpCommand_m.h:209
@ SCTP_C_NO_OUTSTANDING
Definition: SctpCommand_m.h:143
@ SCTP_I_PEER_CLOSED
Definition: SctpCommand_m.h:200
bool shutdownReceived
Definition: SctpNatPeer.h:49
AddressVector localAddressList
Definition: SctpNatPeer.h:72
@ SCTP_C_QUEUE_MSGS_LIMIT
Definition: SctpCommand_m.h:141
int32_t echoedBytesSent
Definition: SctpNatPeer.h:63
SctpSocket clientSocket
Definition: SctpNatPeer.h:43
int32_t notifications
Definition: SctpNatPeer.h:41
void bindx(AddressVector localAddr, int localPort)
Definition: SctpSocket.cc:171
INET_API InitStage INITSTAGE_LOCAL
Initialization of local state that don't use or affect other modules includes:
void sendQueueRequest()
Definition: SctpNatPeer.cc:762
#define NUM_INIT_STAGES
Definition: InitStageRegistry.h:73
@ SCTP_I_DATA_NOTIFICATION
Definition: SctpCommand_m.h:198
bool rendezvous
Definition: SctpNatPeer.h:68
void sendRequest(bool last=true)
Definition: SctpNatPeer.cc:642
double delay
Definition: SctpNatPeer.h:46
const double k
Definition: Qam1024Modulation.cc:14
SctpPathStatus sctpPathStatus
Definition: SctpNatPeer.h:98
int32_t peerPort
Definition: SctpNatPeer.h:70
#define PK(msg)
Definition: INETDefs.h:89
int32_t inboundStreams
Definition: SctpNatPeer.h:61
void connect(L3Address remoteAddress, int32_t remotePort, bool streamReset=false, int32_t prMethod=0, uint32_t numRequests=0)
Active OPEN to the given remote socket.
Definition: SctpSocket.cc:241
L3Address peerAddress
Definition: SctpNatPeer.h:69
INET_API InitStage INITSTAGE_APPLICATION_LAYER
Initialization of applications.
void connectx(AddressVector remoteAddresses, int32_t remotePort, bool streamReset=false, int32_t prMethod=0, uint32_t numRequests=0)
Active OPEN to the given remote socket.
Definition: SctpSocket.cc:348
@ CONNECTING
Definition: SctpSocket.h:80
@ SCTP_I_ABORT
Definition: SctpCommand_m.h:206
static const Protocol sctp
Definition: Protocol.h:108
pico< s >::type ps
Definition: Units.h:1073
* tags
Definition: IUdp-gates.txt:3
void connectx(AddressVector connectAddressList, int32_t connectPort)
Definition: SctpNatPeer.cc:149
int32_t numSessions
Definition: SctpNatPeer.h:54
EndToEndDelay endToEndDelay
Definition: SctpNatPeer.h:85
void connect(L3Address connectAddress, int32_t connectPort)
Definition: SctpNatPeer.cc:179
bool echo
Definition: SctpNatPeer.h:47
int32_t bytesRcvd
Definition: SctpNatPeer.h:62
cMessage * timeMsg
Definition: SctpNatPeer.h:59
void bind(int localPort)
Bind the socket to a local port number.
Definition: SctpSocket.cc:142
@ SCTP_C_CLOSE
Definition: SctpCommand_m.h:133
BytesPerAssoc bytesPerAssoc
Definition: SctpNatPeer.h:81
@ SCTP_I_ADDRESS_ADDED
Definition: SctpCommand_m.h:216
RcvdPacketsPerAssoc rcvdPacketsPerAssoc
Definition: SctpNatPeer.h:75
@ PEER_CLOSED
Definition: SctpSocket.h:80
void setInboundStreams(int streams)
Definition: SctpSocket.h:180
int32_t outboundStreams
Definition: SctpNatPeer.h:60
void generateAndSend()
Definition: SctpNatPeer.cc:121
int64_t bytesSent
Definition: SctpNatPeer.h:51
void addAddress(L3Address addr)
Definition: SctpSocket.cc:165