LayeredEthernetInterface¶
Package: inet.linklayer.ethernet.modular
compound module LayeredEthernetInterface
Implements an Ethernet network interface.
Usage diagram¶
Inheritance diagram¶
Known subclasses¶
Name |
Type |
Description |
|---|---|---|
compound module |
Represents an Ethernet network interface with Ethernet cut-through switching support. In contrast with store-and-forward switching, Ethernet cut-through switching can begin the transmission of the outgoing packet before the reception of the corresponding incoming packet ends. Ethernet cut-through switching can significantly reduce end-to-end delay in the network. |
Extends¶
Name |
Type |
Description |
|---|---|---|
compound module |
Serves as the base module for all network interfaces. |
Parameters¶
Name |
Type |
Default value |
Description |
|---|---|---|---|
displayStringTextFormat |
string |
“%a (%i)\n%m” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
recordPcap |
bool |
false |
|
numPcapRecorders |
int |
recordPcap ? 1 : 0 |
|
protocol |
string |
“ethernetmac” |
|
broadcast |
bool |
true |
|
multicast |
bool |
true |
|
address |
string |
“auto” |
|
bitrate |
double |
||
mtu |
int |
1500B |
|
interfaceTableModule |
string |
Properties¶
Name |
Value |
Description |
|---|---|---|
class |
NetworkInterface |
|
display |
i=block/ifcard |
|
lifecycleSupport |
||
networkInterface |
Gates¶
Name |
Direction |
Size |
Description |
|---|---|---|---|
upperLayerIn |
input |
||
upperLayerOut |
output |
||
cutthroughIn |
input |
||
cutthroughOut |
output |
||
phys |
inout |
Signals¶
Name |
Type |
Unit |
Description |
|---|---|---|---|
packetDropped |
Statistics¶
Name |
Title |
Source |
Record |
Unit |
Interpolation Mode |
Description |
|---|---|---|---|---|---|---|
packetDropInterfaceDown |
packet drops: interface down |
packetDropReasonIsInterfaceDown(packetDropped) |
count,sum(packetBytes),vector(packetBytes) |
none |
||
packetDropNoCarrier |
packet drops: no carrier |
packetDropReasonIsNoCarrier(packetDropped) |
count,sum(packetBytes),vector(packetBytes) |
none |
Unassigned submodule parameters¶
Name |
Type |
Default value |
Description |
|---|---|---|---|
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 |
pcapRecorder.verbose |
bool |
true |
Whether to log packets on the module output |
pcapRecorder.recordEmptyPackets |
bool |
true |
Specifies if zero length packets are recorded or not |
pcapRecorder.enableConvertingPackets |
bool |
true |
Specifies if converting packets to link type is allowed or not |
pcapRecorder.pcapFile |
string |
“” |
The PCAP file to be written, suggested value: pcapFile = “${resultdir}/${configname}-#${runnumber}” + fullpath() + “.pcap” |
pcapRecorder.fileFormat |
string |
“pcapng” |
|
pcapRecorder.snaplen |
int |
65535 |
Maximum number of bytes to record per packet |
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). |
pcapRecorder.dumpBadFrames |
bool |
true |
Enable dump of frames with hasBitError |
pcapRecorder.sendingSignalNames |
string |
“transmissionEnded” |
Space-separated list of outbound packet signals to subscribe to |
pcapRecorder.receivingSignalNames |
string |
“receptionEnded” |
Space-separated list of inbound packet signals to subscribe to |
pcapRecorder.dumpProtocols |
string |
“ethernetmac ppp ieee80211mac” |
Space-separated list of protocol names as defined in the Protocol class |
pcapRecorder.packetFilter |
object |
“*” |
Which packets are considered, matches all packets by default |
pcapRecorder.helpers |
string |
“” |
Usable PcapRecorder::IHelper helpers for accept packettype and store/convert packet as specified linktype |
pcapRecorder.alwaysFlush |
bool |
false |
Flush the pcapFile after each write to ensure that all packets are captured in case of a crash |
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 |
|
int |
-1 |
Maximum number of packets in the queue, no limit by default |
|
int |
-1b |
Maximum total length of packets in the queue, no limit by default |
|
string |
“” |
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 |
|
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 |
|
string |
“” |
Relative module path to the IPacketBuffer module used by this queue, implicit buffer by default |
|
string |
“served %p pk (%l)” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
|
int |
0 |
Specifies the FES scheduling priority for the extra event that is pulling the packet, -1 means no extra event |
|
macLayer.outboundEmitter.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 |
macLayer.outboundEmitter.packetFilter |
object |
“*” |
Which packets are considered, matches all packets by default |
macLayer.outboundEmitter.direction |
string |
“undefined” |
|
macLayer.outboundEmitter.signalName |
string |
||
macLayer.fcsChecker.displayStringTextFormat |
string |
“dropped {numDroppedPackets}/{numProcessedPackets} pk ({droppedTotalLength}/{processedTotalLength})” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
macLayer.fcsChecker.backpressure |
bool |
false |
|
macLayer.fcsChecker.popFcs |
bool |
false |
|
macLayer.inboundEmitter.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 |
macLayer.inboundEmitter.packetFilter |
object |
“*” |
Which packets are considered, matches all packets by default |
macLayer.inboundEmitter.direction |
string |
“undefined” |
|
macLayer.inboundEmitter.signalName |
string |
||
phyLayer.phyHeaderInserter.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 |
phyLayer.interFrameGapInserter.displayStringTextFormat |
string |
“delayed %p pk (%l)\nifg: %g” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
phyLayer.interFrameGapInserter.clockModule |
string |
“” |
Relative path of a module that implements IClock(1,:ref:2 <neddoc-msg-inet-iclock>); optional |
phyLayer.interFrameGapInserter.initialChannelBusy |
bool |
false |
Assume that the channel was busy before the simulation started |
phyLayer.interFrameGapInserter.duration |
double |
96s / dropUnit(parent.bitrate) |
|
phyLayer.outboundEmitter.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 |
phyLayer.outboundEmitter.packetFilter |
object |
“*” |
Which packets are considered, matches all packets by default |
phyLayer.outboundEmitter.direction |
string |
“undefined” |
|
phyLayer.outboundEmitter.signalName |
string |
||
phyLayer.transmitter.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 |
phyLayer.transmitter.clockModule |
string |
“” |
Relative path of a module that implements IClock(1,:ref:2 <neddoc-msg-inet-iclock>); optional |
phyLayer.transmitter.datarate |
double |
parent.bitrate |
|
phyLayer.phyHeaderChecker.displayStringTextFormat |
string |
“dropped {numDroppedPackets}/{numProcessedPackets} pk ({droppedTotalLength}/{processedTotalLength})” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
phyLayer.phyHeaderChecker.backpressure |
bool |
false |
|
phyLayer.inboundEmitter.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 |
phyLayer.inboundEmitter.packetFilter |
object |
“*” |
Which packets are considered, matches all packets by default |
phyLayer.inboundEmitter.direction |
string |
“undefined” |
|
phyLayer.inboundEmitter.signalName |
string |
||
string |
“processed {numProcessedPackets} pk ({processedTotalLength})” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
|
double |
parent.bitrate |
Source code¶
//
// Implements an Ethernet network interface.
//
module LayeredEthernetInterface extends NetworkInterface like IEthernetInterface
{
parameters:
string protocol = default("ethernetmac");
bool broadcast = default(true);
bool multicast = default(true);
string address @mutable = default("auto");
double bitrate @unit(bps);
int mtu @unit(B) = default(1500B);
string interfaceTableModule;
*.bitrate = default(this.bitrate);
gates:
input upperLayerIn;
output upperLayerOut;
input cutthroughIn @loose;
output cutthroughOut @loose;
inout phys @labels(EthernetSignal);
submodules:
processingDelayLayer: <default("")> like IProcessingDelayLayer {
parameters:
@display("p=400,100");
}
trafficConditionerLayer: <default("")> like ITrafficConditionerLayer {
parameters:
@display("p=400,200");
}
measurementLayer: <default("")> like IMeasurementLayer {
parameters:
@display("p=400,300");
}
macLayer: <default("EthernetMacLayer")> like IEthernetMacLayer {
parameters:
@display("p=400,400");
}
phyLayer: <default("EthernetPhyLayer")> like IEthernetPhyLayer {
parameters:
transmitter.clockModule = default("");
@display("p=400,500");
}
connections allowunconnected:
upperLayerIn --> { @display("m=n"); } --> processingDelayLayer.upperLayerIn;
processingDelayLayer.lowerLayerOut --> trafficConditionerLayer.upperLayerIn;
trafficConditionerLayer.lowerLayerOut --> measurementLayer.upperLayerIn;
measurementLayer.lowerLayerOut --> macLayer.upperLayerIn;
macLayer.lowerLayerOut --> phyLayer.upperLayerIn;
phyLayer.lowerLayerOut --> { @display("m=s"); } --> phys$o;
phys$i --> { @display("m=s"); } --> phyLayer.lowerLayerIn;
phyLayer.upperLayerOut --> macLayer.lowerLayerIn;
macLayer.upperLayerOut --> measurementLayer.lowerLayerIn;
measurementLayer.upperLayerOut --> trafficConditionerLayer.lowerLayerIn;
trafficConditionerLayer.upperLayerOut --> processingDelayLayer.lowerLayerIn;
processingDelayLayer.upperLayerOut --> { @display("m=n"); } --> upperLayerOut;
}
File: src/inet/linklayer/ethernet/modular/LayeredEthernetInterface.ned