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

(-)a/src/wifi/model/wifi-remote-station-manager.cc (-8 / +12 lines)
 Lines 498-506    Link Here 
498
  return DoNeedFragmentation (station, packet, normally);
498
  return DoNeedFragmentation (station, packet, normally);
499
}
499
}
500
uint32_t
500
uint32_t
501
WifiRemoteStationManager::GetNFragments (Ptr<const Packet> packet)
501
WifiRemoteStationManager::GetNFragments (const WifiMacHeader *header, Ptr<const Packet> packet)
502
{
502
{
503
  uint32_t nFragments = packet->GetSize () / GetFragmentationThreshold () + 1;
503
  uint32_t nFragments = (packet->GetSize () / (GetFragmentationThreshold () - header->GetSize () - WIFI_MAC_FCS_LENGTH));
504
  if ((packet->GetSize () % (GetFragmentationThreshold () - header->GetSize () - WIFI_MAC_FCS_LENGTH)) > 0)
505
    {
506
      nFragments++;
507
    }
504
  return nFragments;
508
  return nFragments;
505
}
509
}
506
510
 Lines 509-527    Link Here 
509
                                           Ptr<const Packet> packet, uint32_t fragmentNumber)
513
                                           Ptr<const Packet> packet, uint32_t fragmentNumber)
510
{
514
{
511
  NS_ASSERT (!address.IsGroup ());
515
  NS_ASSERT (!address.IsGroup ());
512
  uint32_t nFragment = GetNFragments (packet);
516
  uint32_t nFragment = GetNFragments (header, packet);
513
  if (fragmentNumber >= nFragment)
517
  if (fragmentNumber >= nFragment)
514
    {
518
    {
515
      return 0;
519
      return 0;
516
    }
520
    }
517
  if (fragmentNumber == nFragment - 1)
521
  if (fragmentNumber == nFragment - 1)
518
    {
522
    {
519
      uint32_t lastFragmentSize = packet->GetSize () % GetFragmentationThreshold ();
523
      uint32_t lastFragmentSize = packet->GetSize () % (GetFragmentationThreshold () - header->GetSize () - WIFI_MAC_FCS_LENGTH);
520
      return lastFragmentSize;
524
      return lastFragmentSize;
521
    }
525
    }
522
  else
526
  else
523
    {
527
    {
524
      return GetFragmentationThreshold ();
528
      return GetFragmentationThreshold () - header->GetSize () - WIFI_MAC_FCS_LENGTH;
525
    }
529
    }
526
}
530
}
527
uint32_t
531
uint32_t
 Lines 529-536    Link Here 
529
                                             Ptr<const Packet> packet, uint32_t fragmentNumber)
533
                                             Ptr<const Packet> packet, uint32_t fragmentNumber)
530
{
534
{
531
  NS_ASSERT (!address.IsGroup ());
535
  NS_ASSERT (!address.IsGroup ());
532
  NS_ASSERT (fragmentNumber < GetNFragments (packet));
536
  NS_ASSERT (fragmentNumber < GetNFragments (header, packet));
533
  uint32_t fragmentOffset = fragmentNumber * GetFragmentationThreshold ();
537
  uint32_t fragmentOffset = fragmentNumber * (GetFragmentationThreshold () - header->GetSize () - WIFI_MAC_FCS_LENGTH);
534
  return fragmentOffset;
538
  return fragmentOffset;
535
}
539
}
536
bool
540
bool
 Lines 538-544    Link Here 
538
                                          Ptr<const Packet> packet, uint32_t fragmentNumber)
542
                                          Ptr<const Packet> packet, uint32_t fragmentNumber)
539
{
543
{
540
  NS_ASSERT (!address.IsGroup ());
544
  NS_ASSERT (!address.IsGroup ());
541
  bool isLast = fragmentNumber == (GetNFragments (packet) - 1);
545
  bool isLast = fragmentNumber == (GetNFragments (header, packet) - 1);
542
  return isLast;
546
  return isLast;
543
}
547
}
544
WifiMode
548
WifiMode
(-)a/src/wifi/model/wifi-remote-station-manager.h (-1 / +1 lines)
 Lines 393-399    Link Here 
393
  /// Find a remote station by its remote address and TID taken from MAC header
393
  /// Find a remote station by its remote address and TID taken from MAC header
394
  WifiRemoteStation* Lookup (Mac48Address address, const WifiMacHeader *header) const;
394
  WifiRemoteStation* Lookup (Mac48Address address, const WifiMacHeader *header) const;
395
  WifiMode GetControlAnswerMode (Mac48Address address, WifiMode reqMode);
395
  WifiMode GetControlAnswerMode (Mac48Address address, WifiMode reqMode);
396
  uint32_t GetNFragments (Ptr<const Packet> packet);
396
  uint32_t GetNFragments (const WifiMacHeader *header, Ptr<const Packet> packet);
397
397
398
  typedef std::vector <WifiRemoteStation *> Stations;
398
  typedef std::vector <WifiRemoteStation *> Stations;
399
  typedef std::vector <WifiRemoteStationState *> StationStates;
399
  typedef std::vector <WifiRemoteStationState *> StationStates;

Return to bug 1524