Package: inet.linklayer.ethernet.basic
EthernetEncapsulation
simple modulePerforms Ethernet II or Ethernet with LLC/SNAP encapsulation/decapsulation.
Expected environment:
- lowerLayerIn, lowerLayerOut gates should be connected to an EthernetCsmaMac
- 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 EthernetCsmaMac.
- also accepts SENDPAUSE command (message kind=IEEE802CTRL_SENDPAUSE) from higher layer: it will send a PAUSE frame, as described in PAUSE frames.
- Ethernet frames arriving from MAC will be decapsulated, and sent up to the higher layers. Accepts EthernetMacHeader, Ieee8022LlcHeader, and Ieee8022LlcSnapHeader too.
Inheritance diagram
The following diagram shows inheritance relationships for this type. Unresolved types are missing from the diagram.
Parameters
Name | Type | Default value | Description |
---|---|---|---|
registerProtocol | bool | false |
FIXME //KLUDGE should redesign place of EthernetEncapsulation and LLC modules |
interfaceTableModule | string |
The path to the InterfaceTable module |
|
fcsMode | string | "declared" | |
stopOperationExtraTime | double | -1s |
extra time after lifecycle stop operation finished |
stopOperationTimeout | double | 2s |
timeout value for lifecycle stop operation |
Properties
Name | Value | Description |
---|---|---|
lifecycleSupport | ||
class | EthernetEncapsulation | |
display | i=block/layer |
Gates
Name | Direction | Size | Description |
---|---|---|---|
upperLayerIn | input |
TODO accepts packets and socket commands with @messageKinds(inet::SocketCommandCode), too |
|
upperLayerOut | output |
TODO sends packets and socket indications with @messageKinds(inet::SocketStatusInd), too |
|
lowerLayerIn | input | ||
lowerLayerOut | output |
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 |
Direct method calls (observed)
call to | function | info |
---|---|---|
MessageDispatcher | inet::MessageDispatcher::arrived | arrived |
MessageDispatcher | inet::MessageDispatcher::handleRegisterProtocol | handleRegisterProtocol |
MessageDispatcher | inet::MessageDispatcher::handleRegisterService | handleRegisterService |
Ieee8022Llc | inet::Ieee8022Llc::handleRegisterService | handleRegisterService |
Called methods (observed)
function | info | call from |
---|---|---|
inet::EthernetEncapsulation::handleOperationStage | handleOperationStage | ScenarioManager |
inet::EthernetEncapsulation::handleRegisterAnyProtocol | handleRegisterAnyProtocol | MessageDispatcher |
inet::EthernetEncapsulation::handleRegisterProtocol | handleRegisterProtocol | MessageDispatcher, Ieee8022Llc |
inet::EthernetEncapsulation::handleRegisterService | handleRegisterService | MessageDispatcher |
Incoming messages (observed)
Outgoing messages (observed)
Packet operations (observed)
chunkType | packetAction |
---|---|
setBackOffset | |
EthernetFcs | insertAtBack, popAtBack |
EthernetMacHeader | insertAtFront, popAtFront |
Shared Tagging operations (observed)
tagType | tagAction |
---|---|
DispatchProtocolReq | addTagIfAbsent, removeTagIfPresent |
InterfaceInd | getTag |
InterfaceReq | getTag |
MacAddressInd | addTagIfAbsent |
MacAddressReq | getTag |
PacketProtocolTag | addTagIfAbsent |
Source code
// // Performs Ethernet II or Ethernet with LLC/SNAP encapsulation/decapsulation. // // Expected environment: // - lowerLayerIn, lowerLayerOut gates should be connected to an ~EthernetCsmaMac // - 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 ~EthernetCsmaMac. // - 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 EthernetEncapsulation like IEthernetLayer { parameters: bool registerProtocol = default(false); //FIXME //KLUDGE should redesign place of EthernetEncapsulation and LLC modules string interfaceTableModule; // The path to the InterfaceTable module string fcsMode @enum("declared","computed") = default("declared"); @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 @class(EthernetEncapsulation); @display("i=block/layer"); @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; // TODO accepts packets and socket commands with @messageKinds(inet::SocketCommandCode), too output upperLayerOut; // TODO sends packets and socket indications with @messageKinds(inet::SocketStatusInd), too input lowerLayerIn; output lowerLayerOut; }File: src/inet/linklayer/ethernet/basic/EthernetEncapsulation.ned