Package: inet.physicallayer.wired.ethernet
EthernetCsmaPhy
simple moduleImplements the Ethernet CSMA/CD PHY protocol. It supports building both Ethernet CSMA/CD and Ethernet PLCA network interfaces.
This module detects the carrier signal and collisions on the channel. Frames are received correctly if there are no overlapping transmissions or receptions. It also supports sending special Ethernet signals: jam, commit, and beacon.
The upper layer must be connected to a module implementing the ~IEthernetCsmaMac C++ interface. There are two such modules: ~EthernetCsmaMac and ~EthernetPlca. The former can be used to build an Ethernet CSMA/CD network interface, the latter can be used to build an Ethernet PLCA network interface.
<b>See also:</b> ~EthernetCsmaPhy, ~EthernetPlca, ~EthernetPlcaInterface
Inheritance diagram
The following diagram shows inheritance relationships for this type. Unresolved types are missing from the diagram.
Used in compound modules
| Name | Type | Description |
|---|---|---|
| EthernetPlcaInterface | compound module |
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. |
Extends
| Name | Type | Description |
|---|---|---|
| SimpleModule | simple module |
Base module for all INET simple modules. |
Parameters
| Name | Type | Default value | Description |
|---|---|---|---|
| displayStringTextFormat | string | "" |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
Properties
| Name | Value | Description |
|---|---|---|
| class | EthernetCsmaPhy | |
| display | i=block/rxtx |
Gates
| Name | Direction | Size | Description |
|---|---|---|---|
| upperLayerIn | input | ||
| upperLayerOut | output | ||
| phys | inout |
Signals
| Name | Type | Unit | Description |
|---|---|---|---|
| receptionEnded | inet::physicallayer::EthernetSignalBase |
emitted at the reception end, the value is the Ethernet signal being received |
|
| transmissionStarted | inet::physicallayer::EthernetSignalBase |
emitted at the transmission start, the value is the Ethernet signal being transmitted |
|
| receptionStarted | inet::physicallayer::EthernetSignalBase |
emitted at the reception start, the value is the Ethernet signal being received |
|
| receivedSignalType | int |
emitted when the type of the received signal changes, the value is one of NONE, BEACON, COMMIT, DATA, JAM |
|
| busUsed | int |
emitted when the bus usage changes, the value is 1 if DATA transmission or reception is in progress, 0 otherwise |
|
| stateChanged | int |
emitted when the state of the state machine changes, the value is one of IDLE, TRANSMITTING, RECEIVING, COLLISION, CRS_ON |
|
| transmittedSignalType | int |
emitted when the type of the transmitted signal changes, the value is one of NONE, BEACON, COMMIT, DATA, JAM |
|
| transmissionEnded | inet::physicallayer::EthernetSignalBase |
emitted at the transmission end, the value is the Ethernet signal being transmitted |
Statistics
| Name | Title | Source | Record | Unit | Interpolation Mode | Description |
|---|---|---|---|---|---|---|
| transmissionTime | transmission time | packetDuration(transmissionEnded) | vector, histogram | s | none | |
| receivedSignalType | received signal type | count, vector | sample-hold | |||
| transmitting | transmitting state | count(transmissionStarted) - count(transmissionEnded) | vector | sample-hold | ||
| propagationTime | propagation time | s | ||||
| busUtilization | bus utilization | utilization(busUsed) | count, vector | linear |
periodically calculated average bus usage, the value 1 means there was a DATA signal on the bus during the whole period, 0 means there was no DATA signal |
|
| state | state | stateChanged | count, vector | sample-hold |
the time evolution of the state of the state machine |
|
| throughput | throughput | throughput(transmissionEnded) | vector, histogram | bps | linear | |
| busUsed | bus used | count, vector | sample-hold |
the time evolution of the bus used signal |
||
| transmittedSignalType | transmitted signal type | count, vector | sample-hold |
Source code
// // Implements the Ethernet CSMA/CD PHY protocol. It supports building // both Ethernet CSMA/CD and Ethernet PLCA network interfaces. // // This module detects the carrier signal and collisions on the channel. Frames // are received correctly if there are no overlapping transmissions or receptions. // It also supports sending special Ethernet signals: jam, commit, and beacon. // // The upper layer must be connected to a module implementing the ~IEthernetCsmaMac // C++ interface. There are two such modules: ~EthernetCsmaMac and ~EthernetPlca. // The former can be used to build an Ethernet CSMA/CD network interface, the // latter can be used to build an Ethernet PLCA network interface. // // @see ~EthernetCsmaPhy, ~EthernetPlca, ~EthernetPlcaInterface // simple EthernetCsmaPhy extends SimpleModule { parameters: @class(EthernetCsmaPhy); // emitted when the state of the state machine changes, the value is one of IDLE, TRANSMITTING, RECEIVING, COLLISION, CRS_ON @signal[stateChanged](type=int); // emitted when the type of the received signal changes, the value is one of NONE, BEACON, COMMIT, DATA, JAM @signal[receivedSignalType](type=int); // emitted when the type of the transmitted signal changes, the value is one of NONE, BEACON, COMMIT, DATA, JAM @signal[transmittedSignalType](type=int); // emitted at the reception start, the value is the Ethernet signal being received @signal[receptionStarted](type=inet::physicallayer::EthernetSignalBase); // emitted at the reception end, the value is the Ethernet signal being received @signal[receptionEnded](type=inet::physicallayer::EthernetSignalBase); // emitted at the transmission start, the value is the Ethernet signal being transmitted @signal[transmissionStarted](type=inet::physicallayer::EthernetSignalBase); // emitted at the transmission end, the value is the Ethernet signal being transmitted @signal[transmissionEnded](type=inet::physicallayer::EthernetSignalBase); // emitted when the bus usage changes, the value is 1 if DATA transmission or reception is in progress, 0 otherwise @signal[busUsed](type=int); // the time evolution of the state of the state machine @statistic[state](title="state"; type=enum; enum=IDLE,TRANSMITTING,RECEIVING,COLLISION,CRS_ON; source=stateChanged; record=count,vector; interpolationmode=sample-hold); @statistic[receivedSignalType](title="received signal type"; type=enum; enum=NONE,BEACON,COMMIT,DATA,JAM; record=count,vector; interpolationmode=sample-hold); @statistic[transmittedSignalType](title="transmitted signal type"; type=enum; enum=NONE,BEACON,COMMIT,DATA,JAM; record=count,vector; interpolationmode=sample-hold); @statistic[transmitting](title="transmitting state"; type=int; source=count(transmissionStarted) - count(transmissionEnded); record=vector; interpolationmode=sample-hold); @statistic[throughput](title="throughput"; unit=bps; source=throughput(transmissionEnded); record=vector,histogram; interpolationmode=linear); @statistic[propagationTime](title="propagation time"; unit=s); @statistic[transmissionTime](title="transmission time"; unit=s; source=packetDuration(transmissionEnded); record=vector,histogram; interpolationmode=none); // the time evolution of the bus used signal @statistic[busUsed](title="bus used"; record=count,vector; interpolationmode=sample-hold); // periodically calculated average bus usage, the value 1 means there was a DATA signal on the bus during the whole period, 0 means there was no DATA signal @statistic[busUtilization](title="bus utilization"; source=utilization(busUsed); record=count,vector; interpolationmode=linear); @display("i=block/rxtx"); gates: input upperLayerIn @labels(EtherFrame); output upperLayerOut @labels(EtherFrame); inout phys @labels(EthernetSignal); }File: src/inet/physicallayer/wired/ethernet/EthernetCsmaPhy.ned