Sctp¶
Package: inet.transportlayer.sctp
simple module Sctp
Implements the SCTP protocol.
Usage diagram¶
Inheritance diagram¶
Used in compound modules¶
Name |
Type |
Description |
|---|---|---|
compound module |
An extension of the network layer node base with transport layer protocols. Provides support for UDP, TCP, and SCTP, enabling end-to-end communication services for applications. |
Extends¶
Name |
Type |
Description |
|---|---|---|
simple module |
Base module for all INET simple modules. |
Parameters¶
Name |
Type |
Default value |
Description |
|---|---|---|---|
displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
interfaceTableModule |
string |
||
routingTableModule |
string |
||
checksumMode |
string |
“declared” |
|
numGapReports |
int |
3 |
|
rtoInitial |
double |
3s |
|
rtoMin |
double |
1s |
|
rtoMax |
double |
60s |
|
rtoAlpha |
double |
0.125 |
|
rtoBeta |
double |
0.250 |
|
maxBurst |
int |
4 |
|
maxBurstVariant |
string |
“maxBurst” |
|
initialWindow |
int |
0 |
|
assocMaxRetrans |
int |
10 |
|
pathMaxRetrans |
int |
5 |
|
maxInitRetrans |
int |
8 |
|
sackPeriod |
double |
200ms |
|
sackFrequency |
int |
2 |
|
reactivatePrimaryPath |
bool |
false |
|
sendQueueLimit |
int |
0 |
|
validCookieLifetime |
double |
10s |
|
enableHeartbeats |
bool |
true |
|
hbInterval |
double |
30s |
|
sendHeartbeatsOnActivePaths |
bool |
false |
|
nagleEnabled |
bool |
true |
|
naglePoint |
int |
1468 |
|
fragPoint |
int |
1452 |
Size of a message that has to be fragmented, i.e. maximum size of a fragment |
fastRecoverySupported |
bool |
true |
|
sctpAlgorithmClass |
string |
“SctpAlg” |
|
ccModule |
int |
0 |
RFC4960=0 |
osbWithHeader |
bool |
false |
|
RTXMethod |
int |
0 |
0=Once after 3 Sacks; 1=once per RTT; 2=Switch off Fast Retransmit; 3=Always after 3 Sacks |
ssModule |
int |
0 |
ROUND_ROBIN=0 |
arwnd |
int |
65535 |
|
swsLimit |
int |
3000 |
Limit for SWS |
udpEncapsEnabled |
bool |
false |
|
natFriendly |
bool |
false |
|
bytesToAddPerRcvdChunk |
int |
0 |
For flow control |
bytesToAddPerPeerChunk |
int |
0 |
For flow control |
tellArwnd |
bool |
false |
For flow control |
messageAcceptLimit |
int |
0 |
For flow control |
fairStart |
double |
0s |
|
fairStop |
double |
0s |
|
streamsToPaths |
string |
“” |
|
startEndToEndDelay |
int |
0 |
|
stopEndToEndDelay |
int |
10 |
|
throughputInterval |
double |
1 |
|
auth |
bool |
false |
|
chunks |
string |
“” |
|
padding |
bool |
false |
|
addIP |
bool |
false |
|
addTime |
double |
0s |
|
addAddress |
string |
“” |
|
addIpType |
string |
“0” |
SET_PRIMARY_ADDRESS=49156,ADD_IP_ADDRESS=49153,DELETE_IP_ADDRESS=49154 |
packetDrop |
bool |
false |
|
sackNow |
bool |
false |
|
highSpeedCC |
bool |
false |
|
checkSackSeqNumber |
bool |
false |
|
nrSack |
bool |
false |
|
disableReneging |
bool |
false |
|
gapReportLimit |
int |
100000000 |
|
gapListOptimizationVariant |
string |
“none” |
|
smartOverfullSACKHandling |
bool |
false |
|
allowQoSTracking |
bool |
false |
|
qosTrackingInterval |
double |
1.0s |
|
cmtSendAllVariant |
string |
“normal” |
|
cmtRetransmissionVariant |
string |
“normal” |
|
cmtCUCVariant |
string |
“normal” |
|
cmtBufferSplitVariant |
string |
“none” |
|
cmtBufferSplittingUsesOSB |
bool |
false |
|
cmtUseSFR |
bool |
true |
|
cmtUseDAC |
bool |
true |
|
cmtUseFRC |
bool |
true |
|
cmtSmartT3Reset |
bool |
true |
|
cmtSmartFastRTX |
bool |
true |
|
cmtSmartReneging |
bool |
false |
|
cmtSlowPathRTTUpdate |
bool |
false |
|
cmtChunkReschedulingVariant |
string |
“none” |
|
cmtChunkReschedulingThreshold |
double |
0.5 |
|
cmtMovedChunksReduceCwnd |
bool |
true |
|
movedChunkFastRTXFactor |
double |
2.0 |
|
cmtSackPath |
string |
“standard” |
|
strictCwndBooking |
bool |
false |
|
cmtCCVariant |
string |
“off” |
CMT Congestion Control Variant off = use over every path the default RFC4960 CC (New Reno) lia = First resource pooling congestion control RFC6356 adapted for SCTP - https://datatracker.ietf.org/doc/rfc6356/ olia = alternative MPTCP CC, adapted for SCTP- https://tools.ietf.org/html/draft-khalili-mptcp-congestion-control-05 cmtrpv1 = First resource pooling based CC for SCTP - https://www.tdr.wiwi.uni-due.de/fileadmin/fileupload/I-TDR/SCTP/Paper/AINA2010.pdf cmtrpv2 = Updated version of cmtrpv1 - https://www.tdr.wiwi.uni-due.de/fileadmin/fileupload/I-TDR/SCTP/Paper/ConTEL2011.pdf |
cmtCCPathGroups |
string |
“” |
|
rpPathBlocking |
bool |
false |
|
rpScaleBlockingTimeout |
bool |
false |
|
rpMinCwnd |
int |
1 |
Properties¶
Name |
Value |
Description |
|---|---|---|
class |
Sctp |
|
display |
i=block/wheelbarrow |
Gates¶
Name |
Direction |
Size |
Description |
|---|---|---|---|
appIn |
input |
||
ipIn |
input |
||
appOut |
output |
||
ipOut |
output |
Source code¶
//
// Implements the SCTP protocol.
//
simple Sctp extends SimpleModule like ISctp
{
parameters:
@class(Sctp);
string interfaceTableModule;
string routingTableModule;
string checksumMode @enum("declared", "computed") = default("declared");
//#====== SCTP Association Parameters =================================
int numGapReports = default(3);
double rtoInitial @unit(s) = default(3s);
double rtoMin @unit(s) = default(1s);
double rtoMax @unit(s) = default(60s);
double rtoAlpha = default(0.125);
double rtoBeta = default(0.250);
int maxBurst = default(4);
string maxBurstVariant = default("maxBurst");
int initialWindow = default(0);
int assocMaxRetrans = default(10);
int pathMaxRetrans = default(5);
int maxInitRetrans = default(8);
double sackPeriod @unit(s) = default(200ms);
int sackFrequency = default(2);
bool reactivatePrimaryPath = default(false);
int sendQueueLimit = default(0);
double validCookieLifetime @unit(s) = default(10s);
//#====== Testing =====================================================
//#====== Heartbeats ==================================================
bool enableHeartbeats = default(true);
double hbInterval @unit(s) = default(30s);
bool sendHeartbeatsOnActivePaths = default(false);
//#====== Nagle Algorithm =============================================
bool nagleEnabled = default(true);
int naglePoint = default(1468);
//#====== Fragmentation =============================================
int fragPoint = default(1452); // Size of a message that has to be fragmented, i.e. maximum size of a fragment
//#====== Congestion Control ==========================================
bool fastRecoverySupported = default(true);
string sctpAlgorithmClass = default("SctpAlg");
int ccModule = default(0); // RFC4960=0
bool osbWithHeader = default(false);
int RTXMethod = default(0); // 0=Once after 3 Sacks; 1=once per RTT; 2=Switch off Fast Retransmit; 3=Always after 3 Sacks
//#====== Other Parameters ============================================
int ssModule = default(0); // ROUND_ROBIN=0
int arwnd = default(65535);
int swsLimit = default(3000); // Limit for SWS
bool udpEncapsEnabled = default(false);
bool natFriendly = default(false);
int bytesToAddPerRcvdChunk = default(0); // For flow control
int bytesToAddPerPeerChunk = default(0); // For flow control
bool tellArwnd = default(false); // For flow control
int messageAcceptLimit = default(0); // For flow control
double fairStart @unit(s) = default(0s);
double fairStop @unit(s) = default(0s);
string streamsToPaths = default("");
int startEndToEndDelay = default(0);
int stopEndToEndDelay = default(10);
double throughputInterval = default(1);
//#====== Chunk Authentication ========================================
bool auth = default(false);
string chunks = default("");
bool padding = default(false);
//#====== Add-IP ======================================================
bool addIP = default(false);
double addTime @unit(s) = default(0s);
string addAddress = default("");
string addIpType = default("0"); // SET_PRIMARY_ADDRESS=49156,ADD_IP_ADDRESS=49153,DELETE_IP_ADDRESS=49154
//#====== Packet Drop =================================================
bool packetDrop = default(false);
//#====== SACK Now ====================================================
bool sackNow = default(false);
//#====== High-Speed CC ===============================================
bool highSpeedCC = default(false);
//#====== SACK Sequence Numbers =======================================
bool checkSackSeqNumber = default(false);
//#====== NR-SACK =====================================================
bool nrSack = default(false);
bool disableReneging = default(false);
int gapReportLimit = default(100000000);
string gapListOptimizationVariant = default("none");
bool smartOverfullSACKHandling = default(false);
//#====== QoS-SCTP ====================================================
bool allowQoSTracking = default(false);
double qosTrackingInterval @unit(s) = default(1.0s);
//#====== CMT-SCTP ====================================================
string cmtSendAllVariant = default("normal");
string cmtRetransmissionVariant = default("normal");
string cmtCUCVariant = default("normal");
string cmtBufferSplitVariant = default("none");
bool cmtBufferSplittingUsesOSB = default(false);
bool cmtUseSFR = default(true);
bool cmtUseDAC = default(true);
bool cmtUseFRC = default(true);
bool cmtSmartT3Reset = default(true);
bool cmtSmartFastRTX = default(true);
bool cmtSmartReneging = default(false);
bool cmtSlowPathRTTUpdate = default(false);
string cmtChunkReschedulingVariant = default("none");
double cmtChunkReschedulingThreshold = default(0.5);
bool cmtMovedChunksReduceCwnd = default(true);
double movedChunkFastRTXFactor = default(2.0);
string cmtSackPath = default("standard");
//#====== CMT/RP-SCTP =================================================
bool strictCwndBooking = default(false);
// CMT Congestion Control Variant
// off = use over every path the default RFC4960 CC (New Reno)
// lia = First resource pooling congestion control RFC6356 adapted for SCTP - https://datatracker.ietf.org/doc/rfc6356/
// olia = alternative MPTCP CC, adapted for SCTP- https://tools.ietf.org/html/draft-khalili-mptcp-congestion-control-05
// cmtrpv1 = First resource pooling based CC for SCTP - https://www.tdr.wiwi.uni-due.de/fileadmin/fileupload/I-TDR/SCTP/Paper/AINA2010.pdf
// cmtrpv2 = Updated version of cmtrpv1 - https://www.tdr.wiwi.uni-due.de/fileadmin/fileupload/I-TDR/SCTP/Paper/ConTEL2011.pdf
string cmtCCVariant = default("off");
string cmtCCPathGroups = default("");
bool rpPathBlocking = default(false);
bool rpScaleBlockingTimeout = default(false);
int rpMinCwnd = default(1);
@display("i=block/wheelbarrow");
gates:
input appIn @messageKinds(inet::SctpCommandCode);
input ipIn;
output appOut @labels(SctpCommand/up) @messageKinds(inet::SctpStatusInd);
output ipOut;
}