ExtUpperIeee80211Interface¶
Package: inet.emulation.linklayer.ieee80211
compound module ExtUpperIeee80211Interface
Provides an IEEE 802.11 network interface suitable for emulation. The upper part of the network interface is realized in the real world using a real TAP device of the host computer which is running the simulation.
Usage diagram¶
Inheritance diagram¶
Extends¶
Name |
Type |
Description |
|---|---|---|
compound module |
A base for external network interfaces, network interface modules that connect the simulation to the network stack of the host OS. |
Parameters¶
Name |
Type |
Default value |
Description |
|---|---|---|---|
displayStringTextFormat |
string |
“%a (%i)\n%m” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
recordPcap |
bool |
false |
|
numPcapRecorders |
int |
recordPcap ? 1 : 0 |
|
isWireless |
bool |
false |
|
interfaceTableModule |
string |
Module path of the interface table module |
|
device |
string |
Name of the attached OS device (e.g. tap0, veth0, etc.) |
|
namespace |
string |
“” |
Name of the OS network namespace (optional) |
copyConfiguration |
string |
“” |
Copy interface configuration such as MAC address, IP address, and MTU from/to the external interface. |
address |
string |
“auto” |
|
broadcast |
bool |
true |
|
multicast |
bool |
true |
|
pointToPoint |
bool |
false |
|
mtu |
int |
4470B |
|
energySourceModule |
string |
“” |
|
opMode |
string |
“g(mixed)” |
|
bitrate |
double |
-1bps |
Properties¶
Name |
Value |
Description |
|---|---|---|
class |
ExtInterface |
|
display |
i=block/ifcard |
|
lifecycleSupport |
||
networkInterface |
Gates¶
Name |
Direction |
Size |
Description |
|---|---|---|---|
upperLayerIn |
input |
||
upperLayerOut |
output |
||
radioIn |
input |
To receive signals |
Signals¶
Name |
Type |
Unit |
Description |
|---|---|---|---|
packetDropped |
Statistics¶
Name |
Title |
Source |
Record |
Unit |
Interpolation Mode |
Description |
|---|---|---|---|---|---|---|
packetDropInterfaceDown |
packet drops: interface down |
packetDropReasonIsInterfaceDown(packetDropped) |
count,sum(packetBytes),vector(packetBytes) |
none |
||
packetDropNoCarrier |
packet drops: no carrier |
packetDropReasonIsNoCarrier(packetDropped) |
count,sum(packetBytes),vector(packetBytes) |
none |
Unassigned submodule parameters¶
Name |
Type |
Default value |
Description |
|---|---|---|---|
pcapRecorder.displayStringTextFormat |
string |
“rec: %n pks” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
pcapRecorder.verbose |
bool |
true |
Whether to log packets on the module output |
pcapRecorder.recordEmptyPackets |
bool |
true |
Specifies if zero length packets are recorded or not |
pcapRecorder.enableConvertingPackets |
bool |
true |
Specifies if converting packets to link type is allowed or not |
pcapRecorder.pcapFile |
string |
“” |
The PCAP file to be written, suggested value: pcapFile = “${resultdir}/${configname}-#${runnumber}” + fullpath() + “.pcap” |
pcapRecorder.fileFormat |
string |
“pcapng” |
|
pcapRecorder.snaplen |
int |
65535 |
Maximum number of bytes to record per packet |
pcapRecorder.timePrecision |
int |
6 |
Time precision in recorded file. pcap supports only 6 (usec) or 9 (nanosec), pcapng supports more values (see ‘if_tsresol’ option in pcapng file format). |
pcapRecorder.dumpBadFrames |
bool |
true |
Enable dump of frames with hasBitError |
pcapRecorder.sendingSignalNames |
string |
“transmissionEnded” |
Space-separated list of outbound packet signals to subscribe to |
pcapRecorder.receivingSignalNames |
string |
“receptionEnded” |
Space-separated list of inbound packet signals to subscribe to |
pcapRecorder.dumpProtocols |
string |
“ethernetmac ppp ieee80211mac” |
Space-separated list of protocol names as defined in the Protocol class |
pcapRecorder.packetFilter |
object |
“*” |
Which packets are considered, matches all packets by default |
pcapRecorder.helpers |
string |
“” |
Usable PcapRecorder::IHelper helpers for accept packettype and store/convert packet as specified linktype |
pcapRecorder.alwaysFlush |
bool |
false |
Flush the pcapFile after each write to ensure that all packets are captured in case of a crash |
mib.displayStringTextFormat |
string |
“Address: {address}{ssidStr}\n{modeStr}{stationTypeStr}{qosStr}{associatedStr}” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
tap.displayStringTextFormat |
string |
“TAP device: {device}\nrcv:{numReceived} snt:{numSent}” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
tap.device |
string |
Name of the existing real tap interface |
|
tap.namespace |
string |
“” |
|
tap.packetNameFormat |
string |
“Ext-%p-%t-%n” |
|
llc.displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
llc.fcsMode |
string |
“declared” |
|
agent.displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
agent.interfaceTableModule |
string |
The path to the InterfaceTable module |
|
agent.mibModule |
string |
||
agent.activeScan |
bool |
true |
Selects between active and passive scanning |
agent.channelsToScan |
string |
“” |
List of channel numbers to scan (space delimited); empty means all channels |
agent.probeDelay |
double |
100ms |
Delay before sending a probe request during active scanning |
agent.minChannelTime |
double |
150ms |
Min interval to spend on a channel during active scanning |
agent.maxChannelTime |
double |
300ms |
Channel time for passive scanning, and max channel time for active scanning |
agent.authenticationTimeout |
double |
5s |
Timeout for the authentication procedure |
agent.associationTimeout |
double |
5s |
Timeout for the association procedure |
agent.startingTime |
double |
-1s |
Agent starting time. |
agent.defaultSsid |
string |
“” |
List of allowed SSIDs to connect to; leave empty for no filtering |
mgmt.displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
mgmt.interfaceTableModule |
string |
The path to the InterfaceTable module |
|
mgmt.numChannels |
int |
1 |
Number of channels to scan |
mgmt.mibModule |
string |
||
mgmt.macModule |
string |
The path to the MAC module |
|
mac.dcf.channelAccess.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 |
mac.dcf.channelAccess.pendingQueue.packetCapacity |
int |
100 |
Maximum number of packets in the queue, no limit by default |
mac.dcf.channelAccess.pendingQueue.dataCapacity |
int |
-1b |
Maximum total length of packets in the queue, no limit by default |
mac.dcf.channelAccess.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 |
mac.dcf.channelAccess.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 |
mac.dcf.channelAccess.pendingQueue.bufferModule |
string |
“” |
Relative module path to the IPacketBuffer module used by this queue, implicit buffer by default |
mac.dcf.channelAccess.inProgressFrames.displayStringTextFormat |
string |
“{numInProgress} packets” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
mac.dcf.channelAccess.inProgressFrames.pendingQueueModule |
string |
“^.pendingQueue” |
|
mac.dcf.channelAccess.inProgressFrames.originatorMacDataServiceModule |
string |
“^.^.originatorMacDataService” |
|
mac.dcf.channelAccess.inProgressFrames.ackHandlerModule |
string |
“^.^.ackHandler” |
|
mac.dcf.channelAccess.contention.displayStringTextFormat |
string |
“{fsmState}” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
mac.dcf.channelAccess.contention.initialChannelBusy |
bool |
true |
Assume that the channel was busy before the simulation started |
mac.dcf.channelAccess.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 |
mac.dcf.originatorMacDataService.fragmentationPolicy.displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
mac.dcf.originatorMacDataService.fragmentationPolicy.fragmentationThreshold |
int |
1500B |
|
mac.dcf.rateSelection.displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
mac.dcf.rateSelection.multicastFrameBitrate |
double |
-1bps |
|
mac.dcf.rateSelection.responseAckFrameBitrate |
double |
-1bps |
|
mac.dcf.rateSelection.responseCtsFrameBitrate |
double |
-1bps |
|
mac.dcf.rateSelection.dataFrameBitrate |
double |
-1bps |
Fastest |
mac.dcf.rateSelection.dataFrameBandwidth |
double |
nan Hz |
Unspecified by default |
mac.dcf.rateSelection.dataFrameNumSpatialStreams |
int |
-1 |
Unspecified by default |
mac.dcf.rateSelection.mgmtFrameBitrate |
double |
-1bps |
Fastest |
mac.dcf.rateSelection.controlFrameBitrate |
double |
-1bps |
|
mac.dcf.recoveryProcedure.displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
mac.dcf.recoveryProcedure.shortRetryLimit |
int |
7 |
|
mac.dcf.recoveryProcedure.longRetryLimit |
int |
4 |
|
mac.dcf.originatorProtectionMechanism.displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
mac.dcf.originatorProtectionMechanism.rateSelectionModule |
string |
||
mac.dcf.ackHandler.displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
mac.dcf.originatorAckPolicy.displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
mac.dcf.originatorAckPolicy.rateSelectionModule |
string |
||
mac.dcf.originatorAckPolicy.ackTimeout |
double |
-1s |
|
mac.dcf.recipientAckPolicy.displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
mac.dcf.recipientAckPolicy.rateSelectionModule |
string |
||
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
|
string |
|||
double |
-1s |
||
int |
2346B |
||
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
|
string |
|||
string |
|||
mac.hcf.edca.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 |
mac.hcf.edca.edcaf.pendingQueue.packetCapacity |
int |
100 |
Maximum number of packets in the queue, no limit by default |
mac.hcf.edca.edcaf.pendingQueue.dataCapacity |
int |
-1b |
Maximum total length of packets in the queue, no limit by default |
mac.hcf.edca.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 |
mac.hcf.edca.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 |
mac.hcf.edca.edcaf.pendingQueue.bufferModule |
string |
“” |
Relative module path to the IPacketBuffer module used by this queue, implicit buffer by default |
mac.hcf.edca.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 |
mac.hcf.edca.edcaf.inProgressFrames.pendingQueueModule |
string |
“^.pendingQueue” |
|
mac.hcf.edca.edcaf.inProgressFrames.originatorMacDataServiceModule |
string |
“^.^.^.originatorMacDataService” |
|
mac.hcf.edca.edcaf.inProgressFrames.ackHandlerModule |
string |
“^.ackHandler” |
|
mac.hcf.edca.edcaf.contention.displayStringTextFormat |
string |
“{fsmState}” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
mac.hcf.edca.edcaf.contention.initialChannelBusy |
bool |
true |
Assume that the channel was busy before the simulation started |
mac.hcf.edca.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 |
mac.hcf.edca.edcaf.ackHandler.displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
mac.hcf.edca.edcaf.txopProcedure.displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
mac.hcf.edca.edcaf.txopProcedure.txopLimit |
double |
-1s |
|
mac.hcf.edca.edcaf.recoveryProcedure.displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
mac.hcf.edca.edcaf.recoveryProcedure.shortRetryLimit |
int |
7 |
|
mac.hcf.edca.edcaf.recoveryProcedure.longRetryLimit |
int |
4 |
|
mac.hcf.edca.collisionController.displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
mac.hcf.edca.mgmtAndNonQoSRecoveryProcedure.displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
mac.hcf.edca.mgmtAndNonQoSRecoveryProcedure.shortRetryLimit |
int |
7 |
|
mac.hcf.edca.mgmtAndNonQoSRecoveryProcedure.longRetryLimit |
int |
4 |
|
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
|
mac.hcf.originatorMacDataService.msduAggregationPolicy.displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
mac.hcf.originatorMacDataService.msduAggregationPolicy.subframeNumThreshold |
int |
-1 |
Minimum number of subframes needed to compose an A-MSDU. (-1 means it won’t be checked) |
mac.hcf.originatorMacDataService.msduAggregationPolicy.aggregationLengthThreshold |
int |
-1 |
The minimum length for an aggregated payload necessary to create an A-MSDU (-1 means it won’t be checked). |
mac.hcf.originatorMacDataService.msduAggregationPolicy.maxAMsduSize |
int |
4065 |
-1 means infinity |
mac.hcf.originatorMacDataService.msduAggregationPolicy.qOsCheck |
bool |
true |
Turns on/off the check of the presence of the QoS flag (false means off – this is needed for aggregation in DCF mode). |
mac.hcf.originatorMacDataService.mpduAggregationPolicy.displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
mac.hcf.originatorMacDataService.fragmentationPolicy.displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
mac.hcf.originatorMacDataService.fragmentationPolicy.fragmentationThreshold |
int |
1500B |
|
mac.hcf.singleProtectionMechanism.displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
mac.hcf.singleProtectionMechanism.rateSelectionModule |
string |
||
mac.hcf.rateSelection.displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
mac.hcf.rateSelection.multicastFrameBitrate |
double |
-1bps |
|
mac.hcf.rateSelection.responseAckFrameBitrate |
double |
-1bps |
|
mac.hcf.rateSelection.responseBlockAckFrameBitrate |
double |
-1bps |
|
mac.hcf.rateSelection.responseCtsFrameBitrate |
double |
-1bps |
|
mac.hcf.rateSelection.dataFrameBitrate |
double |
-1bps |
Fastest |
mac.hcf.rateSelection.dataFrameBandwidth |
double |
nan Hz |
Unspecified by default |
mac.hcf.rateSelection.dataFrameNumSpatialStreams |
int |
-1 |
Unspecified by default |
mac.hcf.rateSelection.mgmtFrameBitrate |
double |
-1bps |
Fastest |
mac.hcf.rateSelection.controlFrameBitrate |
double |
-1bps |
|
mac.hcf.originatorAckPolicy.displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
mac.hcf.originatorAckPolicy.rateSelectionModule |
string |
||
mac.hcf.originatorAckPolicy.blockAckReqThreshold |
int |
5 |
|
mac.hcf.originatorAckPolicy.maxBlockAckPolicyFrameLength |
int |
1000B |
|
mac.hcf.originatorAckPolicy.blockAckTimeout |
double |
-1s |
|
mac.hcf.originatorAckPolicy.ackTimeout |
double |
-1s |
|
mac.hcf.recipientAckPolicy.displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
mac.hcf.recipientAckPolicy.rateSelectionModule |
string |
||
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
|
string |
|||
double |
-1s |
||
int |
2346B |
||
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
|
string |
|||
string |
|||
mac.hcf.originatorBlockAckAgreementPolicy.displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
mac.hcf.originatorBlockAckAgreementPolicy.delayedAckPolicySupported |
bool |
false |
|
mac.hcf.originatorBlockAckAgreementPolicy.aMsduSupported |
bool |
true |
|
mac.hcf.originatorBlockAckAgreementPolicy.maximumAllowedBufferSize |
int |
64 |
|
mac.hcf.originatorBlockAckAgreementPolicy.blockAckTimeoutValue |
double |
0s |
0 means that it depends on the originator |
mac.hcf.recipientBlockAckAgreementPolicy.displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
mac.hcf.recipientBlockAckAgreementPolicy.delayedAckPolicySupported |
bool |
false |
|
mac.hcf.recipientBlockAckAgreementPolicy.aMsduSupported |
bool |
true |
|
mac.hcf.recipientBlockAckAgreementPolicy.maximumAllowedBufferSize |
int |
64 |
|
mac.hcf.recipientBlockAckAgreementPolicy.blockAckTimeoutValue |
double |
0s |
0 means that it depends on the originator |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
|
string |
|||
string |
“{rxStatus}” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
|
string |
“{txFramePrefix}{txState}” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
|
string |
Source code¶
//
// Provides an IEEE 802.11 network interface suitable for emulation.
// The upper part of the network interface is realized in the real world using
// a real TAP device of the host computer which is running the simulation.
//
module ExtUpperIeee80211Interface extends ExtInterface like IWirelessInterface
{
parameters:
string energySourceModule = default("");
string opMode @enum("a","b","g(erp)","g(mixed)","n(mixed-2.4Ghz)","p","ac") = default("g(mixed)");
double bitrate @unit(bps) = default(-1bps);
**.opMode = this.opMode;
**.bitrate = this.bitrate;
mac.modeSet = default(this.opMode);
mac.*.rateSelection.dataFrameBitrate = default(this.bitrate);
radio.signalAnalogRepresentation = default("scalar");
*.macModule = default(absPath(".mac"));
*.mibModule = default(absPath(".mib"));
*.interfaceTableModule = default(absPath(this.interfaceTableModule));
*.energySourceModule = default(absPath(this.energySourceModule));
gates:
input radioIn @labels(IWirelessSignal); // To receive signals
submodules:
mib: Ieee80211Mib {
parameters:
@display("p=100,300;is=s");
}
tap: ExtEthernetTapDevice {
parameters:
@display("p=300,100");
}
llc: <default("Ieee80211Portal")> like IIeee80211Llc {
parameters:
@display("p=300,200");
}
classifier: <default("OmittedIeee8021dQosClassifier")> like IIeee8021dQosClassifier {
parameters:
@display("p=500,150");
}
agent: <default("Ieee80211AgentSta")> like IIeee80211Agent if typename != "" {
parameters:
@display("p=700,300");
}
mgmt: <default("Ieee80211MgmtSta")> like IIeee80211Mgmt {
parameters:
@display("p=500,300");
}
mac: <default("Ieee80211Mac")> like IIeee80211Mac {
parameters:
@display("p=300,300");
}
radio: <default("Ieee80211Radio")> like IRadio {
parameters:
@display("p=300,400");
}
connections allowunconnected:
radioIn --> { @display("m=s"); } --> radio.radioIn;
radio.upperLayerIn <-- mac.lowerLayerOut;
radio.upperLayerOut --> mac.lowerLayerIn;
mac.mgmtOut --> mgmt.macIn;
mac.mgmtIn <-- mgmt.macOut;
mgmt.agentOut --> agent.mgmtIn if exists(agent);
mgmt.agentIn <-- agent.mgmtOut if exists(agent);
llc.upperLayerOut --> { @display("m=n"); } --> tap.lowerLayerIn;
llc.upperLayerIn <-- { @display("m=n"); } <-- classifier.out;
llc.lowerLayerOut --> mac.upperLayerIn;
llc.lowerLayerIn <-- mac.upperLayerOut;
classifier.in <-- { @display("m=n"); } <-- tap.lowerLayerOut;
}
File: src/inet/emulation/linklayer/ieee80211/ExtUpperIeee80211Interface.ned