UnstructuredApp¶
Package: simu5g.apps.unstructured
compound module UnstructuredApp
An application of a UE whose session is of type Unstructured (the UE’s sessionType parameter, see LteUe): it sends and receives opaque payload through the UE’s cellular NIC, which carries it over the session to the data network (see UserPlaneNodeControl for the N6 end of the session). The traffic source and sink are built from queueing model elements, as INET’s EthernetApp’s; UnstructuredIo attaches them to the NIC. UnstructuredSourceApp and UnstructuredSinkApp only send and only receive. A UE has at most one such application, in its unstructuredApp submodule vector.
Usage diagram¶
Inheritance diagram¶
Used in compound modules¶
Name |
Type |
Description |
|---|---|---|
compound module |
Models a User Equipment (UE) in a 4G LTE network. It is a host equipped with an LTE Network Interface Card (NIC), allowing the UE to connect to an eNodeB module via the Radio Access Network (RAN) of the LTE network and communicate with any other host in the system. The UE is an INET StandardHost ↗ with the cellular NIC as an additional network interface of its link layer, so it has all the higher layers of the protocol stack, from the link layer to the application modules, and the configuration options of StandardHost ↗ (numApps, hasUdp, hasTcp, hasIpv4, hasIpv6, numEthInterfaces, etc.). Its Ethernet interfaces (eth[]) are utilized in real-time emulation mode to connect the UE to the real network (outside the simulator) via a virtual Ethernet interface. |
Known subclasses¶
Name |
Type |
Description |
|---|---|---|
compound module |
An UnstructuredApp that only receives |
|
compound module |
An UnstructuredApp that only sends |
Parameters¶
Name |
Type |
Default value |
Description |
|---|---|---|---|
interfaceTableModule |
string |
Relative module path of the interface table |
Properties¶
Name |
Value |
Description |
|---|---|---|
application |
||
display |
i=block/app |
Gates¶
Name |
Direction |
Size |
Description |
|---|---|---|---|
socketIn |
input |
||
socketOut |
output |
Unassigned submodule parameters¶
Name |
Type |
Default value |
Description |
|---|---|---|---|
source ↗.displayStringTextFormat |
string |
“created %p pk (%l)” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
source ↗.packetNameFormat |
string |
“%a-%c” |
See directives in module documentation |
source ↗.packetRepresentation |
string |
“byteCount” |
Determines the chunk of the packet data |
source ↗.packetProtocol |
string |
“unknown” |
|
source ↗.packetLength |
int |
||
source ↗.packetData |
int |
-1 |
|
source ↗.attachCreationTimeTag |
bool |
true |
|
source ↗.attachIdentityTag |
bool |
true |
|
source ↗.attachDirectionTag |
bool |
true |
|
source ↗.clockModule |
string |
“” |
Relative path of a module that implements IClock; optional |
source ↗.initialProductionOffset |
double |
-1s |
Initial duration before which packets are not produced. When negative, then produce packet in initialize() |
source ↗.productionInterval |
double |
Elapsed time between subsequent packets pushed to the connected packet consumer |
|
source ↗.scheduleForAbsoluteTime |
bool |
true |
When a clock is used, “relative” means that setting the clock will not affect the simulation time of the event |
sink ↗.displayStringTextFormat |
string |
“received %p pk (%l)” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
sink ↗.clockModule |
string |
“” |
Relative path of a module that implements IClock; optional |
sink ↗.initialConsumptionOffset |
double |
0s |
Initial duration before which packets are not consumed |
sink ↗.consumptionInterval |
double |
0s |
Elapsed time between subsequent packets allowed to be pushed by the connected packet producer, 0 means any number of packets can be pushed at the same simulation time |
sink ↗.scheduleForAbsoluteTime |
bool |
true |
When a clock is used, “relative” means that setting the clock will not affect the simulation time of the event |
io.interfaceTableModule |
string |
Relative module path of the interface table |
|
io.interface |
string |
“cellular” |
The name of the cellular NIC’s interface |
Source code¶
//
// An application of a UE whose session is of type Unstructured (the UE's
// sessionType parameter, see ~LteUe): it sends and receives opaque payload through
// the UE's cellular NIC, which carries it over the session to the data network (see
// ~UserPlaneNodeControl for the N6 end of the session). The traffic source and sink
// are built from queueing model elements, as INET's EthernetApp's; ~UnstructuredIo
// attaches them to the NIC. ~UnstructuredSourceApp and ~UnstructuredSinkApp only send
// and only receive. A UE has at most one such application, in its unstructuredApp
// submodule vector.
//
module UnstructuredApp like IApp
{
parameters:
string interfaceTableModule; // Relative module path of the interface table
*.interfaceTableModule = default(absPath(this.interfaceTableModule));
@application;
@display("i=block/app");
gates:
input socketIn;
output socketOut;
submodules:
source: <default("ActivePacketSource")> like IActivePacketSource if typename != "" {
parameters:
@display("p=200,150");
}
measurementStarter: <default("")> like IPacketFlow {
parameters:
@display("p=200,300");
}
sink: <default("PassivePacketSink")> like IPassivePacketSink if typename != "" {
parameters:
@display("p=500,150");
}
measurementRecorder: <default("")> like IPacketFlow {
parameters:
@display("p=500,300");
}
io: UnstructuredIo {
parameters:
@display("p=350,450");
}
connections allowunconnected:
source.out --> measurementStarter.in if exists(source);
measurementStarter.out --> io.trafficIn;
io.socketOut --> socketOut;
socketIn --> io.socketIn;
io.trafficOut --> measurementRecorder.in;
measurementRecorder.out --> sink.in if exists(sink);
}