NetPerfMeter

Package: inet.applications.netperfmeter

simple module NetPerfMeter

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 behavior 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 parametrization and features are similar to the real-world application, the model also makes comparisons of simulation results and real-world measurements easy.

inet.applications.netperfmeter.NetPerfMeterNetPerfMetersimple

Inheritance diagram

Extends

Name

Type

Description

SimpleModule

simple module

Base module for all INET simple modules.

Parameters

Name

Type

Default value

Description

displayStringTextFormat

string

“In: {totalReceivedBytes}, Out: {totalSentBytes}”

Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information

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

Properties

Name

Value

Description

class

NetPerfMeter

Gates

Name

Direction

Size

Description

socketIn

input

socketOut

output

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 behavior 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 parametrization and features are similar to the real-world
// application, the model also makes comparisons of simulation results and
// real-world measurements easy.
//
simple NetPerfMeter extends SimpleModule like IApp
{
    parameters:
        @class(NetPerfMeter);
        displayStringTextFormat = default("In: {totalReceivedBytes}, Out: {totalSentBytes}");
        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