[Ns-developers] EDCA and WifiRemoteStation
Mirko Banchi
mk.banchi at gmail.com
Sat Jun 20 02:24:06 PDT 2009
Mathieu Lacage ha scritto:
> On Sun, 2009-05-24 at 20:09 +0200, Mirko Banchi wrote:
>> Mathieu Lacage ha scritto:
>>> On Wed, 2009-05-20 at 17:39 +0200, Ramon Bauza wrote:
>>>> Hello,
>>>>
>>>> I would like to tell you something I have observed regarding the EDCA
>>>> mechanism and the WifiRemoteStation. I have realized that different packets
>>>> addressed to the same peer station contending for the medium at the same
>>>> time but enqueued in different AC queues share the same WifiRemoteStation.
>>>> This means that these packets share also the same m_slrc and m_ssrc
>>>> variables. Therefore, when an ACK is not received for a transmitted packet,
>>>> the common m_slrc variable would be incremented causing a reduction of the
>>>> transmission opportunities for the rest of the packets (destinated for the
>>>> same station but enqued in different AC queues). Am I right about my
>>>> observation? If am not wrong, m_slrc and m_ssrc variables should be
>>> I think that you are right.
>>>
>>>> considered per packet and not per peer station.
>>> Well, they are both per packet and per peer station. I don't have any
>>> bright idea on how to fix this problem for now.
>>>
>>> regards,
>>> Mathieu
>>>
>>>
>> I agree. Maybe we could add a parameter to
>> WifiRemoteStation::ReportDataFailed in order to specify the access class
>> which the m_currentPacket belongs.
>
> that sounds like a good idea. Will it work with HCCA ?
>
> Mathieu
>
I've taken a look at WifiRemoteStation class about the problem of a
single retry counter also for EDCA and i have some proposals:
Two methods
bool WifiRemoteStation::NeedRtsRetransmission (Ptr<const Packet> packet)
bool WifiRemoteStation::NeedDataRetransmission (Ptr<const Packet> packet)
become
bool
WifiRemoteStation::NeedRtsRetransmission (const WifiMacHeader *hdr)
{
if (hdr->IsQosData ())
{
AccessClass ac = QosUtilsMapTidToAc (hdr->GetQosTid ());
return (m_qosSsrc.find (ac)->second < GetManager ()->GetMaxSsrc ());
}
else
{
return (m_ssrc < GetManager ()->GetMaxSsrc ());
}
}
and
bool
WifiRemoteStation::NeedDataRetransmission (const WifiMacHeader *hdr)
{
if (hdr->IsQosData ())
{
AccessClass ac = QosUtilsMapTidToAc (hdr->GetQosTid ());
return (m_qosSlrc.find (ac)->second < GetManager ()->GetMaxSlrc ());
}
else
{
return (m_slrc < GetManager ()->GetMaxSlrc ());
}
}
Methods like WifiRemoteStation::Report*
become
void ReportDataFailed (enum AccessClass ac = AC_UNDEF)
void ReportRtsFailed (enum AccessClass ac = AC_UNDEF)
void ReportRtsOk (double ackSnr, WifiMode ackMode, double dataSnr, enum
AccessClass ac = AC_UNDEF)
void ReportDataOk (double ackSnr, WifiMode ackMode, double dataSnr, enum
AccessClass ac = AC_UNDEF)
void ReportFinalRtsFailed (enum AccessClass ac = AC_UNDEF)
void ReportFinalDataFailed (enum AccessClass ac = AC_UNDEF)
void ReportRxOk (enum AccessClass ac = AC_UNDEF)
in order to specify for a Qos packet its access class.
For example:
void
WifiRemoteStation::ReportDataFailed (enum AccessClass ac)
{
if (ac == AC_UNDEF)
{
m_slrc++;
}
else
{
m_qosSlrc.find (ac)->second++;
}
DoReportDataFailed ();
}
However i don't know how this affects all objects that implement
WifiRemoteStation: should we pass the access class also to
DoReportDataFailed, DoReportRtsFailed, ... methods?
obviously is added two maps like these in WifiRemoteStation
std::map<AccessClass, TracedValue<uint32_t> > m_qosSsrc;
std::map<AccessClass, TracedValue<uint32_t> > m_qosSlrc;
What do you think about?
Mirko
--
Mirko Banchi
e-mail: mk.banchi at gmail.com
e-mail: mk.banchi at virgilio.it
id-jabber: mk.banchi at jabber.org
id-msn: mb11684 at hotmail.com
PGP key fingerprint:
308F BFB1 4E67 2522 C88E
DC69 7631 52ED 32A5 6456
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 3410 bytes
Desc: S/MIME Cryptographic Signature
Url : http://mailman.isi.edu/pipermail/ns-developers/attachments/20090620/734f1d80/smime.bin
More information about the Ns-developers
mailing list