Sctp

Package: inet.transportlayer.sctp

simple module Sctp

Implements the SCTP protocol.

inet.transportlayer.sctp.SctpSctpsimple

Usage diagram

Inheritance diagram

Used in compound modules

Name

Type

Description

TransportLayerNodeBase

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

SimpleModule

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;
}

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