AckingMac

Package: inet.linklayer.acking

compound module AckingMac

Implements a trivial MAC protocol for use in AckingWirelessInterface.

The implementation provides packet encapsulation and decapsulation, but it doesn’t have a real medium access protocol. It doesn’t provide carrier sense mechanism, collision avoidance, or collision detection, but it provides optional out-of-band acknowledgement. Higher layer packets should have MacAddressReq tag.

See AckingWirelessInterface for rationale and details.

AckingMac

Usage diagram

Inheritance diagram

Used in compound modules

Name

Type

Description

AckingWirelessInterface

compound module

Implements a highly abstracted wireless network interface (NIC) that uses a trivial MAC protocol. It offers simplicity for scenarios where Layer 1 and 2 effects can be completely ignored, for example testing the basic functionality of a wireless ad-hoc routing protocol.

Ieee802154UwbIrInterface

compound module

Implements an IEEE 802.15.4 UWB-IR network interface.

Extends

Name

Type

Description

MacProtocolBase

simple module

Module base for different MAC protocols.

Parameters

Name

Type

Default value

Description

displayStringTextFormat

string

“”

Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information

interfaceTableModule

string

address

string

“auto”

MAC address as a hex string (12 hex digits), or

bitrate

double

“auto”. “auto” values will be replaced by a generated MAC address in init stage 0.

mtu

int

4470B

headerLength

int

16B

AckingMacHeader length

promiscuous

bool

false

fullDuplex

bool

true

Allows transmitting and receiving simultaneously (transceiver radio mode)

useAck

bool

true

ackTimeout

double

100ms

Properties

Name

Value

Description

class

AckingMac

display

i=block/rxtx

Gates

Name

Direction

Size

Description

upperLayerIn

input

upperLayerOut

output

lowerLayerIn

input

lowerLayerOut

output

Signals

Name

Type

Unit

Description

linkBroken

inet::Packet

packetDropped

cPacket

packetReceivedFromLower

cPacket

packetReceivedFromUpper

cPacket

packetSentToLower

cPacket

packetSentToUpper

cPacket

Statistics

Name

Title

Source

Record

Unit

Interpolation Mode

Description

linkBroken

link break

linkBroken

count

none

packetDropIncorrectlyReceived

packet drop: incorrectly received

packetDropReasonIsIncorrectlyReceived(packetDropped)

count,sum(packetBytes),vector(packetBytes)

none

packetDropInterfaceDown

packet drop: interface down

packetDropReasonIsInterfaceDown(packetDropped)

count,sum(packetBytes),vector(packetBytes)

none

packetDropNotAddressedToUs

packet drop: not addressed to us

packetDropReasonIsNotAddressedToUs(packetDropped)

count,sum(packetBytes),vector(packetBytes)

none

passedUpPk

packets passed to higher layer

packetSentToUpper

count,”sum(packetBytes)”,”vector(packetBytes)”

none

rcvdPkFromHl

packets received from higher layer

packetReceivedFromUpper

count,”sum(packetBytes)”,”vector(packetBytes)”

none

rcvdPkFromLl

packets received from lower layer

packetReceivedFromLower

count,”sum(packetBytes)”,”vector(packetBytes)”

none

sentDownPk

packets sent to lower layer

packetSentToLower

count,”sum(packetBytes)”,”vector(packetBytes)”

none

Source code

//
// Implements a trivial MAC protocol for use in ~AckingWirelessInterface.
//
// The implementation provides packet encapsulation and decapsulation, but it
// doesn't have a real medium access protocol. It doesn't provide carrier sense
// mechanism, collision avoidance, or collision detection, but it provides optional
// out-of-band acknowledgement. Higher layer packets should have `MacAddressReq`
// tag.
//
// See ~AckingWirelessInterface for rationale and details.
//
module AckingMac extends MacProtocolBase like ILinkLayer, IMacProtocol
{
    parameters:
        string address @mutable = default("auto");   // MAC address as a hex string (12 hex digits), or
                                                     // "auto". "auto" values will be replaced by
                                                     // a generated MAC address in init stage 0.
        double bitrate @unit(bps);
        int mtu @unit(B) = default(4470B);
        int headerLength @unit(B) = default(16B); // AckingMacHeader length
        bool promiscuous = default(false);
        bool fullDuplex = default(true);    // Allows transmitting and receiving simultaneously (transceiver radio mode)
        bool useAck = default(true);
        double ackTimeout @unit(s) = default(100ms);

        @class(AckingMac);
        @signal[linkBroken](type=inet::Packet);
        @statistic[linkBroken](title="link break"; source=linkBroken; record=count; interpolationmode=none);
        @statistic[passedUpPk](title="packets passed to higher layer"; source=packetSentToUpper; record=count,"sum(packetBytes)","vector(packetBytes)"; interpolationmode=none);
        @statistic[sentDownPk](title="packets sent to lower layer"; source=packetSentToLower; record=count,"sum(packetBytes)","vector(packetBytes)"; interpolationmode=none);
        @statistic[rcvdPkFromHl](title="packets received from higher layer"; source=packetReceivedFromUpper; record=count,"sum(packetBytes)","vector(packetBytes)"; interpolationmode=none);
        @statistic[rcvdPkFromLl](title="packets received from lower layer"; source=packetReceivedFromLower; record=count,"sum(packetBytes)","vector(packetBytes)"; interpolationmode=none);
        @statistic[packetDropIncorrectlyReceived](title="packet drop: incorrectly received"; source=packetDropReasonIsIncorrectlyReceived(packetDropped); record=count,sum(packetBytes),vector(packetBytes); interpolationmode=none);
        @statistic[packetDropInterfaceDown](title="packet drop: interface down"; source=packetDropReasonIsInterfaceDown(packetDropped); record=count,sum(packetBytes),vector(packetBytes); interpolationmode=none);
        @statistic[packetDropNotAddressedToUs](title="packet drop: not addressed to us"; source=packetDropReasonIsNotAddressedToUs(packetDropped); record=count,sum(packetBytes),vector(packetBytes); interpolationmode=none);
}

File: src/inet/linklayer/acking/AckingMac.ned