Edca¶
Package: inet.linklayer.ieee80211.mac.channelaccess
compound module Edca
Implements EDCA (Enhanced Distributed Channel Access) for IEEE 802.11. The implementation allows for a configurable number of access categories, not just four as defined by the standard.
Usage diagram¶
Inheritance diagram¶
Used in compound modules¶
Name |
Type |
Description |
|---|---|---|
compound module |
Implements the HCF (Hybrid Coordination Function) for IEEE 802.11. |
Extends¶
Name |
Type |
Description |
|---|---|---|
compound module |
Base module for all INET compound modules. |
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 |
numEdcafs |
int |
4 |
|
rxModule |
string |
||
rateSelectionModule |
string |
Properties¶
Name |
Value |
Description |
|---|---|---|
class |
Edca |
|
display |
i=block/star |
Unassigned submodule parameters¶
Name |
Type |
Default value |
Description |
|---|---|---|---|
edcaf.pendingQueue.displayStringTextFormat |
string |
“contains %p pk (%l) pushed %u\npulled %o removed %r dropped %d” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
edcaf.pendingQueue.packetCapacity |
int |
100 |
Maximum number of packets in the queue, no limit by default |
edcaf.pendingQueue.dataCapacity |
int |
-1b |
Maximum total length of packets in the queue, no limit by default |
edcaf.pendingQueue.dropperClass |
string |
“inet::queueing::PacketAtCollectionEndDropper” |
Determines which packets are dropped when the queue is overloaded, packets are not dropped by default; the parameter must be the name of a C++ class which implements the IPacketDropperFunction C++ interface and is registered via Register_Class |
edcaf.pendingQueue.comparatorClass |
string |
“inet::ieee80211::MgmtOverDataComparator” |
Determines the order of packets in the queue, insertion order by default; the parameter must be the name of a C++ class which implements the IPacketComparatorFunction C++ interface and is registered via Register_Class |
edcaf.pendingQueue.bufferModule |
string |
“” |
Relative module path to the IPacketBuffer module used by this queue, implicit buffer by default |
edcaf.inProgressFrames.displayStringTextFormat |
string |
“{numInProgress} packets” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
edcaf.inProgressFrames.pendingQueueModule |
string |
“^.pendingQueue” |
|
edcaf.inProgressFrames.originatorMacDataServiceModule |
string |
“^.^.^.originatorMacDataService” |
|
edcaf.inProgressFrames.ackHandlerModule |
string |
“^.ackHandler” |
|
edcaf.contention.displayStringTextFormat |
string |
“{fsmState}” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
edcaf.contention.initialChannelBusy |
bool |
true |
Assume that the channel was busy before the simulation started |
edcaf.contention.backoffOptimization |
bool |
true |
We can pretend the frame has arrived into the queue a little bit earlier, and maybe able to start transmitting immediately |
edcaf.ackHandler.displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
edcaf.txopProcedure.displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
edcaf.txopProcedure.txopLimit |
double |
-1s |
|
edcaf.recoveryProcedure.displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
edcaf.recoveryProcedure.shortRetryLimit |
int |
7 |
|
edcaf.recoveryProcedure.longRetryLimit |
int |
4 |
|
collisionController.displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
mgmtAndNonQoSRecoveryProcedure.displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
mgmtAndNonQoSRecoveryProcedure.shortRetryLimit |
int |
7 |
|
mgmtAndNonQoSRecoveryProcedure.longRetryLimit |
int |
4 |
Source code¶
//
// Implements EDCA (Enhanced Distributed Channel Access) for IEEE 802.11.
// The implementation allows for a configurable number of access categories,
// not just four as defined by the standard.
//
module Edca extends Module
{
parameters:
int numEdcafs = default(4);
string rxModule;
string rateSelectionModule;
*.rateSelectionModule = "^." + this.rateSelectionModule;
*.rxModule = "^." + this.rxModule;
*.collisionControllerModule = "^.collisionController";
edcaf[0].accessCategory = default("AC_BK");
edcaf[1].accessCategory = default("AC_BE");
edcaf[2].accessCategory = default("AC_VI");
edcaf[3].accessCategory = default("AC_VO");
@class(Edca);
@display("i=block/star");
submodules:
edcaf[numEdcafs]: Edcaf {
parameters:
@display("p=100,100,row,150");
}
collisionController: <default("EdcaCollisionController")> like ICollisionController {
parameters:
@display("p=100,200");
}
mgmtAndNonQoSRecoveryProcedure: NonQosRecoveryProcedure {
parameters:
cwCalculatorModule = "^.edcaf[1]"; // Best effort
rtsPolicyModule = "^.^.rtsPolicy";
@display("p=400,200");
}
}
File: src/inet/linklayer/ieee80211/mac/channelaccess/Edca.ned