Package: inet.linklayer.ethernet
EthernetPlcaInterface
compound moduleImplements a network interface that is suitable for use in Ethernet 10BASE-T1S multidrop links. Such a multidrop link uses the Ethernet Phyisical Layer Collision Avoidance (PLCA) protocol. The protocol is defined in the IEEE 802.3cg-2019 standard. This network interface can be used in any network node module (e.g. ~StandardHost) that allows replacing its network interfaces. All network interfaces on the same multidrop link must use this module.
Contains separate Ethernet MAC, Ethernet PLCA, and Ethernet PHY protocol modules. If the PLCA module is omitted, then this module implements a half-duplex Ethernet CSMA/CD network interface. If the PLCA module is present, then this module implements an Ethernet 10BASE-T1S network interface that supports multidrop links. In a multidrop link network nodes can be connected using ~WireJunction modules and ~EthernetLink channels.
<b>See also:</b> ~EthernetPlcaHost, ~EthernetPlca, ~EthernetCsmaMac, ~EthernetCsmaPhy, ~EthernetLink, ~WireJunction
Usage diagram
The following diagram shows usage relationships between types. Unresolved types are missing from the diagram.
Inheritance diagram
The following diagram shows inheritance relationships for this type. Unresolved types are missing from the diagram.
Extends
| Name | Type | Description |
|---|---|---|
| NetworkInterface | 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 | |
| interfaceTableModule | string | ||
| protocol | string | "ethernetmac" | |
| address | string | "auto" |
MAC address as hex string (12 hex digits), or "auto". "auto" values will be replaced by a generated MAC address in init stage 0. |
| bitrate | double | 0bps | |
| fcsMode | string | "declared" |
Properties
| Name | Value | Description |
|---|---|---|
| class | NetworkInterface | |
| networkInterface | ||
| lifecycleSupport | ||
| display | i=block/ifcard |
Gates
| Name | Direction | Size | Description |
|---|---|---|---|
| upperLayerIn | input | ||
| upperLayerOut | 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 |
| mac.displayStringTextFormat | string | "" |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
| mac.interfaceTableModule | string | ||
| mac.promiscuous | bool | false |
if true, all packets are received, otherwise only the ones with matching destination MAC address |
| mac.mtu | int | 1500B | |
| mac.fcsMode | string | ||
| phy.displayStringTextFormat | string | "" |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
Source code
// // Implements a network interface that is suitable for use in Ethernet // 10BASE-T1S multidrop links. Such a multidrop link uses the Ethernet Phyisical // Layer Collision Avoidance (PLCA) protocol. The protocol is defined in the IEEE // 802.3cg-2019 standard. This network interface can be used in any network node // module (e.g. ~StandardHost) that allows replacing its network interfaces. All // network interfaces on the same multidrop link must use this module. // // Contains separate Ethernet MAC, Ethernet PLCA, and Ethernet PHY // protocol modules. If the PLCA module is omitted, then this module implements // a half-duplex Ethernet CSMA/CD network interface. If the PLCA module is present, // then this module implements an Ethernet 10BASE-T1S network interface that // supports multidrop links. In a multidrop link network nodes can be connected // using ~WireJunction modules and ~EthernetLink channels. // // @see ~EthernetPlcaHost, ~EthernetPlca, ~EthernetCsmaMac, ~EthernetCsmaPhy, ~EthernetLink, ~WireJunction // module EthernetPlcaInterface extends NetworkInterface like IEthernetInterface { parameters: string interfaceTableModule; string protocol = default("ethernetmac"); string address @mutable = default("auto"); // MAC address as hex string (12 hex digits), or // "auto". "auto" values will be replaced by // a generated MAC address in init stage 0. double bitrate @unit(bps) = default(0bps); string fcsMode @enum("declared","computed") = default("declared"); *.interfaceTableModule = default(absPath(this.interfaceTableModule)); *.fcsMode = this.fcsMode; gates: input upperLayerIn; output upperLayerOut; inout phys @labels(EthernetSignal); submodules: egressTC: <default("")> like ITrafficConditioner { parameters: @display("p=300,100"); } ingressTC: <default("")> like ITrafficConditioner { parameters: @display("i=block/uparrow;p=700,100"); } queue: <default("EthernetQueue")> like IPacketQueue { parameters: packetCapacity = default(1000); @display("p=300,250"); } mac: EthernetCsmaMac { parameters: @display("p=500,300"); } plca: <default("EthernetPlca")> like IProtocolLayer { parameters: @display("p=500,450"); } phy: EthernetCsmaPhy { parameters: @display("p=500,600"); } connections: upperLayerIn --> { @display("m=n"); } --> egressTC.in; egressTC.out --> queue.in; queue.out --> mac.upperLayerIn; mac.lowerLayerOut --> plca.upperLayerIn; plca.lowerLayerOut --> phy.upperLayerIn; phy.upperLayerOut --> plca.lowerLayerIn; plca.upperLayerOut --> mac.lowerLayerIn; phy.phys <--> { @display("m=s"); } <--> phys; mac.upperLayerOut --> ingressTC.in; ingressTC.out --> { @display("m=n"); } --> upperLayerOut; }File: src/inet/linklayer/ethernet/EthernetPlcaInterface.ned