Package: inet.linklayer.ethernet.modular
EthernetCutthroughInterface
compound moduleRepresents 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.
There are some important limitations with the current Ethernet cut-through switching implementation:
- FCS is not checked for cut-through packets in Ethernet switches
- packet data cannot be changed for cut-through packets in Ethernet switches
- Ethernet frame preemption is not supported with cut-through packets
The Ethernet FCS is simply forwarded as it is for cut-through packets. Moreover, the packet data cannot be changed inside the Ethernet switch, because it would imply changing the FCS of the packet. Changing the FCS of the packet would require checking the current FCS and aborting incorrect frames. The Ethernet cut-through implementation also assumes that transmissions are not updated on the channel as is the case for Ethernet frame preemption. The packet contents at the start of the reception are the same as the packet contents at the end of the reception.
The main reason for these limitations is that with Ethernet cut-through switching a received packet can reach far away both inside the network node and also in the network, and the current architecture doesn't support updating this process.
Inheritance diagram
The following diagram shows inheritance relationships for this type. Unresolved types are missing from the diagram.
Extends
| Name | Type | Description |
|---|---|---|
| LayeredEthernetInterface | compound module |
Implements an Ethernet network interface. |
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 | ||
| macTableModule | string |
Properties
| Name | Value | Description |
|---|---|---|
| class | NetworkInterface | |
| networkInterface | ||
| lifecycleSupport | ||
| display | i=block/ifcard |
Gates
| Name | Direction | Size | Description |
|---|---|---|---|
| upperLayerIn | input | ||
| upperLayerOut | output | ||
| cutthroughIn | input | ||
| cutthroughOut | output | ||
| phys | inout |
Signals
| Name | Type | Unit | Description |
|---|---|---|---|
| packetDropped | inet::Packet |
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 currently available: "inet::AckingMacToEthernetPcapRecorderHelper" |
| pcapRecorder.alwaysFlush | bool | false |
Flush the pcapFile after each write to ensure that all packets are captured in case of a crash |
Source code
// // 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. // // There are some important limitations with the current Ethernet cut-through // switching implementation: // - FCS is not checked for cut-through packets in Ethernet switches // - packet data cannot be changed for cut-through packets in Ethernet switches // - Ethernet frame preemption is not supported with cut-through packets // // The Ethernet FCS is simply forwarded as it is for cut-through packets. Moreover, // the packet data cannot be changed inside the Ethernet switch, because it would // imply changing the FCS of the packet. Changing the FCS of the packet would // require checking the current FCS and aborting incorrect frames. The Ethernet // cut-through implementation also assumes that transmissions are not updated on // the channel as is the case for Ethernet frame preemption. The packet contents // at the start of the reception are the same as the packet contents at the end of // the reception. // // The main reason for these limitations is that with Ethernet cut-through // switching a received packet can reach far away both inside the network node // and also in the network, and the current architecture doesn't support updating // this process. // module EthernetCutthroughInterface extends LayeredEthernetInterface { parameters: string macTableModule; *.bitrate = default(this.bitrate); *.macTableModule = default(this.macTableModule); phyLayer.typename = default("EthernetStreamThroughPhyLayer"); phyLayer.cutthroughSource.typename = default("EthernetCutthroughSource"); phyLayer.cutthroughSink.typename = default("EthernetCutthroughSink"); }File: src/inet/linklayer/ethernet/modular/EthernetCutthroughInterface.ned