25 #include "ns3/assert.h"
26 #include "ns3/packet.h"
28 #include "ns3/boolean.h"
29 #include "ns3/ipv6-routing-protocol.h"
30 #include "ns3/ipv6-route.h"
31 #include "ns3/pointer.h"
32 #include "ns3/string.h"
72 .AddConstructor<Icmpv6L4Protocol> ()
73 .AddAttribute (
"DAD",
"Always do DAD check.",
77 .AddAttribute (
"SolicitationJitter",
"The jitter in ms a node is allowed to wait before sending any solicitation . Some jitter aims to prevent collisions. By default, the model will wait for a duration in ms defined by a uniform random-variable between 0 and SolicitationJitter",
78 StringValue (
"ns3::UniformRandomVariable[Min=0.0|Max=10.0]"),
80 MakePointerChecker<RandomVariableStream> ())
125 Ptr<Node> node = this->GetObject<Node> ();
134 ipv6->AggregateObject (rawFactory);
208 p->CopyData (&type,
sizeof(type));
213 if (ipv6->IsForwarding (ipv6->GetInterfaceForDevice (interface->
GetDevice ())))
219 if (!ipv6->IsForwarding (ipv6->GetInterfaceForDevice (interface->
GetDevice ())))
263 const uint8_t payload[8])
265 NS_LOG_FUNCTION (
this << source << icmp << info << ipHeader << payload);
273 if (nextHeader != Icmpv6L4Protocol::PROT_NUMBER)
288 uint8_t* buf =
new uint8_t[packet->
GetSize ()];
330 ipv6->AddAutoconfiguredAddress (ipv6->GetInterfaceForDevice (interface->
GetDevice ()), prefixHdr.GetPrefix (), prefixHdr.GetPrefixLength (),
331 prefixHdr.GetFlags (), prefixHdr.GetValidTime (), prefixHdr.GetPreferredTime (), defaultRouter);
367 entry = cache->
Lookup (src);
371 entry = cache->
Add (src);
374 entry->MarkReachable ();
375 entry->StartReachableTimer ();
379 std::list<Ptr<Packet> > waiting;
380 if (entry->IsIncomplete ())
382 entry->StopRetransmitTimer ();
384 waiting = entry->MarkReachable (lla.
GetAddress ());
385 entry->StopReachableTimer ();
386 entry->StartReachableTimer ();
392 entry->ClearWaitingPacket ();
396 if (entry->GetMacAddress () != lla.
GetAddress ())
400 entry->SetRouter (
true);
404 if (!entry->IsReachable ())
406 entry->StopProbeTimer ();
407 entry->StopDelayTimer ();
408 waiting = entry->MarkReachable (lla.
GetAddress ());
409 if (entry->IsProbe ())
416 entry->StopReachableTimer ();
417 entry->StartReachableTimer ();
440 packet->
CopyData (&type,
sizeof(type));
449 entry = cache->
Lookup (src);
452 entry = cache->
Add (src);
476 for (i = 0; i < nb; i++)
511 packet->
CopyData (&type,
sizeof(type));
521 entry = cache->
Lookup (src);
524 entry = cache->
Add (src);
544 if (ipv6->IsForwarding (ipv6->GetInterfaceForDevice (interface->
GetDevice ())))
549 hardwareAddress = interface->
GetDevice ()->GetAddress ();
564 NS_LOG_LOGIC (
"Send RS ( from " << src <<
" to " << dst <<
")");
570 ipHeader.SetSourceAddress (src);
571 ipHeader.SetDestinationAddress (dst);
573 ipHeader.SetPayloadLength (p->
GetSize ());
574 ipHeader.SetHopLimit (255);
617 std::list<Ptr<Packet> > waiting;
620 entry = cache->
Lookup (target);
631 for (i = 0; i < nb; i++)
656 packet->
CopyData (&type,
sizeof(type));
775 entry = cache->
Lookup (redirTarget);
778 entry = cache->
Add (redirTarget);
781 entry->SetMacAddress (llOptionHeader.
GetAddress ());
786 if (entry->IsIncomplete () || entry->GetMacAddress () != llOptionHeader.
GetAddress ())
789 if (entry->GetMacAddress () != llOptionHeader.
GetAddress ())
791 entry->SetMacAddress (llOptionHeader.
GetAddress ());
805 if (redirTarget.
IsEqual (redirDestination))
807 ipv6->GetRoutingProtocol ()->NotifyAddRoute (redirDestination,
Ipv6Prefix (128),
Ipv6Address (
"::"), ipv6->GetInterfaceForAddress (dst));
811 uint32_t ifIndex = ipv6->GetInterfaceForAddress (dst);
812 ipv6->GetRoutingProtocol ()->NotifyAddRoute (redirDestination,
Ipv6Prefix (128), redirTarget, ifIndex);
848 Forward (src, timeexceeded, timeexceeded.
GetCode (), ipHeader, payload);
909 NS_ASSERT (ipv6 != 0 && ipv6->GetRoutingProtocol () != 0);
916 header.SetDestinationAddress (dst);
917 route = ipv6->GetRoutingProtocol ()->RouteOutput (packet, header, oif, err);
938 NS_LOG_FUNCTION (
this << src << dst << hardwareAddress << static_cast<uint32_t> (flags));
943 NS_LOG_LOGIC (
"Send NA ( from " << src <<
" to " << dst <<
" target " << src <<
")");
944 na.SetIpv6Target (src);
960 na.CalculatePseudoHeaderChecksum (src, dst, p->
GetSize () + na.GetSerializedSize (),
PROT_NUMBER);
994 NS_LOG_LOGIC (
"Send NS ( from " << src <<
" to " << dst <<
" target " << target <<
")");
997 ns.CalculatePseudoHeaderChecksum (src, dst, p->
GetSize () + ns.GetSerializedSize (),
PROT_NUMBER);
1005 NS_LOG_LOGIC (
"Destination is Multicast, using DelayedSendMessage");
1023 NS_LOG_LOGIC (
"Send RS ( from " << src <<
" to " << dst <<
")");
1025 rs.CalculatePseudoHeaderChecksum (src, dst, p->
GetSize () + rs.GetSerializedSize (),
PROT_NUMBER);
1033 NS_LOG_LOGIC (
"Destination is Multicast, using DelayedSendMessage");
1042 uint32_t malformedPacketSize = malformedPacket->
GetSize ();
1045 NS_LOG_LOGIC (
"Send Destination Unreachable ( to " << dst <<
" code " << (uint32_t)code <<
" )");
1048 if (malformedPacketSize <= 1280 - 48)
1066 uint32_t malformedPacketSize = malformedPacket->
GetSize ();
1072 if (malformedPacketSize <= 1280 - 48)
1089 NS_LOG_FUNCTION (
this << malformedPacket << dst << static_cast<uint32_t> (code));
1091 uint32_t malformedPacketSize = malformedPacket->
GetSize ();
1094 NS_LOG_LOGIC (
"Send Time Exceeded ( to " << dst <<
" code " << (uint32_t)code <<
" )");
1097 if (malformedPacketSize <= 1280 - 48)
1113 NS_LOG_FUNCTION (
this << malformedPacket << dst << static_cast<uint32_t> (code) << ptr);
1115 uint32_t malformedPacketSize = malformedPacket->
GetSize ();
1118 NS_LOG_LOGIC (
"Send Parameter Error ( to " << dst <<
" code " << (uint32_t)code <<
" )");
1121 if (malformedPacketSize <= 1280 - 48 )
1138 NS_LOG_FUNCTION (
this << redirectedPacket << dst << redirTarget << redirDestination << redirHardwareTarget);
1139 uint32_t llaSize = 0;
1141 uint32_t redirectedPacketSize = redirectedPacket->
GetSize ();
1144 NS_LOG_LOGIC (
"Send Redirection ( to " << dst <<
" target " << redirTarget <<
" destination " << redirDestination <<
" )");
1148 if ((redirectedPacketSize % 8) != 0)
1150 Ptr<Packet> pad = Create<Packet> (8 - (redirectedPacketSize % 8));
1161 if (redirectedPacketSize <= (1280 - 56 - llaSize))
1163 redirectedOptionHeader.
SetPacket (redirectedPacket);
1168 redirectedOptionHeader.
SetPacket (fragment);
1179 redirectionHeader.
SetTarget (redirTarget);
1189 NS_LOG_FUNCTION (
this << src << dst << hardwareAddress << (uint32_t)flags);
1195 NS_LOG_LOGIC (
"Send NA ( from " << src <<
" to " << dst <<
")");
1218 ipHeader.SetSourceAddress (src);
1219 ipHeader.SetDestinationAddress (dst);
1221 ipHeader.SetPayloadLength (p->
GetSize ());
1222 ipHeader.SetHopLimit (255);
1243 NS_LOG_LOGIC (
"Send NS ( from " << src <<
" to " << dst <<
" target " << target <<
")");
1249 ipHeader.SetSourceAddress (src);
1250 ipHeader.SetDestinationAddress (dst);
1252 ipHeader.SetPayloadLength (p->
GetSize ());
1253 ipHeader.SetHopLimit (255);
1266 if ((*i)->GetDevice () == device)
1291 NS_LOG_FUNCTION (
this << dst << device << cache << hardwareDestination);
1322 NS_LOG_FUNCTION (
this << p << dst << device << cache << hardwareDestination);
1404 for (i = 0; i < nb; i++)
1428 if (!ipv6->IsForwarding (ipv6->GetInterfaceForDevice (interface->
GetDevice ())) && addr.
IsLinkLocal ())
void DelayedSendMessage(Ptr< Packet > packet, Ipv6Address src, Ipv6Address dst, uint8_t ttl)
Helper function used during delayed solicitation.
bool IsAny() const
If the IPv6 address is the "Any" address.
uint32_t RemoveHeader(Header &header)
Deserialize and remove the header from the internal buffer.
void SetPacket(Ptr< Packet > packet)
Set the redirected packet.
Introspection did not find any typical Config paths.
uint16_t GetId() const
Get the ID of the packet.
static const uint8_t MAX_ANYCAST_DELAY_TIME
Neighbor Discovery node constants : max anycast delay.
uint32_t GetNsDadUid() const
Get the latest DAD probe packet UID.
Simulation virtual time values and global simulation resolution.
bool Lookup(Ipv6Address dst, Ptr< NetDevice > device, Ptr< NdiscCache > cache, Address *hardwareDestination)
Lookup in the ND cache for the IPv6 address.
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by "...
void MarkIncomplete(Ptr< Packet > p)
Changes the state to this entry to INCOMPLETE.
void SetStream(int64_t stream)
Specifies the stream number for this RNG stream.
Introspection did not find any typical Config paths.
void SetState(Ipv6Address address, Ipv6InterfaceAddress::State_e state)
Update state of an interface address.
SocketErrno
Enumeration of the possible errors returned by a socket.
AttributeValue implementation for Boolean.
Introspection did not find any typical Config paths.
Introspection did not find any typical Config paths.
void SendNA(Ipv6Address src, Ipv6Address dst, Address *hardwareAddress, uint8_t flags)
Send a Neighbor Adverstisement.
void HandleNS(Ptr< Packet > p, Ipv6Address const &src, Ipv6Address const &dst, Ptr< Ipv6Interface > interface)
Receive Neighbor Solicitation method.
virtual uint32_t GetSerializedSize() const
Get the serialized size.
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
Address GetMacAddress() const
Get the MAC address of this entry.
NdiscCache::Entry * Add(Ipv6Address to)
Add an entry.
static const uint8_t MAX_INITIAL_RTR_ADVERTISEMENTS
Neighbor Discovery router constants : max initial RA transmission.
Ptr< Packet > GetPacket() const
Get the incorrect packet.
Ipv6Address GetTarget() const
Get the IPv6 target address.
Access to the IPv6 forwarding table, interfaces, and configuration.
Hold variables of type string.
virtual uint32_t GetSerializedSize() const
Get the serialized size.
static const uint8_t MAX_FINAL_RTR_ADVERTISEMENTS
Neighbor Discovery router constants : max final RA transmission.
void Send(Ptr< Packet > packet, Ipv6Address source, Ipv6Address destination, uint8_t protocol, Ptr< Ipv6Route > route)
Higher-level layers call this method to send a packet down the stack to the MAC and PHY layers...
Introspection did not find any typical Config paths.
IPv6 layer implementation.
Ptr< Node > m_node
The node.
Ptr< const AttributeAccessor > MakeBooleanAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
void AddPacketTag(const Tag &tag) const
Add a packet tag.
Introspection did not find any typical Config paths.
void SendRS(Ipv6Address src, Ipv6Address dst, Address hardwareAddress)
Send a Router Solicitation.
Introspection did not find any typical Config paths.
bool IsLinkLocal() const
If the IPv6 address is a link-local address (fe80::/64).
uint64_t GetUid(void) const
Returns the packet's Uid.
bool IsNull(void) const
Check for null implementation.
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file...
virtual void ReceiveIcmp(Ipv4Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo, Ipv4Address payloadSource, Ipv4Address payloadDestination, const uint8_t payload[8])
Called from lower-level layers to send the ICMP packet up in the stack.
U * PeekPointer(const Ptr< U > &p)
static Ipv6Address GetAny()
Get the "any" (::) Ipv6Address.
Ipv6InterfaceAddress GetAddress(uint32_t index) const
Get an address from IPv6 interface.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
IPv6 address associated with an interface.
Time MilliSeconds(uint64_t value)
Construct a Time in the indicated unit.
void SetPtr(uint32_t ptr)
Set the pointer field.
static const uint8_t PROT_NUMBER
ICMPv6 protocol number (58).
virtual IpL4Protocol::DownTargetCallback6 GetDownTarget6(void) const
This method allows a caller to get the current down target callback set for this L4 protocol (IPv6 ca...
bool GetFlagS() const
Get the S flag.
uint32_t GetSize(void) const
Returns the the size in bytes of the packet (including the zero-filled initial payload).
Invalid state (after a DAD failed)
bool IsEqual(const Ipv6Address &other) const
Comparison operation between two Ipv6Addresses.
virtual ~Icmpv6L4Protocol()
Destructor.
static const uint8_t RTR_SOLICITATION_INTERVAL
Neighbor Discovery host constants : RS interval.
void StopReachableTimer()
Stop the reachable timer.
virtual void DoDispose(void)
Destructor implementation.
static const uint8_t MAX_RTR_SOLICITATIONS
Neighbor Discovery host constants : max RS transmission.
#define NS_LOG_FUNCTION_NOARGS()
Output the name of the function.
static EventId Schedule(Time const &time, MEM mem_ptr, OBJ obj)
Schedule an event to expire at the relative time "time" is reached.
void SetMtu(uint32_t mtu)
Set the MTU.
void SetNode(Ptr< Node > node)
Set the node.
void SetPacket(Ptr< Packet > p)
Set the incorrect packet.
This class implements a tag that carries the socket-specific TTL of a packet to the IP layer...
void SetTarget(Ipv6Address target)
Set the IPv6 target address.
virtual int GetProtocolNumber() const
Get the protocol number.
std::list< Ptr< Packet > > MarkReachable(Address mac)
Changes the state to this entry to REACHABLE.
Icmpv6L4Protocol()
Constructor.
uint16_t GetLifeTime() const
Get the node Life time (Neighbor Discovery).
virtual double GetValue(void)=0
Returns a random double from the underlying distribution.
a polymophic address class
void SetPacket(Ptr< Packet > p)
Set the incorrect packet.
static void FunctionDadTimeout(Ptr< Icmpv6L4Protocol > icmpv6, Ipv6Interface *interface, Ipv6Address addr)
Function called when DAD timeout.
virtual enum IpL4Protocol::RxStatus Receive(Ptr< Packet > p, Ipv4Header const &header, Ptr< Ipv4Interface > interface)
Receive method.
void SendErrorTooBig(Ptr< Packet > malformedPacket, Ipv6Address dst, uint32_t mtu)
Send an error Too Big.
int64_t AssignStreams(int64_t stream)
Assign a fixed random variable stream number to the random variables used by this model...
Ptr< Ipv6Interface > GetInterface() const
Get the Ipv6Interface associated with this cache.
void NotifyNewAggregate()
This method is called by AddAgregate and completes the aggregation by setting the node in the ICMPv6 ...
bool IsDelay() const
Is the entry DELAY.
Ptr< Packet > CreateFragment(uint32_t start, uint32_t length) const
Create a new packet which contains a fragment of the original packet.
void AddAtEnd(Ptr< const Packet > packet)
Concatenate the input packet at the end of the current packet.
bool GetFlagR() const
Get the R flag.
The IPv6 representation of a network interface.
Introspection did not find any typical Config paths.
void HandleRedirection(Ptr< Packet > p, Ipv6Address const &src, Ipv6Address const &dst, Ptr< Ipv6Interface > interface)
Receive Redirection method.
Ipv6Address GetAddress() const
Get the IPv6 address.
Ipv6Address GetIpv6Target() const
Get the IPv6 target field.
uint32_t GetNAddresses(void) const
Get number of addresses on this IPv6 interface.
Ptr< const AttributeAccessor > MakePointerAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
static const uint32_t MAX_RA_DELAY_TIME
Neighbor Discovery router constants : max delay between RA.
void Forward(Ipv6Address source, Icmpv6Header icmp, uint32_t info, Ipv6Header ipHeader, const uint8_t payload[8])
Notify an ICMPv6 reception to upper layers (if requested).
void SendErrorParameterError(Ptr< Packet > malformedPacket, Ipv6Address dst, uint8_t code, uint32_t ptr)
Send an error Parameter Error.
Ptr< Packet > GetPacket() const
Get the incorrect packet.
void SetTtl(uint8_t ttl)
Set the tag's TTL.
void SetIpv6Target(Ipv6Address target)
Set the IPv6 target field.
void HandleTimeExceeded(Ptr< Packet > p, Ipv6Address const &src, Ipv6Address const &dst, Ptr< Ipv6Interface > interface)
Receive Time Exceeded method.
void Flush()
Flush the cache.
void SendErrorTimeExceeded(Ptr< Packet > malformedPacket, Ipv6Address dst, uint8_t code)
Send an error Time Exceeded.
static Ipv6Address GetZero()
Get the 0 (::) Ipv6Address.
bool IsAlwaysDad() const
Is the node must do DAD.
uint8_t GetLength(void) const
Get the length of the underlying address.
static const uint32_t REACHABLE_TIME
Neighbor Discovery node constants : reachable time.
Introspection did not find any typical Config paths.
Ptr< Packet > GetPacket() const
Get the incorrect packet.
static const double MIN_RANDOM_FACTOR
Neighbor Discovery node constants : min random factor.
Ptr< NdiscCache > FindCache(Ptr< NetDevice > device)
Get the cache corresponding to the device.
Callback< R > MakeCallback(R(T::*memPtr)(void), OBJ objPtr)
virtual Ptr< NetDevice > GetDevice() const
Get the NetDevice.
Ptr< Packet > ForgeNA(Ipv6Address src, Ipv6Address dst, Address *hardwareAddress, uint8_t flags)
Forge a Neighbor Advertisement.
void SetPacket(Ptr< Packet > p)
Set the incorrect packet.
Ptr< RandomVariableStream > m_solicitationJitter
Random jitter before sending solicitations.
bool GetFlagO() const
Get the O flag.
void HandleRS(Ptr< Packet > p, Ipv6Address const &src, Ipv6Address const &dst, Ptr< Ipv6Interface > interface)
Receive Router Solicitation method.
void Send(Ptr< Packet > p, Ipv6Address dest)
Send a packet through this interface.
#define NS_LOG_LOGIC(msg)
Use NS_LOG to output a message of level LOG_LOGIC.
void StopProbeTimer()
Stop probe timer.
Ptr< Packet > ForgeNS(Ipv6Address src, Ipv6Address dst, Ipv6Address target, Address hardwareAddress)
Forge a Neighbor Solicitation.
void StartRetransmitTimer()
Start retransmit timer.
uint16_t GetSeq() const
Get the sequence number.
void SetNsDadUid(Ipv6Address address, uint32_t uid)
Update NS DAD packet UID of an interface address.
void ClearWaitingPacket()
Clear the waiting packet list.
virtual uint32_t GetSerializedSize() const
Get the serialized size.
void HandleEchoRequest(Ptr< Packet > p, Ipv6Address const &src, Ipv6Address const &dst, Ptr< Ipv6Interface > interface)
Receive Echo Request method.
void HandleParameterError(Ptr< Packet > p, Ipv6Address const &src, Ipv6Address const &dst, Ptr< Ipv6Interface > interface)
Receive Parameter Error method.
virtual void NotifyNewAggregate(void)
Notify all Objects aggregated to this one of a new Object being aggregated.
Ptr< Packet > Copy(void) const
performs a COW copy of the packet.
static const uint8_t MAX_MULTICAST_SOLICIT
Neighbor Discovery node constants : max multicast solicitations.
bool IsProbe() const
Is the entry PROBE.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
void SendErrorDestinationUnreachable(Ptr< Packet > malformedPacket, Ipv6Address dst, uint8_t code)
Send an error Destination Unreachable.
void SendEchoReply(Ipv6Address src, Ipv6Address dst, uint16_t id, uint16_t seq, Ptr< Packet > data)
Send a Echo Reply.
static TypeId GetTypeId()
Interface ID.
static const uint8_t MAX_NEIGHBOR_ADVERTISEMENT
Neighbor Discovery node constants : max NA transmission.
virtual IpL4Protocol::DownTargetCallback GetDownTarget(void) const
This method allows a caller to get the current down target callback set for this L4 protocol (IPv4 ca...
Ptr< const AttributeChecker > MakeBooleanChecker(void)
static uint16_t GetStaticProtocolNumber()
Get ICMPv6 protocol number.
Ipv6InterfaceAddress::State_e GetState() const
Get the address state.
Introspection did not find any typical Config paths.
void AddWaitingPacket(Ptr< Packet > p)
Add a packet (or replace old value) in the queue.
void StartDelayTimer()
Start delay timer.
IpL4Protocol::DownTargetCallback6 m_downTarget
callback to Ipv6::Send
static const uint8_t MAX_INITIAL_RTR_ADVERT_INTERVAL
Neighbor Discovery router constants : max initial RA initial interval.
bool IsMulticast() const
If the IPv6 address is multicast (ff00::/8).
static Ipv6Address GetAllNodesMulticast()
Get the "all nodes multicast" address.
void StartReachableTimer()
Start the reachable timer.
bool m_alwaysDad
Always do DAD ?
bool IsIncomplete() const
Is the entry INCOMPLETE.
L4 Protocol abstract base class.
void SendMessage(Ptr< Packet > packet, Ipv6Address src, Ipv6Address dst, uint8_t ttl)
Send a packet via ICMPv6, note that packet already contains ICMPv6 header.
virtual void SetDownTarget(IpL4Protocol::DownTargetCallback cb)
This method allows a caller to set the current down target callback set for this L4 protocol (IPv4 ca...
Ptr< Packet > ForgeRS(Ipv6Address src, Ipv6Address dst, Address hardwareAddress)
Forge a Router Solicitation.
void Remove(NdiscCache::Entry *entry)
Delete an entry.
static const uint8_t MIN_DELAY_BETWEEN_RAS
Neighbor Discovery router constants : min delay between RA.
void SetFlagR(bool r)
Set the R flag.
virtual uint32_t GetSerializedSize() const
Get the serialized size.
void SendRedirection(Ptr< Packet > redirectedPacket, Ipv6Address src, Ipv6Address dst, Ipv6Address redirTarget, Ipv6Address redirDestination, Address redirHardwareTarget)
Send an ICMPv6 Redirection.
std::list< Ptr< Packet > > MarkStale(Address mac)
Changes the state to this entry to STALE.
void SetMacAddress(Address mac)
Set the MAC address of this entry.
static const double MAX_RANDOM_FACTOR
Neighbor Discovery node constants : max random factor.
Introspection did not find any typical Config paths.
void SetFlagS(bool s)
Set the S flag.
CacheList m_cacheList
A list of cache by device.
void DoDAD(Ipv6Address target, Ptr< Ipv6Interface > interface)
Do the Duplication Address Detection (DAD).
virtual void SetDownTarget6(IpL4Protocol::DownTargetCallback6 cb)
This method allows a caller to set the current down target callback set for this L4 protocol (IPv6 ca...
Ipv6InterfaceAddress GetLinkLocalAddress() const
Get link-local address from IPv6 interface.
Describes an IPv6 address.
NdiscCache::Entry * Lookup(Ipv6Address dst)
Lookup in the cache.
void HandleRA(Ptr< Packet > p, Ipv6Address const &src, Ipv6Address const &dst, Ptr< Ipv6Interface > interface)
Receive Router Advertisement method.
#define NS_LOG_WARN(msg)
Use NS_LOG to output a message of level LOG_WARN.
void ReceiveLLA(Icmpv6OptionLinkLayerAddress lla, Ipv6Address const &src, Ipv6Address const &dst, Ptr< Ipv6Interface > interface)
Link layer address option processing.
void MarkDelay()
Change the state to this entry to DELAY.
virtual int GetVersion() const
Get the version of the protocol.
uint32_t GetSerializedSize(void) const
Returns number of bytes required for packet serialization.
static const uint32_t RETRANS_TIMER
Neighbor Discovery node constants : retransmission timer.
void SetDestination(Ipv6Address destination)
Set the IPv6 destination address.
void StopRetransmitTimer()
Stop retransmit timer.
Ptr< Packet > ForgeEchoRequest(Ipv6Address src, Ipv6Address dst, uint16_t id, uint16_t seq, Ptr< Packet > data)
Forge an Echo Request.
Time Seconds(double value)
Construct a Time in the indicated unit.
void StopDelayTimer()
Stop delay timer.
void SetDevice(Ptr< NetDevice > device, Ptr< Ipv6Interface > interface)
Set the device and interface.
Describes an IPv6 prefix.
virtual void DoDispose()
Dispose this object.
void Nullify(void)
Discard the implementation, set it to null.
Ipv6Address GetDestination() const
Get the IPv6 destination address.
Ipv6Address GetIpv6Target() const
Get the IPv6 target field.
uint32_t CopyData(uint8_t *buffer, uint32_t size) const
Copy the packet contents to a byte buffer.
static const uint8_t MAX_RTR_SOLICITATION_DELAY
Neighbor Discovery host constants : max RS delay.
A record that holds information about an NdiscCache entry.
Address is tentative but we are optimistic so we can send packet even if DAD is not yet finished...
void HandleNA(Ptr< Packet > p, Ipv6Address const &src, Ipv6Address const &dst, Ptr< Ipv6Interface > interface)
Receive Neighbor Advertisement method.
void SetRouter(bool router)
Set the node type.
Introspection did not find any typical Config paths.
static const uint8_t DELAY_FIRST_PROBE_TIME
Neighbor Discovery node constants : delay for the first probe.
void SetSeq(uint16_t seq)
Set the sequence number.
Address GetAddress() const
Get the hardware address.
void HandlePacketTooBig(Ptr< Packet > p, Ipv6Address const &src, Ipv6Address const &dst, Ptr< Ipv6Interface > interface)
Receive Packet Too Big method.
bool IsReachable() const
Is the entry REACHABLE.
void SetPacket(Ptr< Packet > p)
Set the incorrect packet.
uint32_t GetMtu() const
Get the MTU field.
virtual uint32_t GetSerializedSize() const
Get the serialized size.
Ptr< T > GetObject(void) const
Get a pointer to the requested aggregated Object.
Introspection did not find any typical Config paths.
a unique identifier for an interface.
Ptr< Packet > GetPacket() const
Get the incorrect packet.
Ipv6InterfaceAddress GetAddressMatchingDestination(Ipv6Address dst)
Get an address which is in the same network prefix as destination.
virtual uint32_t GetSerializedSize() const
Get the serialized size.
void SetFlagO(bool o)
Set the O flag.
Ptr< NetDevice > GetDevice() const
Get the NetDevice associated with this cache.
TypeId SetParent(TypeId tid)
void Dispose(void)
Dispose of this Object.
void SendNS(Ipv6Address src, Ipv6Address dst, Ipv6Address target, Address hardwareAddress)
Send a Neighbor Solicitation.
Address is tentative, no packet can be sent unless DAD finished.
bool IsStale() const
Is the entry STALE.
void AddHeader(const Header &header)
Add header to this packet.
Ptr< NdiscCache > CreateCache(Ptr< NetDevice > device, Ptr< Ipv6Interface > interface)
Create a neighbor cache.
void SetId(uint16_t id)
Set the ID of the packet.
void HandleDestinationUnreachable(Ptr< Packet > p, Ipv6Address const &src, Ipv6Address const &dst, Ptr< Ipv6Interface > interface)
Receive Destination Unreachable method.
static Ipv6Address MakeSolicitedAddress(Ipv6Address addr)
Make the solicited IPv6 address.
static Ipv6Address GetAllRoutersMulticast()
Get the "all routers multicast" address.
void SetAddress(Address addr)
Set the hardware address.
static const uint8_t MAX_UNICAST_SOLICIT
Neighbor Discovery node constants : max unicast solicitations.