A Discrete-Event Network Simulator
API
dsr-rreq-table.h
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2011 Yufei Cheng
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Author: Yufei Cheng <yfcheng@ittc.ku.edu>
19  *
20  * James P.G. Sterbenz <jpgs@ittc.ku.edu>, director
21  * ResiliNets Research Group http://wiki.ittc.ku.edu/resilinets
22  * Information and Telecommunication Technology Center (ITTC)
23  * and Department of Electrical Engineering and Computer Science
24  * The University of Kansas Lawrence, KS USA.
25  *
26  * Work supported in part by NSF FIND (Future Internet Design) Program
27  * under grant CNS-0626918 (Postmodern Internet Architecture),
28  * NSF grant CNS-1050226 (Multilayer Network Resilience Analysis and Experimentation on GENI),
29  * US Department of Defense (DoD), and ITTC at The University of Kansas.
30  */
31 
32 #ifndef DSR_RREQ_TABLE_H
33 #define DSR_RREQ_TABLE_H
34 
35 #include "ns3/simulator.h"
36 #include "ns3/timer.h"
37 #include "ns3/ipv4-address.h"
38 #include "ns3/callback.h"
39 #include <list>
40 #include <vector>
41 #include <map>
42 
43 namespace ns3 {
44 namespace dsr {
45 
50 {
51  PROBABLE = 0,
53 };
55 struct BlackList
56 {
60 
68  : m_neighborAddress (ip),
69  m_expireTime (t),
71  {
72  }
73 };
78 {
79  uint32_t m_reqNo;
81 };
87 {
88 public:
95  DsrReceivedRreqEntry (Ipv4Address d = Ipv4Address (), uint16_t i = 0)
96  : m_destination (d),
98  {
99  }
105  bool operator== (DsrReceivedRreqEntry const & o) const
106  {
108  );
109  }
110 
117  {
118  return m_destination;
119  }
126  {
127  m_destination = d;
128  }
135  {
136  return m_source;
137  }
144  {
145  m_source = s;
146  }
152  uint16_t GetIdentification () const
153  {
154  return m_identification;
155  }
161  void SetIdentification (uint16_t i)
162  {
163  m_identification = i;
164  }
172  void SetExpireTime (Time exp)
173  {
174  m_expire = exp + Simulator::Now ();
175  }
184  {
185  return m_expire - Simulator::Now ();
186  }
187  // \}
188 private:
191  uint16_t m_identification;
193 };
194 
199 class DsrRreqTable : public Object
200 {
201 public:
206  static TypeId GetTypeId ();
207 
208  DsrRreqTable ();
209  virtual ~DsrRreqTable ();
210 
216  void SetInitHopLimit (uint32_t hl)
217  {
218  m_initHopLimit = hl;
219  }
225  uint32_t GetInitHopLimit () const
226  {
227  return m_initHopLimit;
228  }
235  void SetRreqTableSize (uint32_t rt)
236  {
237  m_requestTableSize = rt;
238  }
245  uint32_t GetRreqTableSize () const
246  {
247  return m_requestTableSize;
248  }
255  void SetRreqIdSize (uint32_t id)
256  {
257  m_requestIdSize = id;
258  }
265  uint32_t GetRreqIdSize () const
266  {
267  return m_requestIdSize;
268  }
275  void SetUniqueRreqIdSize (uint32_t uid)
276  {
277  m_maxRreqId = uid;
278  }
285  uint32_t GetUniqueRreqIdSize () const
286  {
287  return m_maxRreqId;
288  }
289 
291  void RemoveLeastExpire ();
294  void FindAndUpdate (Ipv4Address dst);
297  void RemoveRreqEntry (Ipv4Address dst);
301  uint32_t GetRreqCnt (Ipv4Address dst);
302 
310  uint32_t CheckUniqueRreqId (Ipv4Address dst);
316  uint32_t GetRreqSize ();
317 
321  void Invalidate ();
334  bool MarkLinkAsUnidirectional (Ipv4Address neighbor, Time blacklistTimeout);
338  void PurgeNeighbor ();
339 
347  bool FindSourceEntry (Ipv4Address src, Ipv4Address dst, uint16_t id);
348 
349 private:
359  uint32_t m_initHopLimit;
363  uint32_t m_requestIdSize;
365  uint32_t m_maxRreqId;
369  std::list<DsrReceivedRreqEntry> m_sourceRequests;
371  std::map<Ipv4Address, uint32_t> m_rreqIdCache;
373  std::map<Ipv4Address, RreqTableEntry > m_rreqDstMap;
375  std::map<Ipv4Address, std::list<DsrReceivedRreqEntry> > m_sourceRreqMap;
376 
378  std::vector<BlackList> m_blackList;
380  struct IsExpired
381  {
388  bool operator() (const struct BlackList & b) const
389  {
390  return (b.m_expireTime < Simulator::Now ());
391  }
392  };
393 };
394 } // namespace dsr
395 } // namespace ns3
396 
397 #endif /* DSR_RREQ_TABLE_H */
ns3::TypeId
a unique identifier for an interface.
Definition: type-id.h:59
ns3::dsr::PROBABLE
@ PROBABLE
PROBABLE.
Definition: dsr-rreq-table.h:51
ns3::dsr::DsrRreqTable::GetRreqCnt
uint32_t GetRreqCnt(Ipv4Address dst)
Get the request count number for one destination address.
Definition: dsr-rreq-table.cc:136
ns3::dsr::DsrReceivedRreqEntry::SetIdentification
void SetIdentification(uint16_t i)
Set identification.
Definition: dsr-rreq-table.h:161
ns3::dsr::DsrRreqTable::FindUnidirectional
BlackList * FindUnidirectional(Ipv4Address neighbor)
Verify if entry is unidirectional or not(e.g.
Definition: dsr-rreq-table.cc:212
ns3::dsr::RreqTableEntry::m_expire
Time m_expire
Expire time.
Definition: dsr-rreq-table.h:80
ns3::dsr::DsrRreqTable::GetRreqIdSize
uint32_t GetRreqIdSize() const
Return the maximum number of request source Ids in the request table.
Definition: dsr-rreq-table.h:265
ns3::dsr::DsrRreqTable::GetTypeId
static TypeId GetTypeId()
Get the type ID.
Definition: dsr-rreq-table.cc:45
ns3::dsr::BlackList
BlackList description.
Definition: dsr-rreq-table.h:56
ns3::Simulator::Now
static Time Now(void)
Return the current simulation virtual time.
Definition: simulator.cc:195
ns3
Every class exported by the ns3 library is enclosed in the ns3 namespace.
ns3::dsr::BlackList::BlackList
BlackList(Ipv4Address ip, Time t)
Construct a BlackList with the given parameters.
Definition: dsr-rreq-table.h:67
ns3::dsr::DsrRreqTable::MaxRequestPeriod
Time MaxRequestPeriod
The max request period among requests.
Definition: dsr-rreq-table.h:351
ns3::dsr::DsrRreqTable::m_rreqIdCache
std::map< Ipv4Address, uint32_t > m_rreqIdCache
The id cache to ensure all the ids are unique, it is used when sending out route request.
Definition: dsr-rreq-table.h:371
ns3::dsr::DsrRreqTable::m_blackList
std::vector< BlackList > m_blackList
The Black list.
Definition: dsr-rreq-table.h:378
ns3::dsr::DsrRreqTable::DsrRreqTable
DsrRreqTable()
Definition: dsr-rreq-table.cc:55
ns3::dsr::DsrRreqTable::GetRreqSize
uint32_t GetRreqSize()
Get the request id size.
Definition: dsr-rreq-table.cc:191
ns3::dsr::DsrRreqTable::m_sourceRequests
std::list< DsrReceivedRreqEntry > m_sourceRequests
Map of entries.
Definition: dsr-rreq-table.h:369
ns3::dsr::DsrRreqTable::SetRreqTableSize
void SetRreqTableSize(uint32_t rt)
Set the maximum number of request entries in the request table.
Definition: dsr-rreq-table.h:235
ns3::dsr::DsrRreqTable::FindSourceEntry
bool FindSourceEntry(Ipv4Address src, Ipv4Address dst, uint16_t id)
Find the source request entry in the route request queue, return false if not found.
Definition: dsr-rreq-table.cc:256
ns3::Ipv4Address
Ipv4 addresses are stored in host order in this class.
Definition: ipv4-address.h:41
ns3::dsr::LinkStates
LinkStates
State of link.
Definition: dsr-rreq-table.h:50
ns3::dsr::DsrRreqTable::GetUniqueRreqIdSize
uint32_t GetUniqueRreqIdSize() const
Return the maximum number of request Ids in the request table for a single destination.
Definition: dsr-rreq-table.h:285
ns3::dsr::DsrReceivedRreqEntry::m_destination
Ipv4Address m_destination
IPv4 address of the destinaton.
Definition: dsr-rreq-table.h:189
ns3::dsr::DsrRreqTable
maintain list of DsrRreqTable entry
Definition: dsr-rreq-table.h:200
ns3::dsr::DsrReceivedRreqEntry
The request entry for intermediate nodes to check if they have received this request or not This is u...
Definition: dsr-rreq-table.h:87
ns3::dsr::DsrRreqTable::SetRreqIdSize
void SetRreqIdSize(uint32_t id)
Set the maximum number of request source Ids in the request table.
Definition: dsr-rreq-table.h:255
ns3::dsr::DsrRreqTable::IsExpired::operator()
bool operator()(const struct BlackList &b) const
Check if the entry is expired.
Definition: dsr-rreq-table.h:388
ns3::dsr::DsrRreqTable::RequestPeriod
Time RequestPeriod
The original request period.
Definition: dsr-rreq-table.h:353
ns3::dsr::DsrReceivedRreqEntry::GetSource
Ipv4Address GetSource() const
Return IPv4 address of the source.
Definition: dsr-rreq-table.h:134
ns3::dsr::DsrRreqTable::NonpropRequestTimeout
Time NonpropRequestTimeout
The non-propagaton request timeout.
Definition: dsr-rreq-table.h:355
ns3::dsr::BlackList::m_expireTime
Time m_expireTime
Expire time in the black list.
Definition: dsr-rreq-table.h:58
ns3::dsr::DsrRreqTable::Invalidate
void Invalidate()
set the unidirectional entry as QUESTIONABLE state
Definition: dsr-rreq-table.cc:202
ns3::dsr::RreqTableEntry::m_reqNo
uint32_t m_reqNo
Route request number.
Definition: dsr-rreq-table.h:79
ns3::dsr::DsrRreqTable::~DsrRreqTable
virtual ~DsrRreqTable()
Definition: dsr-rreq-table.cc:60
ns3::dsr::DsrRreqTable::m_sourceRreqMap
std::map< Ipv4Address, std::list< DsrReceivedRreqEntry > > m_sourceRreqMap
The cache to ensure all the route request from unique source.
Definition: dsr-rreq-table.h:375
ns3::Object
A base class which provides memory management and object aggregation.
Definition: object.h:88
ns3::dsr::DsrRreqTable::FindAndUpdate
void FindAndUpdate(Ipv4Address dst)
Find the entry in the route request queue to see if already exists.
Definition: dsr-rreq-table.cc:86
ns3::dsr::DsrRreqTable::GetRreqTableSize
uint32_t GetRreqTableSize() const
Return the maximum number of request entries in the request table.
Definition: dsr-rreq-table.h:245
ns3::dsr::RreqTableEntry
The route request table entries.
Definition: dsr-rreq-table.h:78
ns3::dsr::DsrRreqTable::m_linkStates
LinkStates m_linkStates
The state of the unidirectional link.
Definition: dsr-rreq-table.h:367
ns3::Time
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:104
ns3::dsr::BlackList::m_linkStates
LinkStates m_linkStates
State of the link.
Definition: dsr-rreq-table.h:59
ns3::dsr::DsrRreqTable::m_rreqEntryExpire
Time m_rreqEntryExpire
The source route entry expire time.
Definition: dsr-rreq-table.h:357
ns3::dsr::DsrRreqTable::IsExpired
Check if the entry is expired or not.
Definition: dsr-rreq-table.h:381
ns3::dsr::DsrReceivedRreqEntry::m_identification
uint16_t m_identification
Route request identification.
Definition: dsr-rreq-table.h:191
ns3::dsr::DsrRreqTable::GetInitHopLimit
uint32_t GetInitHopLimit() const
Return the initial discovert hop limit.
Definition: dsr-rreq-table.h:225
ns3::dsr::DsrReceivedRreqEntry::GetExpireTime
Time GetExpireTime() const
Return the remaining time before the RREQ entry expires.
Definition: dsr-rreq-table.h:183
ns3::dsr::DsrRreqTable::CheckUniqueRreqId
uint32_t CheckUniqueRreqId(Ipv4Address dst)
The following code generates new request id for each destination.
Definition: dsr-rreq-table.cc:159
ns3::dsr::DsrRreqTable::m_maxRreqId
uint32_t m_maxRreqId
The unique request id for any destination.
Definition: dsr-rreq-table.h:365
ns3::dsr::DsrRreqTable::m_initHopLimit
uint32_t m_initHopLimit
The initial hop limit.
Definition: dsr-rreq-table.h:359
ns3::dsr::BlackList::m_neighborAddress
Ipv4Address m_neighborAddress
IPv4 address of the black-listed neighbor.
Definition: dsr-rreq-table.h:57
ns3::dsr::DsrReceivedRreqEntry::GetDestination
Ipv4Address GetDestination() const
Return IPv4 address of the destination.
Definition: dsr-rreq-table.h:116
ns3::dsr::DsrRreqTable::m_rreqDstMap
std::map< Ipv4Address, RreqTableEntry > m_rreqDstMap
The cache to save route request table entries indexed with destination address.
Definition: dsr-rreq-table.h:373
ns3::dsr::DsrRreqTable::MarkLinkAsUnidirectional
bool MarkLinkAsUnidirectional(Ipv4Address neighbor, Time blacklistTimeout)
Mark entry as unidirectional (e.g.
Definition: dsr-rreq-table.cc:227
ns3::dsr::DsrReceivedRreqEntry::SetDestination
void SetDestination(Ipv4Address d)
Set IPv4 address of the destination.
Definition: dsr-rreq-table.h:125
ns3::dsr::QUESTIONABLE
@ QUESTIONABLE
QUESTIONABLE.
Definition: dsr-rreq-table.h:52
ns3::dsr::DsrRreqTable::SetInitHopLimit
void SetInitHopLimit(uint32_t hl)
Set the initial discovert hop limit.
Definition: dsr-rreq-table.h:216
ns3::dsr::DsrReceivedRreqEntry::m_expire
Time m_expire
Route request expire time.
Definition: dsr-rreq-table.h:192
ns3::dsr::DsrRreqTable::m_requestTableSize
uint32_t m_requestTableSize
The request table size.
Definition: dsr-rreq-table.h:361
ns3::dsr::DsrReceivedRreqEntry::operator==
bool operator==(DsrReceivedRreqEntry const &o) const
Compare send buffer entries (destination address and identification)
Definition: dsr-rreq-table.h:105
ns3::dsr::DsrRreqTable::PurgeNeighbor
void PurgeNeighbor()
Remove all expired black list entries.
Definition: dsr-rreq-table.cc:246
ns3::dsr::DsrRreqTable::SetUniqueRreqIdSize
void SetUniqueRreqIdSize(uint32_t uid)
Set the maximum number of request Ids in the request table for a single destination.
Definition: dsr-rreq-table.h:275
ns3::dsr::DsrReceivedRreqEntry::m_source
Ipv4Address m_source
IPv4 address of the source.
Definition: dsr-rreq-table.h:190
ns3::dsr::DsrReceivedRreqEntry::DsrReceivedRreqEntry
DsrReceivedRreqEntry(Ipv4Address d=Ipv4Address(), uint16_t i=0)
Construct a DsrReceivedRreqEntry with the given parameters.
Definition: dsr-rreq-table.h:95
ns3::dsr::DsrReceivedRreqEntry::GetIdentification
uint16_t GetIdentification() const
Return identification.
Definition: dsr-rreq-table.h:152
ns3::dsr::DsrReceivedRreqEntry::SetSource
void SetSource(Ipv4Address s)
Set IPv4 address of the source.
Definition: dsr-rreq-table.h:143
ns3::dsr::DsrReceivedRreqEntry::SetExpireTime
void SetExpireTime(Time exp)
Set expire time for the RREQ entry.
Definition: dsr-rreq-table.h:172
ns3::dsr::DsrRreqTable::RemoveRreqEntry
void RemoveRreqEntry(Ipv4Address dst)
Remove route request entry for dst.
Definition: dsr-rreq-table.cc:119
ns3::dsr::DsrRreqTable::RemoveLeastExpire
void RemoveLeastExpire()
Remove the least used entry.
Definition: dsr-rreq-table.cc:66
ns3::dsr::DsrRreqTable::m_requestIdSize
uint32_t m_requestIdSize
The request source id size.
Definition: dsr-rreq-table.h:363