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
crcMode 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
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
appIn input
ipIn input
appOut output
ipOut output

Scheduled messages (observed)

msgkindctrltagsmsgnamecontext
omnetpp::cMessage0SctpPathInfoCWND_TIMER N:NN.N.N.Nfilled
omnetpp::cMessage0SctpPathInfoHB_INT_TIMER N:NN.N.N.Nfilled
omnetpp::cMessage0SctpPathInfoHB_INT_TIMER NN:NN.N.N.Nfilled
omnetpp::cMessage0SctpPathInfoHB_INT_TIMER NN:NN.N.N.NNfilled
omnetpp::cMessage0SctpPathInfoHB_TIMER NN:NN.N.N.Nfilled
omnetpp::cMessage0SctpPathInfoRTX_TIMER N:NN.N.N.Nfilled
omnetpp::cMessage0SctpPathInfoRTX_TIMER NN:NN.N.N.NNfilled
omnetpp::cMessage0SctpPathInfoSACK_TIMER of assoc NNfilled

Direct method calls (observed)

call tofunctioninfo
MessageDispatcherinet::MessageDispatcher::arrivedarrived
MessageDispatcherinet::MessageDispatcher::handleRegisterProtocolhandleRegisterProtocol
MessageDispatcherinet::MessageDispatcher::handleRegisterServicehandleRegisterService
Ipv4inet::Ipv4::registerHookregisterHook()
Ipv4RoutingTableinet::Ipv4RoutingTable::getInterfaceForDestAddrgetInterfaceForDestAddr(%u.%u.%u.%u)
Ipv6RoutingTableinet::Ipv6RoutingTable::doLongestPrefixMatchdoLongestPrefixMatch(%s)

Incoming messages (observed)

gatemsgkindctrlsrcModuletags
appInPacket3 (SctpCommandCode::SCTP_C_SEND)SctpClientDispatchProtocolReq, SctpSendReq, SocketReq
appInPacket8 (SctpCommandCode::SCTP_C_RECEIVE)NetPerfMeterDispatchProtocolReq, SctpSendReq, SocketReq
appInPacket9 (SctpCommandCode::SCTP_C_SEND_ORDERED)NetPerfMeterDispatchProtocolReq, SctpSendReq, SocketReq
appInRequest1 (SctpCommandCode::SCTP_C_ASSOCIATE)NetPerfMeterDispatchProtocolReq, SctpOpenReq, SocketReq
appInRequest1 (SctpCommandCode::SCTP_C_ASSOCIATE)SctpClientDispatchProtocolReq, SctpOpenReq, SocketReq
appInRequest12 (SctpCommandCode::SCTP_C_QUEUE_BYTES_LIMIT)NetPerfMeterDispatchProtocolReq, SctpInfoReq, SocketReq
appInRequest13 (SctpCommandCode::SCTP_C_QUEUE_MSGS_LIMIT)SctpClientDispatchProtocolReq, SctpInfoReq, SocketReq
appInRequest14 (SctpCommandCode::SCTP_C_SHUTDOWN)SctpClientDispatchProtocolReq, SctpCommandReq, SocketReq
appInRequest15 (SctpCommandCode::SCTP_C_NO_OUTSTANDING)SctpServerDispatchProtocolReq, SctpCommandReq, SocketReq
appInRequest2 (SctpCommandCode::SCTP_C_OPEN_PASSIVE)NetPerfMeterDispatchProtocolReq, SctpOpenReq, SocketReq
appInRequest2 (SctpCommandCode::SCTP_C_OPEN_PASSIVE)SctpServerDispatchProtocolReq, SctpOpenReq, SocketReq
appInRequest22 (SctpCommandCode::SCTP_C_GETSOCKETOPTIONS)NetPerfMeterDispatchProtocolReq, SctpSendReq, SocketReq
appInRequest22 (SctpCommandCode::SCTP_C_GETSOCKETOPTIONS)SctpClientDispatchProtocolReq, SctpSendReq, SocketReq
appInRequest22 (SctpCommandCode::SCTP_C_GETSOCKETOPTIONS)SctpServerDispatchProtocolReq, SctpSendReq, SocketReq
appInRequest25 (SctpCommandCode::SCTP_C_ACCEPT_SOCKET_ID)NetPerfMeterDispatchProtocolReq, SctpAvailableReq, SocketReq
appInRequest25 (SctpCommandCode::SCTP_C_ACCEPT_SOCKET_ID)SctpServerDispatchProtocolReq, SctpAvailableReq, SocketReq
appInRequest5 (SctpCommandCode::SCTP_C_CLOSE)SctpClientDispatchProtocolReq, SctpCommandReq, SocketReq
appInRequest6 (SctpCommandCode::SCTP_C_ABORT)SctpClientDispatchProtocolReq, SctpCommandReq, SocketReq
appInRequest6 (SctpCommandCode::SCTP_C_ABORT)SctpServerDispatchProtocolReq, SctpSendReq, SocketReq
appInRequest8 (SctpCommandCode::SCTP_C_RECEIVE)SctpServerDispatchProtocolReq, SctpSendReq, SocketReq
ipInPacket0Ipv4DispatchProtocolReq, DscpInd, EcnInd, HopLimitInd, InterfaceInd, L3AddressInd, NetworkProtocolInd, PacketProtocolTag, TosInd
ipInPacket0Ipv6DispatchProtocolInd, DispatchProtocolReq, DscpInd, EcnInd, HopLimitInd, InterfaceInd, L3AddressInd, NetworkProtocolInd, PacketProtocolTag, TosInd

Outgoing messages (observed)

gatemsgkindctrldestModuletags
appOutIndication10 (SctpStatusInd::SCTP_I_ABORT)SctpServerSctpCommandReq, SocketInd
appOutIndication12 (SctpStatusInd::SCTP_I_SEND_MSG)SctpClientSctpCommandReq, SocketInd
appOutIndication13 (SctpStatusInd::SCTP_I_SHUTDOWN_RECEIVED)SctpServerSctpCommandReq, SocketInd
appOutIndication14 (SctpStatusInd::SCTP_I_SENDQUEUE_FULL)NetPerfMeterSctpCommandReq, SocketInd
appOutIndication15 (SctpStatusInd::SCTP_I_SENDQUEUE_ABATED)NetPerfMeterSctpSendQueueAbatedReq, SocketInd
appOutIndication2 (SctpStatusInd::SCTP_I_DATA_NOTIFICATION)NetPerfMeterSctpCommandReq, SocketInd
appOutIndication2 (SctpStatusInd::SCTP_I_DATA_NOTIFICATION)SctpServerSctpCommandReq, SocketInd
appOutIndication21 (SctpStatusInd::SCTP_I_SENDSOCKETOPTIONS)NetPerfMeterSctpCommandReq, SocketInd
appOutIndication21 (SctpStatusInd::SCTP_I_SENDSOCKETOPTIONS)SctpClientSctpCommandReq, SocketInd
appOutIndication21 (SctpStatusInd::SCTP_I_SENDSOCKETOPTIONS)SctpServerSctpCommandReq, SocketInd
appOutIndication22 (SctpStatusInd::SCTP_I_AVAILABLE)NetPerfMeterSctpAvailableReq, SocketInd
appOutIndication22 (SctpStatusInd::SCTP_I_AVAILABLE)SctpServerSctpAvailableReq, SocketInd
appOutIndication3 (SctpStatusInd::SCTP_I_ESTABLISHED)NetPerfMeterSctpConnectReq, SocketInd
appOutIndication3 (SctpStatusInd::SCTP_I_ESTABLISHED)SctpClientSctpConnectReq, SocketInd
appOutIndication3 (SctpStatusInd::SCTP_I_ESTABLISHED)SctpServerSctpConnectReq, SocketInd
appOutIndication4 (SctpStatusInd::SCTP_I_PEER_CLOSED)SctpServerSctpCommandReq, SocketInd
appOutIndication5 (SctpStatusInd::SCTP_I_CLOSED)SctpClientSctpCommandReq, SocketInd
appOutIndication5 (SctpStatusInd::SCTP_I_CLOSED)SctpServerSctpCommandReq, SocketInd
appOutPacket1 (SctpStatusInd::SCTP_I_DATA)NetPerfMeterSctpRcvReq, SocketInd
appOutPacket1 (SctpStatusInd::SCTP_I_DATA)SctpServerSctpRcvReq, SocketInd
ipOutPacket0Ipv4DispatchProtocolReq, L3AddressReq, PacketProtocolTag, TransportProtocolInd, SocketReq?
ipOutPacket0Ipv6DispatchProtocolReq, L3AddressReq, PacketProtocolTag, SocketReq, TransportProtocolInd

Packet operations (observed)

chunkTypepacketAction
peekDataAsBytes
BytesChunkinsertAtBack
SctpHeaderinsertAtFront, peekAtFront

Shared Tagging operations (observed)

tagTypetagAction
DispatchProtocolReqaddTag, addTagIfAbsent
InterfaceReqfindTag
L3AddressIndgetTag
L3AddressReqaddTag, addTagIfAbsent
PacketProtocolTagaddTagIfAbsent, getTag
SctpAvailableReqaddTag, findTag
SctpCommandReqaddTag, findTag
SctpConnectReqaddTag
SctpInfoReqfindTag
SctpOpenReqfindTag
SctpRcvReqaddTag
SctpResetReqfindTag
SctpSendQueueAbatedReqaddTag
SctpSendReqfindTag, getTag
SocketIndaddTag, addTagIfAbsent
SocketReqaddTagIfAbsent, getTag
TransportProtocolIndaddTagIfAbsent

Region Tagging operations (observed)

tagTypetagAction
CreationTimeTagaddTag

Tagging operations (observed)

tagTypetagAction
inet::Ipv4InterfaceDatafindTag
inet::Ipv6InterfaceDatafindTag

Source code

//
// Implements the SCTP protocol.
//
simple Sctp like ISctp
{
    parameters:
        string interfaceTableModule;
        string routingTableModule;
        string crcMode @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 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 appIn @messageKinds(inet::SctpCommandCode);
        input ipIn;
        output appOut @labels(SctpCommand/up) @messageKinds(inet::SctpStatusInd);
        output ipOut;
}

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