Provides Ethernet 802.3 encapsulation/decapsulation and dispatching to the appropriate higher layer by DSAP values.
Expected environment:
Functionality:
Processes commands received from upper layers, as described in Communication between LLC and higher layers. The following commands are supported:
Processing of packets received from the lower layers:
The following diagram shows usage relationships between types. Unresolved types are missing from the diagram.
The following diagram shows inheritance relationships for this type. Unresolved types are missing from the diagram.
Name | Type | Description |
---|---|---|
EtherHost | compound module |
An example host with one Ethernet port and a traffic generator that generates request-reply traffic directly over Ethernet. This host model does not contain higher layer protocols (IP, TCP). By default it is configured to use half-duplex MAC (CSMA/CD). |
Name | Value | Description |
---|---|---|
display | i=block/fork |
Name | Direction | Size | Description |
---|---|---|---|
upperLayerIn [ ] | input |
higher layer |
|
upperLayerOut [ ] | output |
higher layer |
|
lowerLayerIn | input |
to Ethernet MAC |
|
lowerLayerOut | output |
to Ethernet MAC |
Name | Type | Unit |
---|---|---|
passedUpPk | cPacket | |
dsap | long | |
droppedPkUnknownDSAP | cPacket | |
pauseSent | long | |
decapPk | cPacket | |
encapPk | cPacket |
Name | Title | Source | Record | Unit | Interpolation Mode |
---|---|---|---|---|---|
passedUpPk | packets passed up | passedUpPk | count, sum(packetBytes), vector(packetBytes) | none | |
dsap | dsap registering | sum, vector | |||
droppedPkUnknownDSAP | dropped packets unknown DSAP | droppedPkUnknownDSAP | count, sum(packetBytes), vector(packetBytes) | none | |
pauseSent | pause sent | count, vector | |||
decapPk | packets decapsulated | decapPk | count, sum(packetBytes), vector(packetBytes) | none | |
encapPk | packets encapsulated | encapPk | count, sum(packetBytes), vector(packetBytes) | none |
// // Provides Ethernet 802.3 encapsulation/decapsulation and dispatching // to the appropriate higher layer by DSAP values. // // Expected environment: // - lowerLayerIn, lowerLayerOut gates should be connected // to Ethernet ~EtherMAC // - upperLayerIn[], upperLayerOut[] gates should be connected to // higher layer protocols or applications // // Functionality: // // Processes commands received from upper layers, as described in // <a href="llc-app.html">Communication between LLC and higher layers</a>. // The following commands are supported: // - IEEE802CTRL_DATA: send a frame. // Encapsulates packet into ~EtherFrameWithLLC. This includes assigning // dest address, ssap and dsap from the ~Ieee802Ctrl structure acompanying // the message. Src address will be filled in by ~EtherMAC. // - IEEE802CTRL_REGISTER_DSAP: register application in LLC, as described in // <a href="appreg.html">Application registration</a>. // - IEEE802CTRL_DEREGISTER_DSAP: deregister application, as described in // <a href="appreg.html">Application registration</a>. // - IEEE802CTRL_SENDPAUSE: send PAUSE frame, as described in // <a href="ether-pause.html">PAUSE frames</a>. // // Processing of packets received from the lower layers: // - decapsulate frames received from ~EtherMAC // - sends received frames to corresponding application, based on dsap. // - only servicetype=0 is implemented (connectionless) // - reception of non-~EtherFrameWithLLC objects (e.g. ~EthernetIIFrame, // ~EtherFrameWithSNAP) will cause a runtime error. // simple EtherLLC { parameters: @display("i=block/fork"); @signal[dsap](type=long); @signal[encapPk](type=cPacket); @signal[decapPk](type=cPacket); @signal[passedUpPk](type=cPacket); @signal[droppedPkUnknownDSAP](type=cPacket); @signal[pauseSent](type=long); // pause units @statistic[dsap](title="dsap registering"; record=sum,vector); @statistic[encapPk](title="packets encapsulated"; source=encapPk; record=count,"sum(packetBytes)","vector(packetBytes)"; interpolationmode=none); @statistic[decapPk](title="packets decapsulated"; source=decapPk; record=count,"sum(packetBytes)","vector(packetBytes)"; interpolationmode=none); @statistic[passedUpPk](title="packets passed up"; source=passedUpPk; record=count,"sum(packetBytes)","vector(packetBytes)"; interpolationmode=none); @statistic[droppedPkUnknownDSAP](title="dropped packets unknown DSAP"; source=droppedPkUnknownDSAP; record=count,"sum(packetBytes)","vector(packetBytes)"; interpolationmode=none); @statistic[pauseSent](title="pause sent"; record=count,vector); gates: input upperLayerIn[] @labels(Ieee802Ctrl/down); // higher layer output upperLayerOut[] @labels(Ieee802Ctrl/up); // higher layer input lowerLayerIn @labels(EtherFrame); // to Ethernet MAC output lowerLayerOut @labels(EtherFrame); // to Ethernet MAC }