An implementation of the ICMPv6 protocol. More...
#include "icmpv6-l4-protocol.h"
Public Member Functions | |
Icmpv6L4Protocol () | |
Constructor. More... | |
~Icmpv6L4Protocol () override | |
Destructor. More... | |
int64_t | AssignStreams (int64_t stream) |
Assign a fixed random variable stream number to the random variables used by this model. More... | |
virtual Ptr< NdiscCache > | CreateCache (Ptr< NetDevice > device, Ptr< Ipv6Interface > interface) |
Create a neighbor cache. More... | |
void | DelayedSendMessage (Ptr< Packet > packet, Ipv6Address src, Ipv6Address dst, uint8_t ttl) |
Helper function used during delayed solicitation. More... | |
void | DoDAD (Ipv6Address target, Ptr< Ipv6Interface > interface) |
Do the Duplication Address Detection (DAD). More... | |
NdiscCache::Ipv6PayloadHeaderPair | ForgeEchoRequest (Ipv6Address src, Ipv6Address dst, uint16_t id, uint16_t seq, Ptr< Packet > data) |
Forge an Echo Request. More... | |
NdiscCache::Ipv6PayloadHeaderPair | ForgeNA (Ipv6Address src, Ipv6Address dst, Address *hardwareAddress, uint8_t flags) |
Forge a Neighbor Advertisement. More... | |
NdiscCache::Ipv6PayloadHeaderPair | ForgeNS (Ipv6Address src, Ipv6Address dst, Ipv6Address target, Address hardwareAddress) |
Forge a Neighbor Solicitation. More... | |
NdiscCache::Ipv6PayloadHeaderPair | ForgeRS (Ipv6Address src, Ipv6Address dst, Address hardwareAddress) |
Forge a Router Solicitation. More... | |
virtual void | FunctionDadTimeout (Ipv6Interface *interface, Ipv6Address addr) |
Function called when DAD timeout. More... | |
Time | GetDadTimeout () const |
Get the DAD timeout. More... | |
Time | GetDelayFirstProbe () const |
Neighbor Discovery node constants : delay for the first probe. More... | |
TypeId | GetInstanceTypeId () const override |
Get the most derived TypeId for this Object. More... | |
uint8_t | GetMaxMulticastSolicit () const |
Neighbor Discovery node constants: max multicast solicitations. More... | |
uint8_t | GetMaxUnicastSolicit () const |
Neighbor Discovery node constants: max unicast solicitations. More... | |
Ptr< Node > | GetNode () |
Get the node. More... | |
int | GetProtocolNumber () const override |
Get the protocol number. More... | |
Time | GetReachableTime () const |
Neighbor Discovery node constants: reachable time. More... | |
Time | GetRetransmissionTime () const |
Neighbor Discovery node constants: retransmission timer. More... | |
virtual int | GetVersion () const |
Get the version of the protocol. More... | |
bool | IsAlwaysDad () const |
Is the node must do DAD. More... | |
virtual bool | Lookup (Ipv6Address dst, Ptr< NetDevice > device, Ptr< NdiscCache > cache, Address *hardwareDestination) |
Lookup in the ND cache for the IPv6 address. More... | |
virtual bool | Lookup (Ptr< Packet > p, const Ipv6Header &ipHeader, Ipv6Address dst, Ptr< NetDevice > device, Ptr< NdiscCache > cache, Address *hardwareDestination) |
Lookup in the ND cache for the IPv6 address (similar as ARP protocol). More... | |
void | NotifyNewAggregate () override |
This method is called by AggregateObject and completes the aggregation by setting the node in the ICMPv6 stack and adding ICMPv6 factory to IPv6 stack connected to the node. More... | |
IpL4Protocol::RxStatus | Receive (Ptr< Packet > p, const Ipv4Header &header, Ptr< Ipv4Interface > interface) override |
Receive method. More... | |
IpL4Protocol::RxStatus | Receive (Ptr< Packet > p, const Ipv6Header &header, Ptr< Ipv6Interface > interface) override |
Receive method. More... | |
void | SendEchoReply (Ipv6Address src, Ipv6Address dst, uint16_t id, uint16_t seq, Ptr< Packet > data) |
Send a Echo Reply. More... | |
void | SendErrorDestinationUnreachable (Ptr< Packet > malformedPacket, Ipv6Address dst, uint8_t code) |
Send an error Destination Unreachable. More... | |
void | SendErrorParameterError (Ptr< Packet > malformedPacket, Ipv6Address dst, uint8_t code, uint32_t ptr) |
Send an error Parameter Error. More... | |
void | SendErrorTimeExceeded (Ptr< Packet > malformedPacket, Ipv6Address dst, uint8_t code) |
Send an error Time Exceeded. More... | |
void | SendErrorTooBig (Ptr< Packet > malformedPacket, Ipv6Address dst, uint32_t mtu) |
Send an error Too Big. More... | |
void | SendMessage (Ptr< Packet > packet, Ipv6Address dst, Icmpv6Header &icmpv6Hdr, uint8_t ttl) |
Send a packet via ICMPv6. More... | |
void | SendMessage (Ptr< Packet > packet, Ipv6Address src, Ipv6Address dst, uint8_t ttl) |
Send a packet via ICMPv6, note that packet already contains ICMPv6 header. More... | |
void | SendNA (Ipv6Address src, Ipv6Address dst, Address *hardwareAddress, uint8_t flags) |
Send a Neighbor Advertisement. More... | |
virtual void | SendNS (Ipv6Address src, Ipv6Address dst, Ipv6Address target, Address hardwareAddress) |
Send a Neighbor Solicitation. More... | |
void | SendRedirection (Ptr< Packet > redirectedPacket, Ipv6Address src, Ipv6Address dst, Ipv6Address redirTarget, Ipv6Address redirDestination, Address redirHardwareTarget) |
Send an ICMPv6 Redirection. More... | |
void | SendRS (Ipv6Address src, Ipv6Address dst, Address hardwareAddress) |
Send a Router Solicitation. More... | |
void | SetNode (Ptr< Node > node) |
Set the node. More... | |
Public Member Functions inherited from ns3::IpL4Protocol | |
~IpL4Protocol () override | |
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. More... | |
virtual void | ReceiveIcmp (Ipv6Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo, Ipv6Address payloadSource, Ipv6Address payloadDestination, const uint8_t payload[8]) |
Called from lower-level layers to send the ICMPv6 packet up in the stack. More... | |
Public Member Functions inherited from ns3::Object | |
Object () | |
Constructor. More... | |
~Object () override | |
Destructor. More... | |
void | AggregateObject (Ptr< Object > other) |
Aggregate two Objects together. More... | |
void | Dispose () |
Dispose of this Object. More... | |
AggregateIterator | GetAggregateIterator () const |
Get an iterator to the Objects aggregated to this one. More... | |
template<typename T > | |
Ptr< T > | GetObject () const |
Get a pointer to the requested aggregated Object. More... | |
template<> | |
Ptr< Object > | GetObject () const |
Specialization of () for objects of type ns3::Object. More... | |
template<typename T > | |
Ptr< T > | GetObject (TypeId tid) const |
Get a pointer to the requested aggregated Object by TypeId. More... | |
template<> | |
Ptr< Object > | GetObject (TypeId tid) const |
Specialization of (TypeId tid) for objects of type ns3::Object. More... | |
void | Initialize () |
Invoke DoInitialize on all Objects aggregated to this one. More... | |
bool | IsInitialized () const |
Check if the object has been initialized. More... | |
Public Member Functions inherited from ns3::SimpleRefCount< Object, ObjectBase, ObjectDeleter > | |
SimpleRefCount () | |
Default constructor. More... | |
SimpleRefCount (const SimpleRefCount &o[[maybe_unused]]) | |
Copy constructor. More... | |
uint32_t | GetReferenceCount () const |
Get the reference count of the object. More... | |
SimpleRefCount & | operator= (const SimpleRefCount &o[[maybe_unused]]) |
Assignment operator. More... | |
void | Ref () const |
Increment the reference count. More... | |
void | Unref () const |
Decrement the reference count. More... | |
Public Member Functions inherited from ns3::ObjectBase | |
virtual | ~ObjectBase () |
Virtual destructor. More... | |
void | GetAttribute (std::string name, AttributeValue &value) const |
Get the value of an attribute, raising fatal errors if unsuccessful. More... | |
bool | GetAttributeFailSafe (std::string name, AttributeValue &value) const |
Get the value of an attribute without raising errors. More... | |
void | SetAttribute (std::string name, const AttributeValue &value) |
Set a single attribute, raising fatal errors if unsuccessful. More... | |
bool | SetAttributeFailSafe (std::string name, const AttributeValue &value) |
Set a single attribute without raising errors. More... | |
bool | TraceConnect (std::string name, std::string context, const CallbackBase &cb) |
Connect a TraceSource to a Callback with a context. More... | |
bool | TraceConnectWithoutContext (std::string name, const CallbackBase &cb) |
Connect a TraceSource to a Callback without a context. More... | |
bool | TraceDisconnect (std::string name, std::string context, const CallbackBase &cb) |
Disconnect from a TraceSource a Callback previously connected with a context. More... | |
bool | TraceDisconnectWithoutContext (std::string name, const CallbackBase &cb) |
Disconnect from a TraceSource a Callback previously connected without a context. More... | |
Static Public Member Functions | |
static uint16_t | GetStaticProtocolNumber () |
Get ICMPv6 protocol number. More... | |
static TypeId | GetTypeId () |
Get the type ID. More... | |
Static Public Member Functions inherited from ns3::IpL4Protocol | |
static TypeId | GetTypeId () |
Get the type ID. More... | |
Static Public Member Functions inherited from ns3::Object | |
static TypeId | GetTypeId () |
Register this type. More... | |
Static Public Member Functions inherited from ns3::ObjectBase | |
static TypeId | GetTypeId () |
Get the type ID. More... | |
Static Public Attributes | |
static const uint8_t | PROT_NUMBER = 58 |
ICMPv6 protocol number (58). More... | |
Protected Types | |
typedef std::list< Ptr< NdiscCache > > | CacheList |
container of NdiscCaches More... | |
Protected Member Functions | |
void | DoDispose () override |
Dispose this object. More... | |
Ptr< NdiscCache > | FindCache (Ptr< NetDevice > device) |
Get the cache corresponding to the device. More... | |
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). More... | |
IpL4Protocol::DownTargetCallback | GetDownTarget () const override |
This method allows a caller to get the current down target callback set for this L4 protocol (IPv4 case) More... | |
IpL4Protocol::DownTargetCallback6 | GetDownTarget6 () const override |
This method allows a caller to get the current down target callback set for this L4 protocol (IPv6 case) More... | |
void | HandleDestinationUnreachable (Ptr< Packet > p, const Ipv6Address &src, const Ipv6Address &dst, Ptr< Ipv6Interface > interface) |
Receive Destination Unreachable method. More... | |
void | HandleEchoRequest (Ptr< Packet > p, const Ipv6Address &src, const Ipv6Address &dst, Ptr< Ipv6Interface > interface) |
Receive Echo Request method. More... | |
void | HandleNA (Ptr< Packet > p, const Ipv6Address &src, const Ipv6Address &dst, Ptr< Ipv6Interface > interface) |
Receive Neighbor Advertisement method. More... | |
void | HandleNS (Ptr< Packet > p, const Ipv6Address &src, const Ipv6Address &dst, Ptr< Ipv6Interface > interface) |
Receive Neighbor Solicitation method. More... | |
void | HandlePacketTooBig (Ptr< Packet > p, const Ipv6Address &src, const Ipv6Address &dst, Ptr< Ipv6Interface > interface) |
Receive Packet Too Big method. More... | |
void | HandleParameterError (Ptr< Packet > p, const Ipv6Address &src, const Ipv6Address &dst, Ptr< Ipv6Interface > interface) |
Receive Parameter Error method. More... | |
void | HandleRA (Ptr< Packet > p, const Ipv6Address &src, const Ipv6Address &dst, Ptr< Ipv6Interface > interface) |
Receive Router Advertisement method. More... | |
void | HandleRedirection (Ptr< Packet > p, const Ipv6Address &src, const Ipv6Address &dst, Ptr< Ipv6Interface > interface) |
Receive Redirection method. More... | |
void | HandleRS (Ptr< Packet > p, const Ipv6Address &src, const Ipv6Address &dst, Ptr< Ipv6Interface > interface) |
Receive Router Solicitation method. More... | |
virtual void | HandleRsTimeout (Ipv6Address src, Ipv6Address dst, Address hardwareAddress) |
Router Solicitation Timeout handler. More... | |
void | HandleTimeExceeded (Ptr< Packet > p, const Ipv6Address &src, const Ipv6Address &dst, Ptr< Ipv6Interface > interface) |
Receive Time Exceeded method. More... | |
void | ReceiveLLA (Icmpv6OptionLinkLayerAddress lla, const Ipv6Address &src, const Ipv6Address &dst, Ptr< Ipv6Interface > interface) |
Link layer address option processing. More... | |
void | SetDownTarget (IpL4Protocol::DownTargetCallback cb) override |
This method allows a caller to set the current down target callback set for this L4 protocol (IPv4 case) More... | |
void | SetDownTarget6 (IpL4Protocol::DownTargetCallback6 cb) override |
This method allows a caller to set the current down target callback set for this L4 protocol (IPv6 case) More... | |
Protected Member Functions inherited from ns3::Object | |
Object (const Object &o) | |
Copy an Object. More... | |
virtual void | DoInitialize () |
Initialize() implementation. More... | |
Protected Member Functions inherited from ns3::ObjectBase | |
void | ConstructSelf (const AttributeConstructionList &attributes) |
Complete construction of ObjectBase; invoked by derived classes. More... | |
virtual void | NotifyConstructionCompleted () |
Notifier called once the ObjectBase is fully constructed. More... | |
Protected Attributes | |
bool | m_alwaysDad |
Always do DAD ? More... | |
CacheList | m_cacheList |
A list of cache by device. More... | |
Time | m_dadTimeout |
DAD timeout. More... | |
Time | m_delayFirstProbe |
Neighbor Discovery node constants: delay for the first probe. More... | |
IpL4Protocol::DownTargetCallback6 | m_downTarget |
callback to Ipv6::Send More... | |
EventId | m_handleRsTimeoutEvent |
RS timeout handler event. More... | |
uint8_t | m_maxMulticastSolicit |
Neighbor Discovery node constants: max multicast solicitations. More... | |
uint8_t | m_maxUnicastSolicit |
Neighbor Discovery node constants: max unicast solicitations. More... | |
Ptr< Node > | m_node |
The node. More... | |
Time | m_reachableTime |
Neighbor Discovery node constants: reachable time. More... | |
Time | m_retransmissionTime |
Neighbor Discovery node constants: retransmission timer. More... | |
Time | m_rsFirstTransmissionTime |
First multicast RS transmissions [RFC 7559]. More... | |
Time | m_rsInitialRetransmissionTime |
Initial multicast RS retransmission time [RFC 7559]. More... | |
uint32_t | m_rsMaxRetransmissionCount |
Maximum number of multicast RS retransmissions [RFC 7559]. More... | |
Time | m_rsMaxRetransmissionDuration |
Maximum duration of multicast RS retransmissions [RFC 7559]. More... | |
Time | m_rsMaxRetransmissionTime |
Maximum time between multicast RS retransmissions [RFC 7559]. More... | |
Time | m_rsPrevRetransmissionTimeout |
Previous multicast RS retransmissions timeout [RFC 7559]. More... | |
uint32_t | m_rsRetransmissionCount {0} |
Multicast RS retransmissions counter [RFC 7559]. More... | |
Ptr< UniformRandomVariable > | m_rsRetransmissionJitter |
Random jitter for RS retransmissions. More... | |
Ptr< RandomVariableStream > | m_solicitationJitter |
Random jitter before sending solicitations. More... | |
Additional Inherited Members | |
Public Types inherited from ns3::IpL4Protocol | |
typedef Callback< void, Ptr< Packet >, Ipv4Address, Ipv4Address, uint8_t, Ptr< Ipv4Route > > | DownTargetCallback |
callback to send packets over IPv4 More... | |
typedef Callback< void, Ptr< Packet >, Ipv6Address, Ipv6Address, uint8_t, Ptr< Ipv6Route > > | DownTargetCallback6 |
callback to send packets over IPv6 More... | |
enum | RxStatus { RX_OK , RX_CSUM_FAILED , RX_ENDPOINT_CLOSED , RX_ENDPOINT_UNREACH } |
Rx status codes. More... | |
Related Functions inherited from ns3::ObjectBase | |
static TypeId | GetObjectIid () |
Ensure the TypeId for ObjectBase gets fully configured to anchor the inheritance tree properly. More... | |
An implementation of the ICMPv6 protocol.
Definition at line 52 of file icmpv6-l4-protocol.h.
|
protected |
container of NdiscCaches
Definition at line 432 of file icmpv6-l4-protocol.h.
ns3::Icmpv6L4Protocol::Icmpv6L4Protocol | ( | ) |
|
override |
int64_t ns3::Icmpv6L4Protocol::AssignStreams | ( | int64_t | stream | ) |
Assign a fixed random variable stream number to the random variables used by this model.
Return the number of streams (possibly zero) that have been assigned.
stream | first stream index to use |
Definition at line 185 of file icmpv6-l4-protocol.cc.
References m_rsRetransmissionJitter, m_solicitationJitter, NS_LOG_FUNCTION, and ns3::RandomVariableStream::SetStream().
|
virtual |
Create a neighbor cache.
device | thet NetDevice |
interface | the IPv6 interface |
Definition at line 1694 of file icmpv6-l4-protocol.cc.
References ns3::NdiscCache::Flush(), m_cacheList, ns3::MakeCallback(), NS_LOG_FUNCTION, and ns3::NdiscCache::SetDevice().
void ns3::Icmpv6L4Protocol::DelayedSendMessage | ( | Ptr< Packet > | packet, |
Ipv6Address | src, | ||
Ipv6Address | dst, | ||
uint8_t | ttl | ||
) |
Helper function used during delayed solicitation.
Calls SendMessage internally
packet | the packet to send which contains ICMPv6 header |
src | source address |
dst | destination address |
ttl | next hop limit |
Definition at line 1195 of file icmpv6-l4-protocol.cc.
References NS_LOG_FUNCTION, and SendMessage().
Referenced by SendNS(), and SendRS().
void ns3::Icmpv6L4Protocol::DoDAD | ( | Ipv6Address | target, |
Ptr< Ipv6Interface > | interface | ||
) |
Do the Duplication Address Detection (DAD).
It consists in sending a NS with our IPv6 as target. If we received a NA with matched target address, we could not use the address, else the address pass from TENTATIVE to PERMANENT.
target | target address |
interface | interface |
Definition at line 257 of file icmpv6-l4-protocol.cc.
References ForgeNS(), ns3::Ipv6Interface::GetDevice(), ns3::Object::GetObject(), ns3::RandomVariableStream::GetValue(), m_alwaysDad, m_node, m_solicitationJitter, ns3::Ipv6Address::MakeSolicitedAddress(), ns3::MilliSeconds(), NS_ASSERT, NS_LOG_FUNCTION, ns3::Simulator::Schedule(), ns3::Ipv6Interface::Send(), and ns3::Ipv6Interface::SetNsDadUid().
Referenced by ns3::Ipv6Interface::AddAddress().
|
overrideprotectedvirtual |
Dispose this object.
Reimplemented from ns3::Object.
Definition at line 168 of file icmpv6-l4-protocol.cc.
References ns3::Object::Dispose(), ns3::Object::DoDispose(), m_cacheList, m_downTarget, m_node, NS_LOG_FUNCTION, and ns3::Callback< R, UArgs >::Nullify().
|
protected |
Get the cache corresponding to the device.
device | the device |
Definition at line 1676 of file icmpv6-l4-protocol.cc.
References m_cacheList, NS_ASSERT_MSG, and NS_LOG_FUNCTION.
Referenced by HandleNA(), HandleNS(), HandleRedirection(), HandleRS(), Lookup(), and ReceiveLLA().
NdiscCache::Ipv6PayloadHeaderPair ns3::Icmpv6L4Protocol::ForgeEchoRequest | ( | Ipv6Address | src, |
Ipv6Address | dst, | ||
uint16_t | id, | ||
uint16_t | seq, | ||
Ptr< Packet > | data | ||
) |
Forge an Echo Request.
src | source address |
dst | destination address |
id | ID of the packet |
seq | sequence number |
data | the data |
Definition at line 802 of file icmpv6-l4-protocol.cc.
References ns3::Packet::AddHeader(), ns3::Icmpv6Header::CalculatePseudoHeaderChecksum(), data, ns3::Icmpv6Echo::GetSerializedSize(), ns3::Packet::GetSize(), NS_LOG_FUNCTION, PROT_NUMBER, ns3::Ipv6Header::SetDestination(), ns3::Ipv6Header::SetHopLimit(), ns3::Icmpv6Echo::SetId(), ns3::Ipv6Header::SetNextHeader(), ns3::Ipv6Header::SetPayloadLength(), ns3::Icmpv6Echo::SetSeq(), and ns3::Ipv6Header::SetSource().
NdiscCache::Ipv6PayloadHeaderPair ns3::Icmpv6L4Protocol::ForgeNA | ( | Ipv6Address | src, |
Ipv6Address | dst, | ||
Address * | hardwareAddress, | ||
uint8_t | flags | ||
) |
Forge a Neighbor Advertisement.
src | source IPv6 address |
dst | destination IPv6 address |
hardwareAddress | our mac address |
flags | flags (bitfield => R (4), S (2), O (1)) |
Definition at line 1603 of file icmpv6-l4-protocol.cc.
References ns3::Packet::AddHeader(), ns3::Icmpv6Header::CalculatePseudoHeaderChecksum(), ns3::Ipv6Address::GetAny(), ns3::Icmpv6NA::GetSerializedSize(), ns3::Packet::GetSize(), NS_LOG_FUNCTION, NS_LOG_LOGIC, PROT_NUMBER, ns3::Ipv6Header::SetDestination(), ns3::Icmpv6NA::SetFlagO(), ns3::Icmpv6NA::SetFlagR(), ns3::Icmpv6NA::SetFlagS(), ns3::Ipv6Header::SetHopLimit(), ns3::Icmpv6NA::SetIpv6Target(), ns3::Ipv6Header::SetNextHeader(), ns3::Ipv6Header::SetPayloadLength(), and ns3::Ipv6Header::SetSource().
Referenced by HandleNS().
NdiscCache::Ipv6PayloadHeaderPair ns3::Icmpv6L4Protocol::ForgeNS | ( | Ipv6Address | src, |
Ipv6Address | dst, | ||
Ipv6Address | target, | ||
Address | hardwareAddress | ||
) |
Forge a Neighbor Solicitation.
src | source IPv6 address |
dst | destination IPv6 address |
target | target IPv6 address |
hardwareAddress | our mac address |
Definition at line 1647 of file icmpv6-l4-protocol.cc.
References ns3::Packet::AddHeader(), ns3::Icmpv6Header::CalculatePseudoHeaderChecksum(), ns3::Icmpv6NS::GetSerializedSize(), ns3::Packet::GetSize(), NS_LOG_FUNCTION, NS_LOG_LOGIC, PROT_NUMBER, ns3::Ipv6Header::SetDestination(), ns3::Ipv6Header::SetHopLimit(), ns3::Ipv6Header::SetNextHeader(), ns3::Ipv6Header::SetPayloadLength(), and ns3::Ipv6Header::SetSource().
Referenced by DoDAD().
NdiscCache::Ipv6PayloadHeaderPair ns3::Icmpv6L4Protocol::ForgeRS | ( | Ipv6Address | src, |
Ipv6Address | dst, | ||
Address | hardwareAddress | ||
) |
Forge a Router Solicitation.
src | source IPv6 address |
dst | destination IPv6 address |
hardwareAddress | our mac address |
Definition at line 770 of file icmpv6-l4-protocol.cc.
References ns3::Packet::AddHeader(), ns3::Icmpv6Header::CalculatePseudoHeaderChecksum(), ns3::Icmpv6RS::GetSerializedSize(), ns3::Packet::GetSize(), ns3::Ipv6Address::IsAny(), NS_LOG_FUNCTION, NS_LOG_LOGIC, PROT_NUMBER, ns3::Ipv6Header::SetDestination(), ns3::Ipv6Header::SetHopLimit(), ns3::Ipv6Header::SetNextHeader(), ns3::Ipv6Header::SetPayloadLength(), and ns3::Ipv6Header::SetSource().
|
protected |
Notify an ICMPv6 reception to upper layers (if requested).
source | the ICMP source |
icmp | the ICMP header |
info | information about the ICMP |
ipHeader | the IP header carried by the ICMP |
payload | the data carried by the ICMP |
Definition at line 361 of file icmpv6-l4-protocol.cc.
References ns3::Icmpv6Header::GetCode(), ns3::Ipv6Header::GetDestination(), ns3::Ipv6Header::GetHopLimit(), ns3::Ipv6Header::GetNextHeader(), ns3::Object::GetObject(), ns3::Ipv6Header::GetSource(), ns3::Icmpv6Header::GetType(), m_node, NS_LOG_FUNCTION, PROT_NUMBER, and ns3::IpL4Protocol::ReceiveIcmp().
Referenced by HandleDestinationUnreachable(), HandlePacketTooBig(), HandleParameterError(), and HandleTimeExceeded().
|
virtual |
Function called when DAD timeout.
interface | the interface |
addr | the IPv6 address |
Definition at line 1826 of file icmpv6-l4-protocol.cc.
References ns3::Ipv6InterfaceAddress::GetAddress(), ns3::Ipv6Interface::GetAddress(), ns3::Ipv6Address::GetAllRoutersMulticast(), ns3::Ipv6Interface::GetDevice(), ns3::Ipv6Interface::GetNAddresses(), ns3::Object::GetObject(), ns3::Ipv6InterfaceAddress::GetState(), ns3::Ipv6InterfaceAddress::INVALID, ns3::Ipv6Address::IsLinkLocal(), m_node, m_rsRetransmissionCount, NS_LOG_FUNCTION, NS_LOG_LOGIC, ns3::Ipv6InterfaceAddress::PREFERRED, ns3::Simulator::Schedule(), ns3::Seconds(), SendRS(), and ns3::Ipv6Interface::SetState().
Referenced by ns3::Ipv6Interface::AddAddress().
Time ns3::Icmpv6L4Protocol::GetDadTimeout | ( | ) | const |
Get the DAD timeout.
Definition at line 1946 of file icmpv6-l4-protocol.cc.
References m_dadTimeout.
Time ns3::Icmpv6L4Protocol::GetDelayFirstProbe | ( | ) | const |
Neighbor Discovery node constants : delay for the first probe.
Definition at line 1940 of file icmpv6-l4-protocol.cc.
References m_delayFirstProbe.
|
overrideprotectedvirtual |
This method allows a caller to get the current down target callback set for this L4 protocol (IPv4 case)
Implements ns3::IpL4Protocol.
Definition at line 1902 of file icmpv6-l4-protocol.cc.
References NS_LOG_FUNCTION.
|
overrideprotectedvirtual |
This method allows a caller to get the current down target callback set for this L4 protocol (IPv6 case)
Implements ns3::IpL4Protocol.
Definition at line 1909 of file icmpv6-l4-protocol.cc.
References m_downTarget, and NS_LOG_FUNCTION.
|
overridevirtual |
Get the most derived TypeId for this Object.
This method is typically implemented by ns3::Object::GetInstanceTypeId but some classes which derive from ns3::ObjectBase directly have to implement it themselves.
Reimplemented from ns3::Object.
Definition at line 150 of file icmpv6-l4-protocol.cc.
References GetTypeId(), and NS_LOG_FUNCTION.
uint8_t ns3::Icmpv6L4Protocol::GetMaxMulticastSolicit | ( | ) | const |
Neighbor Discovery node constants: max multicast solicitations.
Definition at line 1916 of file icmpv6-l4-protocol.cc.
References m_maxMulticastSolicit.
uint8_t ns3::Icmpv6L4Protocol::GetMaxUnicastSolicit | ( | ) | const |
Neighbor Discovery node constants: max unicast solicitations.
Definition at line 1922 of file icmpv6-l4-protocol.cc.
References m_maxUnicastSolicit.
Get the node.
Definition at line 222 of file icmpv6-l4-protocol.cc.
References m_node, and NS_LOG_FUNCTION.
|
overridevirtual |
Get the protocol number.
Implements ns3::IpL4Protocol.
Definition at line 236 of file icmpv6-l4-protocol.cc.
References NS_LOG_FUNCTION, and PROT_NUMBER.
Time ns3::Icmpv6L4Protocol::GetReachableTime | ( | ) | const |
Neighbor Discovery node constants: reachable time.
Definition at line 1928 of file icmpv6-l4-protocol.cc.
References m_reachableTime.
Time ns3::Icmpv6L4Protocol::GetRetransmissionTime | ( | ) | const |
Neighbor Discovery node constants: retransmission timer.
Definition at line 1934 of file icmpv6-l4-protocol.cc.
References m_retransmissionTime.
|
static |
Get ICMPv6 protocol number.
Definition at line 229 of file icmpv6-l4-protocol.cc.
References NS_LOG_FUNCTION_NOARGS, and PROT_NUMBER.
Referenced by ns3::Ipv6Interface::AddAddress(), ns3::Ipv6Interface::DoSetup(), ns3::Ipv6RawSocketImpl::ForwardUp(), ns3::Ipv6L3Protocol::GetIcmpv6(), ns3::Ipv6Interface::Send(), and ns3::Ipv6RawSocketImpl::SendTo().
|
static |
Get the type ID.
Definition at line 68 of file icmpv6-l4-protocol.cc.
References m_alwaysDad, m_dadTimeout, m_delayFirstProbe, m_maxMulticastSolicit, m_maxUnicastSolicit, m_reachableTime, m_retransmissionTime, m_rsInitialRetransmissionTime, m_rsMaxRetransmissionCount, m_rsMaxRetransmissionDuration, m_rsMaxRetransmissionTime, m_rsRetransmissionJitter, m_solicitationJitter, ns3::MakeBooleanAccessor(), ns3::MakeBooleanChecker(), ns3::MakeIntegerAccessor(), ns3::MakePointerAccessor(), ns3::MakeTimeAccessor(), ns3::MakeTimeChecker(), ns3::MakeUintegerAccessor(), ns3::Seconds(), and ns3::TypeId::SetParent().
Referenced by GetInstanceTypeId().
|
virtual |
Get the version of the protocol.
Definition at line 243 of file icmpv6-l4-protocol.cc.
References NS_LOG_FUNCTION.
|
protected |
Receive Destination Unreachable method.
p | the packet |
src | source address |
dst | destination address |
interface | the interface from which the packet is coming |
Definition at line 1089 of file icmpv6-l4-protocol.cc.
References ns3::Packet::Copy(), ns3::Packet::CopyData(), Forward(), ns3::Icmpv6Header::GetCode(), ns3::Ipv6Header::GetSerializedSize(), ns3::Packet::GetSize(), NS_LOG_FUNCTION, and ns3::Packet::RemoveHeader().
Referenced by Receive().
|
protected |
Receive Echo Request method.
p | the packet |
src | source address |
dst | destination address |
interface | the interface from which the packet is coming |
Definition at line 393 of file icmpv6-l4-protocol.cc.
References ns3::Packet::CopyData(), ns3::Ipv6InterfaceAddress::GetAddress(), ns3::Icmpv6Echo::GetId(), ns3::Ipv6Interface::GetLinkLocalAddress(), ns3::Icmpv6Echo::GetSeq(), ns3::Packet::GetSize(), ns3::Ipv6Address::IsMulticast(), NS_LOG_FUNCTION, ns3::Packet::RemoveHeader(), and SendEchoReply().
Referenced by Receive().
|
protected |
Receive Neighbor Advertisement method.
p | the packet |
src | source address |
dst | destination address |
interface | the interface from which the packet is coming |
Definition at line 832 of file icmpv6-l4-protocol.cc.
References ns3::NdiscCache::Entry::ClearWaitingPacket(), ns3::Packet::CopyData(), ns3::NdiscCache::Entry::DELAY, FindCache(), ns3::Icmpv6OptionLinkLayerAddress::GetAddress(), ns3::Ipv6InterfaceAddress::GetAddress(), ns3::Ipv6Interface::GetAddress(), ns3::Ipv6Interface::GetDevice(), ns3::Icmpv6NA::GetFlagO(), ns3::Icmpv6NA::GetFlagR(), ns3::Icmpv6NA::GetFlagS(), ns3::NdiscCache::GetInterface(), ns3::Icmpv6NA::GetIpv6Target(), ns3::NdiscCache::Entry::GetMacAddress(), ns3::Ipv6Interface::GetNAddresses(), ns3::Ipv6InterfaceAddress::GetState(), ns3::Icmpv6Header::ICMPV6_OPT_LINK_LAYER_TARGET, ns3::NdiscCache::Entry::INCOMPLETE, ns3::Ipv6InterfaceAddress::INVALID, ns3::NdiscCache::Lookup(), ns3::NdiscCache::Entry::m_state, ns3::NdiscCache::Entry::MarkReachable(), ns3::NdiscCache::Entry::MarkStale(), NS_LOG_FUNCTION, ns3::NdiscCache::Entry::PERMANENT, ns3::NdiscCache::Entry::PROBE, ns3::NdiscCache::Entry::REACHABLE, ns3::Packet::RemoveHeader(), ns3::Ipv6Interface::Send(), ns3::NdiscCache::Entry::SetMacAddress(), ns3::NdiscCache::Entry::SetRouter(), ns3::Ipv6Interface::SetState(), ns3::NdiscCache::Entry::STALE, ns3::NdiscCache::Entry::StartReachableTimer(), ns3::NdiscCache::Entry::STATIC_AUTOGENERATED, ns3::NdiscCache::Entry::StopNudTimer(), ns3::Ipv6InterfaceAddress::TENTATIVE, ns3::Ipv6InterfaceAddress::TENTATIVE_OPTIMISTIC, and check-style-clang-format::type.
Referenced by Receive().
|
protected |
Receive Neighbor Solicitation method.
p | the packet |
src | source address |
dst | destination address |
interface | the interface from which the packet is coming |
Definition at line 636 of file icmpv6-l4-protocol.cc.
References ns3::NdiscCache::Add(), ns3::Packet::AddHeader(), ns3::Packet::CopyData(), FindCache(), ForgeNA(), ns3::Icmpv6OptionLinkLayerAddress::GetAddress(), ns3::Ipv6InterfaceAddress::GetAddress(), ns3::Ipv6Interface::GetAddress(), ns3::Ipv6Address::GetAny(), ns3::Ipv6Interface::GetDevice(), ns3::Icmpv6NS::GetIpv6Target(), ns3::Ipv6Interface::GetLinkLocalAddress(), ns3::NdiscCache::Entry::GetMacAddress(), ns3::Ipv6Interface::GetNAddresses(), ns3::Ipv6InterfaceAddress::GetNsDadUid(), ns3::Object::GetObject(), ns3::Packet::GetSize(), ns3::Packet::GetUid(), ns3::Icmpv6Header::ICMPV6_OPT_LINK_LAYER_SOURCE, ns3::Ipv6Address::IsAny(), ns3::Ipv6Address::IsLinkLocal(), ns3::NdiscCache::Lookup(), m_node, ns3::NdiscCache::Entry::MarkStale(), NS_LOG_FUNCTION, NS_LOG_LOGIC, ns3::Ipv6L3Protocol::PROT_NUMBER, ns3::Packet::RemoveHeader(), ns3::NdiscCache::Entry::SetRouter(), and check-style-clang-format::type.
Referenced by Receive().
|
protected |
Receive Packet Too Big method.
p | the packet |
src | source address |
dst | destination address |
interface | the interface from which the packet is coming |
Definition at line 1134 of file icmpv6-l4-protocol.cc.
References ns3::Packet::Copy(), ns3::Packet::CopyData(), Forward(), ns3::Ipv6Header::GetDestination(), ns3::Icmpv6TooBig::GetMtu(), ns3::Object::GetObject(), ns3::Ipv6Header::GetSerializedSize(), ns3::Packet::GetSize(), m_node, NS_LOG_FUNCTION, and ns3::Packet::RemoveHeader().
Referenced by Receive().
|
protected |
Receive Parameter Error method.
p | the packet |
src | source address |
dst | destination address |
interface | the interface from which the packet is coming |
Definition at line 1160 of file icmpv6-l4-protocol.cc.
References ns3::Packet::Copy(), ns3::Packet::CopyData(), Forward(), ns3::Icmpv6Header::GetCode(), ns3::Ipv6Header::GetSerializedSize(), ns3::Packet::GetSize(), NS_LOG_FUNCTION, and ns3::Packet::RemoveHeader().
Referenced by Receive().
|
protected |
Receive Router Advertisement method.
p | the packet |
src | source address |
dst | destination address |
interface | the interface from which the packet is coming |
Definition at line 417 of file icmpv6-l4-protocol.cc.
References ns3::EventId::Cancel(), ns3::Packet::Copy(), ns3::Packet::CopyData(), ns3::Ipv6Interface::GetDevice(), ns3::Icmpv6RA::GetLifeTime(), ns3::Object::GetObject(), ns3::Ipv6Address::GetZero(), ns3::Icmpv6Header::ICMPV6_OPT_LINK_LAYER_SOURCE, ns3::Icmpv6Header::ICMPV6_OPT_MTU, ns3::Icmpv6Header::ICMPV6_OPT_PREFIX, ns3::EventId::IsRunning(), m_handleRsTimeoutEvent, m_node, m_rsRetransmissionCount, NS_LOG_FUNCTION, ReceiveLLA(), ns3::Packet::RemoveHeader(), and check-style-clang-format::type.
Referenced by Receive().
|
protected |
Receive Redirection method.
p | the packet |
src | source address |
dst | destination address |
interface | the interface from which the packet is coming |
Definition at line 1007 of file icmpv6-l4-protocol.cc.
References ns3::NdiscCache::Add(), ns3::Packet::Copy(), ns3::Packet::CopyData(), FindCache(), ns3::Icmpv6OptionLinkLayerAddress::GetAddress(), ns3::Icmpv6Redirection::GetDestination(), ns3::Ipv6Interface::GetDevice(), ns3::NdiscCache::Entry::GetMacAddress(), ns3::Object::GetObject(), ns3::Icmpv6Redirection::GetTarget(), ns3::Icmpv6Header::ICMPV6_OPT_LINK_LAYER_TARGET, ns3::NdiscCache::Entry::IsIncomplete(), ns3::NdiscCache::Lookup(), m_node, ns3::NdiscCache::Entry::MarkStale(), NS_LOG_FUNCTION, ns3::Packet::RemoveHeader(), ns3::NdiscCache::Entry::SetMacAddress(), ns3::NdiscCache::Entry::SetRouter(), and check-style-clang-format::type.
Referenced by Receive().
|
protected |
Receive Router Solicitation method.
p | the packet |
src | source address |
dst | destination address |
interface | the interface from which the packet is coming |
Definition at line 593 of file icmpv6-l4-protocol.cc.
References ns3::NdiscCache::Add(), ns3::Packet::CopyData(), FindCache(), ns3::Icmpv6OptionLinkLayerAddress::GetAddress(), ns3::Ipv6Address::GetAny(), ns3::Ipv6Interface::GetDevice(), ns3::NdiscCache::Entry::GetMacAddress(), ns3::Object::GetObject(), ns3::Icmpv6Header::ICMPV6_OPT_LINK_LAYER_SOURCE, ns3::NdiscCache::Lookup(), m_node, ns3::NdiscCache::Entry::MarkStale(), NS_LOG_FUNCTION, NS_LOG_LOGIC, ns3::Packet::RemoveHeader(), ns3::NdiscCache::Entry::SetRouter(), and check-style-clang-format::type.
Referenced by Receive().
|
protectedvirtual |
Router Solicitation Timeout handler.
src | link-local source address |
dst | destination address (usually ff02::2 i.e all-routers) |
hardwareAddress | link-layer address (SHOULD be included if src is not ::) |
Definition at line 1406 of file icmpv6-l4-protocol.cc.
References m_rsInitialRetransmissionTime, m_rsMaxRetransmissionCount, m_rsMaxRetransmissionDuration, m_rsRetransmissionCount, ns3::Simulator::Now(), NS_LOG_FUNCTION, NS_LOG_LOGIC, and SendRS().
Referenced by SendRS().
|
protected |
Receive Time Exceeded method.
p | the packet |
src | source address |
dst | destination address |
interface | the interface from which the packet is coming |
Definition at line 1111 of file icmpv6-l4-protocol.cc.
References ns3::Packet::Copy(), ns3::Packet::CopyData(), Forward(), ns3::Icmpv6Header::GetCode(), ns3::Ipv6Header::GetSerializedSize(), ns3::Packet::GetSize(), NS_LOG_FUNCTION, and ns3::Packet::RemoveHeader().
Referenced by Receive().
bool ns3::Icmpv6L4Protocol::IsAlwaysDad | ( | ) | const |
Is the node must do DAD.
Definition at line 250 of file icmpv6-l4-protocol.cc.
References m_alwaysDad, and NS_LOG_FUNCTION.
|
virtual |
Lookup in the ND cache for the IPv6 address.
dst | destination address |
device | device |
cache | the neighbor cache |
hardwareDestination | hardware address |
Definition at line 1707 of file icmpv6-l4-protocol.cc.
References FindCache(), ns3::NdiscCache::Entry::GetMacAddress(), ns3::NdiscCache::Entry::IsAutoGenerated(), ns3::NdiscCache::Entry::IsDelay(), ns3::NdiscCache::Entry::IsPermanent(), ns3::NdiscCache::Entry::IsReachable(), ns3::NdiscCache::Entry::IsStale(), ns3::NdiscCache::Lookup(), ns3::NdiscCache::Entry::MarkDelay(), NS_LOG_FUNCTION, and ns3::NdiscCache::Entry::StartDelayTimer().
|
virtual |
Lookup in the ND cache for the IPv6 address (similar as ARP protocol).
It also send NS request to target and store the waiting packet.
p | the packet |
ipHeader | IPv6 header |
dst | destination address |
device | device |
cache | the neighbor cache |
hardwareDestination | hardware address |
Definition at line 1743 of file icmpv6-l4-protocol.cc.
References ns3::NdiscCache::Add(), ns3::NdiscCache::Entry::AddWaitingPacket(), FindCache(), ns3::Ipv6InterfaceAddress::GetAddress(), ns3::Ipv6Interface::GetAddressMatchingDestination(), ns3::NdiscCache::GetDevice(), ns3::NdiscCache::GetInterface(), ns3::Ipv6Interface::GetLinkLocalAddress(), ns3::NdiscCache::Entry::GetMacAddress(), ns3::Ipv6Interface::GetNAddresses(), ns3::NdiscCache::Entry::IsAutoGenerated(), ns3::NdiscCache::Entry::IsDelay(), ns3::Ipv6Address::IsLinkLocal(), ns3::NdiscCache::Entry::IsPermanent(), ns3::NdiscCache::Entry::IsReachable(), ns3::NdiscCache::Entry::IsStale(), ns3::NdiscCache::Lookup(), ns3::Ipv6Address::MakeSolicitedAddress(), ns3::NdiscCache::Entry::MarkDelay(), ns3::NdiscCache::Entry::MarkIncomplete(), NS_LOG_FUNCTION, ns3::NdiscCache::Remove(), SendNS(), ns3::NdiscCache::Entry::SetRouter(), ns3::NdiscCache::Entry::StartDelayTimer(), and ns3::NdiscCache::Entry::StartRetransmitTimer().
|
overridevirtual |
This method is called by AggregateObject and completes the aggregation by setting the node in the ICMPv6 stack and adding ICMPv6 factory to IPv6 stack connected to the node.
Reimplemented from ns3::Object.
Definition at line 194 of file icmpv6-l4-protocol.cc.
References ns3::Callback< R, UArgs >::IsNull(), m_downTarget, m_node, ns3::MakeCallback(), ns3::Object::NotifyNewAggregate(), NS_LOG_FUNCTION, ns3::Ipv6::Send(), SetDownTarget6(), and SetNode().
|
overridevirtual |
Receive method.
p | the packet |
header | the IPv4 header |
interface | the interface from which the packet is coming |
Implements ns3::IpL4Protocol.
Definition at line 288 of file icmpv6-l4-protocol.cc.
References NS_LOG_FUNCTION, and ns3::IpL4Protocol::RX_ENDPOINT_UNREACH.
|
overridevirtual |
Receive method.
p | the packet |
header | the IPv6 header |
interface | the interface from which the packet is coming |
Implements ns3::IpL4Protocol.
Definition at line 297 of file icmpv6-l4-protocol.cc.
References ns3::Packet::Copy(), ns3::Packet::CopyData(), ns3::Ipv6Header::GetDestination(), ns3::Ipv6Interface::GetDevice(), ns3::Object::GetObject(), ns3::Ipv6Header::GetSource(), HandleDestinationUnreachable(), HandleEchoRequest(), HandleNA(), HandleNS(), HandlePacketTooBig(), HandleParameterError(), HandleRA(), HandleRedirection(), HandleRS(), HandleTimeExceeded(), ns3::Icmpv6Header::ICMPV6_ECHO_REPLY, ns3::Icmpv6Header::ICMPV6_ECHO_REQUEST, ns3::Icmpv6Header::ICMPV6_ERROR_DESTINATION_UNREACHABLE, ns3::Icmpv6Header::ICMPV6_ERROR_PACKET_TOO_BIG, ns3::Icmpv6Header::ICMPV6_ERROR_PARAMETER_ERROR, ns3::Icmpv6Header::ICMPV6_ERROR_TIME_EXCEEDED, ns3::Icmpv6Header::ICMPV6_ND_NEIGHBOR_ADVERTISEMENT, ns3::Icmpv6Header::ICMPV6_ND_NEIGHBOR_SOLICITATION, ns3::Icmpv6Header::ICMPV6_ND_REDIRECTION, ns3::Icmpv6Header::ICMPV6_ND_ROUTER_ADVERTISEMENT, ns3::Icmpv6Header::ICMPV6_ND_ROUTER_SOLICITATION, m_node, NS_LOG_FUNCTION, NS_LOG_LOGIC, ns3::IpL4Protocol::RX_OK, and check-style-clang-format::type.
|
protected |
Link layer address option processing.
lla | LLA option |
src | source address |
dst | destination address |
interface | the interface from which the packet is coming |
Definition at line 493 of file icmpv6-l4-protocol.cc.
References ns3::NdiscCache::Add(), ns3::NdiscCache::Entry::ClearWaitingPacket(), ns3::NdiscCache::Entry::DELAY, FindCache(), ns3::Icmpv6OptionLinkLayerAddress::GetAddress(), ns3::Ipv6Interface::GetDevice(), ns3::NdiscCache::GetInterface(), ns3::NdiscCache::Entry::GetMacAddress(), ns3::NdiscCache::Entry::INCOMPLETE, ns3::NdiscCache::Lookup(), ns3::NdiscCache::Entry::m_state, ns3::NdiscCache::Entry::MarkReachable(), ns3::NdiscCache::Entry::MarkStale(), NS_LOG_FUNCTION, ns3::NdiscCache::Entry::PERMANENT, ns3::NdiscCache::Entry::PROBE, ns3::NdiscCache::Entry::REACHABLE, ns3::Ipv6Interface::Send(), ns3::NdiscCache::Entry::SetMacAddress(), ns3::NdiscCache::Entry::SetRouter(), ns3::NdiscCache::Entry::STALE, ns3::NdiscCache::Entry::StartReachableTimer(), ns3::NdiscCache::Entry::STATIC_AUTOGENERATED, and ns3::NdiscCache::Entry::StopNudTimer().
Referenced by HandleRA().
void ns3::Icmpv6L4Protocol::SendEchoReply | ( | Ipv6Address | src, |
Ipv6Address | dst, | ||
uint16_t | id, | ||
uint16_t | seq, | ||
Ptr< Packet > | data | ||
) |
Send a Echo Reply.
src | source IPv6 address |
dst | destination IPv6 address |
id | id of the packet |
seq | sequence number |
data | auxiliary data |
Definition at line 1274 of file icmpv6-l4-protocol.cc.
References ns3::Packet::AddHeader(), ns3::Icmpv6Header::CalculatePseudoHeaderChecksum(), data, ns3::Icmpv6Echo::GetSerializedSize(), ns3::Packet::GetSize(), NS_LOG_FUNCTION, PROT_NUMBER, SendMessage(), ns3::Icmpv6Echo::SetId(), and ns3::Icmpv6Echo::SetSeq().
Referenced by HandleEchoRequest().
void ns3::Icmpv6L4Protocol::SendErrorDestinationUnreachable | ( | Ptr< Packet > | malformedPacket, |
Ipv6Address | dst, | ||
uint8_t | code | ||
) |
Send an error Destination Unreachable.
malformedPacket | the malformed packet |
dst | destination IPv6 address |
code | code of the error |
Definition at line 1437 of file icmpv6-l4-protocol.cc.
References ns3::Packet::CreateFragment(), ns3::Packet::GetSize(), NS_LOG_FUNCTION, NS_LOG_LOGIC, SendMessage(), ns3::Icmpv6Header::SetCode(), and ns3::Icmpv6DestinationUnreachable::SetPacket().
void ns3::Icmpv6L4Protocol::SendErrorParameterError | ( | Ptr< Packet > | malformedPacket, |
Ipv6Address | dst, | ||
uint8_t | code, | ||
uint32_t | ptr | ||
) |
Send an error Parameter Error.
malformedPacket | the malformed packet |
dst | destination IPv6 address |
code | code of the error |
ptr | byte of p where the error is located |
Definition at line 1512 of file icmpv6-l4-protocol.cc.
References ns3::Packet::CreateFragment(), ns3::Packet::GetSize(), NS_LOG_FUNCTION, NS_LOG_LOGIC, SendMessage(), ns3::Icmpv6Header::SetCode(), ns3::Icmpv6ParameterError::SetPacket(), and ns3::Icmpv6ParameterError::SetPtr().
void ns3::Icmpv6L4Protocol::SendErrorTimeExceeded | ( | Ptr< Packet > | malformedPacket, |
Ipv6Address | dst, | ||
uint8_t | code | ||
) |
Send an error Time Exceeded.
malformedPacket | the malformed packet |
dst | destination IPv6 address |
code | code of the error |
Definition at line 1488 of file icmpv6-l4-protocol.cc.
References ns3::Packet::CreateFragment(), ns3::Packet::GetSize(), NS_LOG_FUNCTION, NS_LOG_LOGIC, SendMessage(), ns3::Icmpv6Header::SetCode(), and ns3::Icmpv6TimeExceeded::SetPacket().
void ns3::Icmpv6L4Protocol::SendErrorTooBig | ( | Ptr< Packet > | malformedPacket, |
Ipv6Address | dst, | ||
uint32_t | mtu | ||
) |
Send an error Too Big.
malformedPacket | the malformed packet |
dst | destination IPv6 address |
mtu | the mtu |
Definition at line 1463 of file icmpv6-l4-protocol.cc.
References ns3::Packet::CreateFragment(), ns3::Packet::GetSize(), NS_LOG_FUNCTION, NS_LOG_LOGIC, SendMessage(), ns3::Icmpv6Header::SetCode(), ns3::Icmpv6TooBig::SetMtu(), and ns3::Icmpv6TooBig::SetPacket().
void ns3::Icmpv6L4Protocol::SendMessage | ( | Ptr< Packet > | packet, |
Ipv6Address | dst, | ||
Icmpv6Header & | icmpv6Hdr, | ||
uint8_t | ttl | ||
) |
Send a packet via ICMPv6.
packet | the packet to send |
dst | destination address |
icmpv6Hdr | ICMPv6 header (needed to calculate checksum after source address is determined by routing stuff |
ttl | next hop limit |
Definition at line 1205 of file icmpv6-l4-protocol.cc.
References ns3::Packet::AddHeader(), ns3::Packet::AddPacketTag(), ns3::Icmpv6Header::CalculatePseudoHeaderChecksum(), ns3::Object::GetObject(), ns3::Icmpv6Header::GetSerializedSize(), ns3::Packet::GetSize(), m_downTarget, m_node, NS_ASSERT, NS_LOG_FUNCTION, NS_LOG_LOGIC, NS_LOG_WARN, PROT_NUMBER, ns3::Ipv6Header::SetDestination(), and ns3::SocketIpv6HopLimitTag::SetHopLimit().
void ns3::Icmpv6L4Protocol::SendMessage | ( | Ptr< Packet > | packet, |
Ipv6Address | src, | ||
Ipv6Address | dst, | ||
uint8_t | ttl | ||
) |
Send a packet via ICMPv6, note that packet already contains ICMPv6 header.
packet | the packet to send which contains ICMPv6 header |
src | source address |
dst | destination address |
ttl | next hop limit |
Definition at line 1182 of file icmpv6-l4-protocol.cc.
References ns3::Packet::AddPacketTag(), ns3::Object::GetObject(), m_downTarget, m_node, NS_ASSERT, NS_LOG_FUNCTION, and PROT_NUMBER.
Referenced by DelayedSendMessage(), SendEchoReply(), SendErrorDestinationUnreachable(), SendErrorParameterError(), SendErrorTimeExceeded(), SendErrorTooBig(), SendNA(), SendNS(), SendRedirection(), and SendRS().
void ns3::Icmpv6L4Protocol::SendNA | ( | Ipv6Address | src, |
Ipv6Address | dst, | ||
Address * | hardwareAddress, | ||
uint8_t | flags | ||
) |
Send a Neighbor Advertisement.
src | source IPv6 address |
dst | destination IPv6 address |
hardwareAddress | our MAC address |
flags | to set (4 = flag R, 2 = flag S, 3 = flag O) |
Definition at line 1243 of file icmpv6-l4-protocol.cc.
References ns3::Packet::AddHeader(), ns3::Icmpv6Header::CalculatePseudoHeaderChecksum(), ns3::Ipv6Address::GetAny(), ns3::Icmpv6NA::GetSerializedSize(), ns3::Packet::GetSize(), NS_LOG_FUNCTION, NS_LOG_LOGIC, PROT_NUMBER, SendMessage(), ns3::Icmpv6NA::SetFlagO(), ns3::Icmpv6NA::SetFlagR(), ns3::Icmpv6NA::SetFlagS(), and ns3::Icmpv6NA::SetIpv6Target().
|
virtual |
Send a Neighbor Solicitation.
src | source IPv6 address |
dst | destination IPv6 address |
target | target IPv6 address |
hardwareAddress | our mac address |
Definition at line 1296 of file icmpv6-l4-protocol.cc.
References ns3::Packet::AddHeader(), ns3::Icmpv6Header::CalculatePseudoHeaderChecksum(), DelayedSendMessage(), ns3::Ipv6Address::GetAllNodesMulticast(), ns3::Ipv6Address::GetAny(), ns3::Icmpv6NS::GetSerializedSize(), ns3::Packet::GetSize(), ns3::RandomVariableStream::GetValue(), ns3::Ipv6Address::IsMulticast(), m_solicitationJitter, ns3::MilliSeconds(), NS_LOG_FUNCTION, NS_LOG_LOGIC, PROT_NUMBER, ns3::Simulator::Schedule(), and SendMessage().
Referenced by Lookup().
void ns3::Icmpv6L4Protocol::SendRedirection | ( | Ptr< Packet > | redirectedPacket, |
Ipv6Address | src, | ||
Ipv6Address | dst, | ||
Ipv6Address | redirTarget, | ||
Ipv6Address | redirDestination, | ||
Address | redirHardwareTarget | ||
) |
Send an ICMPv6 Redirection.
redirectedPacket | the redirected packet |
src | IPv6 address to send the redirect from |
dst | IPv6 address to send the redirect to |
redirTarget | IPv6 target address for Icmpv6Redirection |
redirDestination | IPv6 destination address for Icmpv6Redirection |
redirHardwareTarget | L2 target address for Icmpv6OptionRdirected |
Definition at line 1540 of file icmpv6-l4-protocol.cc.
References ns3::Packet::AddAtEnd(), ns3::Packet::AddHeader(), ns3::Icmpv6Header::CalculatePseudoHeaderChecksum(), ns3::Packet::CreateFragment(), ns3::Address::GetLength(), ns3::Icmpv6Redirection::GetSerializedSize(), ns3::Icmpv6OptionLinkLayerAddress::GetSerializedSize(), ns3::Packet::GetSize(), NS_LOG_FUNCTION, NS_LOG_LOGIC, PROT_NUMBER, SendMessage(), ns3::Icmpv6OptionLinkLayerAddress::SetAddress(), ns3::Icmpv6Redirection::SetDestination(), ns3::Icmpv6OptionRedirected::SetPacket(), and ns3::Icmpv6Redirection::SetTarget().
void ns3::Icmpv6L4Protocol::SendRS | ( | Ipv6Address | src, |
Ipv6Address | dst, | ||
Address | hardwareAddress | ||
) |
Send a Router Solicitation.
src | link-local source address |
dst | destination address (usually ff02::2 i.e., all-routers) |
hardwareAddress | link-layer address (SHOULD be included if src is not ::) |
Definition at line 1338 of file icmpv6-l4-protocol.cc.
References ns3::Packet::AddHeader(), ns3::Icmpv6Header::CalculatePseudoHeaderChecksum(), DelayedSendMessage(), ns3::Object::GetObject(), ns3::Icmpv6RS::GetSerializedSize(), ns3::Packet::GetSize(), ns3::RandomVariableStream::GetValue(), ns3::UniformRandomVariable::GetValue(), HandleRsTimeout(), ns3::Ipv6Address::IsAny(), ns3::Ipv6Address::IsMulticast(), m_handleRsTimeoutEvent, m_node, m_rsInitialRetransmissionTime, m_rsMaxRetransmissionTime, m_rsPrevRetransmissionTimeout, m_rsRetransmissionCount, m_rsRetransmissionJitter, m_solicitationJitter, ns3::MilliSeconds(), ns3::Simulator::Now(), NS_LOG_FUNCTION, NS_LOG_INFO, NS_LOG_LOGIC, PROT_NUMBER, ns3::Simulator::Schedule(), and SendMessage().
Referenced by FunctionDadTimeout(), and HandleRsTimeout().
|
overrideprotectedvirtual |
This method allows a caller to set the current down target callback set for this L4 protocol (IPv4 case)
cb | current Callback for the L4 protocol |
Implements ns3::IpL4Protocol.
Definition at line 1889 of file icmpv6-l4-protocol.cc.
References NS_LOG_FUNCTION.
|
overrideprotectedvirtual |
This method allows a caller to set the current down target callback set for this L4 protocol (IPv6 case)
cb | current Callback for the L4 protocol |
Implements ns3::IpL4Protocol.
Definition at line 1895 of file icmpv6-l4-protocol.cc.
References m_downTarget, and NS_LOG_FUNCTION.
Referenced by NotifyNewAggregate().
Set the node.
node | the node to set |
Definition at line 215 of file icmpv6-l4-protocol.cc.
References m_node, and NS_LOG_FUNCTION.
Referenced by NotifyNewAggregate().
|
protected |
Always do DAD ?
Definition at line 605 of file icmpv6-l4-protocol.h.
Referenced by DoDAD(), GetTypeId(), and IsAlwaysDad().
|
protected |
A list of cache by device.
Definition at line 610 of file icmpv6-l4-protocol.h.
Referenced by CreateCache(), DoDispose(), and FindCache().
|
protected |
DAD timeout.
Definition at line 692 of file icmpv6-l4-protocol.h.
Referenced by GetDadTimeout(), and GetTypeId().
|
protected |
Neighbor Discovery node constants: delay for the first probe.
Definition at line 672 of file icmpv6-l4-protocol.h.
Referenced by GetDelayFirstProbe(), and GetTypeId().
|
protected |
callback to Ipv6::Send
Definition at line 699 of file icmpv6-l4-protocol.h.
Referenced by DoDispose(), GetDownTarget6(), NotifyNewAggregate(), SendMessage(), and SetDownTarget6().
|
protected |
RS timeout handler event.
Definition at line 697 of file icmpv6-l4-protocol.h.
Referenced by HandleRA(), and SendRS().
|
protected |
Neighbor Discovery node constants: max multicast solicitations.
Definition at line 615 of file icmpv6-l4-protocol.h.
Referenced by GetMaxMulticastSolicit(), and GetTypeId().
|
protected |
Neighbor Discovery node constants: max unicast solicitations.
Definition at line 620 of file icmpv6-l4-protocol.h.
Referenced by GetMaxUnicastSolicit(), and GetTypeId().
The node.
Definition at line 677 of file icmpv6-l4-protocol.h.
Referenced by DoDAD(), DoDispose(), Forward(), FunctionDadTimeout(), GetNode(), HandleNS(), HandlePacketTooBig(), HandleRA(), HandleRedirection(), HandleRS(), NotifyNewAggregate(), Receive(), SendMessage(), SendRS(), and SetNode().
|
protected |
Neighbor Discovery node constants: reachable time.
Definition at line 662 of file icmpv6-l4-protocol.h.
Referenced by GetReachableTime(), and GetTypeId().
|
protected |
Neighbor Discovery node constants: retransmission timer.
Definition at line 667 of file icmpv6-l4-protocol.h.
Referenced by GetRetransmissionTime(), and GetTypeId().
|
protected |
First multicast RS transmissions [RFC 7559].
Definition at line 657 of file icmpv6-l4-protocol.h.
|
protected |
Initial multicast RS retransmission time [RFC 7559].
Definition at line 625 of file icmpv6-l4-protocol.h.
Referenced by GetTypeId(), HandleRsTimeout(), and SendRS().
|
protected |
Maximum number of multicast RS retransmissions [RFC 7559].
Zero means unbound.
Definition at line 635 of file icmpv6-l4-protocol.h.
Referenced by GetTypeId(), and HandleRsTimeout().
|
protected |
Maximum duration of multicast RS retransmissions [RFC 7559].
Zero means unbound.
Definition at line 640 of file icmpv6-l4-protocol.h.
Referenced by GetTypeId(), and HandleRsTimeout().
|
protected |
Maximum time between multicast RS retransmissions [RFC 7559].
Zero means unbound.
Definition at line 630 of file icmpv6-l4-protocol.h.
Referenced by GetTypeId(), and SendRS().
|
protected |
Previous multicast RS retransmissions timeout [RFC 7559].
Definition at line 652 of file icmpv6-l4-protocol.h.
Referenced by SendRS().
|
protected |
Multicast RS retransmissions counter [RFC 7559].
Zero indicate a first transmission, greater than zero means retranmsisisons.
Definition at line 647 of file icmpv6-l4-protocol.h.
Referenced by FunctionDadTimeout(), HandleRA(), HandleRsTimeout(), and SendRS().
|
protected |
Random jitter for RS retransmissions.
Definition at line 687 of file icmpv6-l4-protocol.h.
Referenced by AssignStreams(), GetTypeId(), and SendRS().
|
protected |
Random jitter before sending solicitations.
Definition at line 682 of file icmpv6-l4-protocol.h.
Referenced by AssignStreams(), DoDAD(), GetTypeId(), SendNS(), and SendRS().
|
static |
ICMPv6 protocol number (58).
Definition at line 65 of file icmpv6-l4-protocol.h.
Referenced by ForgeEchoRequest(), ForgeNA(), ForgeNS(), ForgeRS(), Forward(), GetProtocolNumber(), GetStaticProtocolNumber(), SendEchoReply(), SendMessage(), SendNA(), SendNS(), SendRedirection(), and SendRS().