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

(-)a/src/devices/wifi/dca-txop.cc (-7 / +8 lines)
 Lines 305-316    Link Here 
305
  return station->NeedFragmentation (m_currentPacket);
305
  return station->NeedFragmentation (m_currentPacket);
306
}
306
}
307
307
308
uint32_t
309
DcaTxop::GetNFragments (void)
310
{
311
  WifiRemoteStation *station = GetStation (m_currentHdr.GetAddr1 ());
312
  return station->GetNFragments (m_currentPacket);
313
}
314
void
308
void
315
DcaTxop::NextFragment (void)
309
DcaTxop::NextFragment (void)
316
{
310
{
 Lines 337-348    Link Here 
337
  return station->GetFragmentSize (m_currentPacket, m_fragmentNumber + 1);
331
  return station->GetFragmentSize (m_currentPacket, m_fragmentNumber + 1);
338
}
332
}
339
333
334
uint32_t
335
DcaTxop::GetFragmentOffset (void) 
336
{
337
  WifiRemoteStation *station = GetStation (m_currentHdr.GetAddr1 ());
338
  return station->GetFragmentOffset (m_currentPacket, m_fragmentNumber);
339
}
340
340
Ptr<Packet>
341
Ptr<Packet>
341
DcaTxop::GetFragmentPacket (WifiMacHeader *hdr)
342
DcaTxop::GetFragmentPacket (WifiMacHeader *hdr)
342
{
343
{
343
  *hdr = m_currentHdr;
344
  *hdr = m_currentHdr;
344
  hdr->SetFragmentNumber (m_fragmentNumber);
345
  hdr->SetFragmentNumber (m_fragmentNumber);
345
  uint32_t startOffset = m_fragmentNumber * GetFragmentSize ();
346
  uint32_t startOffset = GetFragmentOffset ();
346
  Ptr<Packet> fragment;
347
  Ptr<Packet> fragment;
347
  if (IsLastFragment ()) 
348
  if (IsLastFragment ()) 
348
    {
349
    {
(-)a/src/devices/wifi/dca-txop.h (-1 / +1 lines)
 Lines 137-145    Link Here 
137
  bool NeedRtsRetransmission (void);
137
  bool NeedRtsRetransmission (void);
138
  bool NeedDataRetransmission (void);
138
  bool NeedDataRetransmission (void);
139
  bool NeedFragmentation (void);
139
  bool NeedFragmentation (void);
140
  uint32_t GetNFragments (void);
141
  uint32_t GetNextFragmentSize (void);
140
  uint32_t GetNextFragmentSize (void);
142
  uint32_t GetFragmentSize (void);
141
  uint32_t GetFragmentSize (void);
142
  uint32_t GetFragmentOffset (void);
143
  WifiRemoteStation *GetStation (Mac48Address to) const;
143
  WifiRemoteStation *GetStation (Mac48Address to) const;
144
  bool IsLastFragment (void);
144
  bool IsLastFragment (void);
145
  void NextFragment (void);
145
  void NextFragment (void);
(-)a/src/devices/wifi/wifi-remote-station-manager.cc (+8 lines)
 Lines 656-661    Link Here 
656
      return GetManager ()->GetFragmentationThreshold ();
656
      return GetManager ()->GetFragmentationThreshold ();
657
    }
657
    }
658
}
658
}
659
uint32_t
660
WifiRemoteStation::GetFragmentOffset (Ptr<const Packet> packet, uint32_t fragmentNumber)
661
{
662
  uint32_t nFragment = GetNFragments (packet);
663
  NS_ASSERT (fragmentNumber < nFragment);
664
  uint32_t fragmentOffset = fragmentNumber * GetManager ()->GetFragmentationThreshold ();
665
  return fragmentOffset;
666
}
659
667
660
bool
668
bool
661
WifiRemoteStation::IsLastFragment (Ptr<const Packet> packet, uint32_t fragmentNumber) 
669
WifiRemoteStation::IsLastFragment (Ptr<const Packet> packet, uint32_t fragmentNumber) 
(-)a/src/devices/wifi/wifi-remote-station-manager.h (-5 / +7 lines)
 Lines 228-242    Link Here 
228
  virtual bool NeedFragmentation (Ptr<const Packet> packet);
228
  virtual bool NeedFragmentation (Ptr<const Packet> packet);
229
  /**
229
  /**
230
   * \param packet the packet to send
230
   * \param packet the packet to send
231
   * \returns the number of fragments which should be used for this packet.
232
   */
233
  virtual uint32_t GetNFragments (Ptr<const Packet> packet);
234
  /**
235
   * \param packet the packet to send
236
   * \param fragmentNumber the fragment index of the next fragment to send (starts at zero).
231
   * \param fragmentNumber the fragment index of the next fragment to send (starts at zero).
237
   * \returns the size of the corresponding fragment.
232
   * \returns the size of the corresponding fragment.
238
   */
233
   */
239
  virtual uint32_t GetFragmentSize (Ptr<const Packet> packet, uint32_t fragmentNumber);
234
  virtual uint32_t GetFragmentSize (Ptr<const Packet> packet, uint32_t fragmentNumber);
235
  /**
236
   * \param packet the packet to send
237
   * \param fragmentNumber the fragment index of the next fragment to send (starts at zero).
238
   * \returns the offset within the original packet where this fragment starts.
239
   */
240
  virtual uint32_t GetFragmentOffset (Ptr<const Packet> packet, uint32_t fragmentNumber);
240
  /**
241
  /**
241
   * \param packet the packet to send
242
   * \param packet the packet to send
242
   * \param fragmentNumber the fragment index of the next fragment to send (starts at zero).
243
   * \param fragmentNumber the fragment index of the next fragment to send (starts at zero).
 Lines 262-267    Link Here 
262
  virtual Ptr<WifiRemoteStationManager> GetManager (void) const = 0;
263
  virtual Ptr<WifiRemoteStationManager> GetManager (void) const = 0;
263
  virtual WifiMode DoGetDataMode (uint32_t size) = 0;
264
  virtual WifiMode DoGetDataMode (uint32_t size) = 0;
264
  virtual WifiMode DoGetRtsMode (void) = 0;
265
  virtual WifiMode DoGetRtsMode (void) = 0;
266
  uint32_t GetNFragments (Ptr<const Packet> packet);
265
protected:
267
protected:
266
  virtual void DoReportRtsFailed (void) = 0;
268
  virtual void DoReportRtsFailed (void) = 0;
267
  virtual void DoReportDataFailed (void) = 0;
269
  virtual void DoReportDataFailed (void) = 0;

Return to bug 372