A Discrete-Event Network Simulator
API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
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, CS1 = 0x20, AF11 = 0x28, AF12 = 0x30,
  AF13 = 0x38, CS2 = 0x40, AF21 = 0x48, AF22 = 0x50,
  AF23 = 0x58, CS3 = 0x60, AF31 = 0x68, AF32 = 0x70,
  AF33 = 0x78, CS4 = 0x80, AF41 = 0x88, AF42 = 0x90,
  AF43 = 0x98, CS5 = 0xA0, EF = 0xB8, CS6 = 0xC0,
  CS7 = 0xE0
}
 DiffServ Code Points Code Points defined in Assured Forwarding (AF) RFC 2597 Expedited Forwarding (EF) RFC 2598 Default and Class Selector (CS) RFC 2474. More...
enum  EcnType { NotECT = 0x00, ECT1 = 0x01, ECT0 = 0x02, CE = 0x03 }
 ECN Type defined in RFC 3168. More...

Public Member Functions

 Ipv4Header ()
 Construct a null IPv4 header.
virtual uint32_t Deserialize (Buffer::Iterator start)
std::string DscpTypeToString (DscpType dscp) const
std::string EcnTypeToString (EcnType ecn) const
void EnableChecksum (void)
 Enable checksum calculation for this header.
Ipv4Address GetDestination (void) const
DscpType GetDscp (void) const
EcnType GetEcn (void) const
uint16_t GetFragmentOffset (void) const
uint16_t GetIdentification (void) const
virtual TypeId GetInstanceTypeId (void) const
uint16_t GetPayloadSize (void) const
uint8_t GetProtocol (void) const
virtual uint32_t GetSerializedSize (void) const
Ipv4Address GetSource (void) const
uint8_t GetTos (void) const
uint8_t GetTtl (void) const
bool IsChecksumOk (void) const
bool IsDontFragment (void) const
bool IsLastFragment (void) const
virtual void Print (std::ostream &os) const
virtual void Serialize (Buffer::Iterator start) const
void SetDestination (Ipv4Address destination)
void SetDontFragment (void)
void SetDscp (DscpType dscp)
 Set DSCP Field.
void SetEcn (EcnType ecn)
 Set ECN Field.
void SetFragmentOffset (uint16_t offsetBytes)
void SetIdentification (uint16_t identification)
void SetLastFragment (void)
void SetMayFragment (void)
void SetMoreFragments (void)
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
virtual ~Header ()

Static Public Member Functions

static TypeId GetTypeId (void)
 This method returns the TypeId associated to ns3::Ipv4Header.

Private Types

enum  FlagsE { DONT_FRAGMENT = (1<<0), MORE_FRAGMENTS = (1<<1) }

Private Attributes

bool m_calcChecksum
uint16_t m_checksum
Ipv4Address m_destination
uint32_t m_flags: 3
uint16_t m_fragmentOffset
bool m_goodChecksum
uint16_t m_headerSize
uint16_t m_identification
uint16_t m_payloadSize
uint32_t m_protocol: 8
Ipv4Address m_source
uint32_t m_tos: 8
uint32_t m_ttl: 8

Additional Inherited Members

- Protected Member Functions inherited from ns3::ObjectBase
void ConstructSelf (const AttributeConstructionList &attributes)
virtual void NotifyConstructionCompleted (void)

Detailed Description

Packet header for IPv4.

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

Member Enumeration Documentation

DiffServ Code Points Code Points defined in Assured Forwarding (AF) RFC 2597 Expedited Forwarding (EF) RFC 2598 Default and Class Selector (CS) RFC 2474.

Enumerator:
DscpDefault 
CS1 
AF11 
AF12 
AF13 
CS2 
AF21 
AF22 
AF23 
CS3 
AF31 
AF32 
AF33 
CS4 
AF41 
AF42 
AF43 
CS5 
EF 
CS6 
CS7 

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

ECN Type defined in RFC 3168.

Enumerator:
NotECT 
ECT1 
ECT0 
CE 

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

Enumerator:
DONT_FRAGMENT 
MORE_FRAGMENTS 

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

Constructor & Destructor Documentation

ns3::Ipv4Header::Ipv4Header ( )

Construct a null IPv4 header.

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

Member Function Documentation

uint32_t ns3::Ipv4Header::Deserialize ( Buffer::Iterator  start)
virtual
Parameters
startan iterator which points to where the header should written.
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.

Implements ns3::Header.

Definition at line 387 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_ASSERT, NS_LOG_LOGIC, ns3::Buffer::Iterator::Prev(), ns3::Buffer::Iterator::ReadNtohU16(), ns3::Buffer::Iterator::ReadNtohU32(), ns3::Buffer::Iterator::ReadU16(), ns3::Buffer::Iterator::ReadU8(), ns3::Ipv4Address::Set(), and visualizer.core::start().

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:

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

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

References AF11, AF12, AF13, AF21, AF22, AF23, AF31, AF32, AF33, AF41, AF42, AF43, CS1, CS2, CS3, CS4, CS5, CS6, CS7, DscpDefault, and EF.

Referenced by Print().

+ Here is the caller graph for this function:

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

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

References CE, ECT0, ECT1, and NotECT.

Referenced by Print().

+ Here is the caller graph for this function:

void ns3::Ipv4Header::EnableChecksum ( void  )

Enable checksum calculation for this header.

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

References m_calcChecksum.

Referenced by ns3::Ipv4L3Protocol::BuildHeader(), ns3::Ipv4L3Protocol::DoFragmentation(), ns3::NscTcpL4Protocol::Receive(), and ns3::Ipv4L3Protocol::Receive().

+ Here is the caller graph for this function:

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

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

References m_destination.

Referenced by ns3::dsr::DsrRouting::CallCancelPacketTimer(), ns3::IpcsClassifier::Classify(), ns3::Ipv4FlowClassifier::Classify(), ns3::EpcTftClassifier::Classify(), ns3::aodv::RoutingProtocol::DeferredRouteOutput(), ns3::TcpSocketBase::DoForwardUp(), 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::Ipv4RawSocketImpl::ForwardUp(), ns3::Ipv4L3Protocol::IpMulticastForward(), ns3::aodv::RequestQueue::IsEqual(), ns3::dsdv::PacketQueue::IsEqual(), ns3::Ipv4L3Protocol::LocalDeliver(), ns3::dsdv::RoutingProtocol::LoopbackRoute(), ns3::aodv::RoutingProtocol::LoopbackRoute(), ns3::aodv::QueueEntry::operator==(), ns3::dsdv::QueueEntry::operator==(), ns3::dsr::DsrOptionSR::Process(), ns3::Ipv4L3Protocol::ProcessFragment(), ns3::dsr::DsrRouting::PromiscReceive(), ns3::Icmpv4L4Protocol::Receive(), ns3::NscTcpL4Protocol::Receive(), ns3::UdpL4Protocol::Receive(), ns3::TcpL4Protocol::Receive(), ns3::dsr::DsrRouting::Receive(), ns3::EpcSgwPgwApplication::RecvFromTunDevice(), ns3::aodv::RoutingProtocol::RouteInput(), ns3::dsdv::RoutingProtocol::RouteInput(), ns3::Ipv4StaticRouting::RouteInput(), ns3::Ipv4ListRouting::RouteInput(), ns3::Ipv4GlobalRouting::RouteInput(), ns3::Ipv4NixVectorRouting::RouteInput(), ns3::olsr::RoutingProtocol::RouteInput(), ns3::aodv::RoutingProtocol::RouteOutput(), ns3::dsdv::RoutingProtocol::RouteOutput(), ns3::Ipv4StaticRouting::RouteOutput(), ns3::Ipv4ListRouting::RouteOutput(), ns3::Ipv4GlobalRouting::RouteOutput(), ns3::Ipv4NixVectorRouting::RouteOutput(), ns3::olsr::RoutingProtocol::RouteOutput(), ns3::dsdv::RoutingProtocol::Send(), ns3::Ipv4L3Protocol::SendRealOut(), and ns3::Ipv4RawSocketImpl::SendTo().

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

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

References m_tos.

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

+ Here is the caller graph for this function:

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

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

References m_tos.

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

+ Here is the caller graph for this function:

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

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

References m_fragmentOffset, m_payloadSize, and NS_LOG_WARN.

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

+ Here is the caller graph for this function:

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

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

References m_identification.

Referenced by ns3::Ipv4FlowClassifier::Classify(), and ns3::Ipv4L3Protocol::ProcessFragment().

+ Here is the caller graph for this function:

TypeId ns3::Ipv4Header::GetInstanceTypeId ( void  ) const
virtual
Returns
the TypeId associated to the most-derived type of this instance.

This method is typically implemented by ns3::Object::GetInstanceTypeId but some classes which derive from ns3::ObjectBase directly have to implement it themselves.

Implements ns3::ObjectBase.

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

References GetTypeId().

+ Here is the call graph for this function:

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

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

References m_payloadSize.

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

+ Here is the caller graph for this function:

uint32_t ns3::Ipv4Header::GetSerializedSize ( void  ) const
virtual
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 341 of file ipv4-header.cc.

References m_headerSize.

Referenced by Deserialize(), ns3::Ipv4L3Protocol::DoFragmentation(), ns3::Ipv4FlowProbe::DropLogger(), ns3::Ipv4FlowProbe::ForwardLogger(), ns3::Ipv4FlowProbe::ForwardUpLogger(), ns3::Icmpv4DestinationUnreachable::GetSerializedSize(), ns3::Icmpv4TimeExceeded::GetSerializedSize(), ns3::Ipv4FlowProbe::SendOutgoingLogger(), ns3::Icmpv4DestinationUnreachable::Serialize(), and ns3::Icmpv4TimeExceeded::Serialize().

+ Here is the caller graph for this function:

uint8_t ns3::Ipv4Header::GetTos ( void  ) const
Returns
the TOS field of this packet.

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

References m_tos.

Referenced by ns3::EpcTftClassifier::Classify().

+ Here is the caller graph for this function:

TypeId ns3::Ipv4Header::GetTypeId ( void  )
static

This method returns the TypeId associated to ns3::Ipv4Header.

No Attributes defined for this type.
No TraceSources defined for this type.

Reimplemented from ns3::Header.

Definition at line 288 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:

bool ns3::Ipv4Header::IsChecksumOk ( void  ) 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 282 of file ipv4-header.cc.

References m_goodChecksum.

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

+ Here is the caller graph for this function:

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

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

References DONT_FRAGMENT, and m_flags.

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

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

References m_flags, and MORE_FRAGMENTS.

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

+ Here is the caller graph for this function:

void ns3::Ipv4Header::Print ( std::ostream &  os) const
virtual
Parameters
osoutput stream This method is used by Packet::Print to print the content of a trailer as ascii data to a c++ output stream. Although the trailer 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 302 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, and MORE_FRAGMENTS.

Referenced by ns3::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:

void ns3::Ipv4Header::Serialize ( Buffer::Iterator  start) const
virtual
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 348 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_LOGIC, visualizer.core::start(), 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:

void ns3::Ipv4Header::SetDontFragment ( void  )

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

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

References DONT_FRAGMENT, and m_flags.

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

+ Here is the caller graph for this function:

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

Set DSCP Field.

Parameters
dscpDSCP value

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

References m_tos.

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

Set ECN Field.

Parameters
ecnECN Type

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

References m_tos.

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 219 of file ipv4-header.cc.

References m_fragmentOffset, and NS_ABORT_MSG_IF.

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

+ Here is the caller graph for this function:

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

By default, set to zero.

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

References m_identification.

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

+ Here is the caller graph for this function:

void ns3::Ipv4Header::SetLastFragment ( void  )

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

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

References m_flags, and MORE_FRAGMENTS.

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

+ Here is the caller graph for this function:

void ns3::Ipv4Header::SetMayFragment ( void  )

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

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

References DONT_FRAGMENT, and m_flags.

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

+ Here is the caller graph for this function:

void ns3::Ipv4Header::SetMoreFragments ( void  )

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

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

References m_flags, and MORE_FRAGMENTS.

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

+ Here is the caller graph for this function:

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

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

References m_payloadSize.

Referenced by ns3::Ipv4L3Protocol::BuildHeader(), ns3::Ipv4L3Protocol::DoFragmentation(), and ns3::NscTcpL4Protocol::Receive().

+ Here is the caller graph for this function:

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

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

References m_tos.

Referenced by ns3::EpcTftClassifierTestCase::EpcTftClassifierTestCase().

+ Here is the caller graph for this function:

void ns3::Ipv4Header::SetTtl ( uint8_t  ttl)

Member Data Documentation

bool ns3::Ipv4Header::m_calcChecksum
private

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

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

uint16_t ns3::Ipv4Header::m_checksum
private

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

Referenced by Deserialize().

Ipv4Address ns3::Ipv4Header::m_destination
private

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

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

uint32_t ns3::Ipv4Header::m_flags
private
uint16_t ns3::Ipv4Header::m_fragmentOffset
private

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

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

bool ns3::Ipv4Header::m_goodChecksum
private

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

Referenced by Deserialize(), and IsChecksumOk().

uint16_t ns3::Ipv4Header::m_headerSize
private

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

Referenced by Deserialize(), and GetSerializedSize().

uint16_t ns3::Ipv4Header::m_identification
private

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

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

uint16_t ns3::Ipv4Header::m_payloadSize
private
uint32_t ns3::Ipv4Header::m_protocol
private

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

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

Ipv4Address ns3::Ipv4Header::m_source
private

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

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

uint32_t ns3::Ipv4Header::m_tos
private

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

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

uint32_t ns3::Ipv4Header::m_ttl
private

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

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


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