21 #ifndef IPV6_EXTENSION_H    22 #define IPV6_EXTENSION_H    28 #include "ns3/object.h"    32 #include "ns3/ipv6-header.h"    33 #include "ns3/buffer.h"    34 #include "ns3/packet.h"    35 #include "ns3/random-variable-stream.h"    36 #include "ns3/ipv6-address.h"    37 #include "ns3/ipv6-l3-protocol.h"    38 #include "ns3/traced-callback.h"   111                            bool& stopProcessing,
   136                                   bool& stopProcessing,
   204                            bool& stopProcessing,
   249                            bool& stopProcessing,
   294                            bool& stopProcessing,
   520                            bool& stopProcessing,
   637                            bool& stopProcessing,
   682                            bool& stopProcessing,
   727                            bool& stopProcessing,
 Ptr< UniformRandomVariable > m_uvar
Provides uniform random variables. 
This class stores the fragments of a packet waiting to be rebuilt. 
IPv6 Extension base If you want to implement a new IPv6 extension, all you have to do is implement a ...
int64_t AssignStreams(int64_t stream)
Assign a fixed random variable stream number to the random variables used by this model...
virtual uint8_t Process(Ptr< Packet > &packet, uint8_t offset, Ipv6Header const &ipv6Header, Ipv6Address dst, uint8_t *nextHeader, bool &stopProcessing, bool &isDropped, Ipv6L3Protocol::DropReason &dropReason)
Process method Called from Ipv6L3Protocol::Receive. 
void HandleTimeout(void)
Handles a fragmented packet timeout. 
Simulation virtual time values and global simulation resolution. 
Ipv6ExtensionLooseRouting()
Constructor. 
virtual void DoDispose()
Dispose this object. 
FragmentsTimeoutsListI_t GetTimeoutIter()
Get the Timeout iterator. 
void Insert(Ptr< Ipv6ExtensionRouting > extensionRouting)
Insert a new IPv6 Routing Extension. 
Ptr< Packet > GetPartialPacket() const
Get the packet parts so far received. 
static const uint8_t EXT_NUMBER
Fragmentation extension number. 
void SetTimeoutEventId(EventId event)
Set the Timeout EventId. 
void SetNode(Ptr< Node > node)
Set the node. 
void HandleFragmentsTimeout(FragmentKey_t key, Ipv6Header ipHeader)
Process the timeout for packet fragments. 
virtual void DoDispose()
Dispose this object. 
std::map< FragmentKey_t, Ptr< Fragments > > MapFragments_t
Container for the packet fragments. 
static TypeId GetTypeId()
Get the type identificator. 
static const uint8_t TYPE_ROUTING
Routing type. 
FragmentsTimeoutsListI_t m_timeoutIter
Timeout iterator to "event" handler. 
virtual uint8_t Process(Ptr< Packet > &packet, uint8_t offset, Ipv6Header const &ipv6Header, Ipv6Address dst, uint8_t *nextHeader, bool &stopProcessing, bool &isDropped, Ipv6L3Protocol::DropReason &dropReason)
Process method Called from Ipv6L3Protocol::Receive. 
static TypeId GetTypeId()
Get the type identificator. 
void GetFragments(Ptr< Packet > packet, Ipv6Header ipv6Header, uint32_t fragmentSize, std::list< Ipv6PayloadHeaderPair > &listFragments)
Fragment a packet. 
virtual ~Ipv6ExtensionRoutingDemux()
Destructor. 
Ipv6ExtensionRoutingDemux()
Constructor. 
FragmentsTimeoutsList_t m_timeoutEventList
Timeout "events" container. 
Time m_fragmentExpirationTimeout
Expiration timeout. 
IPv6 Extension Destination. 
Ipv6ExtensionFragment()
Constructor. 
~Ipv6ExtensionDestination()
Destructor. 
void CancelTimeout()
Cancel the timeout event. 
static TypeId GetTypeId()
Get the type identificator. 
~Ipv6ExtensionHopByHop()
Destructor. 
virtual uint8_t Process(Ptr< Packet > &packet, uint8_t offset, Ipv6Header const &ipv6Header, Ipv6Address dst, uint8_t *nextHeader, bool &stopProcessing, bool &isDropped, Ipv6L3Protocol::DropReason &dropReason)
Process method Called from Ipv6L3Protocol::Receive. 
virtual uint8_t Process(Ptr< Packet > &packet, uint8_t offset, Ipv6Header const &ipv6Header, Ipv6Address dst, uint8_t *nextHeader, bool &stopProcessing, bool &isDropped, Ipv6L3Protocol::DropReason &dropReason)=0
Process method Called from Ipv6L3Protocol::Receive. 
~Ipv6ExtensionLooseRouting()
Destructor. 
Ipv6ExtensionHopByHop()
Constructor. 
virtual uint8_t Process(Ptr< Packet > &packet, uint8_t offset, Ipv6Header const &ipv6Header, Ipv6Address dst, uint8_t *nextHeader, bool &stopProcessing, bool &isDropped, Ipv6L3Protocol::DropReason &dropReason)
Process method Called from Ipv6L3Protocol::Receive. 
virtual uint8_t Process(Ptr< Packet > &packet, uint8_t offset, Ipv6Header const &ipv6Header, Ipv6Address dst, uint8_t *nextHeader, bool &stopProcessing, bool &isDropped, Ipv6L3Protocol::DropReason &dropReason)
Process method Called from Ipv6L3Protocol::Receive. 
virtual uint8_t GetExtensionNumber() const
Get the extension number. 
std::list< Ptr< Ipv6ExtensionRouting > > Ipv6ExtensionRoutingList_t
Container for the extension routing. 
Ptr< Packet > m_unfragmentable
The unfragmentable part. 
std::list< std::tuple< Time, FragmentKey_t, Ipv6Header > >::iterator FragmentsTimeoutsListI_t
Container Iterator for fragment timeouts. 
IPv6 Extension ESP (Encapsulating Security Payload) 
bool m_moreFragment
If other fragments will be sent. 
~Ipv6ExtensionFragment()
Destructor. 
virtual uint8_t Process(Ptr< Packet > &packet, uint8_t offset, Ipv6Header const &ipv6Header, Ipv6Address dst, uint8_t *nextHeader, bool &stopProcessing, bool &isDropped, Ipv6L3Protocol::DropReason &dropReason)
Process method Called from Ipv6L3Protocol::Receive. 
~Ipv6ExtensionRouting()
Destructor. 
Ptr< Node > m_node
The node. 
static TypeId GetTypeId()
Get the type identificator. 
virtual uint8_t Process(Ptr< Packet > &packet, uint8_t offset, Ipv6Header const &ipv6Header, Ipv6Address dst, uint8_t *nextHeader, bool &stopProcessing, bool &isDropped, Ipv6L3Protocol::DropReason &dropReason)
Process method Called from Ipv6L3Protocol::Receive. 
virtual uint8_t GetTypeRouting() const
Get the type of routing. 
Ipv6ExtensionDestination()
Constructor. 
IPv6 Extension Routing Demux. 
void SetUnfragmentablePart(Ptr< Packet > unfragmentablePart)
Set the unfragmentable part of the packet. 
IPv6 Extension "Hop By Hop". 
void Remove(Ptr< Ipv6ExtensionRouting > extensionRouting)
Remove a routing extension from this demux. 
void AddFragment(Ptr< Packet > fragment, uint16_t fragmentOffset, bool moreFragment)
Add a fragment. 
virtual uint8_t GetExtensionNumber() const
Get the extension number. 
void SetNode(Ptr< Node > node)
Set the node. 
Every class exported by the ns3 library is enclosed in the ns3 namespace. 
static TypeId GetTypeId()
Get the type identificator. 
virtual uint8_t GetExtensionNumber() const
Get the extension number. 
MapFragments_t m_fragments
The hash of fragmented packets. 
static TypeId GetTypeId()
The interface ID. 
static TypeId GetTypeId()
Get the type identificator. 
Ptr< Ipv6ExtensionRouting > GetExtensionRouting(uint8_t typeRouting)
Get the routing extension corresponding to typeRouting. 
~Ipv6ExtensionESP()
Destructor. 
Ipv6ExtensionAH()
Constructor. 
std::pair< Ptr< Packet >, Ipv6Header > Ipv6PayloadHeaderPair
Pair of a packet and an Ipv6 header. 
static TypeId GetTypeId()
Get the type identificator. 
IPv6 Extension Loose Routing. 
virtual uint8_t GetExtensionNumber() const =0
Get the extension number. 
static const uint8_t EXT_NUMBER
Hop-by-hop extension number. 
Ipv6Extension()
Constructor. 
Describes an IPv6 address. 
std::list< std::tuple< Time, FragmentKey_t, Ipv6Header > > FragmentsTimeoutsList_t
Container for fragment timeouts. 
void SetTimeoutIter(FragmentsTimeoutsListI_t iter)
Set the Timeout iterator. 
An identifier for simulation events. 
virtual uint8_t GetExtensionNumber() const
Get the extension number. 
Ipv6ExtensionRouting()
Constructor. 
FragmentsTimeoutsListI_t SetTimeout(FragmentKey_t key, Ipv6Header ipHeader)
Set a new timeout "event" for a fragmented packet. 
virtual uint8_t ProcessOptions(Ptr< Packet > &packet, uint8_t offset, uint8_t length, Ipv6Header const &ipv6Header, Ipv6Address dst, uint8_t *nextHeader, bool &stopProcessing, bool &isDropped, Ipv6L3Protocol::DropReason &dropReason)
Process options Called by implementing classes to process the options. 
EventId m_timeoutEvent
Event for the next scheduled timeout. 
bool IsEntire() const
If all fragments have been added. 
static const uint8_t EXT_NUMBER
ESP extension number. 
virtual uint8_t GetTypeRouting() const
Get the type of routing. 
Ptr< Node > GetNode() const
Get the node. 
Ipv6ExtensionRoutingList_t m_extensionsRouting
List of IPv6 Routing Extensions supported. 
std::list< std::pair< Ptr< Packet >, uint16_t > > m_packetFragments
The current fragments. 
std::pair< Ipv6Address, uint32_t > FragmentKey_t
Key identifying a fragmented packet. 
virtual uint8_t GetExtensionNumber() const
Get the extension number. 
Ipv6ExtensionESP()
Constructor. 
A base class which provides memory management and object aggregation. 
Ptr< Packet > GetPartialPacket() const
Get the packet parts so far received. 
static const uint8_t EXT_NUMBER
Destination extension number. 
Ptr< Node > m_node
The node. 
virtual uint8_t GetExtensionNumber() const
Get the extension number. 
static const uint8_t EXT_NUMBER
Routing extension number. 
A template-based reference counting class. 
a unique identifier for an interface. 
Ptr< Packet > GetPacket() const
Get the entire packet. 
static TypeId GetTypeId()
Get the type identificator. 
static const uint8_t EXT_NUMBER
AH extension number. 
~Ipv6ExtensionAH()
Destructor. 
DropReason
Reason why a packet has been dropped. 
virtual ~Ipv6Extension()
Destructor. 
IPv6 Extension AH (Authentication Header)