NED File src/inet/linklayer/contract/IEthernetMac.ned¶
Name |
Type |
Description |
|---|---|---|
module interface |
Interface for Ethernet MAC implementations. All Ethernet MAC implementations should implement this (i.e. declared as: |
Source code¶
//
// Copyright (C) 2010 OpenSim Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
//
package inet.linklayer.contract;
//
// Interface for Ethernet MAC implementations. All Ethernet MAC implementations
// should implement this (i.e. declared as: `EthernetCsmaMacPhy` like `IEtherMac`).
// The existing implementations are these: ~EthernetCsmaMacPhy and ~EthernetMacPhy.
//
// 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
}