[Ns-developers] EdcaTxopN and Beacon transmission collision
Bruno Ranieri
uni at bruno-ranieri.de
Mon Mar 22 10:14:10 PDT 2010
Hello,
I am working on a groupcast mac layer protocol in Wifi. The AP sends a
group addressed frame that address some non-AP stations. The addressed
stations reply to the AP in an addressed time slot, with an SIFS between
each reply. The initial request by the AP announces a duration that
covers the complete channel holding time for request, replies and IFSes.
This is working, now I run into the Bug report by Gustavo Carneiro
http://www.nsnam.org/bugzilla/show_bug.cgi?id=843 and fixed the Beacon
interval from 2.5s to 100ms in my simulation. After that I ran into the
problem that the transmission of all traffic in the EdcaTxopN that also
transmits the group addressed frames described above stops at a random
point in time.
After some investigation using wireshark and NS3 log output of multiple
simulation runs I figured out that the transmission stop if the
transmission of an Beacon collides with an ongoing transmission of my
groupcast protocol.
When the new transmission starts at the AP (the beacon), the ongoing
transmission is canceled using MacLow:CancelAllEvents. This invokes
EdcaTxopN::Cancel.
Now the Beacon transmission takes place. After that EdcaTxopN:Queue and
EdcaTxopN:StartAccessIfNeeded are called until the simulations ends, but
no EdcaTxopN::NotifyAccessGranted.
The Problem is that EdcaTxopN::Cancel does nothing. I added a
m_currentPacket = 0, to remove the lock. That solves the problem for me.
I did not filed directly a bug report because I can reproduce this bug
only with my protocol running. That may be because the request, rely
frames take a long channel holding time and the problem looks like a
concurrency problem.
The other issue is the Beacon generation itself. According to IEEE
802.11-2007 clause 11.1.2.1 Beacon generation in infrastructure
networks, not the ongoing transmission shall be canceled but the Beacon
shall be deferred.
Is this possible another bug, or is the problem in my code? By not
calling the appropriate methods to protect the ongoing transmission from
this internal collision?
Thanks for your help.
Bruno
More information about the Ns-developers
mailing list