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

(-)a/src/wifi/model/edca-txop-n.cc (-59 / +52 lines)
 Lines 679-717    Link Here 
679
        {
679
        {
680
          m_low->FlushAggregateQueue ();
680
          m_low->FlushAggregateQueue ();
681
          uint8_t tid = 0;
681
          uint8_t tid = 0;
682
          // Bug 2224 workaround; avoid taking BAR action if m_currentHdr is not QoS
682
          if (m_currentHdr.IsQosData ())
683
          if (m_currentHdr.IsQosData ())
683
            {
684
            {
684
              tid = m_currentHdr.GetQosTid ();
685
              tid = m_currentHdr.GetQosTid ();
685
            }
686
          else
687
            {
688
              NS_FATAL_ERROR ("Current packet is not Qos Data");
689
            }
690
686
691
          if (GetBaAgreementExists (m_currentHdr.GetAddr1 (), tid))
687
              if (GetBaAgreementExists (m_currentHdr.GetAddr1 (), tid))
692
            {
688
                {
693
              NS_LOG_DEBUG ("Transmit Block Ack Request");
689
                  NS_LOG_DEBUG ("Transmit Block Ack Request");
694
              CtrlBAckRequestHeader reqHdr;
690
                  CtrlBAckRequestHeader reqHdr;
695
              reqHdr.SetType (COMPRESSED_BLOCK_ACK);
691
                  reqHdr.SetType (COMPRESSED_BLOCK_ACK);
696
              reqHdr.SetStartingSequence (m_txMiddle->PeekNextSequenceNumberfor (&m_currentHdr));
692
                  reqHdr.SetStartingSequence (m_txMiddle->PeekNextSequenceNumberfor (&m_currentHdr));
697
              reqHdr.SetTidInfo (tid);
693
                  reqHdr.SetTidInfo (tid);
698
              reqHdr.SetHtImmediateAck (true);
694
                  reqHdr.SetHtImmediateAck (true);
699
              Ptr<Packet> bar = Create<Packet> ();
695
                  Ptr<Packet> bar = Create<Packet> ();
700
              bar->AddHeader (reqHdr);
696
                  bar->AddHeader (reqHdr);
701
              Bar request (bar, m_currentHdr.GetAddr1 (), tid, reqHdr.MustSendHtImmediateAck ());
697
                  Bar request (bar, m_currentHdr.GetAddr1 (), tid, reqHdr.MustSendHtImmediateAck ());
702
              m_currentBar = request;
698
                  m_currentBar = request;
703
              WifiMacHeader hdr;
699
                  WifiMacHeader hdr;
704
              hdr.SetType (WIFI_MAC_CTL_BACKREQ);
700
                  hdr.SetType (WIFI_MAC_CTL_BACKREQ);
705
              hdr.SetAddr1 (request.recipient);
701
                  hdr.SetAddr1 (request.recipient);
706
              hdr.SetAddr2 (m_low->GetAddress ());
702
                  hdr.SetAddr2 (m_low->GetAddress ());
707
              hdr.SetAddr3 (m_low->GetBssid ());
703
                  hdr.SetAddr3 (m_low->GetBssid ());
708
              hdr.SetDsNotTo ();
704
                  hdr.SetDsNotTo ();
709
              hdr.SetDsNotFrom ();
705
                  hdr.SetDsNotFrom ();
710
              hdr.SetNoRetry ();
706
                  hdr.SetNoRetry ();
711
              hdr.SetNoMoreFragments ();
707
                  hdr.SetNoMoreFragments ();
712
              m_currentPacket = request.bar;
708
                  m_currentPacket = request.bar;
713
              m_currentHdr = hdr;
709
                  m_currentHdr = hdr;
714
              resetCurrentPacket = false;
710
                  resetCurrentPacket = false;
711
                }
715
            }
712
            }
716
        }
713
        }
717
      //to reset the dcf.
714
      //to reset the dcf.
 Lines 833-869    Link Here 
833
          if (m_currentHdr.IsQosData ())
830
          if (m_currentHdr.IsQosData ())
834
            {
831
            {
835
              tid = m_currentHdr.GetQosTid ();
832
              tid = m_currentHdr.GetQosTid ();
836
            }
837
          else
838
            {
839
              NS_FATAL_ERROR ("Current packet is not Qos Data");
840
            }
841
833
842
          if (GetBaAgreementExists (m_currentHdr.GetAddr1 (), tid))
834
              if (GetBaAgreementExists (m_currentHdr.GetAddr1 (), tid))
843
            {
835
                {
844
              //send Block ACK Request in order to shift WinStart at the receiver
836
                  //send Block ACK Request in order to shift WinStart at the receiver
845
              NS_LOG_DEBUG ("Transmit Block Ack Request");
837
                  NS_LOG_DEBUG ("Transmit Block Ack Request");
846
              CtrlBAckRequestHeader reqHdr;
838
                  CtrlBAckRequestHeader reqHdr;
847
              reqHdr.SetType (COMPRESSED_BLOCK_ACK);
839
                  reqHdr.SetType (COMPRESSED_BLOCK_ACK);
848
              reqHdr.SetStartingSequence (m_txMiddle->PeekNextSequenceNumberfor (&m_currentHdr));
840
                  reqHdr.SetStartingSequence (m_txMiddle->PeekNextSequenceNumberfor (&m_currentHdr));
849
              reqHdr.SetTidInfo (tid);
841
                  reqHdr.SetTidInfo (tid);
850
              reqHdr.SetHtImmediateAck (true);
842
                  reqHdr.SetHtImmediateAck (true);
851
              Ptr<Packet> bar = Create<Packet> ();
843
                  Ptr<Packet> bar = Create<Packet> ();
852
              bar->AddHeader (reqHdr);
844
                  bar->AddHeader (reqHdr);
853
              Bar request (bar, m_currentHdr.GetAddr1 (), tid, reqHdr.MustSendHtImmediateAck ());
845
                  Bar request (bar, m_currentHdr.GetAddr1 (), tid, reqHdr.MustSendHtImmediateAck ());
854
              m_currentBar = request;
846
                  m_currentBar = request;
855
              WifiMacHeader hdr;
847
                  WifiMacHeader hdr;
856
              hdr.SetType (WIFI_MAC_CTL_BACKREQ);
848
                  hdr.SetType (WIFI_MAC_CTL_BACKREQ);
857
              hdr.SetAddr1 (request.recipient);
849
                  hdr.SetAddr1 (request.recipient);
858
              hdr.SetAddr2 (m_low->GetAddress ());
850
                  hdr.SetAddr2 (m_low->GetAddress ());
859
              hdr.SetAddr3 (m_low->GetBssid ());
851
                  hdr.SetAddr3 (m_low->GetBssid ());
860
              hdr.SetDsNotTo ();
852
                  hdr.SetDsNotTo ();
861
              hdr.SetDsNotFrom ();
853
                  hdr.SetDsNotFrom ();
862
              hdr.SetNoRetry ();
854
                  hdr.SetNoRetry ();
863
              hdr.SetNoMoreFragments ();
855
                  hdr.SetNoMoreFragments ();
864
              m_currentPacket = request.bar;
856
                  m_currentPacket = request.bar;
865
              m_currentHdr = hdr;
857
                  m_currentHdr = hdr;
866
              resetCurrentPacket = false;
858
                  resetCurrentPacket = false;
859
                }
867
            }
860
            }
868
        }
861
        }
869
      //to reset the dcf.
862
      //to reset the dcf.

Return to bug 2224