NetPerfMeter

Package: inet.applications.netperfmeter

NetPerfMeter

simple module

Application model for comparing the performance of various transport protocols.

The NetPerfMeter model simultaneously transmits bidirectional flows to an endpoint, and measures the resulting flow bandwidths and QoS. Since the application behaviour is the same for all underlying transport layer protocols, it allows for comparing the performance of various transport protocols, e.g. TCP vs. SCTP.

The model closely mimics the operation of the real-world NetPerfMeter application (https://www.uni-due.de/~be0001/netperfmeter/), a tool for measuring UDP, TCP, MPTCP, SCTP and DCCP performance over IPv4 and IPv6. Since the parametrisation and features are similar to the real-world application, the model also makes comparisons of simulation results and real-world measurements easy.

Inheritance diagram

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

Parameters

Name Type Default value Description
activeMode bool true

Server (false) or client (true)

localAddress string ""

may be left empty ("")

localPort int 9000

port number to listen on

remoteAddress string ""

server address (may be symbolic)

remotePort int 9000

port number to connect to

connectTime double 0s

Absolute time to establish connection

startTime double 1s

Transmission start, relative to "connectTime"

resetTime double 5s

Statistics reset, relative to "connectTime"

stopTime double 30s

Transmission stop, relative to "resetTime"

queueSize int 1000000 B

Size of the transmission queue (SCTP/TCP only)

onTime double -1s

Online time; disconnect when timer expires

offTime double -1s

Offline time; reconnect when timer expires

maxOnOffCycles int 0

Maximum number of on-off cycles (-1 for unlimited)

outboundStreams int 1

Number of outbound streams (SCTP only)

maxInboundStreams int 16

Maximum number of inbound streams (SCTP only)

protocol string "SCTP"

Transport protocol to use

primaryPath string ""

primary path (may be symbolic; SCTP only)

frameRate double 1 Hz

Outgoing frame rate

frameSize int 1452 B

Outgoing frame size

frameRateString string ""

Outgoing frame rate per stream, separated by ";"

frameSizeString string ""

Outgoing frame size per stream, separated by ";"

traceFile string ""

Use trace file instead of frame rate/frame size

maxMsgSize int 1000 B

Maximum message size

unordered double 0.0

Fraction of unordered messages (SCTP only)

unreliable double 0.0

Fraction of unreliable messages (SCTP only)

decoupleSaturatedStreams bool true

Apply buffer splitting when using multiple streams

Gates

Name Direction Size Description
socketIn input
socketOut output

Scheduled messages (observed)

msgkindctrltagsmsgnamecontext
NetPerfMeterTransmitTimer5TransmitTimer
omnetpp::cMessage1ConnectTimer
omnetpp::cMessage2StartTimer
omnetpp::cMessage3ResetTimer

Direct method calls (observed)

call tofunctioninfo
MessageDispatcherinet::MessageDispatcher::arrivedarrived
InterfaceTableinet::InterfaceTable::findInterfaceByNamefindInterfaceByName

Incoming messages (observed)

gatemsgkindctrlsrcModuletags
socketInIndication14 (SctpStatusInd::SCTP_I_SENDQUEUE_FULL)SctpSctpCommandReq, SocketInd
socketInIndication15 (SctpStatusInd::SCTP_I_SENDQUEUE_ABATED)SctpSctpSendQueueAbatedReq, SocketInd
socketInIndication2 (SctpStatusInd::SCTP_I_DATA_NOTIFICATION)SctpSctpCommandReq, SocketInd
socketInIndication21 (SctpStatusInd::SCTP_I_SENDSOCKETOPTIONS)SctpSctpCommandReq, SocketInd
socketInIndication22 (SctpStatusInd::SCTP_I_AVAILABLE)SctpSctpAvailableReq, SocketInd
socketInIndication3 (SctpStatusInd::SCTP_I_ESTABLISHED)SctpSctpConnectReq, SocketInd
socketInIndication3 (TcpStatusInd::TCP_I_AVAILABLE)TcpAvailableInfoTcpSocketInd
socketInIndication4 (TcpStatusInd::TCP_I_ESTABLISHED)TcpConnectInfoTcpSocketInd
socketInPacket0 (UdpStatusInd::UDP_I_DATA)UdpDscpInd, EcnInd, HopLimitInd, InterfaceInd, L3AddressInd, L4PortInd, NetworkProtocolInd, SocketInd, TosInd, TransportProtocolInd
socketInPacket1 (SctpStatusInd::SCTP_I_DATA)SctpSctpRcvReq, SocketInd
socketInPacket1 (TcpStatusInd::TCP_I_DATA)TcpSocketInd

Outgoing messages (observed)

gatemsgkindctrldestModuletags
socketOutPacket0 (UdpCommandCode::UDP_C_DATA)UdpDispatchProtocolReq, SocketReq
socketOutPacket4 (TcpCommandCode::TCP_C_SEND)TcpDispatchProtocolReq, SocketReq
socketOutPacket8 (SctpCommandCode::SCTP_C_RECEIVE)SctpDispatchProtocolReq, SctpSendReq, SocketReq
socketOutPacket9 (SctpCommandCode::SCTP_C_SEND_ORDERED)SctpDispatchProtocolReq, SctpSendReq, SocketReq
socketOutRequest1 (SctpCommandCode::SCTP_C_ASSOCIATE)SctpDispatchProtocolReq, SctpOpenReq, SocketReq
socketOutRequest1 (TcpCommandCode::TCP_C_OPEN_ACTIVE)TcpOpenCommandTcpDispatchProtocolReq, SocketReq
socketOutRequest1 (UdpCommandCode::UDP_C_BIND)UdpBindCommandUdpDispatchProtocolReq, SocketReq
socketOutRequest12 (SctpCommandCode::SCTP_C_QUEUE_BYTES_LIMIT)SctpDispatchProtocolReq, SctpInfoReq, SocketReq
socketOutRequest2 (SctpCommandCode::SCTP_C_OPEN_PASSIVE)SctpDispatchProtocolReq, SctpOpenReq, SocketReq
socketOutRequest2 (TcpCommandCode::TCP_C_OPEN_PASSIVE)TcpOpenCommandTcpDispatchProtocolReq, SocketReq
socketOutRequest2 (UdpCommandCode::UDP_C_CONNECT)UdpConnectCommandUdpDispatchProtocolReq, SocketReq
socketOutRequest22 (SctpCommandCode::SCTP_C_GETSOCKETOPTIONS)SctpDispatchProtocolReq, SctpSendReq, SocketReq
socketOutRequest25 (SctpCommandCode::SCTP_C_ACCEPT_SOCKET_ID)SctpDispatchProtocolReq, SctpAvailableReq, SocketReq
socketOutRequest3 (TcpCommandCode::TCP_C_ACCEPT)TcpAcceptCommandTcpDispatchProtocolReq, SocketReq
socketOutRequest8 (TcpCommandCode::TCP_C_QUEUE_BYTES_LIMIT)TcpCommandTcpDispatchProtocolReq, SocketReq

Packet operations (observed)

chunkTypepacketAction
peekData
BytesChunkinsertAtBack

Shared Tagging operations (observed)

tagTypetagAction
DispatchProtocolReqaddTag, addTagIfAbsent
SctpAvailableReqaddTag, getTag
SctpCommandReqgetTag
SctpConnectReqfindTag, getTag
SctpInfoReqaddTag
SctpOpenReqaddTag
SctpRcvReqfindTag
SctpSendQueueAbatedReqgetTag
SctpSendReqaddTag
SocketIndgetTag
SocketReqaddTag, addTagIfAbsent

Region Tagging operations (observed)

tagTypetagAction
CreationTimeTagaddTag, getAllTags

Tagging operations (observed)

tagTypetagAction
inet::Ipv4InterfaceDatafindTag

Source code

//
// Application model for comparing the performance of various transport
// protocols.
//
// The NetPerfMeter model simultaneously transmits bidirectional flows to an
// endpoint, and measures the resulting flow bandwidths and QoS. Since the
// application behaviour is the same for all underlying transport layer
// protocols, it allows for comparing the performance of various transport
// protocols, e.g. TCP vs. SCTP.
//
// The model closely mimics the operation of the real-world NetPerfMeter
// application (https://www.uni-due.de/~~be0001/netperfmeter/), a tool for
// measuring UDP, TCP, MPTCP, SCTP and DCCP performance over IPv4 and IPv6.
// Since the parametrisation and features are similar to the real-world
// application, the model also makes comparisons of simulation results and
// real-world measurements easy.
//
simple NetPerfMeter like IApp
{
    parameters:
        bool activeMode = default(true);      // Server (false) or client (true)
        string localAddress = default("");        // may be left empty ("")
        int localPort = default(9000);      // port number to listen on
        string remoteAddress = default("");        // server address (may be symbolic)
        int remotePort = default(9000);      // port number to connect to

        double connectTime @unit(s) = default(0s);        // Absolute time to establish connection
        double startTime @unit(s) = default(1s);        // Transmission start, relative to "connectTime"
        double resetTime @unit(s) = default(5s);        // Statistics reset, relative to "connectTime"
        double stopTime @unit(s) = default(30s);       // Transmission stop, relative to "resetTime"
        int queueSize @unit(B) = default(1000000 B); // Size of the transmission queue (SCTP/TCP only)

        double onTime @unit(s) = default(-1s);       // Online time; disconnect when timer expires
        double offTime @unit(s) = default(-1s);       // Offline time; reconnect when timer expires
        int maxOnOffCycles = default(0);         // Maximum number of on-off cycles (-1 for unlimited)

        int outboundStreams = default(1);         // Number of outbound streams (SCTP only)
        int maxInboundStreams = default(16);        // Maximum number of inbound streams (SCTP only)
        string protocol = default("SCTP");    // Transport protocol to use
        string primaryPath = default("");        // primary path (may be symbolic; SCTP only)

        volatile double frameRate @unit(Hz) = default(1 Hz);      // Outgoing frame rate
        volatile int frameSize @unit(B) = default(1452 B);    // Outgoing frame size
        string frameRateString = default("");        // Outgoing frame rate per stream, separated by ";"
        string frameSizeString = default("");        // Outgoing frame size per stream, separated by ";"
        string traceFile = default("");        // Use trace file instead of frame rate/frame size
        int maxMsgSize @unit(B) = default(1000 B);    // Maximum message size
        double unordered = default(0.0);       // Fraction of unordered messages (SCTP only)
        double unreliable = default(0.0);       // Fraction of unreliable messages (SCTP only)
        bool decoupleSaturatedStreams = default(true);      // Apply buffer splitting when using multiple streams

    gates:
        input socketIn;
        output socketOut;
}

File: src/inet/applications/netperfmeter/NetPerfMeter.ned