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.
Usage diagram¶
Inheritance diagram¶
Used in compound modules¶
Name |
Type |
Description |
|---|---|---|
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. |
|
compound module |
Implements an IEEE 802.15.4 UWB-IR network interface. |
Extends¶
Name |
Type |
Description |
|---|---|---|
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 |
|||
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);
}