NS-3 based Named Data Networking (NDN) simulator
ndnSIM 2.0: NDN, CCN, CCNx, content centric networks
API Documentation
ndn-consumer.hpp
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
20 #ifndef NDN_CONSUMER_H
21 #define NDN_CONSUMER_H
22 
23 #include "ns3/ndnSIM/model/ndn-common.hpp"
24 
25 #include "ndn-app.hpp"
26 
27 #include "ns3/random-variable-stream.h"
28 #include "ns3/nstime.h"
29 #include "ns3/data-rate.h"
30 
31 #include "ns3/ndnSIM/model/ndn-common.hpp"
32 #include "ns3/ndnSIM/utils/ndn-rtt-estimator.hpp"
33 #include "ns3/ndnSIM/utils/ndn-fw-hop-count-tag.hpp"
34 
35 #include <set>
36 #include <map>
37 
38 #include <boost/multi_index_container.hpp>
39 #include <boost/multi_index/tag.hpp>
40 #include <boost/multi_index/ordered_index.hpp>
41 #include <boost/multi_index/member.hpp>
42 
43 namespace ns3 {
44 namespace ndn {
45 
50 class Consumer : public App {
51 public:
52  static TypeId
53  GetTypeId();
54 
59  Consumer();
60  virtual ~Consumer(){};
61 
62  // From App
63  virtual void
64  OnData(shared_ptr<const Data> contentObject);
65 
70  virtual void
71  OnTimeout(uint32_t sequenceNumber);
72 
76  void
77  SendPacket();
78 
89  virtual void
90  WillSendOutInterest(uint32_t sequenceNumber);
91 
92 public:
93  typedef void (*LastRetransmittedInterestDataDelayCallback)(Ptr<App> app, uint32_t seqno, Time delay, int32_t hopCount);
94  typedef void (*FirstInterestDataDelayCallback)(Ptr<App> app, uint32_t seqno, Time delay, uint32_t retxCount, int32_t hopCount);
95 
96 protected:
97  // from App
98  virtual void
100 
101  virtual void
102  StopApplication();
103 
108  virtual void
109  ScheduleNextPacket() = 0;
110 
114  void
116 
121  void
122  SetRetxTimer(Time retxTimer);
123 
128  Time
129  GetRetxTimer() const;
130 
131 protected:
132  Ptr<UniformRandomVariable> m_rand;
133 
134  uint32_t m_seq;
135  uint32_t m_seqMax;
137  Time m_retxTimer;
139 
140  Ptr<RttEstimator> m_rtt;
141 
142  Time m_offTime;
145 
147 
150  struct RetxSeqsContainer : public std::set<uint32_t> {
151  };
152 
153  RetxSeqsContainer m_retxSeqs;
154 
158  struct SeqTimeout {
159  SeqTimeout(uint32_t _seq, Time _time)
160  : seq(_seq)
161  , time(_time)
162  {
163  }
164 
165  uint32_t seq;
166  Time time;
167  };
169 
171  class i_seq {
172  };
173  class i_timestamp {
174  };
176 
178 
181  struct SeqTimeoutsContainer
182  : public boost::multi_index::
183  multi_index_container<SeqTimeout,
184  boost::multi_index::
185  indexed_by<boost::multi_index::
186  ordered_unique<boost::multi_index::tag<i_seq>,
187  boost::multi_index::
188  member<SeqTimeout, uint32_t,
189  &SeqTimeout::seq>>,
190  boost::multi_index::
191  ordered_non_unique<boost::multi_index::
192  tag<i_timestamp>,
193  boost::multi_index::
194  member<SeqTimeout, Time,
195  &SeqTimeout::time>>>> {
196  };
197 
198  SeqTimeoutsContainer m_seqTimeouts;
199 
200  SeqTimeoutsContainer m_seqLastDelay;
201  SeqTimeoutsContainer m_seqFullDelay;
202  std::map<uint32_t, uint32_t> m_seqRetxCounts;
203 
204  TracedCallback<Ptr<App> /* app */, uint32_t /* seqno */, Time /* delay */, int32_t /*hop count*/>
205  m_lastRetransmittedInterestDataDelay;
206  TracedCallback<Ptr<App> /* app */, uint32_t /* seqno */, Time /* delay */,
207  uint32_t /*retx count*/, int32_t /*hop count*/> m_firstInterestDataDelay;
208 
210 };
211 
212 } // namespace ndn
213 } // namespace ns3
214 
215 #endif
void(* LastRetransmittedInterestDataDelayCallback)(Ptr< App > app, uint32_t seqno, Time delay, int32_t hopCount)
Time m_interestLifeTime
LifeTime for interest packet.
virtual void OnTimeout(uint32_t sequenceNumber)
Timeout event.
uint32_t m_seqMax
maximum number of sequence number
Copyright (c) 2011-2015 Regents of the University of California.
void SetRetxTimer(Time retxTimer)
Modifies the frequency of checking the retransmission timeouts.
Time m_offTime
Time interval between packets.
uint32_t m_seq
currently requested sequence number
Time m_retxTimer
Currently estimated retransmission timer.
Ptr< RttEstimator > m_rtt
RTT estimator.
Name m_interestName
NDN Name of the Interest (use Name)
void CheckRetxTimeout()
Checks if the packet need to be retransmitted becuase of retransmission timer expiration.
NDN application for sending out Interest packets.
virtual void OnData(shared_ptr< const Data > contentObject)
Method that will be called every time new Data arrives.
void SendPacket()
Actually send packet.
virtual void ScheduleNextPacket()=0
Constructs the Interest packet and sends it using a callback to the underlying NDN protocol...
Opaque type (shared_ptr) representing ID of a scheduled event.
Time GetRetxTimer() const
Returns the frequency of checking the retransmission timeouts.
Copyright (c) 2011-2015 Regents of the University of California.
void(* FirstInterestDataDelayCallback)(Ptr< App > app, uint32_t seqno, Time delay, uint32_t retxCount, int32_t hopCount)
Base class that all NDN applications should be derived from.
Definition: ndn-app.hpp:48
Ptr< UniformRandomVariable > m_rand
nonce generator
Consumer()
Default constructor Sets up randomizer function and packet sequence number.
virtual void StopApplication()
Called at time specified by Stop.
EventId m_sendEvent
EventId of pending "send packet" event.
virtual void WillSendOutInterest(uint32_t sequenceNumber)
An event that is fired just before an Interest packet is actually send out (send is inevitable) ...
EventId m_retxEvent
Event to check whether or not retransmission should be performed.
static TypeId GetTypeId()
virtual void StartApplication()
Called at time specified by Start.