A Discrete-Event Network Simulator
API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
dsr-gratuitous-reply-table.h
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_GRATUITOUS_REPLY_TABLE_H
33 #define DSR_GRATUITOUS_REPLY_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 <vector>
40 
41 namespace ns3 {
42 namespace dsr {
43 /*
44  * The gratuitous table entries, it maintains the already sent gratuitous route reply entries.
45  * When the node "promiscuously" received a packet destined for other nodes, and inferred a shorter
46  * route for the data packet, it will construct a route reply and send back to the source
47  */
49 {
50  Ipv4Address m_replyTo;
51  Ipv4Address m_hearFrom;
52  Time m_gratReplyHoldoff;
53 
55  : m_replyTo (t),
56  m_hearFrom (f),
57  m_gratReplyHoldoff (h)
58  {
59  }
60 };
65 class GraReply : public Object
66 {
67 public:
68  // / c-tor
73  static TypeId GetTypeId ();
77  GraReply ();
81  virtual ~GraReply ();
82  // / Set the gratuitous reply table size
83  void SetGraTableSize (uint32_t g)
84  {
85  GraReplyTableSize = g;
86  }
87  // / Get the gratuitous reply table size
88  uint32_t GetGraTableSize () const
89  {
90  return GraReplyTableSize;
91  }
92  // / Add a new gratuitous reply entry
93  bool AddEntry (GraReplyEntry & graTableEntry);
94  // / Update the route entry if found, create a new one if not
95  bool FindAndUpdate (Ipv4Address replyTo, Ipv4Address replyFrom, Time gratReplyHoldoff);
96  // / Remove all expired entries
97  void Purge ();
98  // / Remove all entries
99  void Clear ()
100  {
101  m_graReply.clear ();
102  }
103 
104 private:
105  // / Vector of entries
106  std::vector<GraReplyEntry> m_graReply;
107  // / The max # of gratuitous reply entries to hold
108  uint32_t GraReplyTableSize;
109 
110  // / Check if the entry is expired or not
111  struct IsExpired
112  {
113  bool operator() (const struct GraReplyEntry & b) const
114  {
115  return (b.m_gratReplyHoldoff < Simulator::Now ());
116  }
117  };
118 };
119 } // namespace dsr
120 } // namespace ns3
121 
122 #endif /* DSR_GRATUITOUS_REPLY_TABLE_H */
virtual ~GraReply()
Destructor.
keep track of time unit.
Definition: nstime.h:149
static Time Now(void)
Definition: simulator.cc:179
static TypeId GetTypeId()
Get the type identificator.
Ipv4 addresses are stored in host order in this class.
Definition: ipv4-address.h:38
a base class which provides memory management and object aggregation
Definition: object.h:63
a unique identifier for an interface.
Definition: type-id.h:44
maintain the gratuitous reply