26 #include <unordered_map>
28 #include "ns3/packet.h"
29 #include "ns3/nstime.h"
30 #include "ns3/net-device.h"
31 #include "ns3/ipv6-address.h"
33 #include "ns3/timer.h"
34 #include "ns3/output-stream-wrapper.h"
42 class Icmpv6L4Protocol;
362 void Print (std::ostream &os)
const;
434 typedef std::unordered_map<Ipv6Address, NdiscCache::Entry *, Ipv6AddressHash>
Cache;
438 typedef std::unordered_map<Ipv6Address, NdiscCache::Entry *, Ipv6AddressHash>::iterator
CacheI;
a polymophic address class
Describes an IPv6 address.
A record that holds information about a NdiscCache entry.
bool m_router
Type of node (router or host).
void MarkProbe()
Changes the state to this entry to PROBE.
bool IsPermanent() const
Is the entry PERMANENT.
void MarkPermanent()
Change the state to this entry to PERMANENT.
NdiscCacheEntryState_e m_state
The state of the entry.
NdiscCacheEntryState_e
The Entry state enumeration.
@ PROBE
Try to contact IPv6 address to know again its L2 address.
@ REACHABLE
Mapping exists between IPv6 and L2 addresses.
@ PERMANENT
Permanent Mapping exists between IPv6 and L2 addresses.
@ DELAY
Try to wait contact from remote host.
@ INCOMPLETE
No mapping between IPv6 and L2 addresses.
void ClearWaitingPacket()
Clear the waiting packet list.
void StartProbeTimer()
Start probe timer.
Ipv6Address m_ipv6Address
The IPv6 address.
void MarkReachable()
Changes the state to this entry to REACHABLE.
void StartReachableTimer()
Start the reachable timer.
void Print(std::ostream &os) const
Print this entry to the given output stream.
void UpdateReachableTimer()
Update the reachable timer.
uint8_t m_nsRetransmit
Number of NS retransmission.
void FunctionProbeTimeout()
Function called when probe timer timeout.
void MarkStale()
Changes the state to this entry to STALE.
std::list< Ipv6PayloadHeaderPair > m_waiting
The list of packet waiting.
Time m_lastReachabilityConfirmation
Last time we see a reachability confirmation.
Address GetMacAddress() const
Get the MAC address of this entry.
Ipv6Address GetIpv6Address(void) const
Get the IPv6 address.
void StartDelayTimer()
Start delay timer.
bool IsIncomplete() const
Is the entry INCOMPLETE.
Address m_macAddress
The MAC address.
void FunctionDelayTimeout()
Function called when delay timer timeout.
bool IsDelay() const
Is the entry DELAY.
void StartRetransmitTimer()
Start retransmit timer.
void SetIpv6Address(Ipv6Address ipv6Address)
Set the IPv6 address.
void MarkIncomplete(Ipv6PayloadHeaderPair p)
Changes the state to this entry to INCOMPLETE.
bool IsStale() const
Is the entry STALE.
void SetMacAddress(Address mac)
Set the MAC address of this entry.
bool IsProbe() const
Is the entry PROBE.
Time GetLastReachabilityConfirmation() const
Get the time of last reachability confirmation.
void FunctionRetransmitTimeout()
Function called when retransmit timer timeout.
NdiscCache * m_ndCache
the NdiscCache associated.
void MarkDelay()
Change the state to this entry to DELAY.
Entry(NdiscCache *nd)
Constructor.
bool IsRouter() const
If the entry is a host or a router.
void SetRouter(bool router)
Set the node type.
Timer m_nudTimer
Timer (used for NUD).
void FunctionReachableTimeout()
Function called when reachable timer timeout.
void AddWaitingPacket(Ipv6PayloadHeaderPair p)
Add a packet (or replace old value) in the queue.
bool IsReachable() const
Is the entry REACHABLE.
void StopNudTimer()
Stop NUD timer and reset the NUD retransmission counter.
IPv6 Neighbor Discovery cache.
NdiscCache & operator=(NdiscCache const &)=delete
std::unordered_map< Ipv6Address, NdiscCache::Entry *, Ipv6AddressHash >::iterator CacheI
Neighbor Discovery Cache container iterator.
void SetDevice(Ptr< NetDevice > device, Ptr< Ipv6Interface > interface, Ptr< Icmpv6L4Protocol > icmpv6)
Set the device and interface.
std::pair< Ptr< Packet >, Ipv6Header > Ipv6PayloadHeaderPair
Pair of a packet and an Ipv4 header.
virtual NdiscCache::Entry * Add(Ipv6Address to)
Add an entry.
void Flush()
Flush the cache.
Ptr< Ipv6Interface > m_interface
the interface.
void Remove(NdiscCache::Entry *entry)
Delete an entry.
void PrintNdiscCache(Ptr< OutputStreamWrapper > stream)
Print the NDISC cache entries.
Ptr< NetDevice > m_device
The NetDevice.
uint32_t GetUnresQlen()
Get the max number of waiting packet.
virtual NdiscCache::Entry * Lookup(Ipv6Address dst)
Lookup in the cache.
Ptr< NetDevice > GetDevice() const
Get the NetDevice associated with this cache.
static const uint32_t DEFAULT_UNRES_QLEN
Default value for unres qlen.
NdiscCache(NdiscCache const &)=delete
static TypeId GetTypeId()
Get the type ID.
Cache m_ndCache
A list of Entry.
std::list< NdiscCache::Entry * > LookupInverse(Address dst)
Lookup in the cache for a MAC address.
void SetUnresQlen(uint32_t unresQlen)
Set the max number of waiting packet.
void DoDispose()
Dispose this object.
Ptr< Icmpv6L4Protocol > m_icmpv6
the icmpv6 L4 protocol for this cache.
std::unordered_map< Ipv6Address, NdiscCache::Entry *, Ipv6AddressHash > Cache
Neighbor Discovery Cache container.
Ptr< Ipv6Interface > GetInterface() const
Get the Ipv6Interface associated with this cache.
uint32_t m_unresQlen
Max number of packet stored in m_waiting.
A base class which provides memory management and object aggregation.
Simulation virtual time values and global simulation resolution.
A simple virtual Timer class.
a unique identifier for an interface.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
std::ostream & operator<<(std::ostream &os, const Angles &a)