IEtherMac

Package: inet.linklayer.contract

IEtherMac

module interface

Interface for Ethernet MAC implementations. All Ethernet MAC implementations should implement this (i.e. declared as: EthernetCsmaMac like IEtherMac). The existing implementations are these: EthernetCsmaMac and EthernetMac.

Doesn't do encapsulation/decapsulation; see EthernetEncapsulation for that.

Expected environment:

  • phys$i and phys$o should be connected to the "network"
  • upperLayerIn and upperLayerOut are usually connected to EthernetEncapsulation (in hosts) or IMacRelayUnit (in a switch)

The module does not perform encapsulation or decapsulation of frames -- this is done by higher layers (EthernetEncapsulation).

When a frame is received from the higher layers, it must be an Ethernet frame, and with all protocol fields filled out (including the destination MAC address). The source address, if left empty, will be filled in. Then the frame is queued and transmitted according to the CSMA/CD protocol.

Data frames received from the network are Ethernet frames. They are passed to the higher layers without modification.

Also, the module properly responds to PAUSE frames, but never sends them by itself -- however, it transmits PAUSE frames received from upper layers. See PAUSE handling for more info.

Inheritance diagram

The following diagram shows inheritance relationships for this type. Unresolved types are missing from the diagram.

Implemented by

Name Type Description
EthernetCsmaMac compound module

Ethernet MAC layer. MAC performs transmission and reception of frames. See the IEtherMac for the Ethernet MAC layer general informations. Doesn't do encapsulation/decapsulation; see Ieee8022Llc and EthernetEncapsulation for that.

EthernetMac compound module

Ethernet MAC which supports full-duplex operation ONLY. See the IEtherMac for general informations.

Used in compound modules

Name Type Description
EthernetInterface compound module

This module represents an Ethernet network interface.

ExtUpperEthernetInterface compound module

This module provides an Ethernet network interface suitable for emulation. The upper part of the network interface is realized in the real world using a real TAP device of the host computer which is running the simulation.

Parameters

Name Type Default value Description
promiscuous bool

if true, all packets are received, otherwise only the ones with matching destination MAC address

duplexMode bool

selects full-duplex (true) or half-duplex (false) operation

mtu int

Properties

Name Value Description
display i=block/rxtx

Source code

//
// Interface for Ethernet MAC implementations. All Ethernet MAC implementations
// should implement this (i.e. declared as: EthernetCsmaMac like IEtherMac).
// The existing implementations are these: ~EthernetCsmaMac and ~EthernetMac.
//
// Doesn't do encapsulation/decapsulation; see ~EthernetEncapsulation for that.
//
// Expected environment:
// - phys$i and phys$o should be connected to the "network"
// - upperLayerIn and upperLayerOut are usually connected to ~EthernetEncapsulation (in hosts)
//   or ~IMacRelayUnit (in a switch)
//
// The module does not perform encapsulation or decapsulation of frames --
// this is done by higher layers (~EthernetEncapsulation).
//
// When a frame is received from the higher layers, it must be an Ethernet frame,
// and with all protocol fields filled out (including the destination MAC address).
// The source address, if left empty, will be filled in. Then the frame is queued
// and transmitted according to the CSMA/CD protocol.
//
// Data frames received from the network are Ethernet frames. They are passed to
// the higher layers without modification.
//
// Also, the module properly responds to PAUSE frames, but never sends them
// by itself -- however, it transmits PAUSE frames received from upper layers.
// See <a href="ether-pause.html">PAUSE handling</a> for more info.
//
moduleinterface IEtherMac
{
    parameters:
        bool promiscuous;       // if true, all packets are received, otherwise only the
                                // ones with matching destination MAC address
        bool duplexMode;        // selects full-duplex (true) or half-duplex (false) operation
        int mtu @unit(B);
        @display("i=block/rxtx");
    gates:
        input upperLayerIn @labels(EtherFrame);    // to ~EthernetEncapsulation or ~IMacRelayUnit
        output upperLayerOut @labels(EtherFrame);  // to ~EthernetEncapsulation or ~IMacRelayUnit
        inout phys @labels(EthernetSignal); // to the network
}

File: src/inet/linklayer/contract/IEthernetMac.ned