An implementation of the ICMPv6 protocol. More...
#include <introspected-doxygen.h>
Public Member Functions | |
Icmpv6L4Protocol () | |
Constructor. | |
virtual | ~Icmpv6L4Protocol () |
Destructor. | |
Ptr< NdiscCache > | CreateCache (Ptr< NetDevice > device, Ptr< Ipv6Interface > interface) |
Create a neighbor cache. More... | |
void | 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. More... | |
Ptr< Packet > | ForgeEchoRequest (Ipv6Address src, Ipv6Address dst, uint16_t id, uint16_t seq, Ptr< Packet > data) |
Forge an Echo Request. More... | |
Ptr< Packet > | ForgeNA (Ipv6Address src, Ipv6Address dst, Address *hardwareAddress, uint8_t flags) |
Forge a Neighbor Advertisement. More... | |
Ptr< Packet > | ForgeNS (Ipv6Address src, Ipv6Address dst, Ipv6Address target, Address hardwareAddress) |
Forge a Neighbor Solicitation. More... | |
Ptr< Packet > | ForgeRS (Ipv6Address src, Ipv6Address dst, Address hardwareAddress) |
Forge a Router Solicitation. More... | |
virtual int | GetProtocolNumber () const |
Get the protocol number. More... | |
virtual int | GetVersion () const |
Get the version of the protocol. More... | |
bool | IsAlwaysDad () const |
Is the node must do DAD. More... | |
bool | Lookup (Ipv6Address dst, Ptr< NetDevice > device, Ptr< NdiscCache > cache, Address *hardwareDestination) |
Lookup in the ND cache for the IPv6 address. More... | |
bool | Lookup (Ptr< Packet > p, 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 () |
This method is called by AddAgregate and completes the aggregation by setting the node in the ICMPv6 stack and adding ICMPv6 factory to IPv6 stack connected to the node. | |
virtual enum IpL4Protocol::RxStatus | Receive (Ptr< Packet > p, Ipv6Header const &header, Ptr< Ipv6Interface > interface) |
Receive method. More... | |
virtual enum IpL4Protocol::RxStatus | Receive (Ptr< Packet > p, Ipv4Header const &header, Ptr< Ipv4Interface > interface) |
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 src, Ipv6Address dst, uint8_t ttl) |
Send a packet via ICMPv6, note that packet already contains ICMPv6 header. More... | |
void | SendMessage (Ptr< Packet > packet, Ipv6Address dst, Icmpv6Header &icmpv6Hdr, uint8_t ttl) |
Send a packet via ICMPv6. More... | |
void | SendNA (Ipv6Address src, Ipv6Address dst, Address *hardwareAddress, uint8_t flags) |
Send a Neighbor Adverstisement. More... | |
void | SendNS (Ipv6Address src, Ipv6Address dst, Ipv6Address target, Address hardwareAddress) |
Send a Neighbor Solicitation. More... | |
void | SendRedirection (Ptr< Packet > redirectedPacket, 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 | |
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]) |
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]) |
Public Member Functions inherited from ns3::Object | |
void | AggregateObject (Ptr< Object > other) |
void | Dispose (void) |
AggregateIterator | GetAggregateIterator (void) const |
virtual TypeId | GetInstanceTypeId (void) const |
template<typename T > | |
Ptr< T > | GetObject (void) const |
template<typename T > | |
Ptr< T > | GetObject (TypeId tid) const |
void | Initialize (void) |
Public Member Functions inherited from ns3::SimpleRefCount< Object, ObjectBase, ObjectDeleter > | |
SimpleRefCount (const SimpleRefCount &o) | |
uint32_t | GetReferenceCount (void) const |
SimpleRefCount & | operator= (const SimpleRefCount &o) |
void | Ref (void) const |
void | Unref (void) const |
Public Member Functions inherited from ns3::ObjectBase | |
void | GetAttribute (std::string name, AttributeValue &value) const |
bool | GetAttributeFailSafe (std::string name, AttributeValue &attribute) const |
void | SetAttribute (std::string name, const AttributeValue &value) |
bool | SetAttributeFailSafe (std::string name, const AttributeValue &value) |
bool | TraceConnect (std::string name, std::string context, const CallbackBase &cb) |
bool | TraceConnectWithoutContext (std::string name, const CallbackBase &cb) |
bool | TraceDisconnect (std::string name, std::string context, const CallbackBase &cb) |
bool | TraceDisconnectWithoutContext (std::string name, const CallbackBase &cb) |
Static Public Member Functions | |
static void | FunctionDadTimeout (Ptr< Icmpv6L4Protocol > icmpv6, Ipv6Interface *interface, Ipv6Address addr) |
Function called when DAD timeout. More... | |
static uint16_t | GetStaticProtocolNumber () |
Get ICMPv6 protocol number. More... | |
static TypeId | GetTypeId () |
Interface ID. | |
Static Public Member Functions inherited from ns3::IpL4Protocol | |
static TypeId | GetTypeId (void) |
Static Public Member Functions inherited from ns3::Object | |
static TypeId | GetTypeId (void) |
Static Public Member Functions inherited from ns3::SimpleRefCount< Object, ObjectBase, ObjectDeleter > | |
static void | Cleanup (void) |
Static Public Member Functions inherited from ns3::ObjectBase | |
static TypeId | GetTypeId (void) |
Static Public Attributes | |
static const uint8_t | DELAY_FIRST_PROBE_TIME = 5 |
Neighbor Discovery node constants : delay for the first probe. | |
static const uint8_t | MAX_ANYCAST_DELAY_TIME = 1 |
Neighbor Discovery node constants : max anycast delay. | |
static const uint8_t | MAX_FINAL_RTR_ADVERTISEMENTS = 3 |
Neighbor Discovery router constants : max final RA transmission. | |
static const uint8_t | MAX_INITIAL_RTR_ADVERT_INTERVAL = 16 |
Neighbor Discovery router constants : max initial RA initial interval. | |
static const uint8_t | MAX_INITIAL_RTR_ADVERTISEMENTS = 3 |
Neighbor Discovery router constants : max initial RA transmission. | |
static const uint8_t | MAX_MULTICAST_SOLICIT = 3 |
Neighbor Discovery node constants : max multicast solicitations. | |
static const uint8_t | MAX_NEIGHBOR_ADVERTISEMENT = 3 |
Neighbor Discovery node constants : max NA transmission. | |
static const uint32_t | MAX_RA_DELAY_TIME = 500 |
Neighbor Discovery router constants : max delay between RA. | |
static const double | MAX_RANDOM_FACTOR = 1.5 |
Neighbor Discovery node constants : max random factor. | |
static const uint8_t | MAX_RTR_SOLICITATION_DELAY = 1 |
Neighbor Discovery host constants : max RS delay. | |
static const uint8_t | MAX_RTR_SOLICITATIONS = 3 |
Neighbor Discovery host constants : max RS transmission. | |
static const uint8_t | MAX_UNICAST_SOLICIT = 3 |
Neighbor Discovery node constants : max unicast solicitations. | |
static const uint8_t | MIN_DELAY_BETWEEN_RAS = 3 |
Neighbor Discovery router constants : min delay between RA. | |
static const double | MIN_RANDOM_FACTOR = 0.5 |
Neighbor Discovery node constants : min random factor. | |
static const uint8_t | PROT_NUMBER = 58 |
ICMPv6 protocol number (58). | |
static const uint32_t | REACHABLE_TIME = 30000 |
Neighbor Discovery node constants : reachable time. | |
static const uint32_t | RETRANS_TIMER = 1000 |
Neighbor Discovery node constants : retransmission timer. | |
static const uint8_t | RTR_SOLICITATION_INTERVAL = 4 |
Neighbor Discovery host constants : RS interval. | |
Protected Member Functions | |
virtual void | DoDispose () |
Dispose this object. | |
Protected Member Functions inherited from ns3::Object | |
Object (const Object &o) | |
virtual void | DoInitialize (void) |
Protected Member Functions inherited from ns3::ObjectBase | |
void | ConstructSelf (const AttributeConstructionList &attributes) |
virtual void | NotifyConstructionCompleted (void) |
Private Types | |
typedef std::list< Ptr < NdiscCache > > | CacheList |
Private Member Functions | |
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... | |
virtual IpL4Protocol::DownTargetCallback | GetDownTarget (void) const |
virtual IpL4Protocol::DownTargetCallback6 | GetDownTarget6 (void) const |
void | HandleDestinationUnreachable (Ptr< Packet > p, Ipv6Address const &src, Ipv6Address const &dst, Ptr< Ipv6Interface > interface) |
Receive Destination Unreachable method. More... | |
void | HandleEchoRequest (Ptr< Packet > p, Ipv6Address const &src, Ipv6Address const &dst, Ptr< Ipv6Interface > interface) |
Receive Echo Request method. More... | |
void | HandleNA (Ptr< Packet > p, Ipv6Address const &src, Ipv6Address const &dst, Ptr< Ipv6Interface > interface) |
Receive Neighbor Advertisement method. More... | |
void | HandleNS (Ptr< Packet > p, Ipv6Address const &src, Ipv6Address const &dst, Ptr< Ipv6Interface > interface) |
Receive Neighbor Solicitation method. More... | |
void | HandlePacketTooBig (Ptr< Packet > p, Ipv6Address const &src, Ipv6Address const &dst, Ptr< Ipv6Interface > interface) |
Receive Packet Too Big method. More... | |
void | HandleParameterError (Ptr< Packet > p, Ipv6Address const &src, Ipv6Address const &dst, Ptr< Ipv6Interface > interface) |
Receive Parameter Error method. More... | |
void | HandleRA (Ptr< Packet > p, Ipv6Address const &src, Ipv6Address const &dst, Ptr< Ipv6Interface > interface) |
Receive Router Advertisement method. More... | |
void | HandleRedirection (Ptr< Packet > p, Ipv6Address const &src, Ipv6Address const &dst, Ptr< Ipv6Interface > interface) |
Receive Redirection method. More... | |
void | HandleRS (Ptr< Packet > p, Ipv6Address const &src, Ipv6Address const &dst, Ptr< Ipv6Interface > interface) |
Receive Router Solicitation method. More... | |
void | HandleTimeExceeded (Ptr< Packet > p, Ipv6Address const &src, Ipv6Address const &dst, Ptr< Ipv6Interface > interface) |
Receive Time Exceeded method. More... | |
void | ReceiveLLA (Icmpv6OptionLinkLayerAddress lla, Ipv6Address const &src, Ipv6Address const &dst, Ptr< Ipv6Interface > interface) |
Link layer address option processing. More... | |
virtual void | SetDownTarget (IpL4Protocol::DownTargetCallback cb) |
virtual void | SetDownTarget6 (IpL4Protocol::DownTargetCallback6 cb) |
Private Attributes | |
bool | m_alwaysDad |
Always do DAD ? | |
CacheList | m_cacheList |
A list of cache by device. | |
IpL4Protocol::DownTargetCallback6 | m_downTarget |
Ptr< Node > | m_node |
The node. | |
Additional Inherited Members | |
Public Types inherited from ns3::IpL4Protocol | |
typedef Callback< void, Ptr < Packet >, Ipv4Address, Ipv4Address, uint8_t, Ptr < Ipv4Route > > | DownTargetCallback |
typedef Callback< void, Ptr < Packet >, Ipv6Address, Ipv6Address, uint8_t, Ptr < Ipv6Route > > | DownTargetCallback6 |
enum | RxStatus { RX_OK, RX_CSUM_FAILED, RX_ENDPOINT_CLOSED, RX_ENDPOINT_UNREACH } |
An implementation of the ICMPv6 protocol.
ns3::Icmpv6L4Protocol is accessible through the following paths with Config::Set and Config::Connect:
No TraceSources are defined for this type.
Definition at line 44 of file icmpv6-l4-protocol.h.
Ptr< NdiscCache > ns3::Icmpv6L4Protocol::CreateCache | ( | Ptr< NetDevice > | device, |
Ptr< Ipv6Interface > | interface | ||
) |
Create a neighbor cache.
device | thet NetDevice |
interface | the IPv6 interface |
Definition at line 1213 of file icmpv6-l4-protocol.cc.
References ns3::NdiscCache::Flush(), m_cacheList, ns3::MakeCallback(), NS_LOG_FUNCTION, and ns3::NdiscCache::SetDevice().
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 158 of file icmpv6-l4-protocol.cc.
References ForgeNS(), ns3::Ipv6Interface::GetDevice(), ns3::Object::GetObject(), ns3::Packet::GetUid(), m_alwaysDad, m_node, ns3::Ipv6Address::MakeSolicitedAddress(), NS_ASSERT, NS_LOG_FUNCTION, ns3::Ipv6Interface::Send(), and ns3::Ipv6Interface::SetNsDadUid().
Referenced by ns3::Ipv6Interface::AddAddress().
|
private |
Get the cache corresponding to the device.
device | the device |
Definition at line 1196 of file icmpv6-l4-protocol.cc.
References m_cacheList, NS_ASSERT, and NS_LOG_FUNCTION.
Referenced by HandleNA(), HandleNS(), HandleRedirection(), HandleRS(), Lookup(), and ReceiveLLA().
Ptr< Packet > 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 558 of file icmpv6-l4-protocol.cc.
References ns3::Packet::AddHeader(), ns3::Packet::Copy(), NS_LOG_FUNCTION, ns3::Icmpv6Echo::SetId(), and ns3::Icmpv6Echo::SetSeq().
Ptr< Packet > 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 1123 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::Icmpv6NA::SetFlagO(), ns3::Icmpv6NA::SetFlagR(), ns3::Icmpv6NA::SetFlagS(), and ns3::Icmpv6NA::SetIpv6Target().
Referenced by HandleNS().
Ptr< Packet > 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 1165 of file icmpv6-l4-protocol.cc.
References ns3::Packet::AddHeader(), ns3::Icmpv6Header::CalculatePseudoHeaderChecksum(), ns3::Ipv6Address::GetAllNodesMulticast(), ns3::Ipv6Address::GetAny(), ns3::Icmpv6NS::GetSerializedSize(), ns3::Packet::GetSize(), NS_LOG_FUNCTION, NS_LOG_LOGIC, and PROT_NUMBER.
Referenced by DoDAD().
Ptr< Packet > 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 533 of file icmpv6-l4-protocol.cc.
References ns3::Packet::AddHeader(), ns3::Icmpv6Header::CalculatePseudoHeaderChecksum(), ns3::Icmpv6RS::GetSerializedSize(), ns3::Packet::GetSize(), NS_LOG_FUNCTION, NS_LOG_LOGIC, and PROT_NUMBER.
|
private |
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 247 of file icmpv6-l4-protocol.cc.
References ns3::Icmpv6Header::GetCode(), ns3::Ipv6Header::GetDestinationAddress(), ns3::Ipv6Header::GetHopLimit(), ns3::Ipv6Header::GetNextHeader(), ns3::Object::GetObject(), ns3::Ipv6Header::GetSourceAddress(), ns3::Icmpv6Header::GetType(), m_node, NS_LOG_FUNCTION, and ns3::IpL4Protocol::ReceiveIcmp().
Referenced by HandleDestinationUnreachable(), HandlePacketTooBig(), HandleParameterError(), and HandleTimeExceeded().
|
static |
Function called when DAD timeout.
icmpv6 | Icmpv6L4Protocol instance |
interface | the interface |
addr | the IPv6 address |
Definition at line 1309 of file icmpv6-l4-protocol.cc.
References ns3::Ipv6InterfaceAddress::GetAddress(), ns3::Ipv6Interface::GetAddress(), ns3::Ipv6Address::GetAllRoutersMulticast(), ns3::Ipv6Interface::GetDevice(), ns3::Ipv6Interface::GetNAddresses(), ns3::Ipv6InterfaceAddress::GetState(), ns3::Ipv6InterfaceAddress::INVALID, ns3::Ipv6Address::IsLinkLocal(), NS_LOG_FUNCTION_NOARGS, NS_LOG_LOGIC, ns3::Ipv6InterfaceAddress::PREFERRED, ns3::Simulator::Schedule(), ns3::Seconds(), SendRS(), and ns3::Ipv6Interface::SetState().
Referenced by ns3::Ipv6Interface::AddAddress().
|
privatevirtual |
This method allows a caller to get the current down target callback set for this L4 protocol, for
Implements ns3::IpL4Protocol.
Definition at line 1366 of file icmpv6-l4-protocol.cc.
References NS_LOG_FUNCTION.
|
virtual |
Get the protocol number.
Implements ns3::IpL4Protocol.
Definition at line 140 of file icmpv6-l4-protocol.cc.
References NS_LOG_FUNCTION, and PROT_NUMBER.
|
static |
Get ICMPv6 protocol number.
Definition at line 134 of file icmpv6-l4-protocol.cc.
References NS_LOG_FUNCTION_NOARGS, and PROT_NUMBER.
Referenced by ns3::Ipv6RawSocketImpl::ForwardUp(), ns3::Ipv6L3Protocol::GetIcmpv6(), and ns3::Ipv6RawSocketImpl::SendTo().
|
virtual |
Get the version of the protocol.
Definition at line 146 of file icmpv6-l4-protocol.cc.
References NS_LOG_FUNCTION.
|
private |
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 781 of file icmpv6-l4-protocol.cc.
References ns3::Packet::Copy(), ns3::Packet::CopyData(), Forward(), ns3::Icmpv6Header::GetCode(), ns3::Icmpv6DestinationUnreachable::GetPacket(), ns3::Ipv6Header::GetSerializedSize(), ns3::Packet::GetSerializedSize(), NS_LOG_FUNCTION, and ns3::Packet::RemoveHeader().
Referenced by Receive().
|
private |
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 267 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().
|
private |
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 573 of file icmpv6-l4-protocol.cc.
References ns3::NdiscCache::Entry::ClearWaitingPacket(), ns3::Packet::CopyData(), FindCache(), ns3::Ipv6InterfaceAddress::GetAddress(), ns3::Icmpv6OptionLinkLayerAddress::GetAddress(), ns3::Ipv6Interface::GetDevice(), ns3::Icmpv6NA::GetFlagO(), ns3::Icmpv6NA::GetFlagR(), ns3::Icmpv6NA::GetFlagS(), ns3::NdiscCache::GetInterface(), ns3::Icmpv6NA::GetIpv6Target(), ns3::NdiscCache::Entry::GetMacAddress(), ns3::Ipv6InterfaceAddress::GetState(), ns3::Ipv6InterfaceAddress::INVALID, ns3::NdiscCache::Entry::IsIncomplete(), ns3::NdiscCache::Entry::IsProbe(), ns3::NdiscCache::Entry::IsReachable(), ns3::NdiscCache::Lookup(), ns3::NdiscCache::Entry::MarkReachable(), ns3::NdiscCache::Entry::MarkStale(), NS_LOG_FUNCTION, ns3::Packet::RemoveHeader(), ns3::Ipv6Interface::Send(), ns3::NdiscCache::Entry::SetMacAddress(), ns3::NdiscCache::Entry::SetRouter(), ns3::Ipv6Interface::SetState(), ns3::NdiscCache::Entry::StartReachableTimer(), ns3::NdiscCache::Entry::StopDelayTimer(), ns3::NdiscCache::Entry::StopProbeTimer(), ns3::NdiscCache::Entry::StopReachableTimer(), ns3::NdiscCache::Entry::StopRetransmitTimer(), ns3::Ipv6InterfaceAddress::TENTATIVE, and ns3::Ipv6InterfaceAddress::TENTATIVE_OPTIMISTIC.
Referenced by Receive().
|
private |
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 440 of file icmpv6-l4-protocol.cc.
References ns3::NdiscCache::Add(), ns3::Packet::CopyData(), FindCache(), ForgeNA(), ns3::Ipv6InterfaceAddress::GetAddress(), ns3::Ipv6Interface::GetAddress(), ns3::Icmpv6OptionLinkLayerAddress::GetAddress(), ns3::Ipv6Address::GetAllNodesMulticast(), 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::GetUid(), ns3::Ipv6Address::IsAny(), ns3::Ipv6Address::IsLinkLocal(), ns3::NdiscCache::Lookup(), m_node, ns3::NdiscCache::Entry::MarkStale(), NS_LOG_FUNCTION, NS_LOG_LOGIC, ns3::Packet::RemoveHeader(), ns3::Ipv6Interface::Send(), and ns3::NdiscCache::Entry::SetRouter().
Referenced by Receive().
|
private |
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 816 of file icmpv6-l4-protocol.cc.
References ns3::Packet::Copy(), ns3::Packet::CopyData(), Forward(), ns3::Icmpv6TooBig::GetMtu(), ns3::Icmpv6TooBig::GetPacket(), NS_LOG_FUNCTION, and ns3::Packet::RemoveHeader().
Referenced by Receive().
|
private |
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 832 of file icmpv6-l4-protocol.cc.
References ns3::Packet::Copy(), ns3::Packet::CopyData(), Forward(), ns3::Icmpv6Header::GetCode(), ns3::Icmpv6ParameterError::GetPacket(), NS_LOG_FUNCTION, and ns3::Packet::RemoveHeader().
Referenced by Receive().
|
private |
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 283 of file icmpv6-l4-protocol.cc.
References ns3::Packet::Copy(), ns3::Packet::CopyData(), ns3::Ipv6Interface::GetDevice(), ns3::Object::GetObject(), m_node, NS_LOG_FUNCTION, ReceiveLLA(), and ns3::Packet::RemoveHeader().
Referenced by Receive().
|
private |
Receive Redirection method.
p | the packet |
src | source address |
dst | destination address |
interface | the interface from which the packet is coming |
Definition at line 709 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::Object::GetObject(), ns3::Icmpv6Redirection::GetTarget(), ns3::Ipv6Address::IsEqual(), ns3::NdiscCache::Lookup(), m_node, NS_LOG_FUNCTION, ns3::Packet::RemoveHeader(), and ns3::NdiscCache::Entry::SetRouter().
Referenced by Receive().
|
private |
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 401 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::NdiscCache::Lookup(), m_node, ns3::NdiscCache::Entry::MarkStale(), NS_LOG_FUNCTION, NS_LOG_LOGIC, ns3::Packet::RemoveHeader(), and ns3::NdiscCache::Entry::SetRouter().
Referenced by Receive().
|
private |
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 800 of file icmpv6-l4-protocol.cc.
References ns3::Packet::Copy(), ns3::Packet::CopyData(), Forward(), ns3::Icmpv6Header::GetCode(), ns3::Icmpv6TimeExceeded::GetPacket(), NS_LOG_FUNCTION, and ns3::Packet::RemoveHeader().
Referenced by Receive().
bool ns3::Icmpv6L4Protocol::IsAlwaysDad | ( | ) | const |
Is the node must do DAD.
Definition at line 152 of file icmpv6-l4-protocol.cc.
References m_alwaysDad, and NS_LOG_FUNCTION.
bool ns3::Icmpv6L4Protocol::Lookup | ( | Ipv6Address | dst, |
Ptr< NetDevice > | device, | ||
Ptr< NdiscCache > | cache, | ||
Address * | hardwareDestination | ||
) |
Lookup in the ND cache for the IPv6 address.
dst | destination address |
device | device |
cache | the neighbor cache |
hardwareDestination | hardware address |
Definition at line 1225 of file icmpv6-l4-protocol.cc.
References FindCache(), ns3::NdiscCache::Lookup(), and NS_LOG_FUNCTION.
bool ns3::Icmpv6L4Protocol::Lookup | ( | Ptr< Packet > | p, |
Ipv6Address | dst, | ||
Ptr< NetDevice > | device, | ||
Ptr< NdiscCache > | cache, | ||
Address * | hardwareDestination | ||
) |
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 |
dst | destination address |
device | device |
cache | the neighbor cache |
hardwareDestination | hardware address |
Definition at line 1238 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::IsDelay(), ns3::Ipv6Address::IsLinkLocal(), 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().
|
virtual |
Receive method.
p | the packet |
header | the IPv4 header |
interface | the interface from which the packet is coming |
Implements ns3::IpL4Protocol.
Definition at line 180 of file icmpv6-l4-protocol.cc.
References NS_LOG_FUNCTION.
|
virtual |
Receive method.
p | the packet |
src | source address |
dst | destination address |
interface | the interface from which the packet is coming |
Implements ns3::IpL4Protocol.
Definition at line 186 of file icmpv6-l4-protocol.cc.
References ns3::Packet::Copy(), ns3::Ipv6Header::GetDestinationAddress(), ns3::Ipv6Interface::GetDevice(), ns3::Object::GetObject(), ns3::Ipv6Header::GetSourceAddress(), HandleDestinationUnreachable(), HandleEchoRequest(), HandleNA(), HandleNS(), HandlePacketTooBig(), HandleParameterError(), HandleRA(), HandleRedirection(), HandleRS(), HandleTimeExceeded(), m_node, NS_LOG_FUNCTION, and NS_LOG_LOGIC.
|
private |
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 336 of file icmpv6-l4-protocol.cc.
References ns3::NdiscCache::Add(), FindCache(), ns3::Icmpv6OptionLinkLayerAddress::GetAddress(), ns3::Ipv6Interface::GetDevice(), ns3::NdiscCache::GetInterface(), ns3::NdiscCache::Lookup(), NS_LOG_FUNCTION, ns3::Ipv6Interface::Send(), and ns3::NdiscCache::Entry::SetRouter().
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 921 of file icmpv6-l4-protocol.cc.
References ns3::Packet::AddHeader(), ns3::Icmpv6Header::CalculatePseudoHeaderChecksum(), ns3::Packet::Copy(), 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 977 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 1050 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 1026 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 1001 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 | 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 848 of file icmpv6-l4-protocol.cc.
References ns3::Packet::AddPacketTag(), ns3::Object::GetObject(), m_node, NS_ASSERT, NS_LOG_FUNCTION, and PROT_NUMBER.
Referenced by SendEchoReply(), SendErrorDestinationUnreachable(), SendErrorParameterError(), SendErrorTimeExceeded(), SendErrorTooBig(), SendNA(), SendNS(), SendRedirection(), and SendRS().
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 860 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_node, NS_ASSERT, NS_LOG_FUNCTION, NS_LOG_LOGIC, NS_LOG_WARN, and PROT_NUMBER.
void ns3::Icmpv6L4Protocol::SendNA | ( | Ipv6Address | src, |
Ipv6Address | dst, | ||
Address * | hardwareAddress, | ||
uint8_t | flags | ||
) |
Send a Neighbor Adverstisement.
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 891 of file icmpv6-l4-protocol.cc.
References ns3::Packet::AddHeader(), ns3::Ipv6Address::GetAny(), ns3::Packet::GetSize(), NS_LOG_FUNCTION, NS_LOG_LOGIC, PROT_NUMBER, and SendMessage().
void ns3::Icmpv6L4Protocol::SendNS | ( | Ipv6Address | src, |
Ipv6Address | dst, | ||
Ipv6Address | target, | ||
Address | hardwareAddress | ||
) |
Send a Neighbor Solicitation.
src | source IPv6 address |
dst | destination IPv6 address |
target | target IPv6 address |
hardwareAddress | our mac address |
Definition at line 935 of file icmpv6-l4-protocol.cc.
References ns3::Packet::AddHeader(), ns3::Ipv6Address::GetAllNodesMulticast(), ns3::Ipv6Address::GetAny(), ns3::Packet::GetSize(), NS_LOG_FUNCTION, NS_LOG_LOGIC, PROT_NUMBER, and SendMessage().
Referenced by Lookup().
void ns3::Icmpv6L4Protocol::SendRedirection | ( | Ptr< Packet > | redirectedPacket, |
Ipv6Address | dst, | ||
Ipv6Address | redirTarget, | ||
Ipv6Address | redirDestination, | ||
Address | redirHardwareTarget | ||
) |
Send an ICMPv6 Redirection.
redirectedPacket | the redirected packet |
dst | destination IPv6 address |
redirTarget | IPv6 target address for Icmpv6Redirection |
redirDestination | IPv6 destination address for Icmpv6Redirection |
redirHardwareTarget | L2 target address for Icmpv6OptionRdirected |
Definition at line 1075 of file icmpv6-l4-protocol.cc.
References ns3::Packet::AddAtEnd(), ns3::Packet::AddHeader(), ns3::Packet::CreateFragment(), ns3::Address::GetLength(), ns3::Icmpv6OptionLinkLayerAddress::GetSerializedSize(), ns3::Packet::GetSize(), NS_LOG_FUNCTION, NS_LOG_LOGIC, 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 (usealy ff02::2 i.e all-routers) |
hardwareAddress | link-layer address (SHOULD be included if src is not :: |
Definition at line 957 of file icmpv6-l4-protocol.cc.
References ns3::Packet::AddHeader(), ns3::Ipv6Address::GetAny(), ns3::Packet::GetSize(), NS_LOG_FUNCTION, NS_LOG_LOGIC, PROT_NUMBER, and SendMessage().
Referenced by FunctionDadTimeout().
|
privatevirtual |
This method allows a caller to set the current down target callback set for this L4 protocol
cb | current Callback for the L4 protocol |
Implements ns3::IpL4Protocol.
Definition at line 1353 of file icmpv6-l4-protocol.cc.
References NS_LOG_FUNCTION.
Set the node.
node | the node to set |
Definition at line 128 of file icmpv6-l4-protocol.cc.
References m_node, and NS_LOG_FUNCTION.
Referenced by NotifyNewAggregate().