EtherEncap

Package: inet.linklayer.ethernet

EtherEncap

simple module

Performs Ethernet II or Ethernet with LLC/SNAP encapsulation/decapsulation.

Expected environment:

  • lowerLayerIn, lowerLayerOut gates should be connected to an EtherMac
  • upperLayerIn, upperLayerOut gates should be connected to higher layer protocol or application

Functionality:

EtherEncap

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

Parameters

Name Type Default value Description
interfaceTableModule string

The path to the InterfaceTable module

useSNAP bool false

create EtherFrameWithSNAP frames instead of EthernetIIFrame

fcsMode string
registerProtocol bool false

FIXME //KLUDGE should redesign place of EtherEncap and LLC modules

stopOperationExtraTime double -1s

extra time after lifecycle stop operation finished

stopOperationTimeout double 2s

timeout value for lifecycle stop operation

Properties

Name Value Description
lifecycleSupport
display i=block/square

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
pauseSent long
decapPk cPacket
packetDropped inet::Packet
encapPk cPacket

Statistics

Name Title Source Record Unit Interpolation Mode
pauseSent pause sent count, sum, vector
decapPk packets decapsulated decapPk count, sum(packetBytes), vector(packetBytes) none
encapPk packets encapsulated encapPk count, sum(packetBytes), vector(packetBytes) none

Source code

//
// Performs Ethernet II or Ethernet with LLC/SNAP encapsulation/decapsulation.
//
// Expected environment:
// - lowerLayerIn, lowerLayerOut gates should be connected to an ~EtherMac
// - upperLayerIn, upperLayerOut gates should be connected to higher layer
//   protocol or application
//
// Functionality:
// - packets coming from upper layers will be encapsulated in EthernetII frame
//   (~EthernetMacHeader) or Ethernet SNAP frame (~Ieee8022LlcSnapHeader)
//   depending on the useSNAP module parameter,
//   and sent to MAC. The ~EtherType is taken from the ~PacketProtocolTag tag
//   attached to the packet. The source address will be filled in by ~EtherMac.
// - also accepts SENDPAUSE command (message kind=IEEE802CTRL_SENDPAUSE) from
//   higher layer: it will send a PAUSE frame, as described in
//   <a href="ether-pause.html">PAUSE frames</a>.
// - Ethernet frames arriving from MAC will be decapsulated, and sent up to the
//   higher layers. Accepts ~EthernetMacHeader, ~Ieee8022LlcHeader, and
//   ~Ieee8022LlcSnapHeader too.
//
simple EtherEncap like IEtherEncap
{
    parameters:
        string interfaceTableModule;   // The path to the InterfaceTable module
        bool useSNAP = default(false);  // create EtherFrameWithSNAP frames instead of EthernetIIFrame
        string fcsMode @enum("declared","computed");
        bool registerProtocol = default(false);     //FIXME //KLUDGE should redesign place of EtherEncap and LLC modules
        @lifecycleSupport;
        double stopOperationExtraTime @unit(s) = default(-1s);    // extra time after lifecycle stop operation finished
        double stopOperationTimeout @unit(s) = default(2s);    // timeout value for lifecycle stop operation
        @display("i=block/square");
        @signal[encapPk](type=cPacket);
        @signal[decapPk](type=cPacket);
        @signal[pauseSent](type=long); // pause units
        @signal[packetDropped](type=inet::Packet);
        @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[pauseSent](title="pause sent"; record=count,sum,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
}

File: src/inet/linklayer/ethernet/EtherEncap.ned