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

(-)Downloads/original/src/wifi/model/mac-low.cc (-12 / +24 lines)
 Lines 533-539   void Link Here 
533
MacLow::ResetPhy (void)
533
MacLow::ResetPhy (void)
534
{
534
{
535
  m_phy->SetReceiveOkCallback (MakeNullCallback<void, Ptr<Packet>, double, WifiTxVector, enum WifiPreamble> ());
535
  m_phy->SetReceiveOkCallback (MakeNullCallback<void, Ptr<Packet>, double, WifiTxVector, enum WifiPreamble> ());
536
  m_phy->SetReceiveErrorCallback (MakeNullCallback<void, Ptr<const Packet>, double, bool> ());
536
  m_phy->SetReceiveErrorCallback (MakeNullCallback<void, Ptr<Packet>, double, bool> ());
537
  RemovePhyMacLowListener (m_phy);
537
  RemovePhyMacLowListener (m_phy);
538
  m_phy = 0;
538
  m_phy = 0;
539
}
539
}
 Lines 837-850   MacLow::NeedCtsToSelf (void) Link Here 
837
}
837
}
838
838
839
void
839
void
840
MacLow::ReceiveError (Ptr<const Packet> packet, double rxSnr, bool isEndOfFrame)
840
MacLow::ReceiveError (Ptr<Packet> packet, double rxSnr, bool isEndOfFrame)
841
{
841
{
842
  NS_LOG_FUNCTION (this << packet << rxSnr << isEndOfFrame);
842
  NS_LOG_FUNCTION (this << packet << rxSnr << isEndOfFrame);
843
  NS_LOG_DEBUG ("rx failed ");
843
  NS_LOG_DEBUG ("rx failed ");
844
  if (isEndOfFrame == true && m_receivedAtLeastOneMpdu == true)
844
  if (isEndOfFrame == true && m_receivedAtLeastOneMpdu == true)
845
    {
845
    {
846
      WifiMacHeader hdr;
846
      WifiMacHeader hdr;
847
      packet->PeekHeader (hdr);
847
      MpduAggregator::DeaggregatedMpdus mpdu = MpduAggregator::Deaggregate (packet);
848
      mpdu.begin ()->first->PeekHeader (hdr);
848
      if (hdr.GetAddr1 () != m_self)
849
      if (hdr.GetAddr1 () != m_self)
849
        {
850
        {
850
          NS_LOG_DEBUG ("hdr addr1 " << hdr.GetAddr1 () << "not for me (" << m_self << "); returning");
851
          NS_LOG_DEBUG ("hdr addr1 " << hdr.GetAddr1 () << "not for me (" << m_self << "); returning");
 Lines 1635-1641   MacLow::ForwardDown (Ptr<const Packet> p Link Here 
1635
                ", mode=" << txVector.GetMode  () <<
1636
                ", mode=" << txVector.GetMode  () <<
1636
                ", duration=" << hdr->GetDuration () <<
1637
                ", duration=" << hdr->GetDuration () <<
1637
                ", seq=0x" << std::hex << m_currentHdr.GetSequenceControl () << std::dec);
1638
                ", seq=0x" << std::hex << m_currentHdr.GetSequenceControl () << std::dec);
1638
  if (!m_ampdu || hdr->IsRts ())
1639
  NS_LOG_DEBUG ("m_ampdu=" << m_ampdu);
1640
  if (!m_ampdu || hdr->IsRts () || hdr->IsBlockAck ())
1639
    {
1641
    {
1640
      m_phy->SendPacket (packet, txVector, preamble);
1642
      m_phy->SendPacket (packet, txVector, preamble);
1641
    }
1643
    }
 Lines 1682-1695   MacLow::ForwardDown (Ptr<const Packet> p Link Here 
1682
1684
1683
          listenerIt->second->GetMpduAggregator ()->AddHeaderAndPad (newPacket, last, vhtSingleMpdu);
1685
          listenerIt->second->GetMpduAggregator ()->AddHeaderAndPad (newPacket, last, vhtSingleMpdu);
1684
1686
1685
          if (hdr->IsBlockAckReq ())
1687
//          if (hdr->IsBlockAckReq ())
1686
            {
1688
//            {
1687
              ampdutag.SetNoOfMpdus (queueSize - 1);
1689
//              ampdutag.SetNoOfMpdus (queueSize - 1);
1688
            }
1690
//            }
1689
          else
1691
//          else
1690
            {
1692
//            {
1691
              ampdutag.SetNoOfMpdus (queueSize);
1693
              ampdutag.SetNoOfMpdus (queueSize);
1692
            }
1694
//            }
1693
          newPacket->AddPacketTag (ampdutag);
1695
          newPacket->AddPacketTag (ampdutag);
1694
          
1696
          
1695
          if (delay == Seconds (0))
1697
          if (delay == Seconds (0))
 Lines 2894-2899   MacLow::DeaggregateAmpduAndReceive (Ptr< Link Here 
2894
bool
2896
bool
2895
MacLow::StopMpduAggregation (Ptr<const Packet> peekedPacket, WifiMacHeader peekedHdr, Ptr<Packet> aggregatedPacket, uint16_t size) const
2897
MacLow::StopMpduAggregation (Ptr<const Packet> peekedPacket, WifiMacHeader peekedHdr, Ptr<Packet> aggregatedPacket, uint16_t size) const
2896
{
2898
{
2899
  NS_LOG_FUNCTION (this << size);
2897
  WifiPreamble preamble;
2900
  WifiPreamble preamble;
2898
  WifiTxVector dataTxVector = GetDataTxVector (m_currentPacket, &m_currentHdr);
2901
  WifiTxVector dataTxVector = GetDataTxVector (m_currentPacket, &m_currentHdr);
2899
2902
 Lines 2948-2953   Ptr<Packet> Link Here 
2948
MacLow::AggregateToAmpdu (Ptr<const Packet> packet, const WifiMacHeader hdr)
2951
MacLow::AggregateToAmpdu (Ptr<const Packet> packet, const WifiMacHeader hdr)
2949
{
2952
{
2950
  NS_ASSERT (m_aggregateQueue->GetSize () == 0);
2953
  NS_ASSERT (m_aggregateQueue->GetSize () == 0);
2954
  NS_LOG_FUNCTION (this << packet << hdr);
2951
  bool isAmpdu = false;
2955
  bool isAmpdu = false;
2952
  Ptr<Packet> newPacket, tempPacket;
2956
  Ptr<Packet> newPacket, tempPacket;
2953
  WifiMacHeader peekedHdr;
2957
  WifiMacHeader peekedHdr;
 Lines 2965-2972   MacLow::AggregateToAmpdu (Ptr<const Pack Link Here 
2965
      std::map<AcIndex, MacLowAggregationCapableTransmissionListener*>::const_iterator listenerIt = m_edcaListeners.find (ac);
2969
      std::map<AcIndex, MacLowAggregationCapableTransmissionListener*>::const_iterator listenerIt = m_edcaListeners.find (ac);
2966
      NS_ASSERT (listenerIt != m_edcaListeners.end ());
2970
      NS_ASSERT (listenerIt != m_edcaListeners.end ());
2967
      queue = listenerIt->second->GetQueue ();
2971
      queue = listenerIt->second->GetQueue ();
2972
      NS_LOG_DEBUG ("Before-QueueSize=" << queue->GetNPacketsByTidAndAddress (tid, WifiMacHeader::ADDR1, hdr.GetAddr1 ()));
2968
2973
2969
      if (!hdr.GetAddr1 ().IsBroadcast () && listenerIt->second->GetMpduAggregator () != 0)
2974
      if (!hdr.GetAddr1 ().IsBroadcast ()
2975
          && (listenerIt->second->GetMpduAggregator () != 0)
2976
          && (queue->GetNPacketsByTidAndAddress (tid, WifiMacHeader::ADDR1, hdr.GetAddr1 ()) != 0))
2970
        {
2977
        {
2971
          //Have to make sure that their exist a block Ack agreement before sending an AMPDU (BlockAck Manager)
2978
          //Have to make sure that their exist a block Ack agreement before sending an AMPDU (BlockAck Manager)
2972
          if (listenerIt->second->GetBlockAckAgreementExists (hdr.GetAddr1 (), tid))
2979
          if (listenerIt->second->GetBlockAckAgreementExists (hdr.GetAddr1 (), tid))
 Lines 3018-3023   MacLow::AggregateToAmpdu (Ptr<const Pack Link Here 
3018
              Ptr<const Packet> peekedPacket = listenerIt->second->PeekNextPacketInBaQueue (peekedHdr, peekedHdr.GetAddr1 (), tid, &tstamp);
3025
              Ptr<const Packet> peekedPacket = listenerIt->second->PeekNextPacketInBaQueue (peekedHdr, peekedHdr.GetAddr1 (), tid, &tstamp);
3019
              if (peekedPacket == 0)
3026
              if (peekedPacket == 0)
3020
                {
3027
                {
3028
                  NS_LOG_DEBUG ("PeekedPacket=0");
3021
                  peekedPacket = queue->PeekByTidAndAddress (&peekedHdr, tid,
3029
                  peekedPacket = queue->PeekByTidAndAddress (&peekedHdr, tid,
3022
                                                             WifiMacHeader::ADDR1,
3030
                                                             WifiMacHeader::ADDR1,
3023
                                                             hdr.GetAddr1 (), &tstamp);
3031
                                                             hdr.GetAddr1 (), &tstamp);
 Lines 3035-3044   MacLow::AggregateToAmpdu (Ptr<const Pack Link Here 
3035
                }
3043
                }
3036
              else
3044
              else
3037
                {
3045
                {
3046
                  NS_LOG_DEBUG ("PeekedPacket!=0");
3038
                  retry = true;
3047
                  retry = true;
3039
                  currentSequenceNumber = peekedHdr.GetSequenceNumber ();
3048
                  currentSequenceNumber = peekedHdr.GetSequenceNumber ();
3040
                }
3049
                }
3041
3050
3051
//              NS_LOG_DEBUG ("After-QueueSize=" << queue->GetNPacketsByTidAndAddress (tid, WifiMacHeader::ADDR1, hdr.GetAddr1 ()));
3052
3042
              while (IsInWindow (currentSequenceNumber, startingSequenceNumber, 64) && !StopMpduAggregation (peekedPacket, peekedHdr, currentAggregatedPacket, blockAckSize))
3053
              while (IsInWindow (currentSequenceNumber, startingSequenceNumber, 64) && !StopMpduAggregation (peekedPacket, peekedHdr, currentAggregatedPacket, blockAckSize))
3043
                {
3054
                {
3044
                  //for now always send AMPDU with normal ACK
3055
                  //for now always send AMPDU with normal ACK
 Lines 3256-3261   MacLow::InsertInTxQueue (Ptr<const Packe Link Here 
3256
Ptr<Packet>
3267
Ptr<Packet>
3257
MacLow::PerformMsduAggregation (Ptr<const Packet> packet, WifiMacHeader *hdr, Time *tstamp, Ptr<Packet> currentAmpduPacket, uint16_t blockAckSize)
3268
MacLow::PerformMsduAggregation (Ptr<const Packet> packet, WifiMacHeader *hdr, Time *tstamp, Ptr<Packet> currentAmpduPacket, uint16_t blockAckSize)
3258
{
3269
{
3270
  NS_LOG_FUNCTION (this << packet << hdr << *tstamp << currentAmpduPacket << blockAckSize);
3259
  bool msduAggregation = false;
3271
  bool msduAggregation = false;
3260
  bool isAmsdu = false;
3272
  bool isAmsdu = false;
3261
  Ptr<Packet> currentAmsduPacket = Create<Packet> ();
3273
  Ptr<Packet> currentAmsduPacket = Create<Packet> ();
(-)Downloads/original/src/wifi/model/mac-low.h (-1 / +1 lines)
 Lines 732-738   public: Link Here 
732
   * This method is typically invoked by the lower PHY layer to notify
732
   * This method is typically invoked by the lower PHY layer to notify
733
   * the MAC layer that a packet was unsuccessfully received.
733
   * the MAC layer that a packet was unsuccessfully received.
734
   */
734
   */
735
  void ReceiveError (Ptr<const Packet> packet, double rxSnr, bool isEndOfFrame);
735
  void ReceiveError (Ptr<Packet> packet, double rxSnr, bool isEndOfFrame);
736
  /**
736
  /**
737
   * \param duration switching delay duration.
737
   * \param duration switching delay duration.
738
   *
738
   *
(-)Downloads/original/src/wifi/model/wifi-phy.h (-1 / +1 lines)
 Lines 194-200   public: Link Here 
194
   * arg2: snr of packet
194
   * arg2: snr of packet
195
   * arg3: PHY-RXEND flag
195
   * arg3: PHY-RXEND flag
196
   */
196
   */
197
  typedef Callback<void, Ptr<const Packet>, double, bool> RxErrorCallback;
197
  typedef Callback<void, Ptr<Packet>, double, bool> RxErrorCallback;
198
198
199
  static TypeId GetTypeId (void);
199
  static TypeId GetTypeId (void);
200
200
(-)Downloads/original/src/wifi/model/wifi-phy-state-helper.cc (-1 / +1 lines)
 Lines 442-448   WifiPhyStateHelper::SwitchFromRxEndOk (P Link Here 
442
}
442
}
443
443
444
void
444
void
445
WifiPhyStateHelper::SwitchFromRxEndError (Ptr<const Packet> packet, double snr, bool isEndOfFrame)
445
WifiPhyStateHelper::SwitchFromRxEndError (Ptr<Packet> packet, double snr, bool isEndOfFrame)
446
{
446
{
447
  m_rxErrorTrace (packet, snr);
447
  m_rxErrorTrace (packet, snr);
448
  NotifyRxEndError ();
448
  NotifyRxEndError ();
(-)Downloads/original/src/wifi/model/wifi-phy-state-helper.h (-1 / +1 lines)
 Lines 169-175   public: Link Here 
169
   * \param snr the SNR of the received packet
169
   * \param snr the SNR of the received packet
170
   * \param isEndOfFrame PHY-RXEND indication.
170
   * \param isEndOfFrame PHY-RXEND indication.
171
   */
171
   */
172
  void SwitchFromRxEndError (Ptr<const Packet> packet, double snr, bool isEndOfFrame);
172
  void SwitchFromRxEndError (Ptr<Packet> packet, double snr, bool isEndOfFrame);
173
  /**
173
  /**
174
   * Switch to CCA busy.
174
   * Switch to CCA busy.
175
   *
175
   *

Return to bug 2318