A Discrete-Event Network Simulator
API
dsr-rreq-table.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2011 Yufei Cheng
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation;
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program; if not, write to the Free Software
15  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16  *
17  * Author: Yufei Cheng <yfcheng@ittc.ku.edu>
18  *
19  * James P.G. Sterbenz <jpgs@ittc.ku.edu>, director
20  * ResiliNets Research Group https://resilinets.org/
21  * Information and Telecommunication Technology Center (ITTC)
22  * and Department of Electrical Engineering and Computer Science
23  * The University of Kansas Lawrence, KS USA.
24  *
25  * Work supported in part by NSF FIND (Future Internet Design) Program
26  * under grant CNS-0626918 (Postmodern Internet Architecture),
27  * NSF grant CNS-1050226 (Multilayer Network Resilience Analysis and Experimentation on GENI),
28  * US Department of Defense (DoD), and ITTC at The University of Kansas.
29  */
30 
31 #ifndef DSR_RREQ_TABLE_H
32 #define DSR_RREQ_TABLE_H
33 
34 #include "ns3/callback.h"
35 #include "ns3/ipv4-address.h"
36 #include "ns3/simulator.h"
37 #include "ns3/timer.h"
38 
39 #include <list>
40 #include <map>
41 #include <vector>
42 
43 namespace ns3
44 {
45 namespace dsr
46 {
47 
52 {
53  PROBABLE = 0,
55 };
56 
58 struct BlackList
59 {
63 
71  : m_neighborAddress(ip),
72  m_expireTime(t),
74  {
75  }
76 };
77 
82 {
83  uint32_t m_reqNo;
85 };
86 
92 {
93  public:
101  : m_destination(d),
103  {
104  }
105 
111  bool operator==(const DsrReceivedRreqEntry& o) const
112  {
114  }
115 
122  {
123  return m_destination;
124  }
125 
132  {
133  m_destination = d;
134  }
135 
142  {
143  return m_source;
144  }
145 
152  {
153  m_source = s;
154  }
155 
161  uint16_t GetIdentification() const
162  {
163  return m_identification;
164  }
165 
171  void SetIdentification(uint16_t i)
172  {
173  m_identification = i;
174  }
175 
183  void SetExpireTime(Time exp)
184  {
185  m_expire = exp + Simulator::Now();
186  }
187 
196  {
197  return m_expire - Simulator::Now();
198  }
199 
200  // \}
201  private:
204  uint16_t m_identification;
206 };
207 
212 class DsrRreqTable : public Object
213 {
214  public:
219  static TypeId GetTypeId();
220 
221  DsrRreqTable();
222  ~DsrRreqTable() override;
223 
229  void SetInitHopLimit(uint32_t hl)
230  {
231  m_initHopLimit = hl;
232  }
233 
239  uint32_t GetInitHopLimit() const
240  {
241  return m_initHopLimit;
242  }
243 
250  void SetRreqTableSize(uint32_t rt)
251  {
252  m_requestTableSize = rt;
253  }
254 
261  uint32_t GetRreqTableSize() const
262  {
263  return m_requestTableSize;
264  }
265 
272  void SetRreqIdSize(uint32_t id)
273  {
274  m_requestIdSize = id;
275  }
276 
283  uint32_t GetRreqIdSize() const
284  {
285  return m_requestIdSize;
286  }
287 
294  void SetUniqueRreqIdSize(uint32_t uid)
295  {
296  m_maxRreqId = uid;
297  }
298 
305  uint32_t GetUniqueRreqIdSize() const
306  {
307  return m_maxRreqId;
308  }
309 
311  void RemoveLeastExpire();
314  void FindAndUpdate(Ipv4Address dst);
317  void RemoveRreqEntry(Ipv4Address dst);
321  uint32_t GetRreqCnt(Ipv4Address dst);
322 
330  uint32_t CheckUniqueRreqId(Ipv4Address dst);
336  uint32_t GetRreqSize();
337 
341  void Invalidate();
356  bool MarkLinkAsUnidirectional(Ipv4Address neighbor, Time blacklistTimeout);
360  void PurgeNeighbor();
361 
369  bool FindSourceEntry(Ipv4Address src, Ipv4Address dst, uint16_t id);
370 
371  private:
381  uint32_t m_initHopLimit;
385  uint32_t m_requestIdSize;
387  uint32_t m_maxRreqId;
391  std::list<DsrReceivedRreqEntry> m_sourceRequests;
393  std::map<Ipv4Address, uint32_t> m_rreqIdCache;
395  std::map<Ipv4Address, RreqTableEntry> m_rreqDstMap;
397  std::map<Ipv4Address, std::list<DsrReceivedRreqEntry>> m_sourceRreqMap;
398 
400  std::vector<BlackList> m_blackList;
401 
403  struct IsExpired
404  {
411  bool operator()(const BlackList& b) const
412  {
413  return (b.m_expireTime < Simulator::Now());
414  }
415  };
416 };
417 } // namespace dsr
418 } // namespace ns3
419 
420 #endif /* DSR_RREQ_TABLE_H */
Ipv4 addresses are stored in host order in this class.
Definition: ipv4-address.h:42
A base class which provides memory management and object aggregation.
Definition: object.h:89
static Time Now()
Return the current simulation virtual time.
Definition: simulator.cc:208
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:105
a unique identifier for an interface.
Definition: type-id.h:59
The request entry for intermediate nodes to check if they have received this request or not This is u...
void SetExpireTime(Time exp)
Set expire time for the RREQ entry.
Ipv4Address GetDestination() const
Return IPv4 address of the destination.
void SetIdentification(uint16_t i)
Set identification.
Ipv4Address m_source
IPv4 address of the source.
void SetSource(Ipv4Address s)
Set IPv4 address of the source.
Time GetExpireTime() const
Return the remaining time before the RREQ entry expires.
void SetDestination(Ipv4Address d)
Set IPv4 address of the destination.
Time m_expire
Route request expire time.
DsrReceivedRreqEntry(Ipv4Address d=Ipv4Address(), uint16_t i=0)
Construct a DsrReceivedRreqEntry with the given parameters.
uint16_t m_identification
Route request identification.
bool operator==(const DsrReceivedRreqEntry &o) const
Compare send buffer entries (destination address and identification)
Ipv4Address GetSource() const
Return IPv4 address of the source.
Ipv4Address m_destination
IPv4 address of the destination.
uint16_t GetIdentification() const
Return identification.
maintain list of DsrRreqTable entry
Time NonpropRequestTimeout
The non-propagaton request timeout.
void FindAndUpdate(Ipv4Address dst)
Find the entry in the route request queue to see if already exists.
void RemoveLeastExpire()
Remove the least used entry.
std::map< Ipv4Address, std::list< DsrReceivedRreqEntry > > m_sourceRreqMap
The cache to ensure all the route request from unique source.
uint32_t CheckUniqueRreqId(Ipv4Address dst)
The following code generates new request id for each destination.
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.
void SetUniqueRreqIdSize(uint32_t uid)
Set the maximum number of request Ids in the request table for a single destination.
Time MaxRequestPeriod
The max request period among requests.
LinkStates m_linkStates
The state of the unidirectional link.
uint32_t m_initHopLimit
The initial hop limit.
void Invalidate()
set the unidirectional entry as QUESTIONABLE state
void SetInitHopLimit(uint32_t hl)
Set the initial discovert hop limit.
Time m_rreqEntryExpire
The source route entry expire time.
std::map< Ipv4Address, RreqTableEntry > m_rreqDstMap
The cache to save route request table entries indexed with destination address.
void RemoveRreqEntry(Ipv4Address dst)
Remove route request entry for dst.
uint32_t GetRreqIdSize() const
Return the maximum number of request source Ids in the request table.
std::vector< BlackList > m_blackList
The Black list.
uint32_t GetUniqueRreqIdSize() const
Return the maximum number of request Ids in the request table for a single destination.
uint32_t m_maxRreqId
The unique request id for any destination.
std::list< DsrReceivedRreqEntry > m_sourceRequests
Map of entries.
Time RequestPeriod
The original request period.
bool MarkLinkAsUnidirectional(Ipv4Address neighbor, Time blacklistTimeout)
Mark entry as unidirectional (e.g.
uint32_t m_requestTableSize
The request table size.
uint32_t GetRreqCnt(Ipv4Address dst)
Get the request count number for one destination address.
void SetRreqTableSize(uint32_t rt)
Set the maximum number of request entries in the request table.
static TypeId GetTypeId()
Get the type ID.
uint32_t GetRreqTableSize() const
Return the maximum number of request entries in the request table.
uint32_t m_requestIdSize
The request source id size.
void PurgeNeighbor()
Remove all expired black list entries.
bool FindSourceEntry(Ipv4Address src, Ipv4Address dst, uint16_t id)
Find the source request entry in the route request queue, return false if not found.
BlackList * FindUnidirectional(Ipv4Address neighbor)
Verify if entry is unidirectional or not(e.g.
uint32_t GetInitHopLimit() const
Return the initial discovert hop limit.
void SetRreqIdSize(uint32_t id)
Set the maximum number of request source Ids in the request table.
uint32_t GetRreqSize()
Get the request id size.
LinkStates
State of link.
@ PROBABLE
PROBABLE.
@ QUESTIONABLE
QUESTIONABLE.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
BlackList description.
Time m_expireTime
Expire time in the black list.
LinkStates m_linkStates
State of the link.
BlackList(Ipv4Address ip, Time t)
Construct a BlackList with the given parameters.
Ipv4Address m_neighborAddress
IPv4 address of the black-listed neighbor.
Check if the entry is expired or not.
bool operator()(const BlackList &b) const
Check if the entry is expired.
The route request table entries.
Time m_expire
Expire time.
uint32_t m_reqNo
Route request number.