21 #include "ns3/object.h"
22 #include "ns3/assert.h"
23 #include "ns3/simulator.h"
41 .AddConstructor<HwmpRtable> ();
58 uint32_t metric,
Time lifetime, uint32_t seqnum)
60 std::map<Mac48Address, ReactiveRoute>::iterator i =
m_routes.find (destination);
68 i->second.retransmitter = retransmitter;
69 i->second.interface = interface;
70 i->second.metric = metric;
72 i->second.seqnum = seqnum;
76 uint32_t interface,
Time lifetime, uint32_t seqnum)
91 precursor.
address = precursorAddress;
93 std::map<Mac48Address, ReactiveRoute>::iterator i =
m_routes.find (destination);
96 bool should_add =
true;
97 for (
unsigned int j = 0; j < i->second.precursors.size (); j++)
101 if (i->second.precursors[j].address == precursorAddress)
104 i->second.precursors[j].whenExpire = precursor.
whenExpire;
110 i->second.precursors.push_back (precursor);
135 std::map<Mac48Address, ReactiveRoute>::iterator i =
m_routes.find (destination);
144 std::map<Mac48Address, ReactiveRoute>::iterator i =
m_routes.find (destination);
149 if ((i->second.whenExpire <
Simulator::Now ()) && (i->second.whenExpire != Seconds (0)))
159 std::map<Mac48Address, ReactiveRoute>::iterator i =
m_routes.find (destination);
164 return LookupResult (i->second.retransmitter, i->second.interface, i->second.metric, i->second.seqnum,
172 NS_LOG_DEBUG (
"Proactive route has expired and will be deleted, sorry.");
183 std::vector<HwmpProtocol::FailedDestination>
187 std::vector<HwmpProtocol::FailedDestination> retval;
188 for (std::map<Mac48Address, ReactiveRoute>::iterator i =
m_routes.begin (); i !=
m_routes.end (); i++)
190 if (i->second.retransmitter == peerAddress)
194 dst.
seqnum = i->second.seqnum;
195 retval.push_back (dst);
203 retval.push_back (dst);
212 std::map<Mac48Address, ReactiveRoute>::iterator route =
m_routes.find (destination);
215 for (std::vector<Precursor>::const_iterator i = route->second.precursors.begin ();
216 i != route->second.precursors.end (); i++)
220 retval.push_back (std::make_pair (i->interface, i->address));
233 retransmitter (r), ifIndex (i), metric (m), seqnum (s), lifetime (l)
Simulation virtual time values and global simulation resolution.
ProactiveRoute m_root
Path to proactive tree root MP.
std::vector< Precursor > precursors
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register the class in the ns-3 factory.
static const uint32_t MAX_METRIC
Maximum (the best?) path metric.
Route lookup result, return type of LookupXXX methods.
structure of unreachable destination - address and sequence number
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file...
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
LookupResult LookupReactiveExpired(Mac48Address destination)
Return all reactive paths, including expired.
bool IsValid() const
True for valid route.
void DoDispose()
This method is called by Object::Dispose or by the object's destructor, whichever comes first...
LookupResult LookupReactive(Mac48Address destination)
Lookup path to destination.
std::vector< std::pair< uint32_t, Mac48Address > > PrecursorList
Path precursor = {MAC, interface ID}.
std::vector< HwmpProtocol::FailedDestination > GetUnreachableDestinations(Mac48Address peerAddress)
When peer link with a given MAC-address fails - it returns list of unreachable destination addresses...
PrecursorList GetPrecursors(Mac48Address destination)
Route found in reactive mode.
static Mac48Address GetBroadcast(void)
void AddPrecursor(Mac48Address destination, uint32_t precursorInterface, Mac48Address precursorAddress, Time lifetime)
LookupResult LookupProactiveExpired()
Return all proactive paths, including expired.
void AddReactivePath(Mac48Address destination, Mac48Address retransmitter, uint32_t interface, uint32_t metric, Time lifetime, uint32_t seqnum)
static const uint32_t INTERFACE_ANY
Means all interfaces.
bool operator==(const LookupResult &o) const
Compare route lookup results, used by tests.
std::map< Mac48Address, ReactiveRoute > m_routes
List of routes.
static Time Now(void)
Return the "current simulation time".
static TypeId GetTypeId()
void DeleteProactivePath()
Mac48Address retransmitter
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
LookupResult(Mac48Address r=Mac48Address::GetBroadcast(), uint32_t i=INTERFACE_ANY, uint32_t m=MAX_METRIC, uint32_t s=0, Time l=Seconds(0.0))
void DeleteReactivePath(Mac48Address destination)
void AddProactivePath(uint32_t metric, Mac48Address root, Mac48Address retransmitter, uint32_t interface, Time lifetime, uint32_t seqnum)
a base class which provides memory management and object aggregation
Mac48Address retransmitter
a unique identifier for an interface.
TypeId SetParent(TypeId tid)
LookupResult LookupProactive()
Find proactive path to tree root. Note that calling this method has side effect of deleting expired p...