View | Details | Raw Unified | Return to bug 2578
Collapse All | Expand All

(-)a/src/wifi/model/dcf-manager.cc (+1 lines)
 Lines 166-171    Link Here 
166
{
166
{
167
  return m_accessRequested;
167
  return m_accessRequested;
168
}
168
}
169
169
void
170
void
170
DcfState::NotifyAccessRequested (void)
171
DcfState::NotifyAccessRequested (void)
171
{
172
{
(-)a/src/wifi/model/edca-txop-n.cc (-45 / +54 lines)
 Lines 657-721    Link Here 
657
  WifiMacHeader header;
657
  WifiMacHeader header;
658
  if (m_currentPacket == 0)
658
  if (m_currentPacket == 0)
659
    {
659
    {
660
      packet = m_queue->Peek (&header);
660
      if (m_baManager->HasPackets ())
661
      NS_ASSERT_MSG (packet, "Internal collision but no packet in queue");
661
        {
662
          packet = m_baManager->PeekNextPacket (header);
663
        }
664
      else
665
        {
666
          packet = m_queue->Peek (&header);
667
        }
662
    }
668
    }
663
  else
669
  else
664
    {
670
    {
665
      packet = m_currentPacket;
671
      packet = m_currentPacket;
666
      header = m_currentHdr;
672
      header = m_currentHdr;
667
    }
673
    }
668
  if (m_isAccessRequestedForRts)
674
  if (packet != 0)
669
    {
670
      if (!NeedRtsRetransmission (packet, header))
671
      {
672
        resetDcf = true;
673
        m_stationManager->ReportFinalRtsFailed (header.GetAddr1 (), &header);
674
      }
675
      else
676
      {
677
        m_stationManager->ReportRtsFailed (header.GetAddr1 (), &header);
678
      }
679
    }
680
  else if (header.GetAddr1 () == Mac48Address::GetBroadcast ())
681
    {
682
      resetDcf = false;
683
    }
684
  else
685
    {
675
    {
686
      if (!NeedDataRetransmission (packet, header))
676
      if (m_isAccessRequestedForRts)
687
      {
688
        resetDcf = true;
689
        m_stationManager->ReportFinalDataFailed (header.GetAddr1 (), &header);
690
      }
691
      else
692
      {
693
        m_stationManager->ReportDataFailed (header.GetAddr1 (), &header);
694
      }
695
    }
696
  if (resetDcf)
697
    {
698
      NS_LOG_DEBUG ("reset DCF");
699
      if (!m_txFailedCallback.IsNull ())
700
        {
677
        {
701
          m_txFailedCallback (header);
678
          if (!NeedRtsRetransmission (packet, header))
679
          {
680
            resetDcf = true;
681
            m_stationManager->ReportFinalRtsFailed (header.GetAddr1 (), &header);
682
          }
683
          else
684
          {
685
            m_stationManager->ReportRtsFailed (header.GetAddr1 (), &header);
686
          }
702
        }
687
        }
703
      //to reset the dcf.
688
      else if (header.GetAddr1 () == Mac48Address::GetBroadcast ())
704
      if (m_currentPacket)
705
        {
689
        {
706
          NS_LOG_DEBUG ("Discarding m_currentPacket");
690
          resetDcf = false;
707
          m_currentPacket = 0;
708
        }
691
        }
709
      else
692
      else
710
        {
693
        {
711
          NS_LOG_DEBUG ("Dequeueing and discarding head of queue");
694
          if (!NeedDataRetransmission (packet, header))
712
          packet = m_queue->Peek (&header);
695
          {
696
            resetDcf = true;
697
            m_stationManager->ReportFinalDataFailed (header.GetAddr1 (), &header);
698
          }
699
          else
700
          {
701
            m_stationManager->ReportDataFailed (header.GetAddr1 (), &header);
702
          }
713
        }
703
        }
714
      m_dcf->ResetCw ();
704
     if (resetDcf)
715
    }
705
        {
716
  else
706
          NS_LOG_DEBUG ("reset DCF");
717
    {
707
          if (!m_txFailedCallback.IsNull ())
718
      m_dcf->UpdateFailedCw ();
708
            {
709
              m_txFailedCallback (header);
710
            }
711
          //to reset the dcf.
712
          if (m_currentPacket)
713
            {
714
              NS_LOG_DEBUG ("Discarding m_currentPacket");
715
              m_currentPacket = 0;
716
            }
717
          else
718
            {
719
              NS_LOG_DEBUG ("Dequeueing and discarding head of queue");
720
              packet = m_queue->Peek (&header);
721
            }
722
          m_dcf->ResetCw ();
723
        }
724
      else
725
        {
726
          m_dcf->UpdateFailedCw ();
727
        }
719
    }
728
    }
720
  m_backoffTrace = m_rng->GetNext (0, m_dcf->GetCw ());
729
  m_backoffTrace = m_rng->GetNext (0, m_dcf->GetCw ());
721
  m_dcf->StartBackoffNow (m_backoffTrace);
730
  m_dcf->StartBackoffNow (m_backoffTrace);

Return to bug 2578