'Wireless NeSTiNg hosts in INET wlan[0].radio: "Reception started: not attempting"

I have a simulation running with the following elements:

  • 2 switches (directly connected)
  • 2 access points (connected one per switch)
  • 2 wireless custom hosts (connected wirelessly one per access point)

Interference has been disabled. Scalar radio medium. Ieee80211 wireless interface. I've used simple STA management which takes care of association and the likes. I have confirmed that everything is running and am not getting any error in my code (I worked through all of them). Packets are transmitted out the workstation radio. But for some reason the wireless radios on the access point and second wireless host aren't receiving packets. The only hint that something is wrong is from this message in the console displayed on the receiving wireless devices as my simulation is running:
"reception started: not attempting"

Working on OMNET++ 5.4.1, running INET v4.1.0 (plus NeSTiNg framework).
Does anyone know how to get my radios receiving?

NED file:

package nesting.simulations.examples;

import ned.DatarateChannel;
import nesting.node.ethernet.VlanEtherHostQ;
import nesting.node.ethernet.VlanEtherHostSched;
import nesting.node.ethernet.VlanEtherSwitchPreemptable;
import inet.visualizer.contract.IIntegratedVisualizer;
import inet.networklayer.configurator.ipv4.Ipv4NetworkConfigurator;
import inet.node.wireless.AccessPoint;
import inet.physicallayer.contract.packetlevel.IRadioMedium;

network Case1Scenario
{
    parameters:
        @display("bgb=650,500;bgg=100,1,grey95");
        @figure[title](type=label; pos=0,-1; anchor=sw; color=darkblue);
        
        @figure[rcvdPkText](type=indicatorText; pos=380,20; anchor=w; font=,18; textFormat="packets received: %g"; initialValue=0);
        @statistic[packetReceived](source=backupServer.trafGenApp[0].packetReceived; record=figure(count); targetFigure=rcvdPkText);
        
    types:
        channel C extends DatarateChannel
        {
            delay = 0.1us;
            datarate = 1Gbps;
        }
    submodules:
        visualizer: <default("IntegratedCanvasVisualizer")> like IIntegratedVisualizer if hasVisualizer() {
            parameters:
                @display("p=100,300;is=s");
        }
        configurator: Ipv4NetworkConfigurator {
            parameters:
                @display("p=100,100;is=s");
                config = xml("<config><interface hosts='*' address='145.236.x.x' netmask='255.255.0.0'/></config>");
        }
        switchA: VlanEtherSwitchPreemptable {
            parameters:
                @display("p=188,127");
            gates:
                ethg[4];
        }
        switchB: VlanEtherSwitchPreemptable {
            parameters:
                @display("p=327,127");
            gates:
                ethg[3];
        }
        accessPoint1: AccessPoint {
            parameters:
                @display("p=115,127");
        }
        accessPoint2: AccessPoint {
            parameters:
                @display("p=400,127");
        }
        radioMedium: <default("Ieee80211ScalarRadioMedium")> like IRadioMedium {
            @display("p=446,100");
        }
        workstation1: VlanEtherHostQ {
            @display("p=79,62");
        }
        backupServer: VlanEtherHostQ {
            @display("p=446,54");
        }
        
    connections allowunconnected:
        switchA.ethg[3] <--> C <--> switchB.ethg[2];
        accessPoint1.ethg++ <--> C <--> switchA.ethg[1];
        accessPoint2.ethg++ <--> C <--> switchB.ethg[1];
}

INI file:

[General]
network = Case1Scenario

record-eventlog = false 
debug-on-errors = true
result-dir = results_case1
sim-time-limit = 1s

# debug
**.displayAddresses = true
**.verbose = true

# MAC Addresses
**.workstation1.wlan[*].address = "00-00-00-00-00-02"
**.backupServer.wlan[*].address = "00-00-00-00-00-05"

# access point configuration
**.accessPoint1.wlan[0].address = "00-00-00-00-00-06"
**.accessPoint2.wlan[0].address = "00-00-00-00-00-07"

# workstation 1 is associated with AP1
**.workstation*.wlan[0].mgmt.accessPointAddress = "00-00-00-00-00-06"

# robotic arm and backup server are associated with AP2
**.backupServer.wlan[0].mgmt.accessPointAddress = "00-00-00-00-00-07"

# use simplified ieee802.11 management (no association, authentication etc.)
**.workstation*.wlan[*].mgmt.typename = "Ieee80211MgmtStaSimplified"
**.backupServer.wlan[*].mgmt.typename = "Ieee80211MgmtStaSimplified"
**.accessPoint*.wlan[*].mgmt.typename = "Ieee80211MgmtApSimplified"

# Switches
**.switch*.processingDelay.delay = 5us
**.filteringDatabase.database = xmldoc("xml/TestScenarioRouting.xml", "/filteringDatabases/")

**.switchA.eth[3].queue.gateController.initialSchedule = xmldoc("xml/TestScenarioSchedule_AllOpen.xml", "/schedules/switch[@name='switchA']/port[@id='3']/schedule")
**.switchB.eth[1].queue.gateController.initialSchedule = xmldoc("xml/TestScenarioSchedule_AllOpen.xml", "/schedules/switch[@name='switchB']/port[@id='1']/schedule")
**.switch*.eth[*].queue.gateController.enableHoldAndRelease = false
**.switch*.eth[*].queue.numberOfQueues = 8
**.switch*.eth[*].queue.tsAlgorithms[0].typename = "StrictPriority"
**.switch*.eth[*].queue.tsAlgorithms[1].typename = "StrictPriority"
**.switch*.eth[*].queue.tsAlgorithms[2].typename = "StrictPriority"
**.switch*.eth[*].queue.tsAlgorithms[3].typename = "StrictPriority"
**.switch*.eth[*].queue.tsAlgorithms[4].typename = "StrictPriority"
**.switch*.eth[*].queue.tsAlgorithms[5].typename = "StrictPriority"
**.switch*.eth[*].queue.tsAlgorithms[6].typename = "StrictPriority"
**.switch*.eth[*].queue.tsAlgorithms[7].typename = "StrictPriority"
**.switch*.eth[*].queue.queues[0].expressQueue = true
**.switch*.eth[*].queue.queues[1].expressQueue = true
**.switch*.eth[*].queue.queues[2].expressQueue = true
**.switch*.eth[*].queue.queues[3].expressQueue = true
**.switch*.eth[*].queue.queues[4].expressQueue = true
**.switch*.eth[*].queue.queues[5].expressQueue = true
**.switch*.eth[*].queue.queues[6].expressQueue = true
**.switch*.eth[*].queue.queues[7].expressQueue = true

**.queues[*].bufferCapacity = 363360b

**.switchA.eth[3].mac.enablePreemptingFrames = false

# Workstations
**.workstation*.trafGenApp.destAddress = "00-00-00-00-00-05"
**.workstation*.trafGenApp.packetLength = 1500Byte-4Byte # MTU-Size - VLAN-Tag-Size
**.workstation*.trafGenApp.sendInterval = 12us
**.workstation*.trafGenApp.vlanTagEnabled = true
**.workstation1.trafGenApp.pcp = 6

# Backup Server
**.backupServer.trafGenApp.numPacketsPerBurst = 0
**.backupServer.trafGenApp.sendInterval = 1ms
**.backupServer.trafGenApp.packetLength = 100B

**.bandName = "5 GHz (40 MHz)"
**.opMode = "ac"
**.wlan[*].radio.antenna.numAntennas = 8 #maximum number of streams for 802.11ac is 8
**.bitrate = 1Gbps

# Modelling interference and communication
**.radioMedium.analogModel.ignorePartialInterference = true

**.visualizer.mediumVisualizer.packetFilter = "" # to handle an "implicit chunk serialization" error


Solution 1:[1]

I began looking through some factors which influence whether a signal reception is attempted or not, pointed out to me by an INET developer. I traced it down to the power. Initially I thought it was the transmission power, but another set of eyes from a NeSTiNg developer helped point out this line of code which helped me:

"Computing whether listening is possible: maximum power = 0.01 pW, energy detection = 3.16228 pW -> listening is impossible"

He mentioned that receiving seems to work only if maxPower >= energyDetection ( inet/physicallayer/base/packetlevel/FlatReceiverBase.cc Line 60)

So, I began by altering the receiver energyDetection (default -85dBm) in my wireless receiving host to be smaller than the backgroundNoise power of my radioMedium (default -110dBm). Then I did it the other way round, by increasing my power to a value of say -40dBm, while leaving energyDetection constant at -85dBm. Both led to this result: the receiving host changed and no longer gave warnings about "Reception started: not attempting"! I did run into a problem afterward where my accessPoint does not proceed past the contention phase, but this is progress nonetheless ?

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Arn