|
|
| 1095 |
NS_LOG_DEBUG ("rx QoS unicast/sendAck from=" << hdr.GetAddr2 ()); |
1095 |
NS_LOG_DEBUG ("rx QoS unicast/sendAck from=" << hdr.GetAddr2 ()); |
| 1096 |
AgreementsI it = m_bAckAgreements.find (std::make_pair (hdr.GetAddr2 (), hdr.GetQosTid ())); |
1096 |
AgreementsI it = m_bAckAgreements.find (std::make_pair (hdr.GetAddr2 (), hdr.GetQosTid ())); |
| 1097 |
|
1097 |
|
| 1098 |
RxCompleteBufferedPacketsWithSmallerSequence (it->second.first.GetStartingSequence (), |
1098 |
RxCompleteBufferedPacketsWithSmallerSequence (it->second.first.GetStartingSequenceControl (), |
| 1099 |
hdr.GetAddr2 (), hdr.GetQosTid ()); |
1099 |
hdr.GetAddr2 (), hdr.GetQosTid ()); |
| 1100 |
RxCompleteBufferedPacketsUntilFirstLost (hdr.GetAddr2 (), hdr.GetQosTid ()); |
1100 |
RxCompleteBufferedPacketsUntilFirstLost (hdr.GetAddr2 (), hdr.GetQosTid ()); |
| 1101 |
NS_ASSERT (m_sendAckEvent.IsExpired ()); |
1101 |
NS_ASSERT (m_sendAckEvent.IsExpired ()); |
|
|
| 2325 |
int16_t bufferSize = (*it).second.first.GetBufferSize (); |
2325 |
int16_t bufferSize = (*it).second.first.GetBufferSize (); |
| 2326 |
uint16_t sum = ((uint16_t)(std::abs (winEnd - bufferSize + 1))) % 4096; |
2326 |
uint16_t sum = ((uint16_t)(std::abs (winEnd - bufferSize + 1))) % 4096; |
| 2327 |
(*it).second.first.SetStartingSequence (sum); |
2327 |
(*it).second.first.SetStartingSequence (sum); |
| 2328 |
RxCompleteBufferedPacketsWithSmallerSequence ((*it).second.first.GetStartingSequence (), originator, tid); |
2328 |
RxCompleteBufferedPacketsWithSmallerSequence ((*it).second.first.GetStartingSequenceControl (), originator, tid); |
| 2329 |
} |
2329 |
} |
| 2330 |
} |
2330 |
} |
| 2331 |
RxCompleteBufferedPacketsUntilFirstLost (originator, tid); //forwards up packets starting from winstart and set winstart to last +1 |
2331 |
RxCompleteBufferedPacketsUntilFirstLost (originator, tid); //forwards up packets starting from winstart and set winstart to last +1 |
|
|
| 2418 |
AgreementsI it = m_bAckAgreements.find (std::make_pair (originator, tid)); |
2418 |
AgreementsI it = m_bAckAgreements.find (std::make_pair (originator, tid)); |
| 2419 |
if (it != m_bAckAgreements.end ()) |
2419 |
if (it != m_bAckAgreements.end ()) |
| 2420 |
{ |
2420 |
{ |
| 2421 |
RxCompleteBufferedPacketsWithSmallerSequence (it->second.first.GetStartingSequence (), originator, tid); |
2421 |
RxCompleteBufferedPacketsWithSmallerSequence (it->second.first.GetStartingSequenceControl (), originator, tid); |
| 2422 |
RxCompleteBufferedPacketsUntilFirstLost (originator, tid); |
2422 |
RxCompleteBufferedPacketsUntilFirstLost (originator, tid); |
| 2423 |
m_bAckAgreements.erase (it); |
2423 |
m_bAckAgreements.erase (it); |
| 2424 |
|
2424 |
|
|
|
| 2440 |
uint16_t guard = 0; |
2440 |
uint16_t guard = 0; |
| 2441 |
if (last != (*it).second.second.end ()) |
2441 |
if (last != (*it).second.second.end ()) |
| 2442 |
{ |
2442 |
{ |
| 2443 |
guard = (*it).second.second.begin ()->second.GetSequenceControl () & 0xfff0; |
2443 |
guard = (*it).second.second.begin ()->second.GetSequenceControl (); |
| 2444 |
} |
2444 |
} |
| 2445 |
BufferedPacketI i = (*it).second.second.begin (); |
2445 |
BufferedPacketI i = (*it).second.second.begin (); |
| 2446 |
for (; i != (*it).second.second.end () |
2446 |
for (; i != (*it).second.second.end () |
| 2447 |
&& QosUtilsMapSeqControlToUniqueInteger ((*i).second.GetSequenceNumber (), endSequence) < mappedStart; ) |
2447 |
&& QosUtilsMapSeqControlToUniqueInteger ((*i).second.GetSequenceControl (), endSequence) < mappedStart; ) |
| 2448 |
{ |
2448 |
{ |
| 2449 |
if (guard == (*i).second.GetSequenceControl ()) |
2449 |
if (guard == (*i).second.GetSequenceControl ()) |
| 2450 |
{ |
2450 |
{ |
|
|
| 2458 |
m_rxCallback ((*last).first, &(*last).second); |
2458 |
m_rxCallback ((*last).first, &(*last).second); |
| 2459 |
last++; |
2459 |
last++; |
| 2460 |
/* go to next packet */ |
2460 |
/* go to next packet */ |
| 2461 |
while (i != (*it).second.second.end () && ((guard >> 4) & 0x0fff) == (*i).second.GetSequenceNumber ()) |
2461 |
while (i != (*it).second.second.end () && guard == (*i).second.GetSequenceControl ()) |
| 2462 |
{ |
2462 |
{ |
| 2463 |
i++; |
2463 |
i++; |
| 2464 |
} |
2464 |
} |
| 2465 |
if (i != (*it).second.second.end ()) |
2465 |
if (i != (*it).second.second.end ()) |
| 2466 |
{ |
2466 |
{ |
| 2467 |
guard = (*i).second.GetSequenceControl () & 0xfff0; |
2467 |
guard = (*i).second.GetSequenceControl (); |
| 2468 |
last = i; |
2468 |
last = i; |
| 2469 |
} |
2469 |
} |
| 2470 |
} |
2470 |
} |
|
|
| 2476 |
else |
2476 |
else |
| 2477 |
{ |
2477 |
{ |
| 2478 |
/* go to next packet */ |
2478 |
/* go to next packet */ |
| 2479 |
while (i != (*it).second.second.end () && ((guard >> 4) & 0x0fff) == (*i).second.GetSequenceNumber ()) |
2479 |
while (i != (*it).second.second.end () && guard == (*i).second.GetSequenceControl ()) |
| 2480 |
{ |
2480 |
{ |
| 2481 |
i++; |
2481 |
i++; |
| 2482 |
} |
2482 |
} |
| 2483 |
if (i != (*it).second.second.end ()) |
2483 |
if (i != (*it).second.second.end ()) |
| 2484 |
{ |
2484 |
{ |
| 2485 |
guard = (*i).second.GetSequenceControl () & 0xfff0; |
2485 |
guard = (*i).second.GetSequenceControl (); |
| 2486 |
last = i; |
2486 |
last = i; |
| 2487 |
} |
2487 |
} |
| 2488 |
} |
2488 |
} |
|
|
| 2497 |
AgreementsI it = m_bAckAgreements.find (std::make_pair (originator, tid)); |
2497 |
AgreementsI it = m_bAckAgreements.find (std::make_pair (originator, tid)); |
| 2498 |
if (it != m_bAckAgreements.end ()) |
2498 |
if (it != m_bAckAgreements.end ()) |
| 2499 |
{ |
2499 |
{ |
| 2500 |
uint16_t startingSeqCtrl = ((*it).second.first.GetStartingSequence () << 4) & 0xfff0; |
2500 |
uint16_t guard = (*it).second.first.GetStartingSequenceControl (); |
| 2501 |
uint16_t guard = startingSeqCtrl; |
|
|
| 2502 |
|
| 2503 |
BufferedPacketI lastComplete = (*it).second.second.begin (); |
2501 |
BufferedPacketI lastComplete = (*it).second.second.begin (); |
| 2504 |
BufferedPacketI i = (*it).second.second.begin (); |
2502 |
BufferedPacketI i = (*it).second.second.begin (); |
| 2505 |
for (; i != (*it).second.second.end () && guard == (*i).second.GetSequenceControl (); i++) |
2503 |
for (; i != (*it).second.second.end () && guard == (*i).second.GetSequenceControl (); i++) |
|
|
| 2516 |
} |
2514 |
} |
| 2517 |
guard = (*i).second.IsMoreFragments () ? (guard + 1) : ((guard + 16) & 0xfff0); |
2515 |
guard = (*i).second.IsMoreFragments () ? (guard + 1) : ((guard + 16) & 0xfff0); |
| 2518 |
} |
2516 |
} |
| 2519 |
(*it).second.first.SetStartingSequence ((guard >> 4) & 0x0fff); |
2517 |
(*it).second.first.SetStartingSequenceControl (guard); |
| 2520 |
/* All packets already forwarded to WifiMac must be removed from buffer: |
2518 |
/* All packets already forwarded to WifiMac must be removed from buffer: |
| 2521 |
[begin (), lastComplete) */ |
2519 |
[begin (), lastComplete) */ |
| 2522 |
(*it).second.second.erase ((*it).second.second.begin (), lastComplete); |
2520 |
(*it).second.second.erase ((*it).second.second.begin (), lastComplete); |
|
|
| 2649 |
/* All packets with smaller sequence than starting sequence control must be passed up to Wifimac |
2647 |
/* All packets with smaller sequence than starting sequence control must be passed up to Wifimac |
| 2650 |
* See 9.10.3 in IEEE 802.11e standard. |
2648 |
* See 9.10.3 in IEEE 802.11e standard. |
| 2651 |
*/ |
2649 |
*/ |
| 2652 |
RxCompleteBufferedPacketsWithSmallerSequence (reqHdr.GetStartingSequence (), originator, tid); |
2650 |
RxCompleteBufferedPacketsWithSmallerSequence (reqHdr.GetStartingSequenceControl (), originator, tid); |
| 2653 |
RxCompleteBufferedPacketsUntilFirstLost (originator, tid); |
2651 |
RxCompleteBufferedPacketsUntilFirstLost (originator, tid); |
| 2654 |
} |
2652 |
} |
| 2655 |
else |
2653 |
else |
|
|
| 2658 |
{ |
2656 |
{ |
| 2659 |
(*it).second.first.SetStartingSequence (reqHdr.GetStartingSequence ()); |
2657 |
(*it).second.first.SetStartingSequence (reqHdr.GetStartingSequence ()); |
| 2660 |
(*it).second.first.SetWinEnd (((*it).second.first.GetStartingSequence () + (*it).second.first.GetBufferSize () - 1) % 4096); |
2658 |
(*it).second.first.SetWinEnd (((*it).second.first.GetStartingSequence () + (*it).second.first.GetBufferSize () - 1) % 4096); |
| 2661 |
RxCompleteBufferedPacketsWithSmallerSequence (reqHdr.GetStartingSequence (), originator, tid); |
2659 |
RxCompleteBufferedPacketsWithSmallerSequence (reqHdr.GetStartingSequenceControl (), originator, tid); |
| 2662 |
RxCompleteBufferedPacketsUntilFirstLost (originator, tid); |
2660 |
RxCompleteBufferedPacketsUntilFirstLost (originator, tid); |
| 2663 |
(*it).second.first.SetWinEnd (((*it).second.first.GetStartingSequence () + (*it).second.first.GetBufferSize () - 1) % 4096); |
2661 |
(*it).second.first.SetWinEnd (((*it).second.first.GetStartingSequence () + (*it).second.first.GetBufferSize () - 1) % 4096); |
| 2664 |
} |
2662 |
} |