21 #include "ns3/object.h"
22 #include "ns3/assert.h"
23 #include "ns3/simulator.h"
42 .AddConstructor<HwmpRtable> ();
59 uint32_t metric,
Time lifetime, uint32_t seqnum)
61 std::map<Mac48Address, ReactiveRoute>::iterator i =
m_routes.find (destination);
69 i->second.retransmitter = retransmitter;
70 i->second.interface = interface;
71 i->second.metric = metric;
73 i->second.seqnum = seqnum;
77 uint32_t interface,
Time lifetime, uint32_t seqnum)
92 precursor.
address = precursorAddress;
94 std::map<Mac48Address, ReactiveRoute>::iterator i =
m_routes.find (destination);
97 bool should_add =
true;
98 for (
unsigned int j = 0; j < i->second.precursors.size (); j++)
102 if (i->second.precursors[j].address == precursorAddress)
105 i->second.precursors[j].whenExpire = precursor.
whenExpire;
111 i->second.precursors.push_back (precursor);
136 std::map<Mac48Address, ReactiveRoute>::iterator i =
m_routes.find (destination);
145 std::map<Mac48Address, ReactiveRoute>::iterator i =
m_routes.find (destination);
150 if ((i->second.whenExpire <
Simulator::Now ()) && (i->second.whenExpire != Seconds (0)))
160 std::map<Mac48Address, ReactiveRoute>::iterator i =
m_routes.find (destination);
165 return LookupResult (i->second.retransmitter, i->second.interface, i->second.metric, i->second.seqnum,
173 NS_LOG_DEBUG (
"Proactive route has expired and will be deleted, sorry.");
184 std::vector<HwmpProtocol::FailedDestination>
188 std::vector<HwmpProtocol::FailedDestination> retval;
189 for (std::map<Mac48Address, ReactiveRoute>::iterator i =
m_routes.begin (); i !=
m_routes.end (); i++)
191 if (i->second.retransmitter == peerAddress)
195 dst.
seqnum = i->second.seqnum;
196 retval.push_back (dst);
204 retval.push_back (dst);
213 std::map<Mac48Address, ReactiveRoute>::iterator route =
m_routes.find (destination);
216 for (std::vector<Precursor>::const_iterator i = route->second.precursors.begin ();
217 i != route->second.precursors.end (); i++)
221 retval.push_back (std::make_pair (i->interface, i->address));
234 retransmitter (r), ifIndex (i), metric (m), seqnum (s), lifetime (l)
keep track of time values and allow control of global simulation resolution
ProactiveRoute m_root
Path to proactive tree root MP.
std::vector< Precursor > precursors
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)
NS_OBJECT_ENSURE_REGISTERED(NullMessageSimulatorImpl)
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()
NS_LOG_COMPONENT_DEFINE("HwmpProtocolMac")
Mac48Address retransmitter
#define NS_LOG_DEBUG(msg)
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...