Ieee802154Mac

Package: inet.linklayer.ieee802154

compound module Ieee802154Mac

Generic CSMA protocol supporting Mac-ACKs as well as constant, linear or exponential backoff times.

Ieee802154Mac

Inheritance diagram

Known subclasses

Name

Type

Description

Ieee802154NarrowbandMac

compound module

(no description)

Extends

Name

Type

Description

MacProtocolBase

simple module

Module base for different MAC protocols.

Parameters

Name

Type

Default value

Description

displayStringTextFormat

string

“{macStatus}”

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

headerLength

int

72 b

Length of MAC header

mtu

int

0B

bitrate

double

250000 bps

Bit rate

ccaDetectionTime

double

0.000128 s

8 symbols

rxSetupTime

double

0 s

Time to set up the radio to the reception state

aTurnaroundTime

double

0.000192 s

12 symbols

useMACAcks

bool

Send/Expect MAC acks for unicast traffic?

macMaxFrameRetries

int

3

Maximum number of frame retransmissions, only used when the usage of MAC acks is enabled.

macAckWaitDuration

double

0.00056 s

Time to wait for an acknowledgement after transmitting a unicast frame. Only used when the usage of MAC acks is enabled. The value is calculated from 1+12+10+12 symbols, which is defined for nonbeacon-enabled PAN. In the non-beacon-enabled case, the receiver responds at aTurnaroundTime (i.e. the time for the sender and receiver to both be guaranteed to have switched from Tx to Rx and vice versa). This gives the value 192us + 352us = 544us (there has been some discussion about the “extra” 1 symbol == 16us) [section 7.5.6.4.2 of the specification].

ackLength

int

40 b

Complete MAC ack message length (in bits) (! headerLength is not added to this), only used when the usage of MAC acks is enabled.

sifs

double

0.000192 s

Simple interframe space (12 symbols). Time to wait between receiving a frame and acknowledging it. Should be bigger than the maximum time for switching between Tx and Rx at the receiver. Only used when the usage of MAC acks is enabled.

backoffMethod

string

“linear”

Backoff method to use: constant, linear, or exponential

macMaxCSMABackoffs

int

5

Maximum number of extra backoffs (excluding the first unconditional one) before frame drop

aUnitBackoffPeriod

double

0.00032 s

Base unit for all backoff calculations

contentionWindow

int

2

Number of backoff periods of the initial contention window (for linear and constant backoff method only)

macMinBE

int

3

Minimum backoff exponent (for exponential backoff method only)

macMaxBE

int

8

Maximum backoff exponent (for exponential backoff method only)

radioModule

string

“^.radio”

The path to the Radio module //FIXME remove default value

Properties

Name

Value

Description

class

Ieee802154Mac

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

packetDropBackoffLimitReached

packet drop: backoff limit reached

packetDropReasonIsCongestion(packetDropped)

count,sum(packetBytes),vector(packetBytes)

none

packetDropIncorrectlyReceived

packet drop: incorrectly received

packetDropReasonIsIncorrectlyReceived(packetDropped)

count,sum(packetBytes),vector(packetBytes)

none

packetDropNotAddressToUs

packet drop: not addressed to us

packetDropReasonIsNotAddressedToUs(packetDropped)

count,sum(packetBytes),vector(packetBytes)

none

packetDropQueueOverflow

packet drop: queue overflow

packetDropReasonIsQueueOverflow(packetDropped)

count,sum(packetBytes),vector(packetBytes)

none

packetDropRetryLimitReached

packet drop: retry limit reached

packetDropReasonIsRetryLimitReached(packetDropped)

count,sum(packetBytes),vector(packetBytes)

none

Source code

//
// Generic CSMA protocol supporting Mac-ACKs as well as
// constant, linear or exponential backoff times.
//
module Ieee802154Mac extends MacProtocolBase like 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.

        // Length of MAC header
        int headerLength @unit(b) = default(72 b);
        int mtu @unit(B) = default(0B);
        // Bit rate
        double bitrate @unit(bps) = default(250000 bps);

        // Clear Channel Assessment detection time
        double ccaDetectionTime @unit(s) = default(0.000128 s); // 8 symbols
        // Time to set up the radio to the reception state
        double rxSetupTime @unit(s) = default(0 s);
        // Time to switch the radio from Rx to Tx state
        double aTurnaroundTime @unit(s) = default(0.000192 s);    // 12 symbols

        // Send/Expect MAC acks for unicast traffic?
        bool useMACAcks;
        // Maximum number of frame retransmissions,
        // only used when the usage of MAC acks is enabled.
        int macMaxFrameRetries = default(3);
        // Time to wait for an acknowledgement after transmitting a unicast frame.
        // Only used when the usage of MAC acks is enabled.
        // The value is calculated from 1+12+10+12 symbols, which is defined for nonbeacon-enabled PAN.
        // In the non-beacon-enabled case, the receiver responds at aTurnaroundTime
        // (i.e. the time for the sender and receiver to both be guaranteed to have
        // switched from Tx to Rx and vice versa). This gives the value 192us +
        // 352us = 544us (there has been some discussion about the "extra" 1 symbol == 16us)
        // [section 7.5.6.4.2 of the specification].
        double macAckWaitDuration @unit(s) = default(0.00056 s);
        // Complete MAC ack message length (in bits)
        // (! headerLength is not added to this),
        // only used when the usage of MAC acks is enabled.
        int ackLength @unit(b) = default(40 b);
        // Simple interframe space (12 symbols). Time to wait between receiving a frame and acknowledging it.
        // Should be bigger than the maximum time for switching between Tx and Rx at the receiver.
        // Only used when the usage of MAC acks is enabled.
        double sifs @unit(s) = default(0.000192 s);

        // Backoff method to use: constant, linear, or exponential
        string backoffMethod = default("linear");
        // Maximum number of extra backoffs (excluding the first unconditional one) before frame drop
        int macMaxCSMABackoffs = default(5);
        // Base unit for all backoff calculations
        double aUnitBackoffPeriod @unit(s) = default(0.00032 s);
        // Number of backoff periods of the initial contention window
        // (for linear and constant backoff method only)
        int contentionWindow = default(2);
        // Minimum backoff exponent (for exponential backoff method only)
        int macMinBE = default(3);
        // Maximum backoff exponent (for exponential backoff method only)
        int macMaxBE = default(8);

        string radioModule = default("^.radio");   // The path to the Radio module  //FIXME remove default value

        @class(Ieee802154Mac);
        displayStringTextFormat = default("{macStatus}");
        @signal[linkBroken](type=inet::Packet);
        @statistic[linkBroken](title="link break"; source=linkBroken; record=count; interpolationmode=none);
        @statistic[packetDropNotAddressToUs](title="packet drop: not addressed to us"; source=packetDropReasonIsNotAddressedToUs(packetDropped); 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[packetDropQueueOverflow](title="packet drop: queue overflow"; source=packetDropReasonIsQueueOverflow(packetDropped); record=count,sum(packetBytes),vector(packetBytes); interpolationmode=none);
        @statistic[packetDropRetryLimitReached](title="packet drop: retry limit reached"; source=packetDropReasonIsRetryLimitReached(packetDropped); record=count,sum(packetBytes),vector(packetBytes); interpolationmode=none);
        @statistic[packetDropBackoffLimitReached](title="packet drop: backoff limit reached"; source=packetDropReasonIsCongestion(packetDropped); record=count,sum(packetBytes),vector(packetBytes); interpolationmode=none);
}

File: src/inet/linklayer/ieee802154/Ieee802154Mac.ned