Simple Module EtherLLC

Package: inet.linklayer.ethernet
File: src/inet/linklayer/ethernet/EtherLLC.ned

C++ definition

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:

EtherLLC

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.

Used in compound modules:

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).

Properties:

Name Value Description
display i=block/fork

Gates:

Name Direction Size Description
upperLayerIn [ ] input

higher layer

upperLayerOut [ ] output

higher layer

lowerLayerIn input

to Ethernet MAC

lowerLayerOut output

to Ethernet MAC

Signals:

Name Type Unit
passedUpPk cPacket
dsap long
droppedPkUnknownDSAP cPacket
pauseSent long
decapPk cPacket
encapPk cPacket

Statistics:

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

Source code:

//
// 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
}