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

(-)a/src/devices/wifi/dca-txop.cc (+8 lines)
 Lines 114-119    Link Here 
114
  m_transmissionListener = new DcaTxop::TransmissionListener (this);
114
  m_transmissionListener = new DcaTxop::TransmissionListener (this);
115
  m_dcf = new DcaTxop::Dcf (this);
115
  m_dcf = new DcaTxop::Dcf (this);
116
  m_queue = CreateObject<WifiMacQueue> ();
116
  m_queue = CreateObject<WifiMacQueue> ();
117
  m_queue->TraceConnectWithoutContext ("PacketDrop",
118
      MakeCallback (&DcaTxop::PacketDroppedInQueue, this));
117
  m_rng = new RealRandomStream ();
119
  m_rng = new RealRandomStream ();
118
  m_txMiddle = new MacTxMiddle ();
120
  m_txMiddle = new MacTxMiddle ();
119
}
121
}
 Lines 230-235    Link Here 
230
}
232
}
231
233
232
void
234
void
235
DcaTxop::PacketDroppedInQueue (Ptr<const Packet> pkt) const
236
{
237
  NotifyTxDrop (pkt);
238
}
239
240
void
233
DcaTxop::RestartAccessIfNeeded (void)
241
DcaTxop::RestartAccessIfNeeded (void)
234
{
242
{
235
  NS_LOG_FUNCTION (this);
243
  NS_LOG_FUNCTION (this);
(-)a/src/devices/wifi/dca-txop.h (+1 lines)
 Lines 151-156    Link Here 
151
  void NextFragment (void);
151
  void NextFragment (void);
152
  Ptr<Packet> GetFragmentPacket (WifiMacHeader *hdr);
152
  Ptr<Packet> GetFragmentPacket (WifiMacHeader *hdr);
153
  virtual void DoDispose (void);
153
  virtual void DoDispose (void);
154
  void PacketDroppedInQueue (Ptr<const Packet> pkt) const;
154
155
155
  Dcf *m_dcf;
156
  Dcf *m_dcf;
156
  DcfManager *m_manager;
157
  DcfManager *m_manager;
(-)a/src/devices/wifi/dcf.cc (+9 lines)
 Lines 19-24    Link Here 
19
 */
19
 */
20
#include "dcf.h"
20
#include "dcf.h"
21
#include "ns3/uinteger.h"
21
#include "ns3/uinteger.h"
22
#include "ns3/trace-source-accessor.h"
22
23
23
namespace ns3 {
24
namespace ns3 {
24
25
 Lines 44-51    Link Here 
44
                   MakeUintegerAccessor (&Dcf::SetAifsn,
45
                   MakeUintegerAccessor (&Dcf::SetAifsn,
45
                                         &Dcf::GetAifsn),
46
                                         &Dcf::GetAifsn),
46
                   MakeUintegerChecker<uint32_t> ())
47
                   MakeUintegerChecker<uint32_t> ())
48
    .AddTraceSource ("DcfDrop", "When a packet is dropped by the DCF process",
49
                   MakeTraceSourceAccessor (&Dcf::m_packetDropTrace))
47
    ;
50
    ;
48
  return tid;
51
  return tid;
49
}
52
}
50
53
54
void
55
Dcf::NotifyTxDrop (Ptr<const Packet> pkt) const
56
{
57
  m_packetDropTrace (pkt);
58
}
59
51
} // namespace ns3
60
} // namespace ns3
(-)a/src/devices/wifi/dcf.h (+8 lines)
 Lines 22-27    Link Here 
22
#define DCF_H
22
#define DCF_H
23
23
24
#include "ns3/object.h"
24
#include "ns3/object.h"
25
#include "ns3/traced-callback.h"
26
#include "ns3/packet.h"
25
27
26
namespace ns3 {
28
namespace ns3 {
27
29
 Lines 36-41    Link Here 
36
  virtual uint32_t GetMinCw (void) const = 0;
38
  virtual uint32_t GetMinCw (void) const = 0;
37
  virtual uint32_t GetMaxCw (void) const = 0;
39
  virtual uint32_t GetMaxCw (void) const = 0;
38
  virtual uint32_t GetAifsn (void) const = 0;
40
  virtual uint32_t GetAifsn (void) const = 0;
41
42
 protected:
43
  void NotifyTxDrop (Ptr<const Packet> pkt) const;
44
45
 private:
46
  TracedCallback<Ptr<const Packet> > m_packetDropTrace;
39
};
47
};
40
48
41
} // namespace ns3
49
} // namespace ns3
(-)a/src/devices/wifi/regular-wifi-mac.cc (+8 lines)
 Lines 59-64    Link Here 
59
  m_dca->SetManager (m_dcfManager);
59
  m_dca->SetManager (m_dcfManager);
60
  m_dca->SetTxOkCallback (MakeCallback (&RegularWifiMac::TxOk, this));
60
  m_dca->SetTxOkCallback (MakeCallback (&RegularWifiMac::TxOk, this));
61
  m_dca->SetTxFailedCallback (MakeCallback (&RegularWifiMac::TxFailed, this));
61
  m_dca->SetTxFailedCallback (MakeCallback (&RegularWifiMac::TxFailed, this));
62
  m_dca->TraceConnectWithoutContext ("DcfDrop",
63
      MakeCallback (&RegularWifiMac::PacketDroppedInDcf, this));
62
64
63
  // Construct the EDCAFs. The ordering is important - highest
65
  // Construct the EDCAFs. The ordering is important - highest
64
  // priority (see Table 9-1 in IEEE 802.11-2007) must be created
66
  // priority (see Table 9-1 in IEEE 802.11-2007) must be created
 Lines 689-692    Link Here 
689
  m_txErrCallback (hdr);
691
  m_txErrCallback (hdr);
690
}
692
}
691
693
694
void
695
RegularWifiMac::PacketDroppedInDcf (Ptr<const Packet> pkt)
696
{
697
  NotifyTxDrop (pkt);
698
}
699
692
} // namespace ns3
700
} // namespace ns3
(-)a/src/devices/wifi/regular-wifi-mac.h (+3 lines)
 Lines 333-338    Link Here 
333
  /** Accessor for the AC_BK channel access function */
333
  /** Accessor for the AC_BK channel access function */
334
  Ptr<EdcaTxopN> GetBKQueue (void) const;
334
  Ptr<EdcaTxopN> GetBKQueue (void) const;
335
335
336
  /** Listens to DcfDrop trace and forwards up */
337
  void PacketDroppedInDcf (Ptr<const Packet> pkt);
338
336
  TracedCallback<const WifiMacHeader &> m_txOkCallback;
339
  TracedCallback<const WifiMacHeader &> m_txOkCallback;
337
  TracedCallback<const WifiMacHeader &> m_txErrCallback;
340
  TracedCallback<const WifiMacHeader &> m_txErrCallback;
338
};
341
};
(-)a/src/devices/wifi/wifi-mac-queue.cc (+11 lines)
 Lines 22-27    Link Here 
22
#include "ns3/simulator.h"
22
#include "ns3/simulator.h"
23
#include "ns3/packet.h"
23
#include "ns3/packet.h"
24
#include "ns3/uinteger.h"
24
#include "ns3/uinteger.h"
25
#include "ns3/trace-source-accessor.h"
25
26
26
#include "wifi-mac-queue.h"
27
#include "wifi-mac-queue.h"
27
#include "qos-blocked-destinations.h"
28
#include "qos-blocked-destinations.h"
 Lines 52-57    Link Here 
52
                   TimeValue (Seconds (10.0)),
53
                   TimeValue (Seconds (10.0)),
53
                   MakeTimeAccessor (&WifiMacQueue::m_maxDelay),
54
                   MakeTimeAccessor (&WifiMacQueue::m_maxDelay),
54
                   MakeTimeChecker ())
55
                   MakeTimeChecker ())
56
    .AddTraceSource ("PacketDrop", "Triggered whenever a packet was drop from queue due to MaxPacketNumber/MaxDelay constraints.",
57
                   MakeTraceSourceAccessor (&WifiMacQueue::m_packetDropTrace))
55
    ;
58
    ;
56
  return tid;
59
  return tid;
57
}
60
}
 Lines 95-100    Link Here 
95
  Cleanup ();
98
  Cleanup ();
96
  if (m_size == m_maxSize) 
99
  if (m_size == m_maxSize) 
97
    {
100
    {
101
      NotifyQueueDrop (packet);
98
      return;
102
      return;
99
    }
103
    }
100
  Time now = Simulator::Now ();
104
  Time now = Simulator::Now ();
 Lines 120-125    Link Here 
120
        }
124
        }
121
      else
125
      else
122
        {
126
        {
127
          NotifyQueueDrop (i->packet);
123
          i = m_queue.erase (i);
128
          i = m_queue.erase (i);
124
          n++;
129
          n++;
125
        }
130
        }
 Lines 247-252    Link Here 
247
  return 0;
252
  return 0;
248
}
253
}
249
254
255
void
256
WifiMacQueue::NotifyQueueDrop (Ptr<const Packet> pkt) const
257
{
258
  m_packetDropTrace (pkt);
259
}
260
250
bool
261
bool
251
WifiMacQueue::Remove (Ptr<const Packet> packet)
262
WifiMacQueue::Remove (Ptr<const Packet> packet)
252
{
263
{
(-)a/src/devices/wifi/wifi-mac-queue.h (+10 lines)
 Lines 27-32    Link Here 
27
#include "ns3/packet.h"
27
#include "ns3/packet.h"
28
#include "ns3/nstime.h"
28
#include "ns3/nstime.h"
29
#include "ns3/object.h"
29
#include "ns3/object.h"
30
#include "ns3/traced-callback.h"
30
#include "wifi-mac-header.h"
31
#include "wifi-mac-header.h"
31
32
32
namespace ns3 {
33
namespace ns3 {
 Lines 125-133    Link Here 
125
  typedef std::list<struct Item> PacketQueue;
126
  typedef std::list<struct Item> PacketQueue;
126
  typedef std::list<struct Item>::reverse_iterator PacketQueueRI;
127
  typedef std::list<struct Item>::reverse_iterator PacketQueueRI;
127
  typedef std::list<struct Item>::iterator PacketQueueI;
128
  typedef std::list<struct Item>::iterator PacketQueueI;
129
130
  /**
131
   * The trace source fired when a packet is dropped at the queue due to queue
132
   * full or when the packet has been in the queue too long.
133
   *
134
   * \see class CallBackTraceSource
135
   */
136
  TracedCallback<Ptr<const Packet> > m_packetDropTrace;
128
  
137
  
129
  void Cleanup (void);
138
  void Cleanup (void);
130
  Mac48Address GetAddressForPacket (enum WifiMacHeader::AddressType type, PacketQueueI);
139
  Mac48Address GetAddressForPacket (enum WifiMacHeader::AddressType type, PacketQueueI);
140
  void NotifyQueueDrop (Ptr<const Packet>) const;
131
  
141
  
132
  struct Item {
142
  struct Item {
133
    Item (Ptr<const Packet> packet, 
143
    Item (Ptr<const Packet> packet, 

Return to bug 1034