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

(-)a/src/wifi/model/edca-txop-n.cc (-41 / +67 lines)
 Lines 643-648    Link Here 
643
  NS_LOG_DEBUG ("got cts");
643
  NS_LOG_DEBUG ("got cts");
644
}
644
}
645
645
646
uint8_t
647
EdcaTxopN::GetCurrentTid ()
648
{
649
  if (m_currentHdr.IsQosData ())
650
    {
651
      return m_currentHdr.GetQosTid ();
652
    }
653
  else if (m_currentHdr.IsBlockAckReq ())
654
    {
655
      CtrlBAckRequestHeader baReqHdr;
656
      m_currentPacket->PeekHeader (baReqHdr);
657
      return baReqHdr.GetTidInfo ();
658
    }
659
  else if (m_currentHdr.IsBlockAck ())
660
    {
661
      CtrlBAckResponseHeader baRespHdr;
662
      m_currentPacket->PeekHeader (baRespHdr);
663
      return baRespHdr.GetTidInfo ();
664
    }
665
  else if (m_currentHdr.IsMgt () && m_currentHdr.IsAction ())
666
    {
667
      Ptr<Packet> packet = m_currentPacket->Copy ();
668
      WifiActionHeader actionHdr;
669
      packet->RemoveHeader (actionHdr);
670
671
      if (actionHdr.GetCategory () == WifiActionHeader::BLOCK_ACK)
672
        {
673
          switch (actionHdr.GetAction ().blockAck)
674
            {
675
            case WifiActionHeader::BLOCK_ACK_ADDBA_REQUEST:
676
              {
677
                MgtAddBaResponseHeader reqHdr;
678
                packet->RemoveHeader (reqHdr);
679
                return reqHdr.GetTid ();
680
              }
681
            case WifiActionHeader::BLOCK_ACK_ADDBA_RESPONSE:
682
              {
683
                MgtAddBaResponseHeader respHdr;
684
                packet->RemoveHeader (respHdr);
685
                return respHdr.GetTid ();
686
              }
687
            case WifiActionHeader::BLOCK_ACK_DELBA:
688
              {
689
                MgtDelBaHeader delHdr;
690
                packet->RemoveHeader (delHdr);
691
                return delHdr.GetTid ();
692
              }
693
            default:
694
              {
695
                NS_FATAL_ERROR ("Don't know how to extract Traffic ID from this BA action frame");
696
              }
697
            }
698
        }
699
      else
700
        {
701
          NS_FATAL_ERROR ("Don't know how to extract Traffic ID from this action frame");
702
        }
703
    }
704
  else
705
    {
706
      NS_FATAL_ERROR ("Current packet has no Traffic ID");
707
    }
708
}
709
646
void
710
void
647
EdcaTxopN::MissedCts (void)
711
EdcaTxopN::MissedCts (void)
648
{
712
{
 Lines 660-680    Link Here 
660
      if (GetAmpduExist (m_currentHdr.GetAddr1 ()))
724
      if (GetAmpduExist (m_currentHdr.GetAddr1 ()))
661
        {
725
        {
662
          m_low->FlushAggregateQueue ();
726
          m_low->FlushAggregateQueue ();
663
          uint8_t tid = 0;
727
          uint8_t tid = GetCurrentTid ();
664
          if (m_currentHdr.IsQosData ())
665
            {
666
              tid = m_currentHdr.GetQosTid ();
667
            }
668
          else if (m_currentHdr.IsBlockAckReq ())
669
            {
670
              CtrlBAckRequestHeader baReqHdr;
671
              m_currentPacket->PeekHeader (baReqHdr);
672
              tid = baReqHdr.GetTidInfo ();
673
            }
674
          else
675
            {
676
              NS_FATAL_ERROR ("Current packet is not Qos Data nor BlockAckReq");
677
            }
678
728
679
          if (GetBaAgreementExists (m_currentHdr.GetAddr1 (), tid))
729
          if (GetBaAgreementExists (m_currentHdr.GetAddr1 (), tid))
680
            {
730
            {
 Lines 815-829    Link Here 
815
        }
865
        }
816
      if (GetAmpduExist (m_currentHdr.GetAddr1 ()))
866
      if (GetAmpduExist (m_currentHdr.GetAddr1 ()))
817
        {
867
        {
818
          uint8_t tid = 0;
868
          uint8_t tid = GetCurrentTid ();
819
          if (m_currentHdr.IsQosData ())
820
            {
821
              tid = m_currentHdr.GetQosTid ();
822
            }
823
          else
824
            {
825
              NS_FATAL_ERROR ("Current packet is not Qos Data");
826
            }
827
869
828
          if (GetBaAgreementExists (m_currentHdr.GetAddr1 (), tid))
870
          if (GetBaAgreementExists (m_currentHdr.GetAddr1 (), tid))
829
            {
871
            {
 Lines 874-896    Link Here 
874
{
916
{
875
  NS_LOG_FUNCTION (this);
917
  NS_LOG_FUNCTION (this);
876
  NS_LOG_DEBUG ("missed block ack");
918
  NS_LOG_DEBUG ("missed block ack");
877
  uint8_t tid = 0;
919
  uint8_t tid = GetCurrentTid ();
878
  if (m_currentHdr.IsQosData ())
879
    {
880
      tid = m_currentHdr.GetQosTid ();
881
    }
882
  else if (m_currentHdr.IsBlockAckReq ())
883
    {
884
      CtrlBAckRequestHeader baReqHdr;
885
      m_currentPacket->PeekHeader (baReqHdr);
886
      tid = baReqHdr.GetTidInfo ();
887
    }
888
  else if (m_currentHdr.IsBlockAck ())
889
    {
890
      CtrlBAckResponseHeader baRespHdr;
891
      m_currentPacket->PeekHeader (baRespHdr);
892
      tid = baRespHdr.GetTidInfo ();
893
    }
894
  if (GetAmpduExist (m_currentHdr.GetAddr1 ()))
920
  if (GetAmpduExist (m_currentHdr.GetAddr1 ()))
895
    {
921
    {
896
      m_stationManager->ReportAmpduTxStatus (m_currentHdr.GetAddr1 (), tid, 0, nMpdus, 0, 0);
922
      m_stationManager->ReportAmpduTxStatus (m_currentHdr.GetAddr1 (), tid, 0, nMpdus, 0, 0);
(-)a/src/wifi/model/edca-txop-n.h (+4 lines)
 Lines 523-528    Link Here 
523
   * if an established block ack agreement exists with the receiver.
523
   * if an established block ack agreement exists with the receiver.
524
   */
524
   */
525
  void VerifyBlockAck (void);
525
  void VerifyBlockAck (void);
526
  /**
527
   * Get Traffic ID of the current packet.
528
   */
529
  uint8_t GetCurrentTid ();
526
530
527
  AcIndex m_ac;
531
  AcIndex m_ac;
528
  class Dcf;
532
  class Dcf;

Return to bug 2380