23 #include "ns3/assert.h" 24 #include "ns3/address-utils.h" 40 .SetGroupName (
"Internet")
53 : m_calcChecksum (true),
105 os <<
"( type = " << (uint32_t)
m_type <<
" code = " << (uint32_t)
m_code <<
" checksum = " << (uint32_t)
m_checksum <<
")";
152 NS_LOG_FUNCTION (
this << src << dst << length << static_cast<uint32_t> (protocol));
191 .SetGroupName (
"Internet")
250 os <<
"( type = " << (uint32_t)
GetType () <<
" (NS) code = " << (uint32_t)
GetCode () <<
" target = " <<
m_target <<
" checksum = " << (uint32_t)
GetChecksum () <<
")";
262 uint8_t buff_target[16];
263 uint16_t checksum = 0;
271 i.
Write (buff_target, 16);
305 .SetGroupName (
"Internet")
397 os <<
"( type = " << (uint32_t)
GetType () <<
" (NA) code = " << (uint32_t)
GetCode () <<
" checksum = " << (uint32_t)
GetChecksum () <<
")";
409 uint8_t buff_target[16];
410 uint16_t checksum = 0;
420 reserved |= (uint32_t)(1 << 31);
425 reserved |= (uint32_t)(1<< 30);
430 reserved |= (uint32_t)(1<< 29);
435 i.
Write (buff_target, 16);
489 .SetGroupName (
"Internet")
620 os <<
"( type = " << (uint32_t)
GetType () <<
" (RA) code = " << (uint32_t)
GetCode () <<
" checksum = " << (uint32_t)
GetChecksum () <<
")";
632 uint16_t checksum = 0;
643 flags |= (uint8_t)(1<< 7);
648 flags |= (uint8_t)(1<< 6);
653 flags |= (uint8_t)(1<< 5);
709 .SetGroupName (
"Internet")
749 os <<
"( type = " << (uint32_t)
GetType () <<
" (RS) code = " << (uint32_t)
GetCode () <<
" checksum = " << (uint32_t)
GetChecksum () <<
")";
762 uint16_t checksum = 0;
800 .SetGroupName (
"Internet")
880 uint16_t checksum = 0;
931 .SetGroupName (
"Internet")
995 os <<
"( type = " << (
GetType () == 128 ?
"128 (Request)" :
"129 (Reply)") <<
996 " code = " << (uint32_t)
GetCode () <<
1009 uint16_t checksum = 0;
1047 static TypeId tid =
TypeId (
"ns3::Icmpv6DestinationUnreachable")
1049 .SetGroupName (
"Internet")
1089 os <<
"( type = " << (uint32_t)
GetType () <<
" (Destination Unreachable) code = " << (uint32_t)
GetCode () <<
" checksum = " << (uint32_t)
GetChecksum () <<
")";
1101 uint16_t checksum = 0;
1110 uint8_t *buf =
new uint8_t[size];
1112 i.
Write (buf, size);
1126 uint16_t length =
start.GetRemainingSize () - 8;
1127 uint8_t*
data =
new uint8_t[length];
1147 .SetGroupName (
"Internet")
1200 os <<
"( type = " << (uint32_t)
GetType () <<
" (Too Big) code = " << (uint32_t)
GetCode () <<
" checksum = " << (uint32_t)
GetChecksum () <<
" mtu = " << (uint32_t)
GetMtu () <<
")";
1212 uint16_t checksum = 0;
1221 uint8_t *buf =
new uint8_t[size];
1223 i.
Write (buf, size);
1237 uint16_t length =
start.GetRemainingSize () - 8;
1238 uint8_t*
data =
new uint8_t[length];
1258 .SetGroupName (
"Internet")
1298 os <<
"( type = " << (uint32_t)
GetType () <<
" (Destination Unreachable) code = " << (uint32_t)
GetCode () <<
" checksum = " << (uint32_t)
GetChecksum () <<
")";
1311 uint16_t checksum = 0;
1320 uint8_t *buf =
new uint8_t[size];
1322 i.
Write (buf, size);
1337 uint16_t length =
start.GetRemainingSize () - 8;
1338 uint8_t*
data =
new uint8_t[length];
1356 static TypeId tid =
TypeId (
"ns3::Icmpv6ParameterError")
1358 .SetGroupName (
"Internet")
1411 os <<
"( type = " << (uint32_t)
GetType () <<
" (Destination Unreachable) code = " << (uint32_t)
GetCode () <<
" checksum = " << (uint32_t)
GetChecksum () <<
" ptr = " << (uint32_t)
GetPtr () <<
")";
1423 uint16_t checksum = 0;
1432 uint8_t *buf =
new uint8_t[size];
1434 i.
Write (buf, size);
1448 uint16_t length =
start.GetRemainingSize () - 8;
1449 uint8_t*
data =
new uint8_t[length];
1469 .SetGroupName (
"Internet")
1522 os <<
"( type = " << (uint32_t)
GetType () <<
" length = " << (uint32_t)
GetLength () <<
")";
1548 .SetGroupName (
"Internet")
1609 os <<
"( type = " << (uint32_t)
GetType () <<
" length = " << (uint32_t)
GetLength () <<
" MTU = " <<
m_mtu <<
")";
1643 static TypeId tid =
TypeId (
"ns3::Icmpv6OptionPrefixInformation")
1645 .SetGroupName (
"Internet")
1672 NS_LOG_FUNCTION (
this << prefix << static_cast<uint32_t> (prefixlen));
1764 os <<
"( type = " << (uint32_t)
GetType () <<
" length = " << (uint32_t)
GetLength () <<
" prefix " <<
m_prefix <<
")";
1779 memset (buf, 0x00,
sizeof (buf));
1817 static TypeId tid =
TypeId (
"ns3::Icmpv6OptionLinkLayerAddress")
1819 .SetGroupName (
"Internet")
1877 os <<
"( type = " << (uint32_t)
GetType () <<
" length = " << (uint32_t)
GetLength () <<
" L2 Address = " <<
m_addr <<
")";
1899 for (uint8_t nb = 0; nb<len; nb++)
1926 static TypeId tid =
TypeId (
"ns3::Icmpv6OptionRedirected")
1928 .SetGroupName (
"Internet")
1970 os <<
"( type = " << (uint32_t)
GetType () <<
" length = " << (uint32_t)
GetLength () <<
")";
1991 uint8_t *buf =
new uint8_t[size];
1993 i.
Write (buf, size);
2003 uint8_t length = i.
ReadU8 ();
2009 uint8_t* buff =
new uint8_t[len2];
2010 i.
Read (buff, len2);
2011 m_packet = Create<Packet> (buff, len2);
uint16_t CalculateIpChecksum(uint16_t size)
Calculate the checksum.
uint16_t GetSeq() const
Get the sequence number.
Ipv6Address m_destination
IPv6 destination address.
virtual TypeId GetInstanceTypeId() const
Get the instance type ID.
virtual void Print(std::ostream &os) const
Print information.
Address GetAddress() const
Get the hardware address.
uint32_t m_reserved
Reserved value.
void SetPacket(Ptr< Packet > packet)
Set the redirected packet.
ICMPv6 redirected option.
void AddAtStart(uint32_t start)
virtual TypeId GetInstanceTypeId() const
Get the instance type ID.
bool GetFlagS() const
Get the S flag.
virtual uint32_t Deserialize(Buffer::Iterator start)
Deserialize the packet.
uint32_t m_RetransmissionTimer
The retransmission timer.
virtual uint32_t Deserialize(Buffer::Iterator start)
Deserialize the packet.
Ipv6Address GetIpv6Target() const
Get the IPv6 target field.
static TypeId GetTypeId()
Get the UID of this class.
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by "...
ICMPv6 Error Parameter Error header.
virtual TypeId GetInstanceTypeId() const
Get the instance type ID.
virtual uint32_t GetSerializedSize() const
Get the serialized size.
ICMPv6 Router Advertisement header.
virtual uint32_t GetSerializedSize() const
Get the serialized size.
ICMPv6 Neighbor Advertisement header.
virtual TypeId GetInstanceTypeId() const
Get the instance type ID.
virtual void Serialize(Buffer::Iterator start) const
Serialize the packet.
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
virtual TypeId GetInstanceTypeId() const
Get the instance type ID.
Ptr< Packet > m_packet
The incorrect packet.
uint32_t GetSize(void) const
Returns the the size in bytes of the packet (including the zero-filled initial payload).
Ptr< Packet > m_packet
The incorrect Packet.
Icmpv6OptionMtu()
Constructor.
uint8_t GetLength(void) const
Get the length of the underlying address.
virtual TypeId GetInstanceTypeId() const
Get the instance type ID.
virtual TypeId GetInstanceTypeId() const
Get the instance type ID.
virtual uint32_t Deserialize(Buffer::Iterator start)
Deserialize the packet.
void SetReserved(uint32_t reserved)
Set the reserved field.
virtual uint32_t GetSerializedSize() const
Get the serialized size.
virtual ~Icmpv6TimeExceeded()
Destructor.
virtual uint32_t GetSerializedSize() const
Get the serialized size.
ICMPv6 Error Time Exceeded header.
Icmpv6TimeExceeded()
Constructor.
virtual void Print(std::ostream &os) const
Print information.
Ptr< Packet > GetPacket() const
Get the incorrect packet.
automatically resized byte buffer
ICMPv6 Router Solicitation header.
ICMPv6 Neighbor Solicitation header.
uint16_t m_reserved
The reserved value.
uint32_t m_reserved
The reserved value.
virtual void Serialize(Buffer::Iterator start) const
Serialize the packet.
static TypeId GetTypeId()
Get the UID of this class.
void GetBytes(uint8_t buf[16]) const
Get the bytes corresponding to the address.
virtual void Print(std::ostream &os) const
Print information.
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file...
Icmpv6DestinationUnreachable()
Constructor.
virtual uint32_t GetSerializedSize() const
Get the serialized size.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
void SetPtr(uint32_t ptr)
Set the pointer field.
virtual uint32_t Deserialize(Buffer::Iterator start)
Deserialize the packet.
Ptr< Packet > m_packet
The redirected packet.
uint32_t GetReserved() const
Get the reserved field.
void SetRetransmissionTime(uint32_t r)
Set the node Retransmission time (Neighbor Discovery).
static TypeId GetTypeId()
Get the UID of this class.
Ipv6Address m_target
IPv6 target address.
static TypeId GetTypeId()
Get the UID of this class.
Ipv6Address m_target
The IPv6 target address.
#define NS_LOG_FUNCTION_NOARGS()
Output the name of the function.
uint8_t GetFlags() const
Getflags.
uint16_t m_id
ID of the packet (to distinguish response between many ping program).
void SetMtu(uint32_t mtu)
Set the MTU.
void SetPacket(Ptr< Packet > p)
Set the incorrect packet.
void SetTarget(Ipv6Address target)
Set the IPv6 target address.
static TypeId GetTypeId()
Get the UID of this class.
uint32_t ReadNtohU32(void)
virtual void Serialize(Buffer::Iterator start) const
Serialize the packet.
Icmpv6Echo()
Default constructor.
Ptr< Packet > GetPacket() const
Get the incorrect packet.
Icmpv6ParameterError()
Constructor.
static TypeId GetTypeId()
Get the UID of this class.
static TypeId GetTypeId()
Get the UID of this class.
iterator in a Buffer instance
a polymophic address class
void SetPacket(Ptr< Packet > p)
Set the incorrect packet.
void SetLifeTime(uint16_t l)
Set the node Life time (Neighbor Discovery).
virtual void Serialize(Buffer::Iterator start) const
Serialize the packet.
virtual void Print(std::ostream &os) const
Print information.
void SetIpv6Target(Ipv6Address target)
Set the IPv6 target field.
virtual void Serialize(Buffer::Iterator start) const
Serialize the packet.
ICMPv6 Error Destination Unreachable header.
uint32_t GetMtu() const
Get the MTU field.
virtual ~Icmpv6ParameterError()
Destructor.
void SetCurHopLimit(uint8_t m)
Set the IPv6 maximum number of jumps.
virtual ~Icmpv6NA()
Destructor.
uint32_t m_reserved
The reserved value.
virtual TypeId GetInstanceTypeId() const
Get the instance type ID.
void SetIpv6Target(Ipv6Address target)
Set the IPv6 target field.
virtual void Print(std::ostream &os) const
Print information.
Icmpv6OptionLinkLayerAddress()
Constructor.
void WriteU16(uint16_t data)
Ipv6Address m_target
The IPv6 target address.
Ptr< Packet > m_packet
the incorrect packet.
uint32_t m_reserved
The reserved value.
virtual void Serialize(Buffer::Iterator start) const
Serialize the packet.
uint32_t GetMtu() const
Get the MTU.
uint16_t GetLifeTime() const
Get the node Life time (Neighbor Discovery).
virtual uint32_t Deserialize(Buffer::Iterator start)
Deserialize the packet.
void WriteHtonU16(uint16_t data)
virtual uint32_t Deserialize(Buffer::Iterator start)
Deserialize the packet.
virtual uint32_t Deserialize(Buffer::Iterator start)
Deserialize the packet.
virtual void Print(std::ostream &os) const
Print information.
uint8_t m_curHopLimit
The max jumps.
Ptr< Packet > GetPacket() const
Get the redirected packet.
bool GetFlagO() const
Get the O flag.
void Next(void)
go forward by one byte
ICMPv6 Redirection header.
uint32_t GetSize(void) const
virtual TypeId GetInstanceTypeId() const
Get the instance type ID.
Ipv6Address GetTarget() const
Get the IPv6 target address.
static TypeId GetTypeId()
Get the UID of this class.
uint32_t m_mtu
The MTU value.
void SetPacket(Ptr< Packet > p)
Set the incorrect packet.
uint32_t GetReserved() const
Get the reserved field.
virtual ~Icmpv6OptionLinkLayerAddress()
Destructor.
void SetReserved(uint16_t reserved)
Set the reserved field.
virtual void Print(std::ostream &os) const
Print information.
static TypeId GetTypeId()
Get the UID of this class.
virtual void Serialize(Buffer::Iterator start) const
Serialize the packet.
Address m_addr
The hardware address.
void SetReserved(uint32_t reserved)
Set the reserved field.
void Set(char const *address)
Sets an Ipv6Address by parsing the input C-string.
void SetReserved(uint32_t reserved)
Set the reserved field.
virtual void Serialize(Buffer::Iterator start) const
Serialize the packet.
Ptr< Packet > GetPacket() const
Get the incorrect packet.
virtual void Print(std::ostream &os) const
Print information.
double f(double x, void *params)
uint8_t m_flags
The flags field value.
virtual uint32_t GetSerializedSize() const
Get the serialized size.
virtual ~Icmpv6OptionMtu()
Destructor.
virtual uint32_t Deserialize(Buffer::Iterator start)
Deserialize the packet.
virtual uint32_t Deserialize(Buffer::Iterator start)
Deserialize the packet.
virtual ~Icmpv6RS()
Destructor.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
uint32_t CopyFrom(const uint8_t *buffer, uint8_t len)
virtual TypeId GetInstanceTypeId(void) const
Get the instance type ID.
uint32_t GetReserved() const
Get the reserved field.
bool GetFlagM() const
Get the M flag.
uint8_t GetCurHopLimit() const
Get the IPv6 maximum number of jumps.
virtual ~Icmpv6OptionRedirected()
Destructor.
virtual ~Icmpv6Redirection()
Destructor.
uint32_t m_ReachableTime
The reachable time value.
virtual void Serialize(Buffer::Iterator start) const
Serialize the packet.
void Read(uint8_t *buffer, uint32_t size)
Ipv6Address GetIpv6Target() const
Get the IPv6 target field.
void SetFlagO(bool o)
Set the O flag.
void SetFlagH(bool h)
Set the H flag.
virtual void Print(std::ostream &os) const
Print information.
virtual ~Icmpv6RA()
Destructor.
void WriteHtonU32(uint32_t data)
void SetReserved(uint32_t reserved)
Set the reserved field.
void SetFlagR(bool r)
Set the R flag.
void SetFlagS(bool s)
Set the S flag.
virtual uint32_t Deserialize(Buffer::Iterator start)
Deserialize the packet.
void SetFlagM(bool m)
Set the M flag.
void SetReachableTime(uint32_t r)
Set the node Reachable time (Neighbor Discovery).
uint32_t m_ptr
The pointer field.
Describes an IPv6 address.
void WriteU8(uint8_t data)
Icmpv6TooBig()
Constructor.
virtual void Print(std::ostream &os) const
Print information.
uint32_t CopyData(uint8_t *buffer, uint32_t size) const
Copy the packet contents to a byte buffer.
uint16_t GetReserved() const
Get the reserved field.
virtual ~Icmpv6Echo()
Destructor.
void SetDestination(Ipv6Address destination)
Set the IPv6 destination address.
virtual uint32_t GetSerializedSize() const
Get the serialized size.
virtual ~Icmpv6TooBig()
Destructor.
virtual uint32_t GetSerializedSize() const
Get the serialized size.
virtual uint32_t Deserialize(Buffer::Iterator start)
Deserialize the packet.
virtual uint32_t GetSerializedSize() const
Get the serialized size.
virtual void Print(std::ostream &os) const
Print information.
Ipv6Address GetDestination() const
Get the IPv6 destination address.
uint16_t m_LifeTime
The lifetime value.
virtual ~Icmpv6NS()
Destructor.
void Write(uint8_t const *buffer, uint32_t size)
bool GetFlagR() const
Get the R flag.
Ptr< Packet > m_packet
The incorrect packet.
Icmpv6OptionRedirected()
Constructor.
virtual void Print(std::ostream &os) const
Print information.
uint32_t GetPtr() const
Get the pointer field.
virtual ~Icmpv6DestinationUnreachable()
Destructor.
virtual uint32_t GetSerializedSize() const
Get the serialized size.
Ptr< Packet > GetPacket() const
Get the incorrect packet.
static TypeId GetTypeId()
Get the UID of this class.
virtual uint32_t GetSerializedSize() const
Get the serialized size.
uint32_t GetReachableTime() const
Get the node Reachable time (Neighbor Discovery).
ICMPv6 link-layer address option.
uint32_t GetReserved() const
Get the reserved field.
void SetFlags(uint8_t f)
Setflags.
void SetSeq(uint16_t seq)
Set the sequence number.
bool GetFlagO() const
Get the O flag.
uint32_t m_mtu
The MTU value.
virtual uint32_t Deserialize(Buffer::Iterator start)
Deserialize the packet.
virtual uint32_t Deserialize(Buffer::Iterator start)
Deserialize the packet.
virtual void Serialize(Buffer::Iterator start) const
Serialize the packet.
uint16_t ReadNtohU16(void)
void WriteU32(uint32_t data)
Icmpv6Redirection()
Constructor.
void SetPacket(Ptr< Packet > p)
Set the incorrect packet.
uint16_t m_seq
Sequence number (to distinguish response).
virtual TypeId GetInstanceTypeId() const
Get the instance type ID.
virtual void Serialize(Buffer::Iterator start) const
Serialize the packet.
ICMPv6 Error Too Big header.
a unique identifier for an interface.
void SetFlagO(bool o)
Set the O flag.
static TypeId GetTypeId()
Get the UID of this class.
TypeId SetParent(TypeId tid)
Set the parent TypeId.
static TypeId GetTypeId()
Get the UID of this class.
Buffer::Iterator Begin(void) const
bool GetFlagH() const
Get the H flag.
static TypeId GetTypeId()
Get the UID of this class.
virtual uint32_t GetSerializedSize() const
Get the serialized size.
virtual TypeId GetInstanceTypeId() const
Get the instance type ID.
void SetId(uint16_t id)
Set the ID of the packet.
void Serialize(uint8_t buf[16]) const
Serialize this address to a 16-byte buffer.
uint32_t GetRetransmissionTime() const
Get the node Retransmission time (Neighbor Discovery).
virtual TypeId GetInstanceTypeId() const
Get the instance type ID.
virtual void Serialize(Buffer::Iterator start) const
Serialize the packet.
uint32_t CopyTo(uint8_t buffer[MAX_SIZE]) const
Copy the address bytes into a buffer.
virtual uint32_t GetSerializedSize() const
Get the serialized size.
void SetMtu(uint32_t mtu)
Set the MTU.
void SetAddress(Address addr)
Set the hardware address.
uint16_t GetId() const
Get the ID of the packet.
virtual void Print(std::ostream &os) const
Print information.
virtual void Serialize(Buffer::Iterator start) const
Serialize the packet.