VirtualisationInfrastructure

Package: simu5g.mec.vi

compound module VirtualisationInfrastructure

Represents the Virtualisation Infrastructure in a MEC host. It takes care of forwarding packets coming from the 5G core network to the appropriate MEC applications, applying the processing required by all the necessary network protocol layers. Optionally, it can host “independent” MEC applications, i.e., applications that are statically created at initialization, without going through the normal lifecycle (i.e., through the UALCMP and MEC orchestrator). It provides the external interface to communicate with emulated MEC applications, running outside the simulation environment.

VirtualisationInfrastructureat.out++ --> independentMecAppOut++ for i=0..numIndependentMecApp -1⦀at.in++ --> independentMecAppIn++ for i=0..numIndependentMecApp -1⦀at.out++ --> mecPlatform$o[i] for i=0..sizeof(mecPlatform)-1⦀at.in++ --> mecPlatform$i[i] for i=0..sizeof(mecPlatform)-1⦀at.out++ --> udp.appInat.in++ --> udp.appOutat.out++ --> tcp.appInat.in++ --> tcp.appOutudp.ipOut --> tn.in++udp.ipIn --> tn.out++tcp.ipOut --> tn.in++tcp.ipIn --> tn.out++ipv4.ifIn --> nl.out++ conditional: hasIpv4?ipv4.ifOut --> nl.in++ conditional: hasIpv4?ipv4.transportIn --> tn.out++ conditional: hasIpv4?ipv4.transportOut --> tn.in++ conditional: hasIpv4?ipv6.ifIn --> nl.out++ conditional: hasIpv6?ipv6.ifOut --> nl.in++ conditional: hasIpv6?ipv6.transportIn --> tn.out++ conditional: hasIpv6?ipv6.transportOut --> tn.in++ conditional: hasIpv6?pppIf[i].upperLayerOut --> nl.in++ for i=0..sizeof(ppp)-1⦀pppIf[i].upperLayerIn --> nl.out++ for i=0..sizeof(ppp)-1⦀pppIf[i].phys <--> ppp++ for i=0..sizeof(ppp)-1⦀encap.lowerLayerOut --> extEth[i].upperLayerIn for i=0..numExtEthInterfaces-1⦀encap.lowerLayerIn --> extEth[i].upperLayerOut for i=0..numExtEthInterfaces-1⦀encap.upperLayerOut --> nl.in++ conditional: numExtEthInterfaces != 0?encap.upperLayerIn --> nl.out++ conditional: numExtEthInterfaces != 0?nl.out++ --> lo.upperLayerInlo.upperLayerOut --> nl.in++interfaceTable: inet.networklayer.common.InterfaceTable Keeps the table of network interfaces. Source: interfaceTable: InterfaceTable { @display("p=61,74;is=s"); }interfaceTablepppIf[sizeof(ppp)]: inet.linklayer.ppp.PppInterface Implements a PPP network interface. Source: pppIf[sizeof(ppp)]: PppInterface { @display("p=736,660"); }pppIf[sizeof(ppp)]extEth[numExtEthInterfaces]: inet.emulation.linklayer.ethernet.ExtLowerEthernetInterface (like IEthernetInterface) ExtLowerEthernetInterface: Provides an Ethernet network interface suitable for emulation. IEthernetInterface: Interface for Ethernet network interfaces. Source: extEth[numExtEthInterfaces]: <default("ExtLowerEthernetInterface")> like IEthernetInterface { parameters: @display("p=326,660,row,150;q=txQueue"); }#extEth[numExtEthInterfaces]encap: inet.linklayer.ethernet.basic.EthernetEncapsulation (like IEthernetLayer) EthernetEncapsulation: Performs Ethernet II or Ethernet with LLC/SNAP encapsulation/decapsulation. IEthernetLayer: Module interface for Ethernet protocol layer implementations. Source: encap: <default("EthernetEncapsulation")> like IEthernetLayer if typename != "" { parameters: registerProtocol = true; @display("p=326,511"); }encaplo: inet.linklayer.loopback.LoopbackInterface (like ILoopbackInterface) LoopbackInterface: Implements a loopback network interface. ILoopbackInterface: Interface for loopback network interfaces. Source: lo: <default("LoopbackInterface")> like ILoopbackInterface { parameters: @display("p=548,660,row,150"); }loipv4: inet.networklayer.ipv4.Ipv4NetworkLayer (like INetworkLayer) Ipv4NetworkLayer: Network layer of an IPv4 node. Source: ipv4: <default("Ipv4NetworkLayer")> like INetworkLayer if hasIpv4 { parameters: @display("p=420,372;q=queue"); }#ipv4ipv6: inet.networklayer.ipv6.Ipv6NetworkLayer (like INetworkLayer) Ipv6NetworkLayer: Represents a complete IPv6 network layer (L3), to be used within hosts and routers. Source: ipv6: <default("Ipv6NetworkLayer")> like INetworkLayer if hasIpv6 { parameters: @display("p=657,374;q=queue"); }#ipv6udp: inet.transportlayer.udp.Udp UDP protocol implementation, for IPv4 (~Ipv4) and IPv6 (~Ipv6). Source: udp: Udp { @display("p=460,217"); }udptcp: inet.transportlayer.tcp.Tcp Implements the TCP protocol. Source: tcp: Tcp { @display("p=627,217"); }tcpat: inet.common.MessageDispatcher Facilitates the interconnection of applications, protocols, and network interfaces, dispatching m... Source: at: MessageDispatcher { parameters: @display("p=550,146;b=600,5,,,,1"); }attn: inet.common.MessageDispatcher Facilitates the interconnection of applications, protocols, and network interfaces, dispatching m... Source: tn: MessageDispatcher { parameters: @display("p=550,300;b=600,5,,,,1"); }tnnl: inet.common.MessageDispatcher Facilitates the interconnection of applications, protocols, and network interfaces, dispatching m... Source: nl: MessageDispatcher { parameters: @display("p=550,446;b=600,5,,,,1"); }nl

Usage diagram

Used in compound modules

Name

Type

Description

MecHost

compound module

Represents a model of a Multi-access Edge Computing (MEC) host belonging to a MEC system, as specified by the ETSI GS MEC 003 specifications. It runs MEC applications within its VirtualisationInfrastructure and can provide a number of MEC services via the MEC platform. MEC applications can be created either dynamically by the MEC orchestrator or statically at the initialization of the simulation. The MEC host possesses a configurable number of computing resources (such as CPU speed, RAM, and storage) and keeps track of the utilization of these resources by the MEC applications via the VirtualisationInfrastructureManager. Moreover, this module includes a User Plane Function (UPF) that allows it to be connected with the 5G core network.

Parameters

Name

Type

Default value

Description

hasIpv4

bool

true

hasIpv6

bool

false

numIndependentMecApp

int

0

numExtEthInterfaces

int

0

gateway

string

“”

Properties

Name

Value

Description

display

bgb=1350,750;i=block/dispatch

networkNode

Gates

Name

Direction

Size

Description

ppp [ ]

inout

Connection with GtpEndpoint and local/external networks

independentMecAppOut [ ]

output

numIndependentMecApp

Connection to the ME App input gate

independentMecAppIn [ ]

input

numIndependentMecApp

Connection to the ME App output gate

meAppOut [ ]

output

Connection to the ME App input gate

meAppIn [ ]

input

Connection to the ME App output gate

mecPlatform [ ]

inout

Connection to the MEC Platform

Unassigned submodule parameters

Name

Type

Default value

Description

interfaceTable ↗.displayStringTextFormat

string

“{numInterfaces} interfaces”

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

interfaceTable ↗.displayAddresses

bool

false

Whether to display IP addresses on links

pppIf ↗.pcapRecorder ↗.displayStringTextFormat

string

“rec: %n pks”

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

pppIf ↗.pcapRecorder ↗.verbose

bool

true

Whether to log packets on the module output

pppIf ↗.pcapRecorder ↗.recordEmptyPackets

bool

true

Specifies if zero length packets are recorded or not

pppIf ↗.pcapRecorder ↗.enableConvertingPackets

bool

true

Specifies if converting packets to link type is allowed or not

pppIf ↗.pcapRecorder ↗.pcapFile

string

“”

The PCAP file to be written, suggested value: pcapFile = “${resultdir}/${configname}-#${runnumber}” + fullpath() + “.pcap”

pppIf ↗.pcapRecorder ↗.fileFormat

string

“pcapng”

pppIf ↗.pcapRecorder ↗.snaplen

int

65535

Maximum number of bytes to record per packet

pppIf ↗.pcapRecorder ↗.timePrecision

int

6

Time precision in recorded file. pcap supports only 6 (usec) or 9 (nanosec), pcapng supports more values (see ‘if_tsresol’ option in pcapng file format).

pppIf ↗.pcapRecorder ↗.dumpBadFrames

bool

true

Enable dump of frames with hasBitError

pppIf ↗.pcapRecorder ↗.sendingSignalNames

string

“transmissionEnded”

Space-separated list of outbound packet signals to subscribe to

pppIf ↗.pcapRecorder ↗.receivingSignalNames

string

“receptionEnded”

Space-separated list of inbound packet signals to subscribe to

pppIf ↗.pcapRecorder ↗.dumpProtocols

string

“ethernetmac ppp ieee80211mac”

Space-separated list of protocol names as defined in the Protocol class

pppIf ↗.pcapRecorder ↗.packetFilter

object

“*”

Which packets are considered, matches all packets by default

pppIf ↗.pcapRecorder ↗.helpers

string

“”

Usable PcapRecorder::IHelper helpers for accept packettype and store/convert packet as specified linktype

pppIf ↗.pcapRecorder ↗.alwaysFlush

bool

false

Flush the pcapFile after each write to ensure that all packets are captured in case of a crash

pppIf ↗.queue ↗.displayStringTextFormat

string

“contains %p pk (%l) pushed %u\npulled %o removed %r dropped %d”

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

pppIf ↗.queue ↗.packetCapacity

int

10000

Maximum number of packets in the queue, no limit by default

pppIf ↗.queue ↗.dataCapacity

int

-1b

Maximum total length of packets in the queue, no limit by default

pppIf ↗.queue ↗.dropperClass

string

“inet::queueing::PacketAtCollectionEndDropper”

Determines which packets are dropped when the queue is overloaded, packets are not dropped by default; the parameter must be the name of a C++ class which implements the IPacketDropperFunction C++ interface and is registered via Register_Class

pppIf ↗.queue ↗.comparatorClass

string

“”

Determines the order of packets in the queue, insertion order by default; the parameter must be the name of a C++ class which implements the IPacketComparatorFunction C++ interface and is registered via Register_Class

pppIf ↗.queue ↗.bufferModule

string

“”

Relative module path to the IPacketBuffer module used by this queue, implicit buffer by default

pppIf ↗.ppp ↗.displayStringTextFormat

string

“rate: %b\nsent: %s, rcvd: %r\nqueue: %q, drop: %d”

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

pppIf ↗.ppp ↗.interfaceTableModule

string

The path to the InterfaceTable module

pppIf ↗.ppp ↗.sendRawBytes

bool

false

When true packets are serialized into a sequence of bytes before sending out

pppIf ↗.ppp ↗.mtu

int

4470B

pppIf ↗.ppp ↗.stopOperationExtraTime

double

-1s

Extra time after lifecycle stop operation finished

pppIf ↗.ppp ↗.stopOperationTimeout

double

2s

Timeout value for lifecycle stop operation

extEth ↗.pcapRecorder ↗.displayStringTextFormat

string

“rec: %n pks”

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

extEth ↗.pcapRecorder ↗.verbose

bool

true

Whether to log packets on the module output

extEth ↗.pcapRecorder ↗.recordEmptyPackets

bool

true

Specifies if zero length packets are recorded or not

extEth ↗.pcapRecorder ↗.enableConvertingPackets

bool

true

Specifies if converting packets to link type is allowed or not

extEth ↗.pcapRecorder ↗.pcapFile

string

“”

The PCAP file to be written, suggested value: pcapFile = “${resultdir}/${configname}-#${runnumber}” + fullpath() + “.pcap”

extEth ↗.pcapRecorder ↗.fileFormat

string

“pcapng”

extEth ↗.pcapRecorder ↗.snaplen

int

65535

Maximum number of bytes to record per packet

extEth ↗.pcapRecorder ↗.timePrecision

int

6

Time precision in recorded file. pcap supports only 6 (usec) or 9 (nanosec), pcapng supports more values (see ‘if_tsresol’ option in pcapng file format).

extEth ↗.pcapRecorder ↗.dumpBadFrames

bool

true

Enable dump of frames with hasBitError

extEth ↗.pcapRecorder ↗.sendingSignalNames

string

“transmissionEnded”

Space-separated list of outbound packet signals to subscribe to

extEth ↗.pcapRecorder ↗.receivingSignalNames

string

“receptionEnded”

Space-separated list of inbound packet signals to subscribe to

extEth ↗.pcapRecorder ↗.dumpProtocols

string

“ethernetmac ppp ieee80211mac”

Space-separated list of protocol names as defined in the Protocol class

extEth ↗.pcapRecorder ↗.packetFilter

object

“*”

Which packets are considered, matches all packets by default

extEth ↗.pcapRecorder ↗.helpers

string

“”

Usable PcapRecorder::IHelper helpers for accept packettype and store/convert packet as specified linktype

extEth ↗.pcapRecorder ↗.alwaysFlush

bool

false

Flush the pcapFile after each write to ensure that all packets are captured in case of a crash

extEth ↗.socket ↗.displayStringTextFormat

string

“device: {device}\nsnt:{numSent} rcv:{numReceived}”

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

extEth ↗.socket ↗.device

string

Name of an existing real Ethernet device

extEth ↗.socket ↗.namespace

string

“”

extEth ↗.socket ↗.packetNameFormat

string

“Ext-%p-%t-%n”

Name of received packets

encap ↗.displayStringTextFormat

string

“passed up: {totalFromMAC}\nsent: {totalFromHigherLayer}”

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

encap ↗.interfaceTableModule

string

The path to the InterfaceTable module

encap ↗.fcsMode

string

“declared”

encap ↗.stopOperationExtraTime

double

-1s

Extra time after the lifecycle stop operation has finished

encap ↗.stopOperationTimeout

double

2s

Timeout value for the lifecycle stop operation

lo ↗.pcapRecorder ↗.displayStringTextFormat

string

“rec: %n pks”

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

lo ↗.pcapRecorder ↗.verbose

bool

true

Whether to log packets on the module output

lo ↗.pcapRecorder ↗.recordEmptyPackets

bool

true

Specifies if zero length packets are recorded or not

lo ↗.pcapRecorder ↗.enableConvertingPackets

bool

true

Specifies if converting packets to link type is allowed or not

lo ↗.pcapRecorder ↗.pcapFile

string

“”

The PCAP file to be written, suggested value: pcapFile = “${resultdir}/${configname}-#${runnumber}” + fullpath() + “.pcap”

lo ↗.pcapRecorder ↗.fileFormat

string

“pcapng”

lo ↗.pcapRecorder ↗.snaplen

int

65535

Maximum number of bytes to record per packet

lo ↗.pcapRecorder ↗.timePrecision

int

6

Time precision in recorded file. pcap supports only 6 (usec) or 9 (nanosec), pcapng supports more values (see ‘if_tsresol’ option in pcapng file format).

lo ↗.pcapRecorder ↗.dumpBadFrames

bool

true

Enable dump of frames with hasBitError

lo ↗.pcapRecorder ↗.sendingSignalNames

string

“transmissionEnded”

Space-separated list of outbound packet signals to subscribe to

lo ↗.pcapRecorder ↗.receivingSignalNames

string

“receptionEnded”

Space-separated list of inbound packet signals to subscribe to

lo ↗.pcapRecorder ↗.dumpProtocols

string

“ethernetmac ppp ieee80211mac”

Space-separated list of protocol names as defined in the Protocol class

lo ↗.pcapRecorder ↗.packetFilter

object

“*”

Which packets are considered, matches all packets by default

lo ↗.pcapRecorder ↗.helpers

string

“”

Usable PcapRecorder::IHelper helpers for accept packettype and store/convert packet as specified linktype

lo ↗.pcapRecorder ↗.alwaysFlush

bool

false

Flush the pcapFile after each write to ensure that all packets are captured in case of a crash

lo ↗.lo ↗.displayStringTextFormat

string

“rcv:{numRcvdOK} snt:{numSent}”

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

lo ↗.lo ↗.interfaceTableModule

string

The path to the InterfaceTable module

lo ↗.lo ↗.mtu

int

4470B

ipv4 ↗.configurator ↗.displayStringTextFormat

string

“”

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

ipv4 ↗.configurator ↗.interfaceTableModule

string

The path to the InterfaceTable module

ipv4 ↗.configurator ↗.routingTableModule

string

ipv4 ↗.configurator ↗.networkConfiguratorModule

string

“configurator”

The absolute path to the Ipv4NetworkConfigurator; use “” if there is no configurator

ipv4 ↗.configurator ↗.configureRoutingTable

bool

true

Add routing entries to the routing table (uses the configurator module)

ipv4 ↗.routingTable ↗.displayStringTextFormat

string

“{routingTableStatusText}”

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

ipv4 ↗.routingTable ↗.interfaceTableModule

string

The path to the InterfaceTable module

ipv4 ↗.routingTable ↗.routerId

string

“auto”

For routers, the router id using IPv4 address dotted

ipv4 ↗.routingTable ↗.netmaskRoutes

string

“*”

Maintain netmask routes for interfaces

ipv4 ↗.routingTable ↗.forwarding

bool

true

Turns IP forwarding on/off

ipv4 ↗.routingTable ↗.multicastForwarding

bool

false

Turns multicast forwarding on/off

ipv4 ↗.routingTable ↗.useAdminDist

bool

false

Use Cisco-like administrative distances

ipv4 ↗.routingTable ↗.routingFile

string

“”

Routing table file name

ipv4 ↗.natTable ↗.displayStringTextFormat

string

“{numNatEntries} entries”

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

ipv4 ↗.natTable ↗.networkProtocolModule

string

“^.ip”

ipv4 ↗.natTable ↗.config

xml

xml(“<config></config>”)

XML configuration parameters for network address translation

ipv4 ↗.up ↗.displayStringTextFormat

string

“processed {numProcessedPackets} pk ({processedTotalLength})”

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

ipv4 ↗.up ↗.interfaceTableModule

string

Module path to the InterfaceTable ↗ module

ipv4 ↗.up ↗.forwardServiceRegistration

bool

true

ipv4 ↗.up ↗.forwardProtocolRegistration

bool

true

ipv4 ↗.up ↗.interfaceMapping

object

{}

Maps network interface names to connected submodule names (e.g. {“eth0”: “bridging”}), overrides automatically learned dispatching; * overrides all learned network interfaces, ? overrides default

ipv4 ↗.up ↗.serviceMapping

object

{}

Maps protocols to connected submodule names (e.g. {“ethernetmac”: “bridging”}), overrides automatically learned dispatching; * overrides all learned services, ? overrides default

ipv4 ↗.up ↗.protocolMapping

object

{}

Maps protocols to connected submodule names (e.g. {“ipv4”: “bridging”}), overrides automatically learned dispatching; * overrides all learned protocols, ? overrides default

ipv4 ↗.igmp ↗.displayStringTextFormat

string

“”

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

ipv4 ↗.igmp ↗.interfaceTableModule

string

The path to the InterfaceTable module

ipv4 ↗.igmp ↗.routingTableModule

string

ipv4 ↗.igmp ↗.checksumMode

string

“declared”

ipv4 ↗.igmp ↗.enabled

bool

true

ipv4 ↗.igmp ↗.robustnessVariable

int

2

IGMP is robust to (robustnessVariable-1) packet loss

ipv4 ↗.igmp ↗.queryInterval

double

125s

ipv4 ↗.igmp ↗.queryResponseInterval

double

10s

ipv4 ↗.igmp ↗.groupMembershipInterval

double

(robustnessVariable * queryInterval) + queryResponseInterval

ipv4 ↗.igmp ↗.otherQuerierPresentInterval

double

(robustnessVariable * queryInterval) + (queryResponseInterval / 2)

ipv4 ↗.igmp ↗.startupQueryInterval

double

queryInterval / 4

ipv4 ↗.igmp ↗.startupQueryCount

int

robustnessVariable

ipv4 ↗.igmp ↗.lastMemberQueryInterval

double

1s

ipv4 ↗.igmp ↗.lastMemberQueryCount

int

robustnessVariable

ipv4 ↗.igmp ↗.unsolicitedReportInterval

double

10s

ipv4 ↗.icmp ↗.displayStringTextFormat

string

“”

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

ipv4 ↗.icmp ↗.interfaceTableModule

string

The path to the InterfaceTable module

ipv4 ↗.icmp ↗.routingTableModule

string

ipv4 ↗.icmp ↗.checksumMode

string

“declared”

ipv4 ↗.icmp ↗.quoteLength

int

8B

Number of bytes from original packet to quote in ICMP reply

ipv4 ↗.mp ↗.displayStringTextFormat

string

“processed {numProcessedPackets} pk ({processedTotalLength})”

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

ipv4 ↗.mp ↗.interfaceTableModule

string

Module path to the InterfaceTable ↗ module

ipv4 ↗.mp ↗.forwardServiceRegistration

bool

true

ipv4 ↗.mp ↗.forwardProtocolRegistration

bool

true

ipv4 ↗.mp ↗.interfaceMapping

object

{}

Maps network interface names to connected submodule names (e.g. {“eth0”: “bridging”}), overrides automatically learned dispatching; * overrides all learned network interfaces, ? overrides default

ipv4 ↗.mp ↗.serviceMapping

object

{}

Maps protocols to connected submodule names (e.g. {“ethernetmac”: “bridging”}), overrides automatically learned dispatching; * overrides all learned services, ? overrides default

ipv4 ↗.mp ↗.protocolMapping

object

{}

Maps protocols to connected submodule names (e.g. {“ipv4”: “bridging”}), overrides automatically learned dispatching; * overrides all learned protocols, ? overrides default

ipv4 ↗.ip ↗.displayStringTextFormat

string

“{ipv4StatusText}”

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

ipv4 ↗.ip ↗.interfaceTableModule

string

The path to the InterfaceTable module

ipv4 ↗.ip ↗.routingTableModule

string

ipv4 ↗.ip ↗.arpModule

string

ipv4 ↗.ip ↗.icmpModule

string

ipv4 ↗.ip ↗.checksumMode

string

“declared”

ipv4 ↗.ip ↗.timeToLive

int

32

ipv4 ↗.ip ↗.multicastTimeToLive

int

32

ipv4 ↗.ip ↗.fragmentTimeout

double

60s

ipv4 ↗.ip ↗.limitedBroadcast

bool

false

Send out limited broadcast packets coming from the higher layer

ipv4 ↗.ip ↗.directBroadcastInterfaces

string

“”

List of interfaces where direct broadcast is enabled (by default direct broadcast is disabled on all interfaces)

ipv4 ↗.ip ↗.enableLocalOutMulticastRouting

bool

false

Enable using the multicast routing table for determining outgoing interfaces for local out packets

ipv4 ↗.ip ↗.enableTimestampOption

bool

false

When enabled, IP inserts a timestamp option into the IP header

ipv4 ↗.ip ↗.maxLifetime

double

-1s

Packets older than the limit are discarded

ipv4 ↗.arp ↗.displayStringTextFormat

string

“size:{arpCacheSize} sent:{numRequestsSent}\nrepl:{numRepliesSent} fail:{numFailedResolutions}”

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

ipv4 ↗.arp ↗.interfaceTableModule

string

The path to the InterfaceTable module

ipv4 ↗.arp ↗.routingTableModule

string

ipv4 ↗.arp ↗.retryTimeout

double

1s

Number of seconds ARP waits between retries to resolve an IPv4 address

ipv4 ↗.arp ↗.retryCount

int

3

Number of times ARP will attempt to resolve an IPv4 address

ipv4 ↗.arp ↗.cacheTimeout

double

120s

Number of seconds unused entries in the cache will time out

ipv4 ↗.arp ↗.proxyArpInterfaces

string

“*”

List of interfaces that proxy ARP is enabled on (all interfaces by default)

ipv4 ↗.ipsec ↗.displayStringTextFormat

string

“IN: ACCEPT: {inAccept} DROP: {inDrop} BYPASS: {inBypass}\n OUT: PROTECT: {outProtect} DROP: {outDrop} BYPASS: {outBypass}”

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

ipv4 ↗.ipsec ↗.networkProtocolModule

string

“^.ip”

ipv4 ↗.ipsec ↗.networkProtocol

string

“ipv4”

address family this instance protects (set to “ipv6” in Ipv6NetworkLayer)

ipv4 ↗.ipsec ↗.interfaceTableModule

string

ipv4 ↗.ipsec ↗.spdModule

string

“^.spd”

ipv4 ↗.ipsec ↗.sadModule

string

“^.sad”

ipv4 ↗.ipsec ↗.spdConfig

xml

ipv4 ↗.ipsec ↗.defaultProtection

string

“”

If not “”: value to use where <Protection> element is absent from the configuration

ipv4 ↗.ipsec ↗.defaultEspMode

string

“”

If not “”: value to use where <EspMode> element is absent from the configuration

ipv4 ↗.ipsec ↗.defaultEncryptionAlg

string

“”

If not “”: value to use where <EncryptionAlg> element is absent from the configuration

ipv4 ↗.ipsec ↗.defaultAuthenticationAlg

string

“”

If not “”: value to use where <defaultAuthenticationAlg> element is absent from the configuration

ipv4 ↗.ipsec ↗.defaultMaxTfcPadLength

int

0

Value to use where <MaxTfcPadLength> element is absent from the configuration

ipv4 ↗.ipsec ↗.ahProtectOutDelay

double

0.0s

ipv4 ↗.ipsec ↗.ahProtectInDelay

double

0.0s

ipv4 ↗.ipsec ↗.espProtectOutDelay

double

0.0s

ipv4 ↗.ipsec ↗.espProtectInDelay

double

0.0s

ipv4 ↗.spd ↗.displayStringTextFormat

string

“entries: {numEntries}”

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

ipv4 ↗.sad ↗.displayStringTextFormat

string

“entries: {numEntries}”

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

ipv4 ↗.lp ↗.displayStringTextFormat

string

“processed {numProcessedPackets} pk ({processedTotalLength})”

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

ipv4 ↗.lp ↗.interfaceTableModule

string

Module path to the InterfaceTable ↗ module

ipv4 ↗.lp ↗.forwardServiceRegistration

bool

true

ipv4 ↗.lp ↗.forwardProtocolRegistration

bool

true

ipv4 ↗.lp ↗.interfaceMapping

object

{}

Maps network interface names to connected submodule names (e.g. {“eth0”: “bridging”}), overrides automatically learned dispatching; * overrides all learned network interfaces, ? overrides default

ipv4 ↗.lp ↗.serviceMapping

object

{}

Maps protocols to connected submodule names (e.g. {“ethernetmac”: “bridging”}), overrides automatically learned dispatching; * overrides all learned services, ? overrides default

ipv4 ↗.lp ↗.protocolMapping

object

{}

Maps protocols to connected submodule names (e.g. {“ipv4”: “bridging”}), overrides automatically learned dispatching; * overrides all learned protocols, ? overrides default

ipv6 ↗.configurator ↗.displayStringTextFormat

string

“”

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

ipv6 ↗.configurator ↗.interfaceTableModule

string

ipv6 ↗.configurator ↗.routingTableModule

string

ipv6 ↗.configurator ↗.networkConfiguratorModule

string

“”

The absolute path to the Ipv6NetworkConfigurator; use “” if there is no configurator

ipv6 ↗.configurator ↗.configureRoutingTable

bool

true

ipv6 ↗.routingTable ↗.displayStringTextFormat

string

“{numRoutes} routes\n{numDestCache} destcache entries”

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

ipv6 ↗.routingTable ↗.interfaceTableModule

string

The path to the InterfaceTable module

ipv6 ↗.routingTable ↗.routes

xml

xml(“<routingTable/>”)

ipv6 ↗.routingTable ↗.forwarding

bool

false

ipv6 ↗.routingTable ↗.isRouter

bool

this.forwarding

ipv6 ↗.routingTable ↗.multicastForwarding

bool

false

ipv6 ↗.routingTable ↗.useAdminDist

bool

false

Use Cisco-like administrative distances

ipv6 ↗.routingTable ↗.advManagedFlag

bool

false

“Managed address configuration” (M) flag in RAs

ipv6 ↗.routingTable ↗.advOtherConfigFlag

bool

false

“Other configuration” (O) flag in RAs

ipv6 ↗.routingTable ↗.advLinkMtu

int

1280

MTU option in RAs (1280 = IPv6 minimum MTU, 0 = don’t include)

ipv6 ↗.routingTable ↗.advCurHopLimit

int

30

Cur Hop Limit field in RAs (0 = unspecified)

ipv6 ↗.routingTable ↗.advDefaultLifetime

double

-1s

Router Lifetime in RAs (-1 = auto: 3*maxRtrAdvInterval)

ipv6 ↗.up ↗.displayStringTextFormat

string

“processed {numProcessedPackets} pk ({processedTotalLength})”

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

ipv6 ↗.up ↗.interfaceTableModule

string

Module path to the InterfaceTable ↗ module

ipv6 ↗.up ↗.forwardServiceRegistration

bool

true

ipv6 ↗.up ↗.forwardProtocolRegistration

bool

true

ipv6 ↗.up ↗.interfaceMapping

object

{}

Maps network interface names to connected submodule names (e.g. {“eth0”: “bridging”}), overrides automatically learned dispatching; * overrides all learned network interfaces, ? overrides default

ipv6 ↗.up ↗.serviceMapping

object

{}

Maps protocols to connected submodule names (e.g. {“ethernetmac”: “bridging”}), overrides automatically learned dispatching; * overrides all learned services, ? overrides default

ipv6 ↗.up ↗.protocolMapping

object

{}

Maps protocols to connected submodule names (e.g. {“ipv4”: “bridging”}), overrides automatically learned dispatching; * overrides all learned protocols, ? overrides default

ipv6 ↗.icmpv6 ↗.displayStringTextFormat

string

“”

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

ipv6 ↗.icmpv6 ↗.interfaceTableModule

string

The path to the InterfaceTable module

ipv6 ↗.icmpv6 ↗.checksumMode

string

“declared”

ipv6 ↗.icmpv6 ↗.mldModule

string

“”

Path to the MLD module, or “” if MLD is not enabled; MLD messages are dropped when empty

ipv6 ↗.lp ↗.displayStringTextFormat

string

“processed {numProcessedPackets} pk ({processedTotalLength})”

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

ipv6 ↗.lp ↗.interfaceTableModule

string

Module path to the InterfaceTable ↗ module

ipv6 ↗.lp ↗.forwardServiceRegistration

bool

true

ipv6 ↗.lp ↗.forwardProtocolRegistration

bool

true

ipv6 ↗.lp ↗.interfaceMapping

object

{}

Maps network interface names to connected submodule names (e.g. {“eth0”: “bridging”}), overrides automatically learned dispatching; * overrides all learned network interfaces, ? overrides default

ipv6 ↗.lp ↗.serviceMapping

object

{}

Maps protocols to connected submodule names (e.g. {“ethernetmac”: “bridging”}), overrides automatically learned dispatching; * overrides all learned services, ? overrides default

ipv6 ↗.lp ↗.protocolMapping

object

{}

Maps protocols to connected submodule names (e.g. {“ipv4”: “bridging”}), overrides automatically learned dispatching; * overrides all learned protocols, ? overrides default

ipv6 ↗.neighbourDiscovery ↗.displayStringTextFormat

string

“”

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

ipv6 ↗.neighbourDiscovery ↗.interfaceTableModule

string

The path to the InterfaceTable module

ipv6 ↗.neighbourDiscovery ↗.checksumMode

string

“declared”

ipv6 ↗.neighbourDiscovery ↗.icmpv6Module

string

ipv6 ↗.neighbourDiscovery ↗.mipv6Module

string

ipv6 ↗.neighbourDiscovery ↗.routingTableModule

string

ipv6 ↗.neighbourDiscovery ↗.minIntervalBetweenRAs

double

200s

RFC 4861: MinRtrAdvInterval (0.33 * MaxRtrAdvInterval)

ipv6 ↗.neighbourDiscovery ↗.maxIntervalBetweenRAs

double

600s

RFC 4861: MaxRtrAdvInterval

ipv6 ↗.neighbourDiscovery ↗.advReachableTime

double

3600s

advertised reachable time in RAs; hosts use it as base for NUD

ipv6 ↗.neighbourDiscovery ↗.dupAddrDetectTransmits

int

1

RFC 4862 Section 5.1: number of NS sent for DAD (0 = disable DAD)

ipv6 ↗.neighbourDiscovery ↗.optimisticDad

bool

false

RFC 4429 Optimistic DAD: if true, an autoconfigured address may be used as a source address while DAD is still in progress; if false (RFC 4862), packets that would use it are deferred until DAD completes

ipv6 ↗.neighbourDiscovery ↗.detectL2Movement

bool

true

if true (default), (re)start Router Discovery (send Router Solicitations) whenever an interface associates at the link layer (e.g. a wireless handover to a new access point); lets a mobile node detect movement and obtain a new care-of address immediately, instead of relying on frequent unsolicited Router Advertisements (cf. MIPv6 fast RAs). Set to false to restore the legacy behaviour (movement detected only from periodic Router Advertisements)

ipv6 ↗.neighbourDiscovery ↗.retransTimer

double

1s

RFC 4861 Section 10: delay between retransmitted NS messages

ipv6 ↗.neighbourDiscovery ↗.baseReachableTime

double

30s

RFC 4861 Section 10: base value for computing random ReachableTime

ipv6 ↗.neighbourDiscovery ↗.routerBootupTime

double

uniform(0s, 0.3s)

random startup delay before a router assigns its link-local address; routers boot faster than hosts so that RAs are available by the time hosts solicit

ipv6 ↗.neighbourDiscovery ↗.hostBootupTime

double

uniform(0.4s, 1s)

random startup delay before a host assigns its link-local address

ipv6 ↗.ipv6 ↗.displayStringTextFormat

string

“{ipv6StatusText}”

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

ipv6 ↗.ipv6 ↗.interfaceTableModule

string

The path to the InterfaceTable module

ipv6 ↗.ipv6 ↗.routingTableModule

string

ipv6 ↗.ipv6 ↗.ipv6NeighbourDiscoveryModule

string

ipv6 ↗.ipv6 ↗.icmpv6Module

string

ipv6 ↗.ipv6 ↗.procDelay

double

0s

ipv6 ↗.ipv6 ↗.sendRedirects

bool

true

RFC 4861 Section 8.2: when a router forwards a packet back out the interface it arrived on, send the source an ICMPv6 Redirect. Disable on wireless multi-hop / ad-hoc networks (e.g. MANET routing), where the geographic next hop is not directly reachable by the source, so redirects are useless and trigger a storm.

ipv6 ↗.ipsec ↗.displayStringTextFormat

string

“IN: ACCEPT: {inAccept} DROP: {inDrop} BYPASS: {inBypass}\n OUT: PROTECT: {outProtect} DROP: {outDrop} BYPASS: {outBypass}”

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

ipv6 ↗.ipsec ↗.interfaceTableModule

string

ipv6 ↗.ipsec ↗.spdModule

string

“^.spd”

ipv6 ↗.ipsec ↗.sadModule

string

“^.sad”

ipv6 ↗.ipsec ↗.spdConfig

xml

ipv6 ↗.ipsec ↗.defaultProtection

string

“”

If not “”: value to use where <Protection> element is absent from the configuration

ipv6 ↗.ipsec ↗.defaultEspMode

string

“”

If not “”: value to use where <EspMode> element is absent from the configuration

ipv6 ↗.ipsec ↗.defaultEncryptionAlg

string

“”

If not “”: value to use where <EncryptionAlg> element is absent from the configuration

ipv6 ↗.ipsec ↗.defaultAuthenticationAlg

string

“”

If not “”: value to use where <defaultAuthenticationAlg> element is absent from the configuration

ipv6 ↗.ipsec ↗.defaultMaxTfcPadLength

int

0

Value to use where <MaxTfcPadLength> element is absent from the configuration

ipv6 ↗.ipsec ↗.ahProtectOutDelay

double

0.0s

ipv6 ↗.ipsec ↗.ahProtectInDelay

double

0.0s

ipv6 ↗.ipsec ↗.espProtectOutDelay

double

0.0s

ipv6 ↗.ipsec ↗.espProtectInDelay

double

0.0s

ipv6 ↗.spd ↗.displayStringTextFormat

string

“entries: {numEntries}”

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

ipv6 ↗.sad ↗.displayStringTextFormat

string

“entries: {numEntries}”

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

ipv6 ↗.mipv6 ↗.displayStringTextFormat

string

“”

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

ipv6 ↗.mipv6 ↗.interfaceTableModule

string

The path to the InterfaceTable module

ipv6 ↗.mipv6 ↗.ipv6NeighbourDiscoveryModule

string

ipv6 ↗.mipv6 ↗.bindingUpdateListModule

string

ipv6 ↗.mipv6 ↗.bindingCacheModule

string

ipv6 ↗.mipv6 ↗.isHomeAgent

bool

ipv6 ↗.mipv6 ↗.isMobileNode

bool

ipv6 ↗.mipv6 ↗.maxHaBindingLifeTime

double

3600s

max binding lifetime for HA registration

ipv6 ↗.mipv6 ↗.maxRrBindingLifeTime

double

420s

max binding lifetime for CN (route optimization)

ipv6 ↗.mipv6 ↗.useRouteOptimization

bool

true

whether a mobile node route-optimizes with correspondent nodes (RFC 3775); if false, their traffic always uses the bidirectional home-agent tunnel

ipv6 ↗.buList ↗.displayStringTextFormat

string

“”

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

ipv6 ↗.bindingCache ↗.displayStringTextFormat

string

“”

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

ipv6 ↗.pmipv6 ↗.displayStringTextFormat

string

“”

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

ipv6 ↗.pmipv6 ↗.interfaceTableModule

string

path to the InterfaceTable module

ipv6 ↗.pmipv6 ↗.ipv6NeighbourDiscoveryModule

string

path to the Ipv6NeighbourDiscovery module

ipv6 ↗.pmipv6 ↗.isLocalMobilityAnchor

bool

false

(the IPv6 routing table is resolved automatically)

ipv6 ↗.pmipv6 ↗.isMobileAccessGateway

bool

false

ipv6 ↗.pmipv6 ↗.localMobilityAnchorAddress

string

“”

MAG: the address of the LMA to register mobile nodes with

ipv6 ↗.pmipv6 ↗.mobileNodeProfiles

xml

xml(“<mobileNodes/>”)

MAG: mobile-node policy profiles, one per access interface, e.g. <mobileNodes> <mobileNode accessInterface=”wlan0” id=”mn1@example.com” homeNetworkPrefix=”2001:db8:1::” prefixLength=”64”/> </mobileNodes> (accessInterface may be omitted to match any access interface)

ipv6 ↗.pmipv6 ↗.bindingLifetime

double

3600s

lifetime requested in Proxy Binding Updates

ipv6 ↗.pmipv6 ↗.homeNetworkPrefixAdvValidLifetime

double

3600s

MAG: valid lifetime of the advertised home network prefix

ipv6 ↗.pmipv6 ↗.homeNetworkPrefixAdvPreferredLifetime

double

1800s

MAG: preferred lifetime of the advertised home network prefix

ipv6 ↗.mld ↗.displayStringTextFormat

string

“”

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

ipv6 ↗.mld ↗.interfaceTableModule

string

path to the InterfaceTable module

ipv6 ↗.mld ↗.routingTableModule

string

path to the Ipv6RoutingTable module

ipv6 ↗.mld ↗.checksumMode

string

“declared”

how the ICMPv6 checksum is handled

ipv6 ↗.mld ↗.enabled

bool

true

when false, MLD is inert on this node (see above)

ipv6 ↗.mld ↗.unsolicitedReportInterval

double

10s

host: delay before the repeated Report after a join

ipv6 ↗.mld ↗.robustnessVariable

int

2

loss tolerance; only supplies the defaults of the three params marked (RV) below

ipv6 ↗.mld ↗.queryInterval

double

125s

querier: interval between periodic General Queries

ipv6 ↗.mld ↗.queryResponseInterval

double

10s

querier: max delay a host may wait before answering a General Query

ipv6 ↗.mld ↗.multicastListenerInterval

double

(robustnessVariable * queryInterval) + queryResponseInterval

querier: how long a group stays “has listeners” without a new Report (RV)

ipv6 ↗.mld ↗.startupQueryInterval

double

queryInterval / 4

querier: interval between the initial General Queries at startup

ipv6 ↗.mld ↗.startupQueryCount

int

robustnessVariable

querier: number of General Queries sent at startup (RV)

ipv6 ↗.mld ↗.lastListenerQueryInterval

double

1s

querier: interval between the group-specific Queries sent after a Done

ipv6 ↗.mld ↗.lastListenerQueryCount

int

robustnessVariable

querier: number of group-specific Queries sent after a Done (RV)

udp ↗.displayStringTextFormat

string

“passed up: {numPassedUp} pks\nsent: {numSent} pks{udpDroppedText}”

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

udp ↗.interfaceTableModule

string

The path to the InterfaceTable module

udp ↗.checksumMode

string

“declared”

udp ↗.defaultMulticastLoop

bool

true

tcp ↗.displayStringTextFormat

string

“”

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

tcp ↗.checksumMode

string

“declared”

tcp ↗.advertisedWindow

int

14 * this.mss

In bytes, corresponds with the maximal receiver buffer capacity (Note: normally, NIC queues should be at least this size)

tcp ↗.delayedAcksEnabled

bool

false

Delayed ACK algorithm (RFC 1122) enabled/disabled

tcp ↗.nagleEnabled

bool

true

Nagle’s algorithm (RFC 896) enabled/disabled

tcp ↗.limitedTransmitEnabled

bool

false

Limited Transmit algorithm (RFC 3042) enabled/disabled (can be used for TcpReno/TcpTahoe/TcpNewReno/TcpNoCongestionControl)

tcp ↗.increasedIWEnabled

bool

false

Increased Initial Window (RFC 3390) enabled/disabled

tcp ↗.sackSupport

bool

false

Selective Acknowledgment (RFC 2018, 2883, 3517) support (header option) (SACK will be enabled for a connection if both endpoints support it)

tcp ↗.windowScalingSupport

bool

false

Window Scale (RFC 1323) support (header option) (WS will be enabled for a connection if both endpoints support it)

tcp ↗.windowScalingFactor

int

-1

Window Scaling Factor given as a shift count. Valid values are 0..14, and -1 for automatic selection (it chooses the smallest shift count that makes advertisedWindow representable in 16 bits)

tcp ↗.timestampSupport

bool

false

Timestamps (RFC 1323) support (header option) (TS will be enabled for a connection if both endpoints support it)

tcp ↗.mss

int

536

Maximum Segment Size (header option). Default 536 per RFC 1122.

tcp ↗.msl

int

120s

Maximum Segment Lifetime

tcp ↗.tcpAlgorithmClass

string

“TcpReno”

tcp ↗.dupthresh

int

3

Used for TcpTahoe, TcpReno, and SACK (RFC 3517) DO NOT change unless you really know what you are doing

tcp ↗.initialSsthresh

int

0xFFFFFFFF

Initial value for Slow Start threshold used in TahoeRenoFamily. The initial value of ssthresh SHOULD be set arbitrarily high (e.g., to the size of the largest possible advertised window) Without user interaction there is no limit…

tcp ↗.stopOperationExtraTime

double

0s

Extra time after lifecycle stop operation finished

tcp ↗.stopOperationTimeout

double

2s

Timeout value for lifecycle stop operation

tcp ↗.ecnWillingness

bool

false

True if willing to use ECN

tcp ↗.dctcpGamma

double

0.0625

A fixed estimation gain for calculating dctcp_alpha (RFC 8257 4.2)

tcp ↗.pmtudEnabled

bool

false

Path MTU Discovery (RFC 1191, RFC 1981) enabled/disabled

tcp ↗.pmtudTimeout

double

600s

Time after which the original MSS is restored to probe for increased path MTU (RFC 1191, Section 6.3)

at ↗.displayStringTextFormat

string

“processed {numProcessedPackets} pk ({processedTotalLength})”

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

at ↗.interfaceTableModule

string

Module path to the InterfaceTable ↗ module

at ↗.forwardServiceRegistration

bool

true

at ↗.forwardProtocolRegistration

bool

true

at ↗.interfaceMapping

object

{}

Maps network interface names to connected submodule names (e.g. {“eth0”: “bridging”}), overrides automatically learned dispatching; * overrides all learned network interfaces, ? overrides default

at ↗.serviceMapping

object

{}

Maps protocols to connected submodule names (e.g. {“ethernetmac”: “bridging”}), overrides automatically learned dispatching; * overrides all learned services, ? overrides default

at ↗.protocolMapping

object

{}

Maps protocols to connected submodule names (e.g. {“ipv4”: “bridging”}), overrides automatically learned dispatching; * overrides all learned protocols, ? overrides default

tn ↗.displayStringTextFormat

string

“processed {numProcessedPackets} pk ({processedTotalLength})”

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

tn ↗.interfaceTableModule

string

Module path to the InterfaceTable ↗ module

tn ↗.forwardServiceRegistration

bool

true

tn ↗.forwardProtocolRegistration

bool

true

tn ↗.interfaceMapping

object

{}

Maps network interface names to connected submodule names (e.g. {“eth0”: “bridging”}), overrides automatically learned dispatching; * overrides all learned network interfaces, ? overrides default

tn ↗.serviceMapping

object

{}

Maps protocols to connected submodule names (e.g. {“ethernetmac”: “bridging”}), overrides automatically learned dispatching; * overrides all learned services, ? overrides default

tn ↗.protocolMapping

object

{}

Maps protocols to connected submodule names (e.g. {“ipv4”: “bridging”}), overrides automatically learned dispatching; * overrides all learned protocols, ? overrides default

nl ↗.displayStringTextFormat

string

“processed {numProcessedPackets} pk ({processedTotalLength})”

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

nl ↗.interfaceTableModule

string

Module path to the InterfaceTable ↗ module

nl ↗.forwardServiceRegistration

bool

true

nl ↗.forwardProtocolRegistration

bool

true

nl ↗.interfaceMapping

object

{}

Maps network interface names to connected submodule names (e.g. {“eth0”: “bridging”}), overrides automatically learned dispatching; * overrides all learned network interfaces, ? overrides default

nl ↗.serviceMapping

object

{}

Maps protocols to connected submodule names (e.g. {“ethernetmac”: “bridging”}), overrides automatically learned dispatching; * overrides all learned services, ? overrides default

nl ↗.protocolMapping

object

{}

Maps protocols to connected submodule names (e.g. {“ipv4”: “bridging”}), overrides automatically learned dispatching; * overrides all learned protocols, ? overrides default

Source code

//
// Represents the Virtualisation Infrastructure in a MEC host.
// It takes care of forwarding packets coming from the 5G core network to the
// appropriate MEC applications, applying the processing required by all the necessary
// network protocol layers.
// Optionally, it can host "independent" MEC applications, i.e., applications that
// are statically created at initialization, without going through the normal
// lifecycle (i.e., through the UALCMP and MEC orchestrator).
// It provides the external interface to communicate with emulated MEC applications,
// running outside the simulation environment.
//
module VirtualisationInfrastructure
{
    parameters:
        @networkNode();
        @display("bgb=1350,750;i=block/dispatch");
        @figure[applicationLayer](type=rectangle; pos=250,6; size=600,130; lineColor=#808080; cornerRadius=5; fillColor=#ffff00; fillOpacity=0.1);
        @figure[applicationLayer.title](type=text; pos=845,11; anchor=ne; text="application layer");
        @figure[transportLayer](type=rectangle; pos=250,156; size=600,130; fillColor=#ff0000; lineColor=#808080; cornerRadius=5; fillOpacity=0.1);
        @figure[transportLayer.title](type=text; pos=845,161; anchor=ne; text="transport layer");
        @figure[networkLayer](type=rectangle; pos=250,306; size=600,130; fillColor=#00ff00; lineColor=#808080; cornerRadius=5; fillOpacity=0.1);
        @figure[networkLayer.title](type=text; pos=845,311; anchor=ne; text="network layer");
        @figure[linkLayer](type=rectangle; pos=250,456; size=600,130; fillColor=#0000ff; lineColor=#808080; cornerRadius=5; fillOpacity=0.1);
        @figure[linkLayer.title](type=text; pos=845,461; anchor=ne; text="link layer");
        @figure[submodules];

        //# Network Layer specs
        bool hasIpv4 = default(true);
        bool hasIpv6 = default(false);
        *.interfaceTableModule = default(absPath(".interfaceTable"));
        *.routingTableModule = default("^.ipv4.routingTable");

        int numIndependentMecApp = default(0);
        int numExtEthInterfaces = default(0);
        string gateway = default("");

    gates:
        inout ppp[];                         // Connection with GtpEndpoint and local/external networks

        output independentMecAppOut[numIndependentMecApp];                   // Connection to the ME App input gate
        input independentMecAppIn[numIndependentMecApp];                     // Connection to the ME App output gate

        output meAppOut[];                   // Connection to the ME App input gate
        input meAppIn[];                     // Connection to the ME App output gate

        inout mecPlatform[];                 // Connection to the MEC Platform

    submodules:

        interfaceTable: InterfaceTable {
            @display("p=61,74;is=s");
        }

        //#
        //# link-layer modules
        //#
        pppIf[sizeof(ppp)]: PppInterface {
            @display("p=736,660");
        }

        // ethernet interface used for communicating with external applications in emulation mode
        extEth[numExtEthInterfaces]: <default("ExtLowerEthernetInterface")> like IEthernetInterface {
            parameters:
                @display("p=326,660,row,150;q=txQueue");
        }
        encap: <default("EthernetEncapsulation")> like IEthernetLayer if typename != "" {
            parameters:
                registerProtocol = true;
                @display("p=326,511");
        }

        lo: <default("LoopbackInterface")> like ILoopbackInterface {
            parameters:
                @display("p=548,660,row,150");
        }

        //#
        //# Network layer module
        //#
        ipv4: <default("Ipv4NetworkLayer")> like INetworkLayer if hasIpv4 {
            parameters:
                @display("p=420,372;q=queue");
        }
        ipv6: <default("Ipv6NetworkLayer")> like INetworkLayer if hasIpv6 {
            parameters:
                @display("p=657,374;q=queue");
        }

        //#
        //# Transport layer modules and corresponding application modules
        //#
        udp: Udp {
            @display("p=460,217");
        }

        tcp: Tcp {
            @display("p=627,217");
        }

        // message dispatcher for SAP between application and transport layer
        at: MessageDispatcher {
            parameters:
                @display("p=550,146;b=600,5,,,,1");
        }
        // message dispatcher for SAP between transport and network layer
        tn: MessageDispatcher {
            parameters:
                @display("p=550,300;b=600,5,,,,1");
        }
        // message dispatcher for SAP to link layer
        nl: MessageDispatcher {
            parameters:
                @display("p=550,446;b=600,5,,,,1");
        }

    connections allowunconnected:

        for i=0..numIndependentMecApp -1 {
            at.out++ --> independentMecAppOut++;
            at.in++ <-- independentMecAppIn++;
        }

        for i=0..sizeof(mecPlatform)-1 {
            at.out++ --> mecPlatform$o[i];
            at.in++ <-- mecPlatform$i[i];
        }

        //#
        //# App layer to transport layer connections
        //#
        at.out++ --> udp.appIn;
        at.in++ <-- udp.appOut;

        at.out++ --> tcp.appIn;
        at.in++ <-- tcp.appOut;


        //#
        //# Transport layer to network layer connections
        //#
        udp.ipOut --> tn.in++;
        udp.ipIn <-- tn.out++;

        tcp.ipOut --> tn.in++;
        tcp.ipIn <-- tn.out++;


        ipv4.ifIn <-- nl.out++ if hasIpv4;
        ipv4.ifOut --> nl.in++ if hasIpv4;

        ipv4.transportIn <-- tn.out++ if hasIpv4;
        ipv4.transportOut --> tn.in++ if hasIpv4;

        //#
        //# Network layer to link layer connections
        //#
        ipv6.ifIn <-- nl.out++ if hasIpv6;
        ipv6.ifOut --> nl.in++ if hasIpv6;

        ipv6.transportIn <-- tn.out++ if hasIpv6;
        ipv6.transportOut --> tn.in++ if hasIpv6;

        for i=0..sizeof(ppp)-1 {
            pppIf[i].upperLayerOut --> nl.in++;
            pppIf[i].upperLayerIn <-- nl.out++;
            pppIf[i].phys <--> ppp++;
        }

        for i=0..numExtEthInterfaces-1 {
            encap.lowerLayerOut --> extEth[i].upperLayerIn;
            encap.lowerLayerIn <-- extEth[i].upperLayerOut;
        }
        encap.upperLayerOut --> nl.in++ if numExtEthInterfaces != 0;
        encap.upperLayerIn <-- nl.out++ if numExtEthInterfaces != 0;

        nl.out++ --> lo.upperLayerIn;
        lo.upperLayerOut --> nl.in++;
}

File: src/simu5g/mec/vi/VirtualisationInfrastructure.ned