A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
ns3::Ipv4Header Class Reference

Packet header for IPv4. More...

#include "ipv4-header.h"

+ Inheritance diagram for ns3::Ipv4Header:
+ Collaboration diagram for ns3::Ipv4Header:

Public Types

enum  DscpType {
  DscpDefault = 0x00 , DSCP_CS1 = 0x08 , DSCP_AF11 = 0x0A , DSCP_AF12 = 0x0C ,
  DSCP_AF13 = 0x0E , DSCP_CS2 = 0x10 , DSCP_AF21 = 0x12 , DSCP_AF22 = 0x14 ,
  DSCP_AF23 = 0x16 , DSCP_CS3 = 0x18 , DSCP_AF31 = 0x1A , DSCP_AF32 = 0x1C ,
  DSCP_AF33 = 0x1E , DSCP_CS4 = 0x20 , DSCP_AF41 = 0x22 , DSCP_AF42 = 0x24 ,
  DSCP_AF43 = 0x26 , DSCP_CS5 = 0x28 , DSCP_EF = 0x2E , DSCP_CS6 = 0x30 ,
  DSCP_CS7 = 0x38
}
 DiffServ codepoints. More...
 
enum  EcnType { ECN_NotECT = 0x00 , ECN_ECT1 = 0x01 , ECN_ECT0 = 0x02 , ECN_CE = 0x03 }
 ECN Type defined in RFC 3168 More...
 

Public Member Functions

 Ipv4Header ()
 Construct a null IPv4 header.
 
uint32_t Deserialize (Buffer::Iterator start) override
 
std::string DscpTypeToString (DscpType dscp) const
 
std::string EcnTypeToString (EcnType ecn) const
 
void EnableChecksum ()
 Enable checksum calculation for this header.
 
Ipv4Address GetDestination () const
 
DscpType GetDscp () const
 
EcnType GetEcn () const
 
uint16_t GetFragmentOffset () const
 
uint16_t GetIdentification () const
 
TypeId GetInstanceTypeId () const override
 Get the most derived TypeId for this Object.
 
uint16_t GetPayloadSize () const
 
uint8_t GetProtocol () const
 
uint32_t GetSerializedSize () const override
 
Ipv4Address GetSource () const
 
uint8_t GetTos () const
 
uint8_t GetTtl () const
 
bool IsChecksumOk () const
 
bool IsDontFragment () const
 
bool IsLastFragment () const
 
void Print (std::ostream &os) const override
 
void Serialize (Buffer::Iterator start) const override
 
void SetDestination (Ipv4Address destination)
 
void SetDontFragment ()
 Don't fragment this packet: if you need to anyway, drop it.
 
void SetDscp (DscpType dscp)
 Set DSCP Field.
 
void SetEcn (EcnType ecn)
 Set ECN Field.
 
void SetFragmentOffset (uint16_t offsetBytes)
 The offset is measured in bytes for the packet start.
 
void SetIdentification (uint16_t identification)
 
void SetLastFragment ()
 This packet is the last packet of a fragmented ipv4 packet.
 
void SetMayFragment ()
 If you need to fragment this packet, you can do it.
 
void SetMoreFragments ()
 This packet is not the last packet of a fragmented ipv4 packet.
 
void SetPayloadSize (uint16_t size)
 
void SetProtocol (uint8_t num)
 
void SetSource (Ipv4Address source)
 
void SetTos (uint8_t tos)
 
void SetTtl (uint8_t ttl)
 
- Public Member Functions inherited from ns3::Header
 ~Header () override
 
virtual uint32_t Deserialize (Buffer::Iterator start, Buffer::Iterator end)
 Deserialize the object from a buffer iterator.
 
- Public Member Functions inherited from ns3::ObjectBase
virtual ~ObjectBase ()
 Virtual destructor.
 
void GetAttribute (std::string name, AttributeValue &value, bool permissive=false) const
 Get the value of an attribute, raising fatal errors if unsuccessful.
 
bool GetAttributeFailSafe (std::string name, AttributeValue &value) const
 Get the value of an attribute without raising errors.
 
void SetAttribute (std::string name, const AttributeValue &value)
 Set a single attribute, raising fatal errors if unsuccessful.
 
bool SetAttributeFailSafe (std::string name, const AttributeValue &value)
 Set a single attribute without raising errors.
 
bool TraceConnect (std::string name, std::string context, const CallbackBase &cb)
 Connect a TraceSource to a Callback with a context.
 
bool TraceConnectWithoutContext (std::string name, const CallbackBase &cb)
 Connect a TraceSource to a Callback without a context.
 
bool TraceDisconnect (std::string name, std::string context, const CallbackBase &cb)
 Disconnect from a TraceSource a Callback previously connected with a context.
 
bool TraceDisconnectWithoutContext (std::string name, const CallbackBase &cb)
 Disconnect from a TraceSource a Callback previously connected without a context.
 

Static Public Member Functions

static TypeId GetTypeId ()
 Get the type ID.
 
- Static Public Member Functions inherited from ns3::Header
static TypeId GetTypeId ()
 Get the type ID.
 
- Static Public Member Functions inherited from ns3::Chunk
static TypeId GetTypeId ()
 Get the type ID.
 
- Static Public Member Functions inherited from ns3::ObjectBase
static TypeId GetTypeId ()
 Get the type ID.
 

Private Types

enum  FlagsE { DONT_FRAGMENT = (1 << 0) , MORE_FRAGMENTS = (1 << 1) }
 flags related to IP fragmentation More...
 

Private Attributes

bool m_calcChecksum
 true if the checksum must be calculated
 
uint16_t m_checksum
 checksum
 
Ipv4Address m_destination
 destination address
 
uint32_t m_flags: 3
 flags
 
uint16_t m_fragmentOffset
 Fragment offset.
 
bool m_goodChecksum
 true if checksum is correct
 
uint16_t m_headerSize
 IP header size.
 
uint16_t m_identification
 identification
 
uint16_t m_payloadSize
 payload size
 
uint32_t m_protocol: 8
 Protocol.
 
Ipv4Address m_source
 source address
 
uint32_t m_tos: 8
 TOS, also used as DSCP + ECN value.
 
uint32_t m_ttl: 8
 TTL.
 

Additional Inherited Members

- Protected Member Functions inherited from ns3::ObjectBase
void ConstructSelf (const AttributeConstructionList &attributes)
 Complete construction of ObjectBase; invoked by derived classes.
 
virtual void NotifyConstructionCompleted ()
 Notifier called once the ObjectBase is fully constructed.
 

Detailed Description

Packet header for IPv4.

Definition at line 22 of file ipv4-header.h.

Member Enumeration Documentation

◆ DscpType

DiffServ codepoints.

The values correspond to the 6-bit DSCP codepoint within the 8-bit DS field defined in RFC 2474 . ECN bits are separately set with the SetEcn() method. Codepoints are defined in Assured Forwarding (AF) RFC 2597 , Expedited Forwarding (EF) RFC 2598 , and Default and Class Selector (CS) RFC 2474 .

Enumerator
DscpDefault 
DSCP_CS1 
DSCP_AF11 
DSCP_AF12 
DSCP_AF13 
DSCP_CS2 
DSCP_AF21 
DSCP_AF22 
DSCP_AF23 
DSCP_CS3 
DSCP_AF31 
DSCP_AF32 
DSCP_AF33 
DSCP_CS4 
DSCP_AF41 
DSCP_AF42 
DSCP_AF43 
DSCP_CS5 
DSCP_EF 
DSCP_CS6 
DSCP_CS7 

Definition at line 60 of file ipv4-header.h.

◆ EcnType

ECN Type defined in RFC 3168

Enumerator
ECN_NotECT 
ECN_ECT1 
ECN_ECT0 
ECN_CE 

Definition at line 102 of file ipv4-header.h.

◆ FlagsE

flags related to IP fragmentation

Enumerator
DONT_FRAGMENT 
MORE_FRAGMENTS 

Definition at line 235 of file ipv4-header.h.

Constructor & Destructor Documentation

◆ Ipv4Header()

ns3::Ipv4Header::Ipv4Header ( )

Construct a null IPv4 header.

Definition at line 23 of file ipv4-header.cc.

Member Function Documentation

◆ Deserialize()

uint32_t ns3::Ipv4Header::Deserialize ( Buffer::Iterator start)
overridevirtual
Parameters
startan iterator which points to where the header should read from.
Returns
the number of bytes read.

This method is used by Packet::RemoveHeader to re-create a header from the byte buffer of a packet. The data read is expected to match bit-for-bit the representation of this header in real networks.

Note that data is not actually removed from the buffer to which the iterator points. Both Packet::RemoveHeader() and Packet::PeekHeader() call Deserialize(), but only the RemoveHeader() has additional statements to remove the header bytes from the underlying buffer and associated metadata.

Implements ns3::Header.

Definition at line 422 of file ipv4-header.cc.

References ns3::Buffer::Iterator::CalculateIpChecksum(), DONT_FRAGMENT, GetSerializedSize(), m_calcChecksum, m_checksum, m_destination, m_flags, m_fragmentOffset, m_goodChecksum, m_headerSize, m_identification, m_payloadSize, m_protocol, m_source, m_tos, m_ttl, MORE_FRAGMENTS, NS_LOG_FUNCTION, NS_LOG_LOGIC, NS_LOG_WARN, ns3::Buffer::Iterator::Prev(), ns3::Buffer::Iterator::ReadNtohU16(), ns3::Buffer::Iterator::ReadNtohU32(), ns3::Buffer::Iterator::ReadU16(), ns3::Buffer::Iterator::ReadU8(), and ns3::Ipv4Address::Set().

Referenced by ns3::Icmpv4DestinationUnreachable::Deserialize(), and ns3::Icmpv4TimeExceeded::Deserialize().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ DscpTypeToString()

std::string ns3::Ipv4Header::DscpTypeToString ( DscpType dscp) const
Parameters
dscpthe dscp
Returns
std::string of DSCPType

Definition at line 105 of file ipv4-header.cc.

References DSCP_AF11, DSCP_AF12, DSCP_AF13, DSCP_AF21, DSCP_AF22, DSCP_AF23, DSCP_AF31, DSCP_AF32, DSCP_AF33, DSCP_AF41, DSCP_AF42, DSCP_AF43, DSCP_CS1, DSCP_CS2, DSCP_CS3, DSCP_CS4, DSCP_CS5, DSCP_CS6, DSCP_CS7, DSCP_EF, DscpDefault, and NS_LOG_FUNCTION.

Referenced by Print().

+ Here is the caller graph for this function:

◆ EcnTypeToString()

std::string ns3::Ipv4Header::EcnTypeToString ( EcnType ecn) const
Parameters
ecnthe ECNType
Returns
std::string of ECNType

Definition at line 166 of file ipv4-header.cc.

References ECN_CE, ECN_ECT0, ECN_ECT1, ECN_NotECT, and NS_LOG_FUNCTION.

Referenced by Print().

+ Here is the caller graph for this function:

◆ EnableChecksum()

void ns3::Ipv4Header::EnableChecksum ( )

Enable checksum calculation for this header.

Definition at line 39 of file ipv4-header.cc.

References m_calcChecksum, and NS_LOG_FUNCTION.

Referenced by ns3::Ipv4L3ClickProtocol::BuildHeader(), ns3::Ipv4L3Protocol::BuildHeader(), ns3::Ipv4L3Protocol::DoFragmentation(), ns3::Ipv4L3ClickProtocol::Receive(), ns3::Ipv4L3Protocol::Receive(), ns3::Ipv4L3ClickProtocol::Send(), ns3::Ipv4L3ClickProtocol::SendWithHeader(), and ns3::Ipv4L3Protocol::SendWithHeader().

+ Here is the caller graph for this function:

◆ GetDestination()

Ipv4Address ns3::Ipv4Header::GetDestination ( ) const
Returns
the destination address of this packet

Definition at line 305 of file ipv4-header.cc.

References m_destination, and NS_LOG_FUNCTION.

Referenced by ns3::OpenFlowSwitchNetDevice::BufferFromPacket(), ns3::dsr::DsrRouting::CallCancelPacketTimer(), ns3::EpcTftClassifier::Classify(), ns3::IpcsClassifier::Classify(), ns3::Ipv4FlowClassifier::Classify(), ns3::aodv::RoutingProtocol::DeferredRouteOutput(), ns3::aodv::QueueEntryTest::DoRun(), ns3::UdpSocketImpl::DoSendTo(), ns3::aodv::RequestQueue::Drop(), ns3::dsdv::PacketQueue::Drop(), ns3::dsdv::RoutingProtocol::Drop(), ns3::Ipv4FlowProbe::DropLogger(), ns3::aodv::RequestQueue::Enqueue(), ns3::dsdv::PacketQueue::Enqueue(), ns3::Icmpv4L4Protocol::Forward(), ns3::aodv::RoutingProtocol::Forwarding(), ns3::Ipv4FlowProbe::ForwardLogger(), ns3::Ipv4RawSocketImpl::ForwardUp(), ns3::TcpSocketBase::ForwardUp(), ns3::UdpSocketImpl::ForwardUp(), ns3::Ipv4FlowProbe::ForwardUpLogger(), ns3::Ipv4QueueDiscItem::Hash(), ns3::Ipv4L3Protocol::IpForward(), ns3::Ipv4L3Protocol::IpMulticastForward(), ns3::Ipv4L3ClickProtocol::LocalDeliver(), ns3::Ipv4L3Protocol::LocalDeliver(), ns3::aodv::RoutingProtocol::LoopbackRoute(), ns3::dsdv::RoutingProtocol::LoopbackRoute(), ns3::aodv::QueueEntry::operator==(), ns3::dsdv::QueueEntry::operator==(), ns3::dsr::DsrOptionSR::Process(), ns3::Ipv4L3Protocol::ProcessFragment(), ns3::dsr::DsrRouting::PromiscReceive(), ns3::dsr::DsrRouting::Receive(), ns3::Icmpv4L4Protocol::Receive(), ns3::Ipv4L3Protocol::Receive(), ns3::TcpL4Protocol::Receive(), ns3::UdpL4Protocol::Receive(), ns3::EpcPgwApplication::RecvFromTunDevice(), ns3::aodv::RoutingProtocol::RouteInput(), ns3::dsdv::RoutingProtocol::RouteInput(), ns3::Ipv4GlobalRouting::RouteInput(), ns3::Ipv4ListRouting::RouteInput(), ns3::Ipv4StaticRouting::RouteInput(), ns3::olsr::RoutingProtocol::RouteInput(), ns3::Rip::RouteInput(), ns3::aodv::RoutingProtocol::RouteOutput(), ns3::dsdv::RoutingProtocol::RouteOutput(), ns3::Ipv4ClickRouting::RouteOutput(), ns3::Ipv4GlobalRouting::RouteOutput(), ns3::Ipv4ListRouting::RouteOutput(), ns3::Ipv4StaticRouting::RouteOutput(), ns3::olsr::RoutingProtocol::RouteOutput(), ns3::Rip::RouteOutput(), ns3::dsdv::RoutingProtocol::Send(), ns3::Ipv4L3Protocol::Send(), ns3::Ipv4FlowProbe::SendOutgoingLogger(), ns3::Ipv4L3Protocol::SendRealOut(), ns3::Ipv4RawSocketImpl::SendTo(), ns3::Ipv4L3ClickProtocol::SendWithHeader(), and ns3::Ipv4L3Protocol::UpdateDuplicate().

+ Here is the caller graph for this function:

◆ GetDscp()

Ipv4Header::DscpType ns3::Ipv4Header::GetDscp ( ) const
Returns
the DSCP field of this packet.

Definition at line 97 of file ipv4-header.cc.

References m_tos, and NS_LOG_FUNCTION.

Referenced by ns3::Ipv4FlowClassifier::Classify(), Ipv4HeaderTest::DoRun(), and Print().

+ Here is the caller graph for this function:

◆ GetEcn()

Ipv4Header::EcnType ns3::Ipv4Header::GetEcn ( ) const
Returns
the ECN field of this packet.

Definition at line 158 of file ipv4-header.cc.

References m_tos, and NS_LOG_FUNCTION.

Referenced by Ipv4HeaderTest::DoRun(), ns3::TcpSocketBase::ForwardUp(), ns3::Ipv4QueueDiscItem::Mark(), and Print().

+ Here is the caller graph for this function:

◆ GetFragmentOffset()

uint16_t ns3::Ipv4Header::GetFragmentOffset ( ) const
Returns
the offset of this fragment measured in bytes from the start.

Definition at line 243 of file ipv4-header.cc.

References m_fragmentOffset, m_payloadSize, NS_LOG_FUNCTION, and NS_LOG_WARN.

Referenced by ns3::OpenFlowSwitchNetDevice::BufferFromPacket(), ns3::EpcTftClassifier::Classify(), ns3::Ipv4FlowClassifier::Classify(), ns3::Ipv4L3Protocol::DoFragmentation(), ns3::Ipv4FlowProbe::ForwardLogger(), ns3::Ipv4QueueDiscItem::Hash(), ns3::Ipv4L3Protocol::LocalDeliver(), ns3::dsr::DsrOptionSR::Process(), ns3::Ipv4L3Protocol::ProcessFragment(), and ns3::Ipv4L3Protocol::UpdateDuplicate().

+ Here is the caller graph for this function:

◆ GetIdentification()

uint16_t ns3::Ipv4Header::GetIdentification ( ) const
Returns
the identification field of this packet.

Definition at line 60 of file ipv4-header.cc.

References m_identification, and NS_LOG_FUNCTION.

Referenced by ns3::OpenFlowSwitchNetDevice::BufferFromPacket(), ns3::EpcTftClassifier::Classify(), ns3::dsr::DsrOptionSR::Process(), ns3::Ipv4L3Protocol::ProcessFragment(), and ns3::Ipv4L3Protocol::UpdateDuplicate().

+ Here is the caller graph for this function:

◆ GetInstanceTypeId()

TypeId ns3::Ipv4Header::GetInstanceTypeId ( ) const
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.

Returns
The TypeId associated to the most-derived type of this instance.

Implements ns3::ObjectBase.

Definition at line 329 of file ipv4-header.cc.

References GetTypeId(), and NS_LOG_FUNCTION.

+ Here is the call graph for this function:

◆ GetPayloadSize()

uint16_t ns3::Ipv4Header::GetPayloadSize ( ) const
Returns
the size of the payload in bytes

Definition at line 53 of file ipv4-header.cc.

References m_payloadSize, and NS_LOG_FUNCTION.

Referenced by ns3::EpcTftClassifier::Classify(), and ns3::Ipv4L3Protocol::Receive().

+ Here is the caller graph for this function:

◆ GetProtocol()

◆ GetSerializedSize()

uint32_t ns3::Ipv4Header::GetSerializedSize ( ) const
overridevirtual
Returns
the expected size of the header.

This method is used by Packet::AddHeader to store a header into the byte buffer of a packet. This method should return the number of bytes which are needed to store the full header data by Serialize.

Implements ns3::Header.

Definition at line 373 of file ipv4-header.cc.

References m_headerSize, and NS_LOG_FUNCTION.

Referenced by Deserialize(), ns3::Ipv4L3Protocol::DoFragmentation(), ns3::Rip::DoSendRouteUpdate(), ns3::Ipv4FlowProbe::DropLogger(), ns3::Ipv4FlowProbe::ForwardLogger(), ns3::Ipv4FlowProbe::ForwardUpLogger(), ns3::Icmpv4DestinationUnreachable::GetSerializedSize(), ns3::Icmpv4TimeExceeded::GetSerializedSize(), ns3::Ipv4QueueDiscItem::GetSize(), ns3::Rip::HandleRequests(), ns3::Ping::Receive(), ns3::Ipv4FlowProbe::SendOutgoingLogger(), ns3::Ipv4L3Protocol::SendRealOut(), ns3::Ipv4RawSocketImpl::SendTo(), ns3::Icmpv4DestinationUnreachable::Serialize(), ns3::Icmpv4TimeExceeded::Serialize(), and ns3::Ipv4L3Protocol::UpdateDuplicate().

+ Here is the caller graph for this function:

◆ GetSource()

Ipv4Address ns3::Ipv4Header::GetSource ( ) const
Returns
the source address of this packet

Definition at line 291 of file ipv4-header.cc.

References m_source, and NS_LOG_FUNCTION.

Referenced by ns3::OpenFlowSwitchNetDevice::BufferFromPacket(), ns3::dsr::DsrRouting::CallCancelPacketTimer(), ns3::EpcTftClassifier::Classify(), ns3::IpcsClassifier::Classify(), ns3::Ipv4FlowClassifier::Classify(), ns3::aodv::QueueEntryTest::DoRun(), ns3::UdpSocketImpl::DoSendTo(), ns3::Icmpv4L4Protocol::Forward(), ns3::aodv::RoutingProtocol::Forwarding(), ns3::Ipv4FlowProbe::ForwardLogger(), ns3::Ipv4RawSocketImpl::ForwardUp(), ns3::TcpSocketBase::ForwardUp(), ns3::UdpSocketImpl::ForwardUp(), ns3::Ipv4FlowProbe::ForwardUpLogger(), ns3::Ipv4QueueDiscItem::Hash(), ns3::Ipv4L3Protocol::IpMulticastForward(), ns3::aodv::DuplicatePacketDetection::IsDuplicate(), ns3::dsr::DsrOptionRreq::Process(), ns3::dsr::DsrOptionSR::Process(), ns3::Ipv4L3Protocol::ProcessFragment(), ns3::dsr::DsrRouting::PromiscReceive(), ns3::dsr::DsrRouting::Receive(), ns3::Icmpv4L4Protocol::Receive(), ns3::Ipv4L3Protocol::Receive(), ns3::TcpL4Protocol::Receive(), ns3::UdpL4Protocol::Receive(), ns3::aodv::RoutingProtocol::RouteInput(), ns3::dsdv::RoutingProtocol::RouteInput(), ns3::Ipv4GlobalRouting::RouteInput(), ns3::Ipv4StaticRouting::RouteInput(), ns3::olsr::RoutingProtocol::RouteInput(), ns3::Rip::RouteInput(), ns3::Ipv4ListRouting::RouteOutput(), ns3::Icmpv4L4Protocol::SendDestUnreach(), ns3::Ipv4FlowProbe::SendOutgoingLogger(), ns3::Icmpv4L4Protocol::SendTimeExceededTtl(), ns3::Ipv4RawSocketImpl::SendTo(), ns3::Ipv4L3ClickProtocol::SendWithHeader(), and ns3::Ipv4L3Protocol::UpdateDuplicate().

+ Here is the caller graph for this function:

◆ GetTos()

uint8_t ns3::Ipv4Header::GetTos ( ) const

◆ GetTtl()

◆ GetTypeId()

TypeId ns3::Ipv4Header::GetTypeId ( )
static

Get the type ID.

Returns
the object TypeId

Definition at line 319 of file ipv4-header.cc.

References ns3::TypeId::SetParent().

Referenced by GetInstanceTypeId().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ IsChecksumOk()

bool ns3::Ipv4Header::IsChecksumOk ( ) const
Returns
true if the ipv4 checksum is correct, false otherwise.

If Ipv4Header::EnableChecksums has not been called prior to deserializing this header, this method will always return true.

Definition at line 312 of file ipv4-header.cc.

References m_goodChecksum, and NS_LOG_FUNCTION.

Referenced by ns3::Ipv4L3Protocol::Receive().

+ Here is the caller graph for this function:

◆ IsDontFragment()

bool ns3::Ipv4Header::IsDontFragment ( ) const
Returns
true if this is this packet can be fragmented.

Definition at line 227 of file ipv4-header.cc.

References DONT_FRAGMENT, m_flags, and NS_LOG_FUNCTION.

◆ IsLastFragment()

bool ns3::Ipv4Header::IsLastFragment ( ) const
Returns
true if this is the last fragment of a packet, false otherwise.

Definition at line 206 of file ipv4-header.cc.

References m_flags, MORE_FRAGMENTS, and NS_LOG_FUNCTION.

Referenced by ns3::EpcTftClassifier::Classify(), ns3::Ipv4L3Protocol::DoFragmentation(), ns3::Ipv4FlowProbe::ForwardLogger(), ns3::Ipv4L3Protocol::LocalDeliver(), ns3::Ipv4L3Protocol::ProcessFragment(), and ns3::Ipv4L3Protocol::UpdateDuplicate().

+ Here is the caller graph for this function:

◆ Print()

void ns3::Ipv4Header::Print ( std::ostream & os) const
overridevirtual
Parameters
osoutput stream This method is used by Packet::Print to print the content of a header as ascii data to a c++ output stream. Although the header is free to format its output as it wishes, it is recommended to follow a few rules to integrate with the packet pretty printer: start with flags, small field values located between a pair of parens. Values should be separated by whitespace. Follow the parens with the important fields, separated by whitespace. i.e.: (field1 val1 field2 val2 field3 val3) field4 val4 field5 val5

Implements ns3::Header.

Definition at line 336 of file ipv4-header.cc.

References DONT_FRAGMENT, DscpTypeToString(), EcnTypeToString(), GetDscp(), GetEcn(), m_destination, m_flags, m_fragmentOffset, m_identification, m_payloadSize, m_protocol, m_source, m_tos, m_ttl, MORE_FRAGMENTS, and NS_LOG_FUNCTION.

Referenced by Ipv4HeaderTest::DoRun(), ns3::Icmpv4DestinationUnreachable::Print(), and ns3::Icmpv4TimeExceeded::Print().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ Serialize()

void ns3::Ipv4Header::Serialize ( Buffer::Iterator start) const
overridevirtual
Parameters
startan iterator which points to where the header should be written.

This method is used by Packet::AddHeader to store a header into the byte buffer of a packet. The data written is expected to match bit-for-bit the representation of this header in a real network.

Implements ns3::Header.

Definition at line 381 of file ipv4-header.cc.

References ns3::Buffer::Iterator::CalculateIpChecksum(), DONT_FRAGMENT, ns3::Ipv4Address::Get(), m_calcChecksum, m_destination, m_flags, m_fragmentOffset, m_identification, m_payloadSize, m_protocol, m_source, m_tos, m_ttl, MORE_FRAGMENTS, ns3::Buffer::Iterator::Next(), NS_LOG_FUNCTION, NS_LOG_LOGIC, ns3::Buffer::Iterator::WriteHtonU16(), ns3::Buffer::Iterator::WriteHtonU32(), ns3::Buffer::Iterator::WriteU16(), and ns3::Buffer::Iterator::WriteU8().

Referenced by ns3::Icmpv4DestinationUnreachable::Serialize(), and ns3::Icmpv4TimeExceeded::Serialize().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ SetDestination()

void ns3::Ipv4Header::SetDestination ( Ipv4Address destination)
Parameters
destinationthe destination of this packet.

Definition at line 298 of file ipv4-header.cc.

References m_destination, and NS_LOG_FUNCTION.

Referenced by EpcTftClassifierTestCase::EpcTftClassifierTestCase(), ns3::Ipv4L3ClickProtocol::BuildHeader(), ns3::Ipv4L3Protocol::BuildHeader(), FqCobaltQueueDiscDeficit::DoRun(), FqCobaltQueueDiscEcnMarking::DoRun(), FqCobaltQueueDiscIPFlowsSeparationAndPacketLimit::DoRun(), FqCobaltQueueDiscL4sMode::DoRun(), FqCobaltQueueDiscSetLinearProbing::DoRun(), FqCobaltQueueDiscTCPFlowsSeparation::DoRun(), FqCobaltQueueDiscUDPFlowsSeparation::DoRun(), FqCoDelQueueDiscDeficit::DoRun(), FqCoDelQueueDiscECNMarking::DoRun(), FqCoDelQueueDiscIPFlowsSeparationAndPacketLimit::DoRun(), FqCoDelQueueDiscL4sMode::DoRun(), FqCoDelQueueDiscSetLinearProbing::DoRun(), FqCoDelQueueDiscTCPFlowsSeparation::DoRun(), FqCoDelQueueDiscUDPFlowsSeparation::DoRun(), FqPieQueueDiscDeficit::DoRun(), FqPieQueueDiscIPFlowsSeparationAndPacketLimit::DoRun(), FqPieQueueDiscL4sMode::DoRun(), FqPieQueueDiscSetLinearProbing::DoRun(), FqPieQueueDiscTCPFlowsSeparation::DoRun(), FqPieQueueDiscUDPFlowsSeparation::DoRun(), ns3::aodv::AodvRqueueTest::DoRun(), ns3::aodv::QueueEntryTest::DoRun(), Ipv4RawSocketImplTest::DoSendData_IpHdr(), Ipv4HeaderTest::DoSendData_IpHdr_Dscp(), ns3::UdpSocketImpl::DoSendTo(), ns3::AnimationInterface::RecursiveIpv4RoutePathSearch(), ns3::Icmpv4L4Protocol::SendMessage(), ns3::TcpL4Protocol::SendPacketV4(), ns3::Ipv4RawSocketImpl::SendTo(), ns3::TcpSocketBase::SetupEndpoint(), and ns3::AnimationInterface::TrackIpv4RoutePaths().

+ Here is the caller graph for this function:

◆ SetDontFragment()

void ns3::Ipv4Header::SetDontFragment ( )

Don't fragment this packet: if you need to anyway, drop it.

Definition at line 213 of file ipv4-header.cc.

References DONT_FRAGMENT, m_flags, and NS_LOG_FUNCTION.

Referenced by ns3::Ipv4L3ClickProtocol::BuildHeader(), and ns3::Ipv4L3Protocol::BuildHeader().

+ Here is the caller graph for this function:

◆ SetDscp()

void ns3::Ipv4Header::SetDscp ( DscpType dscp)

Set DSCP Field.

Parameters
dscpDSCP value

Definition at line 81 of file ipv4-header.cc.

References m_tos, and NS_LOG_FUNCTION.

Referenced by PfifoFastQueueDiscOverflow::AddPacket(), Ipv4HeaderTest::DoSendData_IpHdr_Dscp(), and PfifoFastQueueDiscDscpPrioritization::TestDscpValue().

+ Here is the caller graph for this function:

◆ SetEcn()

void ns3::Ipv4Header::SetEcn ( EcnType ecn)

Set ECN Field.

Parameters
ecnECN Type

Definition at line 89 of file ipv4-header.cc.

References m_tos, and NS_LOG_FUNCTION.

Referenced by FqCobaltQueueDiscEcnMarking::DoRun(), FqCobaltQueueDiscL4sMode::DoRun(), FqCoDelQueueDiscECNMarking::DoRun(), FqCoDelQueueDiscL4sMode::DoRun(), FqPieQueueDiscL4sMode::DoRun(), Ipv4HeaderTest::DoSendData_IpHdr_Dscp(), and ns3::Ipv4QueueDiscItem::Mark().

+ Here is the caller graph for this function:

◆ SetFragmentOffset()

void ns3::Ipv4Header::SetFragmentOffset ( uint16_t offsetBytes)

The offset is measured in bytes for the packet start.

Mind that IPv4 "fragment offset" field is 13 bits long and is measured in 8-bytes words. Hence, the function does enforce that the offset is a multiple of 8.

Parameters
offsetBytesthe ipv4 fragment offset measured in bytes from the start.

Definition at line 234 of file ipv4-header.cc.

References m_fragmentOffset, NS_ABORT_MSG_IF, and NS_LOG_FUNCTION.

Referenced by ns3::Ipv4L3Protocol::DoFragmentation(), and ns3::Ipv4L3Protocol::LocalDeliver().

+ Here is the caller graph for this function:

◆ SetIdentification()

void ns3::Ipv4Header::SetIdentification ( uint16_t identification)
Parameters
identificationthe Identification field of IPv4 packets.

By default, set to zero.

Definition at line 67 of file ipv4-header.cc.

References m_identification, and NS_LOG_FUNCTION.

Referenced by ns3::Ipv4L3ClickProtocol::BuildHeader(), and ns3::Ipv4L3Protocol::BuildHeader().

+ Here is the caller graph for this function:

◆ SetLastFragment()

void ns3::Ipv4Header::SetLastFragment ( )

This packet is the last packet of a fragmented ipv4 packet.

Definition at line 199 of file ipv4-header.cc.

References m_flags, and NS_LOG_FUNCTION.

Referenced by ns3::Ipv4L3Protocol::DoFragmentation().

+ Here is the caller graph for this function:

◆ SetMayFragment()

void ns3::Ipv4Header::SetMayFragment ( )

If you need to fragment this packet, you can do it.

Definition at line 220 of file ipv4-header.cc.

References m_flags, and NS_LOG_FUNCTION.

Referenced by ns3::Ipv4L3ClickProtocol::BuildHeader(), and ns3::Ipv4L3Protocol::BuildHeader().

+ Here is the caller graph for this function:

◆ SetMoreFragments()

void ns3::Ipv4Header::SetMoreFragments ( )

This packet is not the last packet of a fragmented ipv4 packet.

Definition at line 192 of file ipv4-header.cc.

References m_flags, MORE_FRAGMENTS, and NS_LOG_FUNCTION.

Referenced by ns3::Ipv4L3Protocol::DoFragmentation().

+ Here is the caller graph for this function:

◆ SetPayloadSize()

void ns3::Ipv4Header::SetPayloadSize ( uint16_t size)
Parameters
sizethe size of the payload in bytes

Definition at line 46 of file ipv4-header.cc.

References m_payloadSize, and NS_LOG_FUNCTION.

Referenced by EpcTftClassifierTestCase::EpcTftClassifierTestCase(), PfifoFastQueueDiscOverflow::AddPacket(), ns3::Ipv4L3ClickProtocol::BuildHeader(), ns3::Ipv4L3Protocol::BuildHeader(), ns3::Ipv4L3Protocol::DoFragmentation(), FqCobaltQueueDiscDeficit::DoRun(), FqCobaltQueueDiscEcnMarking::DoRun(), FqCobaltQueueDiscIPFlowsSeparationAndPacketLimit::DoRun(), FqCobaltQueueDiscL4sMode::DoRun(), FqCobaltQueueDiscSetLinearProbing::DoRun(), FqCobaltQueueDiscTCPFlowsSeparation::DoRun(), FqCobaltQueueDiscUDPFlowsSeparation::DoRun(), FqCoDelQueueDiscDeficit::DoRun(), FqCoDelQueueDiscECNMarking::DoRun(), FqCoDelQueueDiscIPFlowsSeparationAndPacketLimit::DoRun(), FqCoDelQueueDiscL4sMode::DoRun(), FqCoDelQueueDiscSetLinearProbing::DoRun(), FqCoDelQueueDiscTCPFlowsSeparation::DoRun(), FqCoDelQueueDiscUDPFlowsSeparation::DoRun(), FqPieQueueDiscDeficit::DoRun(), FqPieQueueDiscIPFlowsSeparationAndPacketLimit::DoRun(), FqPieQueueDiscL4sMode::DoRun(), FqPieQueueDiscSetLinearProbing::DoRun(), FqPieQueueDiscTCPFlowsSeparation::DoRun(), FqPieQueueDiscUDPFlowsSeparation::DoRun(), Ipv4RawSocketImplTest::DoSendData_IpHdr(), Ipv4HeaderTest::DoSendData_IpHdr_Dscp(), ns3::Ipv4L3Protocol::LocalDeliver(), PfifoFastQueueDiscDscpPrioritization::TestDscpValue(), and PfifoFastQueueDiscTosPrioritization::TestTosValue().

+ Here is the caller graph for this function:

◆ SetProtocol()

void ns3::Ipv4Header::SetProtocol ( uint8_t num)
Parameters
numthe ipv4 protocol field

Definition at line 277 of file ipv4-header.cc.

References m_protocol, and NS_LOG_FUNCTION.

Referenced by EpcTftClassifierTestCase::EpcTftClassifierTestCase(), PfifoFastQueueDiscOverflow::AddPacket(), ns3::Ipv4L3ClickProtocol::BuildHeader(), ns3::Ipv4L3Protocol::BuildHeader(), FqCobaltQueueDiscDeficit::DoRun(), FqCobaltQueueDiscEcnMarking::DoRun(), FqCobaltQueueDiscIPFlowsSeparationAndPacketLimit::DoRun(), FqCobaltQueueDiscL4sMode::DoRun(), FqCobaltQueueDiscSetLinearProbing::DoRun(), FqCobaltQueueDiscTCPFlowsSeparation::DoRun(), FqCobaltQueueDiscUDPFlowsSeparation::DoRun(), FqCoDelQueueDiscDeficit::DoRun(), FqCoDelQueueDiscECNMarking::DoRun(), FqCoDelQueueDiscIPFlowsSeparationAndPacketLimit::DoRun(), FqCoDelQueueDiscL4sMode::DoRun(), FqCoDelQueueDiscSetLinearProbing::DoRun(), FqCoDelQueueDiscTCPFlowsSeparation::DoRun(), FqCoDelQueueDiscUDPFlowsSeparation::DoRun(), FqPieQueueDiscDeficit::DoRun(), FqPieQueueDiscIPFlowsSeparationAndPacketLimit::DoRun(), FqPieQueueDiscL4sMode::DoRun(), FqPieQueueDiscSetLinearProbing::DoRun(), FqPieQueueDiscTCPFlowsSeparation::DoRun(), FqPieQueueDiscUDPFlowsSeparation::DoRun(), Ipv4RawSocketImplTest::DoSendData_IpHdr(), Ipv4HeaderTest::DoSendData_IpHdr_Dscp(), ns3::UdpSocketImpl::DoSendTo(), ns3::Icmpv4L4Protocol::SendMessage(), ns3::TcpL4Protocol::SendPacketV4(), ns3::Ipv4RawSocketImpl::SendTo(), PfifoFastQueueDiscDscpPrioritization::TestDscpValue(), and PfifoFastQueueDiscTosPrioritization::TestTosValue().

+ Here is the caller graph for this function:

◆ SetSource()

void ns3::Ipv4Header::SetSource ( Ipv4Address source)
Parameters
sourcethe source of this packet

Definition at line 284 of file ipv4-header.cc.

References m_source, and NS_LOG_FUNCTION.

Referenced by EpcTftClassifierTestCase::EpcTftClassifierTestCase(), ns3::Ipv4L3ClickProtocol::BuildHeader(), ns3::Ipv4L3Protocol::BuildHeader(), FqCobaltQueueDiscDeficit::DoRun(), FqCobaltQueueDiscEcnMarking::DoRun(), FqCobaltQueueDiscIPFlowsSeparationAndPacketLimit::DoRun(), FqCobaltQueueDiscL4sMode::DoRun(), FqCobaltQueueDiscSetLinearProbing::DoRun(), FqCobaltQueueDiscTCPFlowsSeparation::DoRun(), FqCobaltQueueDiscUDPFlowsSeparation::DoRun(), FqCoDelQueueDiscDeficit::DoRun(), FqCoDelQueueDiscECNMarking::DoRun(), FqCoDelQueueDiscIPFlowsSeparationAndPacketLimit::DoRun(), FqCoDelQueueDiscL4sMode::DoRun(), FqCoDelQueueDiscSetLinearProbing::DoRun(), FqCoDelQueueDiscTCPFlowsSeparation::DoRun(), FqCoDelQueueDiscUDPFlowsSeparation::DoRun(), FqPieQueueDiscDeficit::DoRun(), FqPieQueueDiscIPFlowsSeparationAndPacketLimit::DoRun(), FqPieQueueDiscL4sMode::DoRun(), FqPieQueueDiscSetLinearProbing::DoRun(), FqPieQueueDiscTCPFlowsSeparation::DoRun(), FqPieQueueDiscUDPFlowsSeparation::DoRun(), ns3::aodv::AodvRqueueTest::DoRun(), ns3::aodv::QueueEntryTest::DoRun(), Ipv4RawSocketImplTest::DoSendData_IpHdr(), Ipv4HeaderTest::DoSendData_IpHdr_Dscp(), ns3::UdpSocketImpl::DoSendTo(), ns3::aodv::RoutingProtocol::SendPacketFromQueue(), ns3::dsdv::RoutingProtocol::SendPacketFromQueue(), and ns3::TcpL4Protocol::SendPacketV4().

+ Here is the caller graph for this function:

◆ SetTos()

void ns3::Ipv4Header::SetTos ( uint8_t tos)
Parameters
tosthe 8 bits of Ipv4 TOS.

Definition at line 74 of file ipv4-header.cc.

References m_tos, and NS_LOG_FUNCTION.

Referenced by EpcTftClassifierTestCase::EpcTftClassifierTestCase(), ns3::Ipv4L3Protocol::BuildHeader(), and PfifoFastQueueDiscTosPrioritization::TestTosValue().

+ Here is the caller graph for this function:

◆ SetTtl()

void ns3::Ipv4Header::SetTtl ( uint8_t ttl)
Parameters
ttlthe ipv4 TTL

Definition at line 256 of file ipv4-header.cc.

References m_ttl, and NS_LOG_FUNCTION.

Referenced by ns3::Ipv4L3ClickProtocol::BuildHeader(), ns3::Ipv4L3Protocol::BuildHeader(), Ipv4RawSocketImplTest::DoSendData_IpHdr(), Ipv4HeaderTest::DoSendData_IpHdr_Dscp(), ns3::Ipv4L3Protocol::IpForward(), ns3::Ipv4L3Protocol::IpMulticastForward(), ns3::aodv::RoutingProtocol::SendPacketFromQueue(), and ns3::dsdv::RoutingProtocol::SendPacketFromQueue().

+ Here is the caller graph for this function:

Member Data Documentation

◆ m_calcChecksum

bool ns3::Ipv4Header::m_calcChecksum
private

true if the checksum must be calculated

Definition at line 241 of file ipv4-header.h.

Referenced by Deserialize(), EnableChecksum(), and Serialize().

◆ m_checksum

uint16_t ns3::Ipv4Header::m_checksum
private

checksum

Definition at line 252 of file ipv4-header.h.

Referenced by Deserialize().

◆ m_destination

Ipv4Address ns3::Ipv4Header::m_destination
private

destination address

Definition at line 251 of file ipv4-header.h.

Referenced by Deserialize(), GetDestination(), Print(), Serialize(), and SetDestination().

◆ m_flags

uint32_t ns3::Ipv4Header::m_flags
private

◆ m_fragmentOffset

uint16_t ns3::Ipv4Header::m_fragmentOffset
private

Fragment offset.

Definition at line 249 of file ipv4-header.h.

Referenced by Deserialize(), GetFragmentOffset(), Print(), Serialize(), and SetFragmentOffset().

◆ m_goodChecksum

bool ns3::Ipv4Header::m_goodChecksum
private

true if checksum is correct

Definition at line 253 of file ipv4-header.h.

Referenced by Deserialize(), and IsChecksumOk().

◆ m_headerSize

uint16_t ns3::Ipv4Header::m_headerSize
private

IP header size.

Definition at line 254 of file ipv4-header.h.

Referenced by Deserialize(), and GetSerializedSize().

◆ m_identification

uint16_t ns3::Ipv4Header::m_identification
private

identification

Definition at line 244 of file ipv4-header.h.

Referenced by Deserialize(), GetIdentification(), Print(), Serialize(), and SetIdentification().

◆ m_payloadSize

uint16_t ns3::Ipv4Header::m_payloadSize
private

payload size

Definition at line 243 of file ipv4-header.h.

Referenced by Deserialize(), GetFragmentOffset(), GetPayloadSize(), Print(), Serialize(), and SetPayloadSize().

◆ m_protocol

uint32_t ns3::Ipv4Header::m_protocol
private

Protocol.

Definition at line 247 of file ipv4-header.h.

Referenced by Deserialize(), GetProtocol(), Print(), Serialize(), and SetProtocol().

◆ m_source

Ipv4Address ns3::Ipv4Header::m_source
private

source address

Definition at line 250 of file ipv4-header.h.

Referenced by Deserialize(), GetSource(), Print(), Serialize(), and SetSource().

◆ m_tos

uint32_t ns3::Ipv4Header::m_tos
private

TOS, also used as DSCP + ECN value.

Definition at line 245 of file ipv4-header.h.

Referenced by Deserialize(), GetDscp(), GetEcn(), GetTos(), Print(), Serialize(), SetDscp(), SetEcn(), and SetTos().

◆ m_ttl

uint32_t ns3::Ipv4Header::m_ttl
private

TTL.

Definition at line 246 of file ipv4-header.h.

Referenced by Deserialize(), GetTtl(), Print(), Serialize(), and SetTtl().


The documentation for this class was generated from the following files: