EthernetPlcaInterface¶
Package: inet.linklayer.ethernet
compound module EthernetPlcaInterface
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 also: EthernetPlcaHost, EthernetPlca, EthernetCsmaMac, EthernetCsmaPhy, EthernetLink, WireJunction
Usage diagram¶
Inheritance diagram¶
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 |
|
interfaceTableModule |
string |
||
protocol |
string |
“ethernetmac” |
|
address |
string |
“auto” |
MAC address as hex string (12 hex digits), or |
bitrate |
double |
0bps |
“auto”. “auto” values will be replaced by a generated MAC address in init stage 0. |
fcsMode |
string |
“declared” |
Properties¶
Name |
Value |
Description |
|---|---|---|
class |
NetworkInterface |
|
display |
i=block/ifcard |
|
lifecycleSupport |
||
networkInterface |
Gates¶
Name |
Direction |
Size |
Description |
|---|---|---|---|
upperLayerIn |
input |
||
upperLayerOut |
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 |
mac.displayStringTextFormat |
string |
“{fsmState}” |
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 |
mac.mtu |
int |
1500B |
ones with matching destination MAC address |
mac.fcsMode |
string |
||
plca.displayStringTextFormat |
string |
“{curID}/{plca_node_count} ({local_nodeID})\n{controlFsmState} - {dataFsmState}” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
plca.plca_node_count |
int |
Maximum number of PLCA nodes on the mixing segment receiving transmit opportunities before the node with local_nodeID = 0 generates a new BEACON. |
|
plca.local_nodeID |
int |
ID representing the PLCA transmit opportunity number assigned to the node. |
|
plca.max_bc |
int |
0 |
Maximum number of additional packets the node is allowed to transmit in a single burst. |
plca.delay_line_length |
int |
100 |
The maximum number of nibbles that the PLCA RS variable delay line can hold. |
plca.to_timer_length |
int |
32b |
The transmit opportunity timer should be set equal across the mixing segment for PLCA to work properly. |
plca.burst_timer_length |
int |
128b |
This timer determines how long to wait for the MAC to send a new packet before yielding the transmit opportunity. For PLCA burst mode to work properly this timer should be set greater than one IPG. |
plca.beacon_timer_length |
int |
20b |
Times the duration of the BEACON signal. |
plca.beacon_det_timer_length |
int |
22b |
Timer for detecting received BEACONs. |
plca.pending_timer_length |
int |
512b |
Defines the time the PLCA Data state diagram waits in the DELAY_PENDING state before switching to PENDING state. |
plca.commit_timer_length |
int |
288b |
Defines the maximum time the PLCA Data state machine is allowed to stay in WAIT_MAC state. |
phy.displayStringTextFormat |
string |
“{fsmState}” |
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;
}