SCTP

Package: inet.transportlayer.sctp

SCTP

simple module

Implements the SCTP protocol.

Inheritance diagram

The following diagram shows inheritance relationships for this type. Unresolved types are missing from the diagram.

Parameters

Name Type Default value Description
interfaceTableModule string
routingTableModule string
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
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
arwnd int 65535
swsLimit int 3000

Limit for SWS

udpEncapsEnabled bool false
natFriendly bool false
bytesToAddPerRcvdChunk int 0

for flowcontrol

bytesToAddPerPeerChunk int 0

for flowcontrol

tellArwnd bool false

for flowcontrol

messageAcceptLimit int 0

for flowcontrol

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
display i=block/wheelbarrow

Gates

Name Direction Size Description
from_appl [ ] input
from_ip input
to_appl [ ] output
to_ip output

Source code

//
// Implements the SCTP protocol.
//
simple SCTP like ISCTP
{
    parameters:
        string interfaceTableModule;
        string routingTableModule;

        //#====== 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 flowcontrol
        int bytesToAddPerPeerChunk = default(0);        // for flowcontrol
        bool tellArwnd = default(false);            // for flowcontrol
        int messageAcceptLimit = default(0);        // for flowcontrol
        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 from_appl[];
        input from_ip;
        output to_appl[];
        output to_ip;
}

File: src/inet/transportlayer/sctp/SCTP.ned