LteX2App

Package: simu5g.x2

compound module LteX2App

Represents the container for all X2 applications that an e/gNodeB instantiates to enable X2 communications with its peer e/gNodeBs. Specifically, for each peer, this module contains two submodules:

  • a server that sends data to the peer X2App

  • a client that receives data from the peer X2App

Usage diagram

Used in compound modules

Name

Type

Description

eNodeB

compound module

Models an evolved Node B (eNB) of a 4G LTE network. It is a specialized device equipped with a Network Interface Card (NIC) that enables communication with the LteUe devices connected to it. It serves as an access point that routes packets between the UEs and the 4G Core Network. Packets arriving from the UEs are tunneled to the appropriate next hop in the core network (e.g., the PDN Gateway, PGW) using the GPRS Tunneling Protocol (GTP). Conversely, packets received from the core network are detunneled and sent to the appropriate destination UE. In addition to the 4G NIC, this compound module includes a configurable number of wired interfaces to connect with routers of the core network or directly to the PgwStandard module, which serves as the IP module to perform forwarding, and the UserPlaneRelay that relays between the NIC and the GTP tunnels: its TrafficFlowFilter classifies incoming packets and determines the next hop, and its GtpUser handles GTP (de)tunneling. Furthermore, it features a configurable number of LteX2App modules to facilitate peer-to-peer communications with other eNodeBs within the same LTE network.

Properties

Name

Value

Description

display

i=block/app;bgb=258,148

Gates

Name

Direction

Size

Description

sctpIn [ ]

input

2

sctpOut [ ]

output

2

x2ManagerIn

input

x2ManagerOut

output

Unassigned submodule parameters

Name

Type

Default value

Description

client.displayStringTextFormat

string

“{socketState}”

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

client.localAddress

string

“”

Comma-separated list of addresses

client.localPort

int

0

Port number to listen on

client.connectAddress

string

Server address (may be symbolic)

client.connectPort

int

5000

Port number to connect to

client.startTime

double

0s

Time the first session begins

client.numRequestsPerSession

int

1

Number of requests sent per session

client.numPacketsToReceive

int

0

client.requestLength

int

1452

Length of a request (bytes)

client.thinkTime

double

0s

Time gap between requests

client.waitToClose

double

0s

Time to wait between the last message sent and abort

client.reconnectInterval

double

0s

If the connection breaks, waits this much before trying to reconnect

client.inboundStreams

int

17

client.outboundStreams

int

1

client.echo

bool

false

Echoes received packages when true

client.ordered

bool

true

client.queueSize

int

0

client.prMethod

int

0

0=NONE, 1=PR_TTL, 2=PR_RTX, 3=PR_PRIO, 4=PR_STRRST

client.prValue

double

0

For PR-SCTP

client.streamReset

bool

false

client.streamRequestTime

double

0s

client.streamResetType

int

5

NO_RESET=5, RESET_OUTGOING=6, RESET_INCOMING=7, RESET_BOTH=8, SSN_TSN=9

client.streamToReset

int

0

client.stopTime

double

-1s

Time of finishing sending, negative values mean forever

client.primaryTime

double

0s

client.newPrimary

string

“”

client.streamRequestLengths

string

“”

client.streamRequestRatio

string

“”

client.streamPriorities

string

“”

client.finishEndsSimulation

bool

false

client.binderModule

string

“binder”

server.displayStringTextFormat

string

“”

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

server.localAddress

string

“”

Comma-separated list of addresses

server.localPort

int

0

Port number to listen on

server.echo

bool

false

Echoes received packages when true

server.echoDelay

double

0s

server.delayFirstRead

double

0s

server.readingInterval

double

0s

server.messagesToPush

int

0

server.numPacketsToSendPerClient

int

0

Number of requests sent per session

server.numPacketsToReceivePerClient

int

1

server.requestLength

int

1452

Length of a request (bytes)

server.thinkTime

double

0s

Time gap between requests

server.waitToClose

double

0s

Time to wait between last message sent and abort

server.finishEndsSimulation

bool

false

server.ordered

bool

true

server.inboundStreams

int

17

server.outboundStreams

int

1

server.queueSize

int

0

server.prMethod

int

0

0=NONE, 1=PR_TTL, 2=PR_RTX, 3=PR_PRIO, 4=PR_STRRST

server.prValue

double

0

For PR-SCTP

server.streamReset

bool

false

server.streamRequestTime

double

0s

server.streamToReset

int

0

server.streamPriorities

string

“”

server.binderModule

string

“binder”

Source code

//
// Represents the container for all X2 applications that an e/gNodeB instantiates
// to enable X2 communications with its peer e/gNodeBs. Specifically, for each peer,
// this module contains two submodules:
// - a server that sends data to the peer X2App
// - a client that receives data from the peer X2App
//
module LteX2App
{
    parameters:
        @display("i=block/app;bgb=258,148");

    gates:
        input sctpIn[2] @labels(SctpCommand/up);
        output sctpOut[2] @labels(SctpCommand/down);

        input x2ManagerIn @labels(X2Msg);
        output x2ManagerOut @labels(X2Msg);

    submodules:
        client: X2AppClient {
            @display("i=block/app;p=92,76");
        }
        server: X2AppServer {
            @display("i=block/app;p=163,76");
        }

    connections:

        //# client connections
        sctpIn[0] --> client.socketIn;
        sctpOut[0] <-- client.socketOut;

             //# server connections
        sctpIn[1] --> server.socketIn;
        sctpOut[1] <-- server.socketOut;

        //# X2 manager connections
        x2ManagerIn --> server.x2ManagerIn;
        x2ManagerOut <-- client.x2ManagerOut;
}

File: src/simu5g/x2/LteX2App.ned