SctpCommand.msg

Msg File src/inet/transportlayer/contract/sctp/SctpCommand.msg

Name Type Description
AddressVector class (no description)
SctpErrorCode enum

Currently not in use.

SctpCommandCode enum

SCTP command codes, sent by the application to SCTP. These constants should be set as message kind on a message sent to the SCTP entity.

SctpStatusInd enum

SCTP indications, sent by SCTP to the application. SCTP will set these constants as message kind on messages it sends to the application.

SctpFlags enum (no description)
SctpSimpleMessage class (no description)
SctpCommandReq class (no description)
SctpSendReq class (no description)
SctpOpenReq class (no description)
SctpAvailableReq class (no description)
SctpConnectReq class (no description)
SctpRcvReq class (no description)
SctpStatusReq class (no description)
SctpResetReq class (no description)
SctpInfoReq class (no description)
SctpPathInfoReq class (no description)
SctpRtoReq class (no description)
SctpSendQueueAbatedReq class (no description)
SctpPathInfo class (no description)

Source code

//
// Copyright (C) 2008 Irene Ruengeler
// Copyright (C) 2015 Thomas Dreibholz
//
// SPDX-License-Identifier: LGPL-3.0-or-later
//

import inet.common.INETDefs;
import inet.common.packet.chunk.Chunk;
import inet.common.packet.Packet;
import inet.networklayer.common.IpProtocolId;
import inet.networklayer.common.L3Address;
import inet.common.TagBase;

cplusplus {{
#include <vector>
}}

namespace inet;

cplusplus {{
typedef std::vector<L3Address> AddressVector;
}}

class AddressVector { @existingClass; }

//
// Currently not in use.
//
enum SctpErrorCode
{

}

//
// SCTP command codes, sent by the application to SCTP. These constants
// should be set as message kind on a message sent to the SCTP entity.
//
// @see SctpCommand, SctpOpenCommand, Sctp
//
enum SctpCommandCode {
    SCTP_C_ASSOCIATE         = 1; // active open (must carry SctpOpenCommand)
    SCTP_C_OPEN_PASSIVE      = 2; // passive open (must carry SctpOpenCommand)
    SCTP_C_SEND              = 3; // send data (set on data packet)
    SCTP_C_CLOSE             = 5; // shutdown the association
    SCTP_C_ABORT             = 6; // abort connection
    SCTP_C_STATUS            = 7; // request status info (SCTP_I_STATUS) from Sctp
    SCTP_C_RECEIVE           = 8; // data receive request
    SCTP_C_SEND_ORDERED      = 9; // send data ordered
    SCTP_C_SEND_UNORDERED    = 10; // send data unordered
    SCTP_C_PRIMARY           = 11; // set primary path
    SCTP_C_QUEUE_BYTES_LIMIT = 12; // set send queue limit (in bytes)
    SCTP_C_QUEUE_MSGS_LIMIT  = 13; // set send queue limit (in messages)
    SCTP_C_SHUTDOWN          = 14;
    SCTP_C_NO_OUTSTANDING    = 15;
    SCTP_C_STREAM_RESET      = 16; // send StreamResetChunk
    SCTP_C_RESET_ASSOC       = 17;
    SCTP_C_ADD_STREAMS       = 18;
    SCTP_C_NAT_INFO          = 19;
    SCTP_C_SEND_ASCONF       = 20;
    SCTP_C_SET_STREAM_PRIO   = 21;
    SCTP_C_GETSOCKETOPTIONS  = 22;
    SCTP_C_ACCEPT            = 23;
    SCTP_C_SET_RTO_INFO      = 24;
    SCTP_C_ACCEPT_SOCKET_ID  = 25;
    SCTP_C_DESTROY           = 26; // destroy socket
};

//
// SCTP indications, sent by SCTP to the application. SCTP will set these
// constants as message kind on messages it sends to the application.
//
// @see SctpCommand, SctpStatusInfo, Sctp
//
enum SctpStatusInd {
    SCTP_I_DATA                  = 1; // data packet (set on data packet)
    SCTP_I_DATA_NOTIFICATION     = 2; // data arrived notification
    SCTP_I_ESTABLISHED           = 3; // connection established
    SCTP_I_PEER_CLOSED           = 4; // FIN received from remote SCTP
    SCTP_I_CLOSED                = 5; // connection closed normally (via FIN exchange)
    SCTP_I_CONNECTION_REFUSED    = 6; // connection refused
    SCTP_I_CONNECTION_RESET      = 7; // connection reset
    SCTP_I_TIMED_OUT             = 8; // conn-estab timer went off, or max retransm. count reached
    SCTP_I_STATUS                = 9; // status info (will carry SctpStatusInfo)
    SCTP_I_ABORT                 = 10; // association was aborted by the peer
    SCTP_I_CONN_LOST             = 11; // association had too many retransmissions FIXME
    SCTP_I_SEND_MSG              = 12;
    SCTP_I_SHUTDOWN_RECEIVED     = 13;
    SCTP_I_SENDQUEUE_FULL        = 14;
    SCTP_I_SENDQUEUE_ABATED      = 15;
    SCTP_I_ABANDONED             = 16;
    SCTP_I_SEND_STREAMS_RESETTED = 17;
    SCTP_I_RCV_STREAMS_RESETTED  = 18;
    SCTP_I_RESET_REQUEST_FAILED  = 19;
    SCTP_I_ADDRESS_ADDED         = 20; // used for AddIP and multihomed NAT
    SCTP_I_SENDSOCKETOPTIONS     = 21;
    SCTP_I_AVAILABLE             = 22;
};

enum SctpFlags {
    COMPLETE_MESG_UNORDERED = 1;
    COMPLETE_MESG_ORDERED   = 0;
};

class SctpSimpleMessage extends cPacket
{
    uint32_t dataLen;     //TODO remove it, use set/getDataArraySize() functions only
    uint8_t data[];
    simtime_t creationTime = 0;
    bool encaps = false;
}

class SctpCommandReq extends TagBase
{
    int socketId = -1;   // identifies the socket within the application
    int sid = -1;
    int numMsgs = 1;
    int ssn = -1;
    unsigned short sendUnordered = false;
    double prValue = 0;
    L3Address localAddr;
    L3Address remoteAddr;
    int localPort = -1;
    int remotePort = -1;
    int gate = -1;
    int fd = -1;
}

class SctpSendReq extends SctpCommandReq
{
    unsigned int prMethod;
    bool last;
    unsigned int ppid = 0;
    bool primary = true;
    bool sackNow = false;
}

class SctpOpenReq extends SctpCommandReq
{
    AddressVector localAddresses;
    AddressVector remoteAddresses;
    bool fork = false;               // used only for passive open
    string queueClass = "SctpQueue"; // may be left empty
    string sctpAlgorithmClass;       // may be left empty
    uint32_t inboundStreams;
    uint32_t outboundStreams;
    bool streamReset;
    bool appLimited;
    int prMethod;
    uint32_t numRequests;
    uint32_t messagesToPush;
}

class SctpAvailableReq extends SctpCommandReq
{
    int newSocketId;
}

class SctpConnectReq extends SctpCommandReq
{
    AddressVector remoteAddresses;
    int status;
    int inboundStreams;
    int outboundStreams;
}

class SctpRcvReq extends SctpCommandReq
{
    uint32_t ppid;
    uint32_t tsn;
    uint32_t cumTsn;
}

class SctpStatusReq extends SctpCommandReq
{
    int state;
    string stateName;
    L3Address pathId;
    bool active;
}

class SctpResetReq extends SctpCommandReq
{
    unsigned short requestType = 0;
    uint16_t instreams = 0;
    uint16_t outstreams = 0;
    uint16_t streams[];
}

class SctpInfoReq extends SctpCommandReq
{
    int text = 0;
}

class SctpPathInfoReq extends SctpCommandReq
{
    L3Address remoteAddress;
}

class SctpRtoReq extends SctpCommandReq
{
    double rtoInitial;
    double rtoMin;
    double rtoMax;
}

class SctpSendQueueAbatedReq extends SctpCommandReq
{
    uint64_t bytesAvailable;
    uint64_t bytesQueued;
    uint64_t bytesLimit;
    uint64_t queuedForStream[];
}

class SctpPathInfo extends cNamedObject
{
    L3Address remoteAddress;
}