AccessPoint¶
Package: inet.node.wireless
compound module AccessPoint
A wireless access point device that connects wireless stations (like WirelessHost) to a wired network. Supports multiple wireless radios and multiple Ethernet ports.
The access point relays frames between the wireless and wired interfaces using a built-in MAC relay unit (bridging). It implements the IEEE 802.11 AP functionality including association, authentication, and frame forwarding between network segments.
Key features:
Configurable number of wireless interfaces (radios)
Configurable number of Ethernet ports
IEEE 802.11 management functionality
MAC-layer bridging between interfaces
Customizable wireless management type (simplified or full-featured)
Stationary by default, but mobility can be added
The wireless management can be configured to use either the full IEEE 802.11 management protocol (Ieee80211MgmtAp) or a simplified version (Ieee80211MgmtApSimplified) that doesn’t support scanning, authentication, and association processes.
See also: WirelessHost, EthernetSwitch, StandardHost
Usage diagram¶
Inheritance diagram¶
Used in¶
Name |
Type |
Description |
|---|---|---|
network |
(no description) |
Parameters¶
Name |
Type |
Default value |
Description |
|---|---|---|---|
numWlanInterfaces |
int |
1 |
The number of radios in the access point |
hasStatus |
bool |
false |
|
fcsMode |
string |
“declared” |
Properties¶
Name |
Value |
Description |
|---|---|---|
display |
i=device/accesspoint |
|
labels |
node,ethernet-node,wireless-node |
|
networkNode |
Gates¶
Name |
Direction |
Size |
Description |
|---|---|---|---|
radioIn [ ] |
input |
numWlanInterfaces |
|
ethg [ ] |
inout |
Unassigned submodule parameters¶
Name |
Type |
Default value |
Description |
|---|---|---|---|
status.displayStringTextFormat |
string |
“{stateStr}” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
status.initialStatus |
string |
“UP” |
Initial status of the network node |
interfaceTable.displayStringTextFormat |
string |
“{numInterfaces} interfaces” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
interfaceTable.displayAddresses |
bool |
false |
Whether to display IP addresses on links |
macTable.displayStringTextFormat |
string |
“addr: %a\nvlan: %v” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
macTable.agingTime |
double |
120s |
|
macTable.forwardingTable |
object |
[] |
|
macTable.forwardingTableFile |
string |
“” |
|
macTable.interfaceTableModule |
string |
||
mobility.displayStringTextFormat |
string |
“p: {position}\nv: {velocity}” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
mobility.subjectModule |
string |
“^” |
The module path that determines the subject module, the motion of which this mobility model describes. The default value is the parent module |
mobility.coordinateSystemModule |
string |
“” |
The module path of the geographic coordinate system module; optional, empty disables geographic conversion (and the {geo_position} directive) |
mobility.updateDisplayString |
bool |
true |
Enables continuous update of the subject module’s position by modifying its display string |
mobility.constraintAreaMinX |
double |
-inf m |
The minimum x position of the constraint area. It is unconstrained by default (negative infinity) |
mobility.constraintAreaMinY |
double |
-inf m |
The minimum y position of the constraint area. It is unconstrained by default (negative infinity) |
mobility.constraintAreaMinZ |
double |
-inf m |
The minimum z position of the constraint area. It is unconstrained by default (negative infinity) |
mobility.constraintAreaMaxX |
double |
inf m |
The maximum x position of the constraint area. It is unconstrained by default (positive infinity) |
mobility.constraintAreaMaxY |
double |
inf m |
The maximum y position of the constraint area. It is unconstrained by default (positive infinity) |
mobility.constraintAreaMaxZ |
double |
inf m |
The maximum z position of the constraint area. It is unconstrained by default (positive infinity) |
mobility.initialX |
double |
uniform(this.constraintAreaMinX, this.constraintAreaMaxX) |
|
mobility.initialY |
double |
uniform(this.constraintAreaMinY, this.constraintAreaMaxY) |
|
mobility.initialZ |
double |
nanToZero(uniform(this.constraintAreaMinZ, this.constraintAreaMaxZ)) |
|
mobility.initialLatitude |
double |
nan deg |
|
mobility.initialLongitude |
double |
nan deg |
|
mobility.initialAltitude |
double |
0m |
|
mobility.initialHeading |
double |
0deg |
|
mobility.initialElevation |
double |
0deg |
|
mobility.initialBank |
double |
0deg |
|
mobility.initFromDisplayString |
bool |
true |
Enables one-time initialization from the subject module’s display string |
mobility.updateFromDisplayString |
bool |
true |
Enables continuous update from the subject module’s display string for dragging and rotating it |
bridging.displayStringTextFormat |
string |
“proc: %p\ndisc: %d” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
bridging.macTableModule |
string |
||
bridging.interfaceTableModule |
string |
||
bl.displayStringTextFormat |
string |
“processed {numProcessedPackets} pk ({processedTotalLength})” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
bl.interfaceTableModule |
string |
Module path to the InterfaceTable module |
|
bl.forwardServiceRegistration |
bool |
true |
|
bl.forwardProtocolRegistration |
bool |
true |
|
bl.interfaceMapping |
object |
{} |
Maps network interface names to connected submodule names (e.g. {“eth0”: “bridging”}), overrides automatically learned dispatching; * overrides all learned network interfaces, ? overrides default |
bl.serviceMapping |
object |
{} |
Maps protocols to connected submodule names (e.g. {“ethernetmac”: “bridging”}), overrides automatically learned dispatching; * overrides all learned services, ? overrides default |
bl.protocolMapping |
object |
{} |
Maps protocols to connected submodule names (e.g. {“ipv4”: “bridging”}), overrides automatically learned dispatching; * overrides all learned protocols, ? overrides default |
ethernet.displayStringTextFormat |
string |
“passed up: {totalFromMAC}\nsent: {totalFromHigherLayer}” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
ethernet.registerProtocol |
bool |
false |
FIXME //KLUDGE should redesign place of EthernetEncapsulation and LLC modules |
ethernet.interfaceTableModule |
string |
The path to the InterfaceTable module |
|
ethernet.fcsMode |
string |
“declared” |
|
ethernet.stopOperationExtraTime |
double |
-1s |
Extra time after the lifecycle stop operation has finished |
ethernet.stopOperationTimeout |
double |
2s |
Timeout value for the lifecycle stop operation |
li.displayStringTextFormat |
string |
“processed {numProcessedPackets} pk ({processedTotalLength})” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
li.interfaceTableModule |
string |
Module path to the InterfaceTable module |
|
li.forwardServiceRegistration |
bool |
true |
|
li.forwardProtocolRegistration |
bool |
true |
|
li.interfaceMapping |
object |
{} |
Maps network interface names to connected submodule names (e.g. {“eth0”: “bridging”}), overrides automatically learned dispatching; * overrides all learned network interfaces, ? overrides default |
li.serviceMapping |
object |
{} |
Maps protocols to connected submodule names (e.g. {“ethernetmac”: “bridging”}), overrides automatically learned dispatching; * overrides all learned services, ? overrides default |
li.protocolMapping |
object |
{} |
Maps protocols to connected submodule names (e.g. {“ipv4”: “bridging”}), overrides automatically learned dispatching; * overrides all learned protocols, ? overrides default |
wlan.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 |
wlan.pcapRecorder.verbose |
bool |
true |
Whether to log packets on the module output |
wlan.pcapRecorder.recordEmptyPackets |
bool |
true |
Specifies if zero length packets are recorded or not |
wlan.pcapRecorder.enableConvertingPackets |
bool |
true |
Specifies if converting packets to link type is allowed or not |
wlan.pcapRecorder.pcapFile |
string |
“” |
The PCAP file to be written, suggested value: pcapFile = “${resultdir}/${configname}-#${runnumber}” + fullpath() + “.pcap” |
wlan.pcapRecorder.fileFormat |
string |
“pcapng” |
|
wlan.pcapRecorder.snaplen |
int |
65535 |
Maximum number of bytes to record per packet |
wlan.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). |
wlan.pcapRecorder.dumpBadFrames |
bool |
true |
Enable dump of frames with hasBitError |
wlan.pcapRecorder.sendingSignalNames |
string |
“transmissionEnded” |
Space-separated list of outbound packet signals to subscribe to |
wlan.pcapRecorder.receivingSignalNames |
string |
“receptionEnded” |
Space-separated list of inbound packet signals to subscribe to |
wlan.pcapRecorder.dumpProtocols |
string |
“ethernetmac ppp ieee80211mac” |
Space-separated list of protocol names as defined in the Protocol class |
wlan.pcapRecorder.packetFilter |
object |
“*” |
Which packets are considered, matches all packets by default |
wlan.pcapRecorder.helpers |
string |
“” |
Usable PcapRecorder::IHelper helpers for accept packettype and store/convert packet as specified linktype |
wlan.pcapRecorder.alwaysFlush |
bool |
false |
Flush the pcapFile after each write to ensure that all packets are captured in case of a crash |
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 |
|
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
|
string |
The path to the InterfaceTable module |
||
string |
|||
bool |
true |
Selects between active and passive scanning |
|
string |
“” |
List of channel numbers to scan (space delimited); empty means all channels |
|
double |
100ms |
Delay before sending a probe request during active scanning |
|
double |
150ms |
Min interval to spend on a channel during active scanning |
|
double |
300ms |
Channel time for passive scanning, and max channel time for active scanning |
|
double |
5s |
Timeout for the authentication procedure |
|
double |
5s |
Timeout for the association procedure |
|
double |
-1s |
Agent starting time. |
|
string |
“” |
List of allowed SSIDs to connect to; leave empty for no filtering |
|
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
|
string |
The path to the InterfaceTable module |
||
int |
1 |
Number of channels to scan |
|
string |
|||
string |
The path to the MAC module |
||
wlan.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 |
wlan.mac.dcf.channelAccess.pendingQueue.packetCapacity |
int |
100 |
Maximum number of packets in the queue, no limit by default |
wlan.mac.dcf.channelAccess.pendingQueue.dataCapacity |
int |
-1b |
Maximum total length of packets in the queue, no limit by default |
wlan.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 |
wlan.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 |
wlan.mac.dcf.channelAccess.pendingQueue.bufferModule |
string |
“” |
Relative module path to the IPacketBuffer module used by this queue, implicit buffer by default |
wlan.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 |
wlan.mac.dcf.channelAccess.inProgressFrames.pendingQueueModule |
string |
“^.pendingQueue” |
|
wlan.mac.dcf.channelAccess.inProgressFrames.originatorMacDataServiceModule |
string |
“^.^.originatorMacDataService” |
|
wlan.mac.dcf.channelAccess.inProgressFrames.ackHandlerModule |
string |
“^.^.ackHandler” |
|
wlan.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 |
wlan.mac.dcf.channelAccess.contention.initialChannelBusy |
bool |
true |
Assume that the channel was busy before the simulation started |
wlan.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 |
wlan.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 |
wlan.mac.dcf.originatorMacDataService.fragmentationPolicy.fragmentationThreshold |
int |
1500B |
|
wlan.mac.dcf.rateSelection.displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
wlan.mac.dcf.rateSelection.multicastFrameBitrate |
double |
-1bps |
|
wlan.mac.dcf.rateSelection.responseAckFrameBitrate |
double |
-1bps |
|
wlan.mac.dcf.rateSelection.responseCtsFrameBitrate |
double |
-1bps |
|
wlan.mac.dcf.rateSelection.dataFrameBitrate |
double |
-1bps |
Fastest |
wlan.mac.dcf.rateSelection.dataFrameBandwidth |
double |
nan Hz |
Unspecified by default |
wlan.mac.dcf.rateSelection.dataFrameNumSpatialStreams |
int |
-1 |
Unspecified by default |
wlan.mac.dcf.rateSelection.mgmtFrameBitrate |
double |
-1bps |
Fastest |
wlan.mac.dcf.rateSelection.controlFrameBitrate |
double |
-1bps |
|
wlan.mac.dcf.recoveryProcedure.displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
wlan.mac.dcf.recoveryProcedure.shortRetryLimit |
int |
7 |
|
wlan.mac.dcf.recoveryProcedure.longRetryLimit |
int |
4 |
|
wlan.mac.dcf.originatorProtectionMechanism.displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
wlan.mac.dcf.originatorProtectionMechanism.rateSelectionModule |
string |
||
wlan.mac.dcf.ackHandler.displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
wlan.mac.dcf.originatorAckPolicy.displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
wlan.mac.dcf.originatorAckPolicy.rateSelectionModule |
string |
||
wlan.mac.dcf.originatorAckPolicy.ackTimeout |
double |
-1s |
|
wlan.mac.dcf.recipientAckPolicy.displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
wlan.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 |
|||
wlan.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 |
int |
100 |
Maximum number of packets in the queue, no limit by default |
|
int |
-1b |
Maximum total length of packets in the queue, no limit by default |
|
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 |
|
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 |
|
string |
“” |
Relative module path to the IPacketBuffer module used by this queue, implicit buffer by default |
|
wlan.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 |
string |
“^.pendingQueue” |
||
wlan.mac.hcf.edca.edcaf.inProgressFrames.originatorMacDataServiceModule |
string |
“^.^.^.originatorMacDataService” |
|
string |
“^.ackHandler” |
||
string |
“{fsmState}” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
|
bool |
true |
Assume that the channel was busy before the simulation started |
|
bool |
true |
We can pretend the frame has arrived into the queue a little bit earlier, and maybe able to start transmitting immediately |
|
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
|
wlan.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 |
double |
-1s |
||
wlan.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 |
int |
7 |
||
int |
4 |
||
wlan.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 |
wlan.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 |
wlan.mac.hcf.edca.mgmtAndNonQoSRecoveryProcedure.shortRetryLimit |
int |
7 |
|
wlan.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 |
|
wlan.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 |
wlan.mac.hcf.originatorMacDataService.msduAggregationPolicy.subframeNumThreshold |
int |
-1 |
Minimum number of subframes needed to compose an A-MSDU. (-1 means it won’t be checked) |
wlan.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). |
wlan.mac.hcf.originatorMacDataService.msduAggregationPolicy.maxAMsduSize |
int |
4065 |
-1 means infinity |
wlan.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). |
wlan.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 |
wlan.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 |
wlan.mac.hcf.originatorMacDataService.fragmentationPolicy.fragmentationThreshold |
int |
1500B |
|
wlan.mac.hcf.singleProtectionMechanism.displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
wlan.mac.hcf.singleProtectionMechanism.rateSelectionModule |
string |
||
wlan.mac.hcf.rateSelection.displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
wlan.mac.hcf.rateSelection.multicastFrameBitrate |
double |
-1bps |
|
wlan.mac.hcf.rateSelection.responseAckFrameBitrate |
double |
-1bps |
|
wlan.mac.hcf.rateSelection.responseBlockAckFrameBitrate |
double |
-1bps |
|
wlan.mac.hcf.rateSelection.responseCtsFrameBitrate |
double |
-1bps |
|
wlan.mac.hcf.rateSelection.dataFrameBitrate |
double |
-1bps |
Fastest |
wlan.mac.hcf.rateSelection.dataFrameBandwidth |
double |
nan Hz |
Unspecified by default |
wlan.mac.hcf.rateSelection.dataFrameNumSpatialStreams |
int |
-1 |
Unspecified by default |
wlan.mac.hcf.rateSelection.mgmtFrameBitrate |
double |
-1bps |
Fastest |
wlan.mac.hcf.rateSelection.controlFrameBitrate |
double |
-1bps |
|
wlan.mac.hcf.originatorAckPolicy.displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
wlan.mac.hcf.originatorAckPolicy.rateSelectionModule |
string |
||
wlan.mac.hcf.originatorAckPolicy.blockAckReqThreshold |
int |
5 |
|
wlan.mac.hcf.originatorAckPolicy.maxBlockAckPolicyFrameLength |
int |
1000B |
|
wlan.mac.hcf.originatorAckPolicy.blockAckTimeout |
double |
-1s |
|
wlan.mac.hcf.originatorAckPolicy.ackTimeout |
double |
-1s |
|
wlan.mac.hcf.recipientAckPolicy.displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
wlan.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 |
|||
wlan.mac.hcf.originatorBlockAckAgreementPolicy.displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
wlan.mac.hcf.originatorBlockAckAgreementPolicy.delayedAckPolicySupported |
bool |
false |
|
wlan.mac.hcf.originatorBlockAckAgreementPolicy.aMsduSupported |
bool |
true |
|
wlan.mac.hcf.originatorBlockAckAgreementPolicy.maximumAllowedBufferSize |
int |
64 |
|
wlan.mac.hcf.originatorBlockAckAgreementPolicy.blockAckTimeoutValue |
double |
0s |
0 means that it depends on the originator |
wlan.mac.hcf.recipientBlockAckAgreementPolicy.displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
wlan.mac.hcf.recipientBlockAckAgreementPolicy.delayedAckPolicySupported |
bool |
false |
|
wlan.mac.hcf.recipientBlockAckAgreementPolicy.aMsduSupported |
bool |
true |
|
wlan.mac.hcf.recipientBlockAckAgreementPolicy.maximumAllowedBufferSize |
int |
64 |
|
wlan.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 |
|||
eth.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 |
eth.pcapRecorder.verbose |
bool |
true |
Whether to log packets on the module output |
eth.pcapRecorder.recordEmptyPackets |
bool |
true |
Specifies if zero length packets are recorded or not |
eth.pcapRecorder.enableConvertingPackets |
bool |
true |
Specifies if converting packets to link type is allowed or not |
eth.pcapRecorder.pcapFile |
string |
“” |
The PCAP file to be written, suggested value: pcapFile = “${resultdir}/${configname}-#${runnumber}” + fullpath() + “.pcap” |
eth.pcapRecorder.fileFormat |
string |
“pcapng” |
|
eth.pcapRecorder.snaplen |
int |
65535 |
Maximum number of bytes to record per packet |
eth.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). |
eth.pcapRecorder.dumpBadFrames |
bool |
true |
Enable dump of frames with hasBitError |
eth.pcapRecorder.sendingSignalNames |
string |
“transmissionEnded” |
Space-separated list of outbound packet signals to subscribe to |
eth.pcapRecorder.receivingSignalNames |
string |
“receptionEnded” |
Space-separated list of inbound packet signals to subscribe to |
eth.pcapRecorder.dumpProtocols |
string |
“ethernetmac ppp ieee80211mac” |
Space-separated list of protocol names as defined in the Protocol class |
eth.pcapRecorder.packetFilter |
object |
“*” |
Which packets are considered, matches all packets by default |
eth.pcapRecorder.helpers |
string |
“” |
Usable PcapRecorder::IHelper helpers for accept packettype and store/convert packet as specified linktype |
eth.pcapRecorder.alwaysFlush |
bool |
false |
Flush the pcapFile after each write to ensure that all packets are captured in case of a crash |
Source code¶
//
// A wireless access point device that connects wireless stations (like WirelessHost)
// to a wired network. Supports multiple wireless radios and multiple Ethernet ports.
//
// The access point relays frames between the wireless and wired interfaces using
// a built-in MAC relay unit (bridging). It implements the IEEE 802.11 AP functionality
// including association, authentication, and frame forwarding between network segments.
//
// Key features:
// - Configurable number of wireless interfaces (radios)
// - Configurable number of Ethernet ports
// - IEEE 802.11 management functionality
// - MAC-layer bridging between interfaces
// - Customizable wireless management type (simplified or full-featured)
// - Stationary by default, but mobility can be added
//
// The wireless management can be configured to use either the full IEEE 802.11 management
// protocol (~Ieee80211MgmtAp) or a simplified version (~Ieee80211MgmtApSimplified) that
// doesn't support scanning, authentication, and association processes.
//
// @see ~WirelessHost, ~EthernetSwitch, ~StandardHost
//
module AccessPoint like INetworkNode
{
parameters:
@networkNode();
@labels(node,ethernet-node,wireless-node);
@display("i=device/accesspoint");
int numWlanInterfaces = default(1); // The number of radios in the access point
bool hasStatus = default(false);
string fcsMode @enum("declared","computed") = default("declared");
wlan[*].protocol = default("ethernetmac");
wlan[*].mgmt.typename = default("Ieee80211MgmtAp");
wlan[*].llc.typename = default("Ieee80211Portal");
wlan[*].agent.typename = default("");
wlan[*].radio.antenna.mobilityModule = default("^.^.^.mobility");
eth[*].encap.typename = "";
*.macTableModule = default(absPath(".macTable"));
*.interfaceTableModule = default(absPath(".interfaceTable"));
bridging.hasStp = false;
*.fcsMode = this.fcsMode;
ethernet.registerProtocol = default(true);
gates:
input radioIn[numWlanInterfaces] @directIn;
inout ethg[] @labels(EtherFrame-conn);
submodules:
status: NodeStatus if hasStatus {
@display("p=100,100;is=s");
}
interfaceTable: InterfaceTable {
@display("p=100,200;is=s");
}
macTable: <default("MacForwardingTable")> like IMacForwardingTable {
@display("p=100,300;is=s");
}
mobility: <default("StationaryMobility")> like IMobility {
@display("p=100,400;is=s");
}
bridging: <default(firstAvailable("Ieee8021dRelay","MacRelayUnit"))> like IMacRelayUnit if sizeof(ethg)+numWlanInterfaces > 1 && typename != "" {
@display("p=800,100");
}
bl: MessageDispatcher if sizeof(ethg)+numWlanInterfaces > 1 && exists(bridging) {
@display("p=800,200;b=1200,5,,,,1");
}
ethernet: <default("EthernetEncapsulation")> like IEthernetLayer if typename != "" && exists(bridging) {
@display("p=700,300");
}
li: MessageDispatcher {
@display("p=800,400;b=1000,5,,,,1");
}
wlan[numWlanInterfaces]: <default("Ieee80211Interface")> like IWirelessInterface {
@display("p=250,500,row,150;q=queue");
}
eth[sizeof(ethg)]: <default("EthernetInterface")> like IEthernetInterface {
mac.promiscuous = true;
@display("p=850,500,row;q=txQueue");
}
connections allowunconnected:
bl.out++ --> bridging.lowerLayerIn if sizeof(ethg)+numWlanInterfaces > 1 && exists(bridging);
bl.in++ <-- bridging.lowerLayerOut if sizeof(ethg)+numWlanInterfaces > 1 && exists(bridging);
bl.out++ --> li.in++ if exists(bl);
li.out++ --> bl.in++ if exists(bl);
bl.out++ --> ethernet.upperLayerIn if exists(ethernet);
ethernet.upperLayerOut --> bl.in++ if exists(ethernet);
ethernet.lowerLayerOut --> li.in++ if exists(ethernet);
li.out++ --> ethernet.lowerLayerIn if exists(ethernet);
// connections to network outside
// wireless interfaces MUST be connected first (i.e. ports 0..numWlanInterfaces-1)
// because broadcasts must be handled differently for wireless IFs by the bridging
for i=0..numWlanInterfaces-1 {
radioIn[i] --> { @display("m=s"); } --> wlan[i].radioIn;
wlan[i].upperLayerOut --> li.in++ if sizeof(ethg)+numWlanInterfaces > 1 && exists(bridging);
wlan[i].upperLayerIn <-- li.out++ if sizeof(ethg)+numWlanInterfaces > 1 && exists(bridging);
}
// ethernet must be connected only AFTER wireless ports
for i=0..sizeof(ethg)-1 {
eth[i].phys <--> { @display("m=s"); } <--> ethg[i];
eth[i].upperLayerIn <-- li.out++ if sizeof(ethg)+numWlanInterfaces>1;
eth[i].upperLayerOut --> li.in++ if sizeof(ethg)+numWlanInterfaces>1;
}
}