src/devices/wifi/mac-low.cc
changeset 6331 eee2eab36748
parent 6304 645b4e644c12
child 6341 375d70f07323
equal deleted inserted replaced
6330:af9c574246d5 6331:eee2eab36748
   827              From section 11.5.3 in IEEE802.11e:
   827              From section 11.5.3 in IEEE802.11e:
   828              When a recipient does not have an active Block ack for a TID, but receives
   828              When a recipient does not have an active Block ack for a TID, but receives
   829              data MPDUs with the Ack Policy subfield set to Block Ack, it shall discard
   829              data MPDUs with the Ack Policy subfield set to Block Ack, it shall discard
   830              them and shall send a DELBA frame using the normal access 
   830              them and shall send a DELBA frame using the normal access 
   831              mechanisms. */
   831              mechanisms. */
   832           AccessClass ac = QosUtilsMapTidToAc (hdr.GetQosTid ());
   832           AcIndex ac = QosUtilsMapTidToAc (hdr.GetQosTid ());
   833           m_edcaListeners[ac]->BlockAckInactivityTimeout (hdr.GetAddr2 (), hdr.GetQosTid ());
   833           m_edcaListeners[ac]->BlockAckInactivityTimeout (hdr.GetAddr2 (), hdr.GetQosTid ());
   834           return;
   834           return;
   835         }
   835         }
   836       else if (hdr.IsQosData () && hdr.IsQosNoAck ()) 
   836       else if (hdr.IsQosData () && hdr.IsQosNoAck ()) 
   837         {
   837         {
  1536   if (respHdr->GetTimeout () != 0)
  1536   if (respHdr->GetTimeout () != 0)
  1537     {
  1537     {
  1538       AgreementsI it = m_bAckAgreements.find (std::make_pair (originator, respHdr->GetTid ()));
  1538       AgreementsI it = m_bAckAgreements.find (std::make_pair (originator, respHdr->GetTid ()));
  1539       Time timeout = MicroSeconds (1024 * agreement.GetTimeout ());
  1539       Time timeout = MicroSeconds (1024 * agreement.GetTimeout ());
  1540  
  1540  
  1541       AccessClass ac = QosUtilsMapTidToAc (agreement.GetTid ());
  1541       AcIndex ac = QosUtilsMapTidToAc (agreement.GetTid ());
  1542       
  1542       
  1543       it->second.first.m_inactivityEvent = Simulator::Schedule (timeout,
  1543       it->second.first.m_inactivityEvent = Simulator::Schedule (timeout,
  1544                                                                 &MacLowBlockAckEventListener::BlockAckInactivityTimeout,
  1544                                                                 &MacLowBlockAckEventListener::BlockAckInactivityTimeout,
  1545                                                                 m_edcaListeners[ac],
  1545                                                                 m_edcaListeners[ac],
  1546                                                                 originator, tid);
  1546                                                                 originator, tid);
  1844     {
  1844     {
  1845       NS_ASSERT (agreement.m_inactivityEvent.IsRunning ());
  1845       NS_ASSERT (agreement.m_inactivityEvent.IsRunning ());
  1846       agreement.m_inactivityEvent.Cancel ();
  1846       agreement.m_inactivityEvent.Cancel ();
  1847       Time timeout = MicroSeconds (1024 * agreement.GetTimeout ());
  1847       Time timeout = MicroSeconds (1024 * agreement.GetTimeout ());
  1848 
  1848 
  1849       AccessClass ac = QosUtilsMapTidToAc (agreement.GetTid ());
  1849       AcIndex ac = QosUtilsMapTidToAc (agreement.GetTid ());
  1850       //std::map<AccessClass, MacLowTransmissionListener*>::iterator it = m_edcaListeners.find (ac);
  1850       //std::map<AcIndex, MacLowTransmissionListener*>::iterator it = m_edcaListeners.find (ac);
  1851       //NS_ASSERT (it != m_edcaListeners.end ());
  1851       //NS_ASSERT (it != m_edcaListeners.end ());
  1852 
  1852 
  1853       agreement.m_inactivityEvent = Simulator::Schedule (timeout, 
  1853       agreement.m_inactivityEvent = Simulator::Schedule (timeout, 
  1854                                                          &MacLowBlockAckEventListener::BlockAckInactivityTimeout, 
  1854                                                          &MacLowBlockAckEventListener::BlockAckInactivityTimeout, 
  1855                                                          m_edcaListeners[ac],
  1855                                                          m_edcaListeners[ac],
  1857                                                          agreement.GetTid ());
  1857                                                          agreement.GetTid ());
  1858     }
  1858     }
  1859 }
  1859 }
  1860 
  1860 
  1861 void
  1861 void
  1862 MacLow::RegisterBlockAckListenerForAc (enum AccessClass ac, MacLowBlockAckEventListener *listener)
  1862 MacLow::RegisterBlockAckListenerForAc (enum AcIndex ac, MacLowBlockAckEventListener *listener)
  1863 {
  1863 {
  1864   m_edcaListeners.insert (std::make_pair (ac, listener));
  1864   m_edcaListeners.insert (std::make_pair (ac, listener));
  1865 }
  1865 }
  1866 
  1866 
  1867 } // namespace ns3
  1867 } // namespace ns3