A Discrete-Event Network Simulator
API
ns3::Ipv4L3Protocol Class Reference

Implement the IPv4 layer. More...

#include "ipv4-l3-protocol.h"

+ Inheritance diagram for ns3::Ipv4L3Protocol:
+ Collaboration diagram for ns3::Ipv4L3Protocol:

Classes

class  Fragments
 A Set of Fragment belonging to the same packet (src, dst, identification and proto) More...
 

Public Types

enum  DropReason {
  DROP_TTL_EXPIRED = 1, DROP_NO_ROUTE, DROP_BAD_CHECKSUM, DROP_INTERFACE_DOWN,
  DROP_ROUTE_ERROR, DROP_FRAGMENT_TIMEOUT, DROP_DUPLICATE
}
 Reason why a packet has been dropped. More...
 
typedef void(* DropTracedCallback) (const Ipv4Header &header, Ptr< const Packet > packet, DropReason reason, Ptr< Ipv4 > ipv4, uint32_t interface)
 TracedCallback signature for packet drop events. More...
 
typedef void(* SentTracedCallback) (const Ipv4Header &header, Ptr< const Packet > packet, uint32_t interface)
 TracedCallback signature for packet send, forward, or local deliver events. More...
 
typedef void(* TxRxTracedCallback) (Ptr< const Packet > packet, Ptr< Ipv4 > ipv4, uint32_t interface)
 TracedCallback signature for packet transmission or reception events. More...
 

Public Member Functions

 Ipv4L3Protocol ()
 
virtual ~Ipv4L3Protocol ()
 
bool AddAddress (uint32_t i, Ipv4InterfaceAddress address)
 
uint32_t AddInterface (Ptr< NetDevice > device)
 
Ptr< SocketCreateRawSocket (void)
 Creates a raw socket. More...
 
void DeleteRawSocket (Ptr< Socket > socket)
 Deletes a particular raw socket. More...
 
Ipv4InterfaceAddress GetAddress (uint32_t interfaceIndex, uint32_t addressIndex) const
 Because addresses can be removed, the addressIndex is not guaranteed to be static across calls to this method. More...
 
Ptr< Ipv4InterfaceGetInterface (uint32_t i) const
 Get an interface. More...
 
int32_t GetInterfaceForAddress (Ipv4Address addr) const
 Return the interface number of the interface that has been assigned the specified IP address. More...
 
int32_t GetInterfaceForDevice (Ptr< const NetDevice > device) const
 
int32_t GetInterfaceForPrefix (Ipv4Address addr, Ipv4Mask mask) const
 Return the interface number of first interface found that has an Ipv4 address within the prefix specified by the input address and mask parameters. More...
 
uint16_t GetMetric (uint32_t i) const
 
uint16_t GetMtu (uint32_t i) const
 
uint32_t GetNAddresses (uint32_t interface) const
 
Ptr< NetDeviceGetNetDevice (uint32_t i)
 
uint32_t GetNInterfaces (void) const
 
virtual Ptr< IpL4ProtocolGetProtocol (int protocolNumber) const
 
virtual Ptr< IpL4ProtocolGetProtocol (int protocolNumber, int32_t interfaceIndex) const
 Get L4 protocol by protocol number for the specified interface. More...
 
Ptr< Ipv4RoutingProtocolGetRoutingProtocol (void) const
 Get the routing protocol to be used by this Ipv4 stack. More...
 
virtual void Insert (Ptr< IpL4Protocol > protocol)
 
virtual void Insert (Ptr< IpL4Protocol > protocol, uint32_t interfaceIndex)
 Add a L4 protocol to a specific interface. More...
 
bool IsDestinationAddress (Ipv4Address address, uint32_t iif) const
 Determine whether address and interface corresponding to received packet can be accepted for local delivery. More...
 
bool IsForwarding (uint32_t i) const
 
bool IsUnicast (Ipv4Address ad) const
 Check if an IPv4 address is unicast according to the node. More...
 
bool IsUp (uint32_t i) const
 
void Receive (Ptr< NetDevice > device, Ptr< const Packet > p, uint16_t protocol, const Address &from, const Address &to, NetDevice::PacketType packetType)
 Lower layer calls this method after calling L3Demux::Lookup The ARP subclass needs to know from which NetDevice this packet is coming to: More...
 
virtual void Remove (Ptr< IpL4Protocol > protocol)
 
virtual void Remove (Ptr< IpL4Protocol > protocol, uint32_t interfaceIndex)
 Remove a L4 protocol from a specific interface. More...
 
bool RemoveAddress (uint32_t interfaceIndex, uint32_t addressIndex)
 Remove the address at addressIndex on named interface. More...
 
bool RemoveAddress (uint32_t interface, Ipv4Address address)
 Remove the given address on named Ipv4 interface. More...
 
Ipv4Address SelectSourceAddress (Ptr< const NetDevice > device, Ipv4Address dst, Ipv4InterfaceAddress::InterfaceAddressScope_e scope)
 Return the first primary source address with scope less than or equal to the requested scope, to use in sending a packet to destination dst out of the specified device. More...
 
void Send (Ptr< Packet > packet, Ipv4Address source, Ipv4Address destination, uint8_t protocol, Ptr< Ipv4Route > route)
 
void SendWithHeader (Ptr< Packet > packet, Ipv4Header ipHeader, Ptr< Ipv4Route > route)
 
void SetDefaultTtl (uint8_t ttl)
 
void SetDown (uint32_t i)
 
void SetForwarding (uint32_t i, bool val)
 
void SetMetric (uint32_t i, uint16_t metric)
 
void SetNode (Ptr< Node > node)
 Set node associated with this stack. More...
 
void SetRoutingProtocol (Ptr< Ipv4RoutingProtocol > routingProtocol)
 Register a new routing protocol to be used by this Ipv4 stack. More...
 
void SetUp (uint32_t i)
 
virtual Ipv4Address SourceAddressSelection (uint32_t interface, Ipv4Address dest)
 Choose the source address to use with destination address. More...
 
- Public Member Functions inherited from ns3::Ipv4
 Ipv4 ()
 
virtual ~Ipv4 ()
 
- Public Member Functions inherited from ns3::Object
 Object ()
 Constructor. More...
 
virtual ~Object ()
 Destructor. More...
 
void AggregateObject (Ptr< Object > other)
 Aggregate two Objects together. More...
 
void Dispose (void)
 Dispose of this Object. More...
 
AggregateIterator GetAggregateIterator (void) const
 Get an iterator to the Objects aggregated to this one. More...
 
virtual TypeId GetInstanceTypeId (void) const
 Get the most derived TypeId for this Object. More...
 
template<typename T >
Ptr< T > GetObject (void) const
 Get a pointer to the requested aggregated Object. More...
 
template<typename T >
Ptr< T > GetObject (TypeId tid) const
 Get a pointer to the requested aggregated Object by TypeId. More...
 
void Initialize (void)
 Invoke DoInitialize on all Objects aggregated to this one. More...
 
bool IsInitialized (void) const
 Check if the object has been initialized. More...
 
- Public Member Functions inherited from ns3::SimpleRefCount< Object, ObjectBase, ObjectDeleter >
 SimpleRefCount ()
 Default constructor. More...
 
 SimpleRefCount (const SimpleRefCount &o)
 Copy constructor. More...
 
uint32_t GetReferenceCount (void) const
 Get the reference count of the object. More...
 
SimpleRefCountoperator= (const SimpleRefCount &o)
 Assignment operator. More...
 
void Ref (void) const
 Increment the reference count. More...
 
void Unref (void) const
 Decrement the reference count. More...
 
- Public Member Functions inherited from ns3::ObjectBase
virtual ~ObjectBase ()
 Virtual destructor. More...
 
void GetAttribute (std::string name, AttributeValue &value) const
 Get the value of an attribute, raising fatal errors if unsuccessful. More...
 
bool GetAttributeFailSafe (std::string name, AttributeValue &value) const
 Get the value of an attribute without raising erros. More...
 
void SetAttribute (std::string name, const AttributeValue &value)
 Set a single attribute, raising fatal errors if unsuccessful. More...
 
bool SetAttributeFailSafe (std::string name, const AttributeValue &value)
 Set a single attribute without raising errors. More...
 
bool TraceConnect (std::string name, std::string context, const CallbackBase &cb)
 Connect a TraceSource to a Callback with a context. More...
 
bool TraceConnectWithoutContext (std::string name, const CallbackBase &cb)
 Connect a TraceSource to a Callback without a context. More...
 
bool TraceDisconnect (std::string name, std::string context, const CallbackBase &cb)
 Disconnect from a TraceSource a Callback previously connected with a context. More...
 
bool TraceDisconnectWithoutContext (std::string name, const CallbackBase &cb)
 Disconnect from a TraceSource a Callback previously connected without a context. More...
 

Static Public Member Functions

static TypeId GetTypeId (void)
 Get the type ID. More...
 
- Static Public Member Functions inherited from ns3::Ipv4
static TypeId GetTypeId (void)
 Get the type ID. More...
 
- Static Public Member Functions inherited from ns3::Object
static TypeId GetTypeId (void)
 Register this type. More...
 
- Static Public Member Functions inherited from ns3::ObjectBase
static TypeId GetTypeId (void)
 Get the type ID. More...
 

Static Public Attributes

static const uint16_t PROT_NUMBER = 0x0800
 Protocol number (0x0800) More...
 
- Static Public Attributes inherited from ns3::Ipv4
static const uint32_t IF_ANY = 0xffffffff
 interface wildcard, meaning any interface More...
 

Protected Member Functions

virtual void DoDispose (void)
 Destructor implementation. More...
 
virtual void NotifyNewAggregate ()
 This function will notify other components connected to the node that a new stack member is now connected This will be used to notify Layer 3 protocol of layer 4 protocol stack to connect them together. More...
 
- Protected Member Functions inherited from ns3::Object
 Object (const Object &o)
 Copy an Object. More...
 
virtual void DoInitialize (void)
 Initialize() implementation. More...
 
- Protected Member Functions inherited from ns3::ObjectBase
void ConstructSelf (const AttributeConstructionList &attributes)
 Complete construction of ObjectBase; invoked by derived classes. More...
 
virtual void NotifyConstructionCompleted (void)
 Notifier called once the ObjectBase is fully constructed. More...
 

Private Types

typedef std::map< DupTuple_t, TimeDupMap_t
 Maps packet duplicate tuple to expiration time. More...
 
typedef std::tuple< uint64_t, uint8_t, Ipv4Address, Ipv4AddressDupTuple_t
 IETF RFC 6621, Section 6.2 de-duplication w/o IPSec RFC 6621 recommended duplicate packet tuple: {IPV hash, IP protocol, IP source address, IP destination address}. More...
 
typedef std::vector< Ptr< Ipv4Interface > > Ipv4InterfaceList
 Container of the IPv4 Interfaces. More...
 
typedef std::map< Ptr< const NetDevice >, uint32_t > Ipv4InterfaceReverseContainer
 Container of NetDevices registered to IPv4 and their interface indexes. More...
 
typedef std::pair< Ptr< Packet >, Ipv4HeaderIpv4PayloadHeaderPair
 Pair of a packet and an Ipv4 header. More...
 
typedef std::map< L4ListKey_t, Ptr< IpL4Protocol > > L4List_t
 Container of the IPv4 L4 instances. More...
 
typedef std::pair< int, int32_t > L4ListKey_t
 Container of the IPv4 L4 keys: protocol number, interface index. More...
 
typedef std::map< std::pair< uint64_t, uint32_t >, Ptr< Fragments > > MapFragments_t
 Container of fragments, stored as pairs(src+dst addr, src+dst port) / fragment. More...
 
typedef std::map< std::pair< uint64_t, uint32_t >, EventIdMapFragmentsTimers_t
 Container of fragment timeout event, stored as pairs(src+dst addr, src+dst port) / EventId. More...
 
typedef std::list< Ptr< Ipv4RawSocketImpl > > SocketList
 Container of the IPv4 Raw Sockets. More...
 

Private Member Functions

 Ipv4L3Protocol (const Ipv4L3Protocol &)
 Copy constructor. More...
 
uint32_t AddIpv4Interface (Ptr< Ipv4Interface > interface)
 Add an IPv4 interface to the stack. More...
 
Ipv4Header BuildHeader (Ipv4Address source, Ipv4Address destination, uint8_t protocol, uint16_t payloadSize, uint8_t ttl, uint8_t tos, bool mayFragment)
 Construct an IPv4 header. More...
 
void CallTxTrace (const Ipv4Header &ipHeader, Ptr< Packet > packet, Ptr< Ipv4 > ipv4, uint32_t interface)
 Make a copy of the packet, add the header and invoke the TX trace callback. More...
 
void DoFragmentation (Ptr< Packet > packet, const Ipv4Header &ipv4Header, uint32_t outIfaceMtu, std::list< Ipv4PayloadHeaderPair > &listFragments)
 Fragment a packet. More...
 
Ptr< Icmpv4L4ProtocolGetIcmp (void) const
 Get ICMPv4 protocol. More...
 
virtual bool GetIpForward (void) const
 Get the IP forwarding state. More...
 
virtual bool GetWeakEsModel (void) const
 Get the Weak Es Model status. More...
 
void HandleFragmentsTimeout (std::pair< uint64_t, uint32_t > key, Ipv4Header &ipHeader, uint32_t iif)
 Process the timeout for packet fragments. More...
 
void IpForward (Ptr< Ipv4Route > rtentry, Ptr< const Packet > p, const Ipv4Header &header)
 Forward a packet. More...
 
void IpMulticastForward (Ptr< Ipv4MulticastRoute > mrtentry, Ptr< const Packet > p, const Ipv4Header &header)
 Forward a multicast packet. More...
 
bool IsUnicast (Ipv4Address ad, Ipv4Mask interfaceMask) const
 Check if an IPv4 address is unicast. More...
 
void LocalDeliver (Ptr< const Packet > p, Ipv4Header const &ip, uint32_t iif)
 Deliver a packet. More...
 
Ipv4L3Protocoloperator= (const Ipv4L3Protocol &)
 Copy constructor. More...
 
bool ProcessFragment (Ptr< Packet > &packet, Ipv4Header &ipHeader, uint32_t iif)
 Process a packet fragment. More...
 
void RemoveDuplicates (void)
 Remove duplicate packet entry. More...
 
void RouteInputError (Ptr< const Packet > p, const Ipv4Header &ipHeader, Socket::SocketErrno sockErrno)
 Fallback when no route is found. More...
 
void SendRealOut (Ptr< Ipv4Route > route, Ptr< Packet > packet, Ipv4Header const &ipHeader)
 Send packet with route. More...
 
virtual void SetIpForward (bool forward)
 Set or unset the IP forwarding state. More...
 
void SetupLoopback (void)
 Setup loopback interface. More...
 
virtual void SetWeakEsModel (bool model)
 Set or unset the Weak Es Model. More...
 
bool UpdateDuplicate (Ptr< const Packet > p, const Ipv4Header &header)
 Registers duplicate entry, return false if new. More...
 

Private Attributes

EventId m_cleanDpd
 event to cleanup expired duplicate entries More...
 
uint8_t m_defaultTtl
 Default TTL. More...
 
TracedCallback< const Ipv4Header &, Ptr< const Packet >, DropReason, Ptr< Ipv4 >, uint32_t > m_dropTrace
 Trace of dropped packets. More...
 
DupMap_t m_dups
 map of packet duplicate tuples to expiry event More...
 
bool m_enableDpd
 Enable multicast duplicate packet detection. More...
 
Time m_expire
 duplicate entry expiration delay More...
 
Time m_fragmentExpirationTimeout
 Expiration timeout. More...
 
MapFragments_t m_fragments
 Fragmented packets. More...
 
MapFragmentsTimers_t m_fragmentsTimers
 Expiration events. More...
 
std::map< std::pair< uint64_t, uint8_t >, uint16_t > m_identification
 Identification (for each {src, dst, proto} tuple) More...
 
Ipv4InterfaceList m_interfaces
 List of IPv4 interfaces. More...
 
bool m_ipForward
 Forwarding packets (i.e. More...
 
TracedCallback< const Ipv4Header &, Ptr< const Packet >, uint32_t > m_localDeliverTrace
 Trace of locally delivered packets. More...
 
Ptr< Nodem_node
 Node attached to stack. More...
 
L4List_t m_protocols
 List of transport protocol. More...
 
Time m_purge
 time between purging expired duplicate entries More...
 
Ipv4InterfaceReverseContainer m_reverseInterfacesContainer
 Container of NetDevice / Interface index associations. More...
 
Ptr< Ipv4RoutingProtocolm_routingProtocol
 Routing protocol associated with the stack. More...
 
TracedCallback< Ptr< const Packet >, Ptr< Ipv4 >, uint32_t > m_rxTrace
 Trace of received packets. More...
 
TracedCallback< const Ipv4Header &, Ptr< const Packet >, uint32_t > m_sendOutgoingTrace
 Trace of sent packets. More...
 
SocketList m_sockets
 List of IPv4 raw sockets. More...
 
TracedCallback< Ptr< const Packet >, Ptr< Ipv4 >, uint32_t > m_txTrace
 Trace of transmitted packets. More...
 
TracedCallback< const Ipv4Header &, Ptr< const Packet >, uint32_t > m_unicastForwardTrace
 Trace of unicast forwarded packets. More...
 
bool m_weakEsModel
 Weak ES model state. More...
 

Friends

class ::Ipv4L3ProtocolTestCase
 Ipv4L3ProtocolTestCase test case. More...
 

Additional Inherited Members

Detailed Description

Implement the IPv4 layer.


This is the actual implementation of IP. It contains APIs to send and receive packets at the IP layer, as well as APIs for IP routing.

This class contains two distinct groups of trace sources. The trace sources 'Rx' and 'Tx' are called, respectively, immediately after receiving from the NetDevice and immediately before sending to a NetDevice for transmitting a packet. These are low level trace sources that include the Ipv4Header already serialized into the packet. In contrast, the Drop, SendOutgoing, UnicastForward, and LocalDeliver trace sources are slightly higher-level and pass around the Ipv4Header as an explicit parameter and not as part of the packet.

IP fragmentation and reassembly is handled at this level. At the moment the fragmentation does not handle IP option headers, and in particular the ones that shall not be fragmented. Moreover, the actual implementation does not mimic exactly the Linux kernel. Hence it is not possible, for instance, to test a fragmentation attack.

Config Paths

ns3::Ipv4L3Protocol is accessible through the following paths with Config::Set and Config::Connect:

  • "/NodeList/[i]/$ns3::Ipv4L3Protocol"

Attributes

  • DefaultTtl: The TTL value set by default on all outgoing packets generated on this node.
    • Set with class: ns3::UintegerValue
    • Underlying type: uint8_t 0:255
    • Initial value: 64
    • Flags: construct write read
  • FragmentExpirationTimeout: When this timeout expires, the fragments will be cleared from the buffer.
    • Set with class: ns3::TimeValue
    • Underlying type: Time –9223372036854775808.0ns:+9223372036854775807.0ns
    • Initial value: +30000000000.0ns
    • Flags: construct write read
  • EnableDuplicatePacketDetection: Enable multicast duplicate packet detection based on RFC 6621
    • Set with class: BooleanValue
    • Underlying type: bool
    • Initial value: false
    • Flags: construct write read
  • DuplicateExpire: Expiration delay for duplicate cache entries
    • Set with class: ns3::TimeValue
    • Underlying type: Time –9223372036854775808.0ns:+9223372036854775807.0ns
    • Initial value: +1000000.0ns
    • Flags: construct write read
  • PurgeExpiredPeriod: Time between purges of expired duplicate packet entries, 0 means never purge
    • Set with class: ns3::TimeValue
    • Underlying type: Time +0.0ns:+9223372036854775807.0ns
    • Initial value: +1000000000.0ns
    • Flags: construct write read
  • InterfaceList: The set of Ipv4 interfaces associated to this Ipv4 stack.

Attributes defined in parent class ns3::Ipv4

  • IpForward: Globally enable or disable IP forwarding for all current and future Ipv4 devices.
    • Set with class: BooleanValue
    • Underlying type: bool
    • Initial value: true
    • Flags: construct write read
  • WeakEsModel: RFC1122 term for whether host accepts datagram with a dest. address on another interface
    • Set with class: BooleanValue
    • Underlying type: bool
    • Initial value: true
    • Flags: construct write read

TraceSources

Size of this type is 536 bytes (on a 64-bit architecture).

Definition at line 80 of file ipv4-l3-protocol.h.

Member Typedef Documentation

◆ DropTracedCallback

typedef void(* ns3::Ipv4L3Protocol::DropTracedCallback) (const Ipv4Header &header, Ptr< const Packet > packet, DropReason reason, Ptr< Ipv4 > ipv4, uint32_t interface)

TracedCallback signature for packet drop events.

Parameters
[in]headerThe Ipv4Header.
[in]packetThe packet.
[in]reasonThe reason the packet was dropped.
[in]ipv4
[in]interface
Deprecated:
The non-const Ptr<Ipv4> argument is deprecated and will be changed to Ptr<const Ipv4> in a future release.

Definition at line 260 of file ipv4-l3-protocol.h.

◆ DupMap_t

typedef std::map<DupTuple_t, Time> ns3::Ipv4L3Protocol::DupMap_t
private

Maps packet duplicate tuple to expiration time.

Definition at line 564 of file ipv4-l3-protocol.h.

◆ DupTuple_t

typedef std::tuple<uint64_t, uint8_t, Ipv4Address, Ipv4Address> ns3::Ipv4L3Protocol::DupTuple_t
private

IETF RFC 6621, Section 6.2 de-duplication w/o IPSec RFC 6621 recommended duplicate packet tuple: {IPV hash, IP protocol, IP source address, IP destination address}.

Definition at line 562 of file ipv4-l3-protocol.h.

◆ Ipv4InterfaceList

Container of the IPv4 Interfaces.

Definition at line 441 of file ipv4-l3-protocol.h.

◆ Ipv4InterfaceReverseContainer

typedef std::map<Ptr<const NetDevice>, uint32_t > ns3::Ipv4L3Protocol::Ipv4InterfaceReverseContainer
private

Container of NetDevices registered to IPv4 and their interface indexes.

Definition at line 445 of file ipv4-l3-protocol.h.

◆ Ipv4PayloadHeaderPair

Pair of a packet and an Ipv4 header.

Definition at line 398 of file ipv4-l3-protocol.h.

◆ L4List_t

Container of the IPv4 L4 instances.

Definition at line 459 of file ipv4-l3-protocol.h.

◆ L4ListKey_t

typedef std::pair<int, int32_t> ns3::Ipv4L3Protocol::L4ListKey_t
private

Container of the IPv4 L4 keys: protocol number, interface index.

Definition at line 454 of file ipv4-l3-protocol.h.

◆ MapFragments_t

typedef std::map< std::pair<uint64_t, uint32_t>, Ptr<Fragments> > ns3::Ipv4L3Protocol::MapFragments_t
private

Container of fragments, stored as pairs(src+dst addr, src+dst port) / fragment.

Definition at line 552 of file ipv4-l3-protocol.h.

◆ MapFragmentsTimers_t

typedef std::map< std::pair<uint64_t, uint32_t>, EventId > ns3::Ipv4L3Protocol::MapFragmentsTimers_t
private

Container of fragment timeout event, stored as pairs(src+dst addr, src+dst port) / EventId.

Definition at line 554 of file ipv4-l3-protocol.h.

◆ SentTracedCallback

typedef void(* ns3::Ipv4L3Protocol::SentTracedCallback) (const Ipv4Header &header, Ptr< const Packet > packet, uint32_t interface)

TracedCallback signature for packet send, forward, or local deliver events.

Parameters
[in]headerThe Ipv6Header.
[in]packetThe packet.
[in]interface

Definition at line 233 of file ipv4-l3-protocol.h.

◆ SocketList

Container of the IPv4 Raw Sockets.

Definition at line 449 of file ipv4-l3-protocol.h.

◆ TxRxTracedCallback

typedef void(* ns3::Ipv4L3Protocol::TxRxTracedCallback) (Ptr< const Packet > packet, Ptr< Ipv4 > ipv4, uint32_t interface)

TracedCallback signature for packet transmission or reception events.

Parameters
[in]headerThe Ipv4Header.
[in]packetThe packet.
[in]ipv4
[in]interface
Deprecated:
The non-const Ptr<Ipv4> argument is deprecated and will be changed to Ptr<const Ipv4> in a future release.

Definition at line 246 of file ipv4-l3-protocol.h.

Member Enumeration Documentation

◆ DropReason

Reason why a packet has been dropped.

Enumerator
DROP_TTL_EXPIRED 

Packet TTL has expired.

DROP_NO_ROUTE 

No route to host.

DROP_BAD_CHECKSUM 

Bad checksum.

DROP_INTERFACE_DOWN 

Interface is down so can not send packet.

DROP_ROUTE_ERROR 

Route error.

DROP_FRAGMENT_TIMEOUT 

Fragment timeout exceeded.

DROP_DUPLICATE 

Duplicate packet received.

Definition at line 97 of file ipv4-l3-protocol.h.

Constructor & Destructor Documentation

◆ Ipv4L3Protocol() [1/2]

ns3::Ipv4L3Protocol::Ipv4L3Protocol ( )

Definition at line 127 of file ipv4-l3-protocol.cc.

References NS_LOG_FUNCTION.

◆ ~Ipv4L3Protocol()

ns3::Ipv4L3Protocol::~Ipv4L3Protocol ( )
virtual

Definition at line 132 of file ipv4-l3-protocol.cc.

References NS_LOG_FUNCTION.

◆ Ipv4L3Protocol() [2/2]

ns3::Ipv4L3Protocol::Ipv4L3Protocol ( const Ipv4L3Protocol )
private

Copy constructor.

Defined but not implemented to avoid misuse

Member Function Documentation

◆ AddAddress()

bool ns3::Ipv4L3Protocol::AddAddress ( uint32_t  interface,
Ipv4InterfaceAddress  address 
)
virtual
Parameters
interfaceInterface number of an Ipv4 interface
addressIpv4InterfaceAddress address to associate with the underlying Ipv4 interface
Returns
true if the operation succeeded

Implements ns3::Ipv4.

Definition at line 1152 of file ipv4-l3-protocol.cc.

References ns3::Ipv4Interface::AddAddress(), first::address, m_routingProtocol, and NS_LOG_FUNCTION.

+ Here is the call graph for this function:

◆ AddInterface()

uint32_t ns3::Ipv4L3Protocol::AddInterface ( Ptr< NetDevice device)
virtual
Parameters
devicedevice to add to the list of Ipv4 interfaces which can be used as output interfaces during packet forwarding.
Returns
the index of the Ipv4 interface added.

Once a device has been added, it can never be removed: if you want to disable it, you can invoke Ipv4::SetDown which will make sure that it is never used during packet forwarding.

Implements ns3::Ipv4.

Definition at line 390 of file ipv4-l3-protocol.cc.

References AddIpv4Interface(), ns3::CreateObject(), ns3::Object::GetObject(), m_ipForward, m_node, ns3::MakeCallback(), NS_ASSERT, NS_LOG_FUNCTION, ns3::PeekPointer(), ns3::ArpL3Protocol::PROT_NUMBER, PROT_NUMBER, ns3::ArpL3Protocol::Receive(), Receive(), ns3::TrafficControlLayer::Receive(), ns3::Node::RegisterProtocolHandler(), and ns3::Ipv4Interface::SetNode().

+ Here is the call graph for this function:

◆ AddIpv4Interface()

uint32_t ns3::Ipv4L3Protocol::AddIpv4Interface ( Ptr< Ipv4Interface interface)
private

Add an IPv4 interface to the stack.

Parameters
interfaceinterface to add
Returns
index of newly added interface

Definition at line 418 of file ipv4-l3-protocol.cc.

References ns3::Ipv4Interface::GetDevice(), m_interfaces, m_reverseInterfacesContainer, and NS_LOG_FUNCTION.

Referenced by AddInterface(), and SetupLoopback().

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

◆ BuildHeader()

Ipv4Header ns3::Ipv4L3Protocol::BuildHeader ( Ipv4Address  source,
Ipv4Address  destination,
uint8_t  protocol,
uint16_t  payloadSize,
uint8_t  ttl,
uint8_t  tos,
bool  mayFragment 
)
private

Construct an IPv4 header.

Parameters
sourcesource IPv4 address
destinationdestination IPv4 address
protocolL4 protocol
payloadSizepayload size
ttlTime to Live
tosType of Service
mayFragmenttrue if the packet can be fragmented
Returns
newly created IPv4 header

Definition at line 893 of file ipv4-l3-protocol.cc.

References ns3::Node::ChecksumEnabled(), ns3::Ipv4Header::EnableChecksum(), ns3::Ipv4Address::Get(), m_identification, NS_LOG_FUNCTION, ns3::Ipv4Header::SetDestination(), ns3::Ipv4Header::SetDontFragment(), ns3::Ipv4Header::SetIdentification(), ns3::Ipv4Header::SetMayFragment(), ns3::Ipv4Header::SetPayloadSize(), ns3::Ipv4Header::SetProtocol(), ns3::Ipv4Header::SetSource(), ns3::Ipv4Header::SetTos(), and ns3::Ipv4Header::SetTtl().

Referenced by Send().

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

◆ CallTxTrace()

void ns3::Ipv4L3Protocol::CallTxTrace ( const Ipv4Header ipHeader,
Ptr< Packet packet,
Ptr< Ipv4 ipv4,
uint32_t  interface 
)
private

Make a copy of the packet, add the header and invoke the TX trace callback.

Parameters
ipHeaderthe IP header that will be added to the packet
packetthe packet
ipv4the Ipv4 protocol
interfacethe interface index

Note: If the TracedCallback API ever is extended, we could consider to check for connected functions before adding the header

Definition at line 740 of file ipv4-l3-protocol.cc.

References ns3::Packet::AddHeader(), ns3::Packet::Copy(), and m_txTrace.

Referenced by Send(), and SendRealOut().

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

◆ CreateRawSocket()

Ptr< Socket > ns3::Ipv4L3Protocol::CreateRawSocket ( void  )
virtual

Creates a raw socket.

Returns
a smart pointer to the instantiated raw socket

Implements ns3::Ipv4.

Definition at line 242 of file ipv4-l3-protocol.cc.

References m_node, m_sockets, NS_LOG_FUNCTION, and ns3::Ipv4RawSocketImpl::SetNode().

+ Here is the call graph for this function:

◆ DeleteRawSocket()

void ns3::Ipv4L3Protocol::DeleteRawSocket ( Ptr< Socket socket)
virtual

Deletes a particular raw socket.

Parameters
socketSmart pointer to the raw socket to be deleted

Implements ns3::Ipv4.

Definition at line 251 of file ipv4-l3-protocol.cc.

References m_sockets, and NS_LOG_FUNCTION.

◆ DoDispose()

void ns3::Ipv4L3Protocol::DoDispose ( void  )
protectedvirtual

Destructor implementation.

This method is called by Dispose() or by the Object's destructor, whichever comes first.

Subclasses are expected to implement their real destruction code in an overridden version of this method and chain up to their parent's implementation once they are done. i.e, for simplicity, the destructor of every subclass should be empty and its content should be moved to the associated DoDispose() method.

It is safe to call GetObject() from within this method.

Reimplemented from ns3::Object.

Definition at line 302 of file ipv4-l3-protocol.cc.

References ns3::EventId::Cancel(), ns3::Object::DoDispose(), ns3::EventId::IsRunning(), m_cleanDpd, m_dups, m_fragments, m_fragmentsTimers, m_interfaces, m_node, m_protocols, m_reverseInterfacesContainer, m_routingProtocol, m_sockets, and NS_LOG_FUNCTION.

+ Here is the call graph for this function:

◆ DoFragmentation()

void ns3::Ipv4L3Protocol::DoFragmentation ( Ptr< Packet packet,
const Ipv4Header ipv4Header,
uint32_t  outIfaceMtu,
std::list< Ipv4PayloadHeaderPair > &  listFragments 
)
private

Fragment a packet.

Parameters
packetthe packet
ipv4Headerthe IPv4 header
outIfaceMtuthe MTU of the interface
listFragmentsthe list of fragments

Definition at line 1437 of file ipv4-l3-protocol.cc.

References ns3::Node::ChecksumEnabled(), ns3::Packet::Copy(), ns3::Packet::CreateFragment(), ns3::Ipv4Header::EnableChecksum(), ns3::Ipv4Header::GetFragmentOffset(), ns3::Ipv4Header::GetSerializedSize(), ns3::Packet::GetSize(), ns3::Ipv4Header::IsLastFragment(), NS_ASSERT_MSG(), NS_LOG_FUNCTION, NS_LOG_LOGIC(), ns3::Packet::Print(), ns3::Ipv4Header::SetFragmentOffset(), ns3::Ipv4Header::SetLastFragment(), ns3::Ipv4Header::SetMoreFragments(), and ns3::Ipv4Header::SetPayloadSize().

Referenced by SendRealOut().

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

◆ GetAddress()

Ipv4InterfaceAddress ns3::Ipv4L3Protocol::GetAddress ( uint32_t  interface,
uint32_t  addressIndex 
) const
virtual

Because addresses can be removed, the addressIndex is not guaranteed to be static across calls to this method.

Parameters
interfaceInterface number of an Ipv4 interface
addressIndexindex of Ipv4InterfaceAddress
Returns
the Ipv4InterfaceAddress associated to the interface and addressIndex

Implements ns3::Ipv4.

Definition at line 1165 of file ipv4-l3-protocol.cc.

References ns3::Ipv4Interface::GetAddress(), and NS_LOG_FUNCTION.

Referenced by IsDestinationAddress(), IsUnicast(), LocalDeliver(), SelectSourceAddress(), Send(), and SourceAddressSelection().

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

◆ GetIcmp()

Ptr< Icmpv4L4Protocol > ns3::Ipv4L3Protocol::GetIcmp ( void  ) const
private

Get ICMPv4 protocol.

Returns
Icmpv4L4Protocol pointer

Definition at line 676 of file ipv4-l3-protocol.cc.

References ns3::Object::GetObject(), GetProtocol(), ns3::Icmpv4L4Protocol::GetStaticProtocolNumber(), and NS_LOG_FUNCTION.

Referenced by HandleFragmentsTimeout(), IpForward(), and LocalDeliver().

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

◆ GetInterface()

Ptr< Ipv4Interface > ns3::Ipv4L3Protocol::GetInterface ( uint32_t  i) const

Get an interface.

Parameters
iinterface index
Returns
IPv4 interface pointer

Definition at line 428 of file ipv4-l3-protocol.cc.

References m_interfaces, and NS_LOG_FUNCTION.

Referenced by EpcS1uUlTestCase::DoRun(), GetNAddresses(), GetNetDevice(), LocalDeliver(), and SendRealOut().

+ Here is the caller graph for this function:

◆ GetInterfaceForAddress()

int32_t ns3::Ipv4L3Protocol::GetInterfaceForAddress ( Ipv4Address  address) const
virtual

Return the interface number of the interface that has been assigned the specified IP address.

Parameters
addressThe IP address being searched for
Returns
The interface number of the Ipv4 interface with the given address or -1 if not found.

Each IP interface has one or more IP addresses associated with it. This method searches the list of interfaces for one that holds a particular address. This call takes an IP address as a parameter and returns the interface number of the first interface that has been assigned that address, or -1 if not found. There must be an exact match; this method will not match broadcast or multicast addresses.

Implements ns3::Ipv4.

Definition at line 446 of file ipv4-l3-protocol.cc.

References first::address, m_interfaces, and NS_LOG_FUNCTION.

◆ GetInterfaceForDevice()

int32_t ns3::Ipv4L3Protocol::GetInterfaceForDevice ( Ptr< const NetDevice device) const
virtual
Parameters
deviceThe NetDevice for an Ipv4Interface
Returns
The interface number of an Ipv4 interface or -1 if not found.

Implements ns3::Ipv4.

Definition at line 491 of file ipv4-l3-protocol.cc.

References m_reverseInterfacesContainer, and NS_LOG_FUNCTION.

Referenced by IpForward(), SelectSourceAddress(), and Send().

+ Here is the caller graph for this function:

◆ GetInterfaceForPrefix()

int32_t ns3::Ipv4L3Protocol::GetInterfaceForPrefix ( Ipv4Address  address,
Ipv4Mask  mask 
) const
virtual

Return the interface number of first interface found that has an Ipv4 address within the prefix specified by the input address and mask parameters.

Parameters
addressThe IP address assigned to the interface of interest.
maskThe IP prefix to use in the mask
Returns
The interface number of the Ipv4 interface with the given address or -1 if not found.

Each IP interface has one or more IP addresses associated with it. This method searches the list of interfaces for the first one found that holds an address that is included within the prefix formed by the input address and mask parameters. The value -1 is returned if no match is found.

Implements ns3::Ipv4.

Definition at line 468 of file ipv4-l3-protocol.cc.

References first::address, m_interfaces, and NS_LOG_FUNCTION.

◆ GetIpForward()

bool ns3::Ipv4L3Protocol::GetIpForward ( void  ) const
privatevirtual

Get the IP forwarding state.

Returns
true if IP is in forwarding state

Implements ns3::Ipv4.

Definition at line 1406 of file ipv4-l3-protocol.cc.

References m_ipForward, and NS_LOG_FUNCTION.

◆ GetMetric()

uint16_t ns3::Ipv4L3Protocol::GetMetric ( uint32_t  interface) const
virtual
Parameters
interfaceThe interface number of an Ipv4 interface
Returns
routing metric (cost) associated to the underlying Ipv4 interface

Implements ns3::Ipv4.

Definition at line 1309 of file ipv4-l3-protocol.cc.

References ns3::Ipv4Interface::GetMetric(), and NS_LOG_FUNCTION.

+ Here is the call graph for this function:

◆ GetMtu()

uint16_t ns3::Ipv4L3Protocol::GetMtu ( uint32_t  interface) const
virtual
Parameters
interfaceInterface number of Ipv4 interface
Returns
the Maximum Transmission Unit (in bytes) associated to the underlying Ipv4 interface

Implements ns3::Ipv4.

Definition at line 1317 of file ipv4-l3-protocol.cc.

References ns3::Ipv4Interface::GetDevice(), and NS_LOG_FUNCTION.

+ Here is the call graph for this function:

◆ GetNAddresses()

uint32_t ns3::Ipv4L3Protocol::GetNAddresses ( uint32_t  interface) const
virtual
Parameters
interfaceInterface number of an Ipv4 interface
Returns
the number of Ipv4InterfaceAddress entries for the interface.

Implements ns3::Ipv4.

Definition at line 1173 of file ipv4-l3-protocol.cc.

References GetInterface(), ns3::Ipv4Interface::GetNAddresses(), and NS_LOG_FUNCTION.

Referenced by IsDestinationAddress(), IsUnicast(), LocalDeliver(), SelectSourceAddress(), Send(), and SourceAddressSelection().

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

◆ GetNetDevice()

Ptr< NetDevice > ns3::Ipv4L3Protocol::GetNetDevice ( uint32_t  interface)
virtual
Parameters
interfaceThe interface number of an Ipv4 interface.
Returns
The NetDevice associated with the Ipv4 interface number.

Implements ns3::Ipv4.

Definition at line 1388 of file ipv4-l3-protocol.cc.

References ns3::Ipv4Interface::GetDevice(), GetInterface(), and NS_LOG_FUNCTION.

Referenced by IpMulticastForward().

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

◆ GetNInterfaces()

uint32_t ns3::Ipv4L3Protocol::GetNInterfaces ( void  ) const
virtual
Returns
the number of interfaces added by the user.

Implements ns3::Ipv4.

Definition at line 439 of file ipv4-l3-protocol.cc.

References m_interfaces, and NS_LOG_FUNCTION.

Referenced by IsDestinationAddress(), IsUnicast(), and SelectSourceAddress().

+ Here is the caller graph for this function:

◆ GetProtocol() [1/2]

Ptr< IpL4Protocol > ns3::Ipv4L3Protocol::GetProtocol ( int  protocolNumber) const
virtual
Parameters
protocolNumbernumber of protocol to lookup in this L4 Demux
Returns
a matching L4 Protocol

This method is typically called by lower layers to forward packets up the stack to the right protocol.

Implements ns3::Ipv4.

Definition at line 197 of file ipv4-l3-protocol.cc.

References NS_LOG_FUNCTION.

Referenced by GetIcmp(), and LocalDeliver().

+ Here is the caller graph for this function:

◆ GetProtocol() [2/2]

Ptr< IpL4Protocol > ns3::Ipv4L3Protocol::GetProtocol ( int  protocolNumber,
int32_t  interfaceIndex 
) const
virtual

Get L4 protocol by protocol number for the specified interface.

Parameters
protocolNumberprotocol number
interfaceIndexinterface index, -1 means "any" interface.
Returns
corresponding IpL4Protocol or 0 if not found

Implements ns3::Ipv4.

Definition at line 205 of file ipv4-l3-protocol.cc.

References m_protocols, and NS_LOG_FUNCTION.

◆ GetRoutingProtocol()

Ptr< Ipv4RoutingProtocol > ns3::Ipv4L3Protocol::GetRoutingProtocol ( void  ) const
virtual

Get the routing protocol to be used by this Ipv4 stack.

Returns
smart pointer to Ipv4RoutingProtocol object, or null pointer if none

Implements ns3::Ipv4.

Definition at line 295 of file ipv4-l3-protocol.cc.

References m_routingProtocol, and NS_LOG_FUNCTION.

Referenced by LinkTest::DoRun(), LanTest::DoRun(), TwoLinkTest::DoRun(), TwoLanTest::DoRun(), BridgeTest::DoRun(), and TwoBridgeTest::DoRun().

+ Here is the caller graph for this function:

◆ GetTypeId()

◆ GetWeakEsModel()

bool ns3::Ipv4L3Protocol::GetWeakEsModel ( void  ) const
privatevirtual

Get the Weak Es Model status.

RFC1122 term for whether host accepts datagram with a dest. address on another interface

Returns
true for Weak Es Model activated

Implements ns3::Ipv4.

Definition at line 1420 of file ipv4-l3-protocol.cc.

References m_weakEsModel, and NS_LOG_FUNCTION.

Referenced by IsDestinationAddress().

+ Here is the caller graph for this function:

◆ HandleFragmentsTimeout()

void ns3::Ipv4L3Protocol::HandleFragmentsTimeout ( std::pair< uint64_t, uint32_t >  key,
Ipv4Header ipHeader,
uint32_t  iif 
)
private

Process the timeout for packet fragments.

Parameters
keyrepresenting the packet fragments
ipHeaderthe IP header of the original packet
iifInput Interface

Definition at line 1709 of file ipv4-l3-protocol.cc.

References DROP_FRAGMENT_TIMEOUT, GetIcmp(), ns3::Object::GetObject(), ns3::Packet::GetSize(), m_dropTrace, m_fragments, m_fragmentsTimers, m_node, and NS_LOG_FUNCTION.

Referenced by ProcessFragment().

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

◆ Insert() [1/2]

void ns3::Ipv4L3Protocol::Insert ( Ptr< IpL4Protocol protocol)
virtual
Parameters
protocola template for the protocol to add to this L4 Demux.
Returns
the L4Protocol effectively added.

Invoke Copy on the input template to get a copy of the input protocol which can be used on the Node on which this L4 Demux is running. The new L4Protocol is registered internally as a working L4 Protocol and returned from this method. The caller does not get ownership of the returned pointer.

Implements ns3::Ipv4.

Definition at line 138 of file ipv4-l3-protocol.cc.

References ns3::IpL4Protocol::GetProtocolNumber(), m_protocols, NS_LOG_FUNCTION, and NS_LOG_WARN.

+ Here is the call graph for this function:

◆ Insert() [2/2]

void ns3::Ipv4L3Protocol::Insert ( Ptr< IpL4Protocol protocol,
uint32_t  interfaceIndex 
)
virtual

Add a L4 protocol to a specific interface.

This may be called multiple times for multiple interfaces for the same protocol. To insert for all interfaces, use the separate Insert (Ptr<IpL4Protocol> protocol) method.

Setting a protocol on a specific interface will overwrite the previously bound protocol.

Parameters
protocolL4 protocol.
interfaceIndexinterface index.

Implements ns3::Ipv4.

Definition at line 150 of file ipv4-l3-protocol.cc.

References ns3::IpL4Protocol::GetProtocolNumber(), m_protocols, NS_LOG_FUNCTION, and NS_LOG_WARN.

+ Here is the call graph for this function:

◆ IpForward()

void ns3::Ipv4L3Protocol::IpForward ( Ptr< Ipv4Route rtentry,
Ptr< const Packet p,
const Ipv4Header header 
)
private

Forward a packet.

Parameters
rtentryroute
ppacket to forward
headerIPv4 header to add to the packet

Definition at line 1051 of file ipv4-l3-protocol.cc.

References ns3::Packet::AddPacketTag(), ns3::Packet::Copy(), DROP_TTL_EXPIRED, GetIcmp(), ns3::Node::GetId(), GetInterfaceForDevice(), ns3::Object::GetObject(), ns3::Socket::IpTos2Priority(), m_dropTrace, m_node, m_unicastForwardTrace, NS_LOG_FUNCTION, NS_LOG_LOGIC(), NS_LOG_WARN, ns3::Packet::RemovePacketTag(), SendRealOut(), and ns3::SocketPriorityTag::SetPriority().

Referenced by Receive().

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

◆ IpMulticastForward()

void ns3::Ipv4L3Protocol::IpMulticastForward ( Ptr< Ipv4MulticastRoute mrtentry,
Ptr< const Packet p,
const Ipv4Header header 
)
private

◆ IsDestinationAddress()

bool ns3::Ipv4L3Protocol::IsDestinationAddress ( Ipv4Address  address,
uint32_t  iif 
) const
virtual

Determine whether address and interface corresponding to received packet can be accepted for local delivery.

Parameters
addressThe IP address being considered
iifThe incoming Ipv4 interface index
Returns
true if the address is associated with the interface index

This method can be used to determine whether a received packet has an acceptable address for local delivery on the host. The address may be a unicast, multicast, or broadcast address. This method will return true if address is an exact match of a unicast address on one of the host's interfaces (see below), if address corresponds to a multicast group that the host has joined (and the incoming device is acceptable), or if address corresponds to a broadcast address.

If the Ipv4 attribute WeakEsModel is true, the unicast address may match any of the Ipv4 addresses on any interface. If the attribute is false, the address must match one assigned to the incoming device.

Implements ns3::Ipv4.

Definition at line 506 of file ipv4-l3-protocol.cc.

References first::address, GetAddress(), ns3::Ipv4InterfaceAddress::GetBroadcast(), ns3::Ipv4InterfaceAddress::GetLocal(), GetNAddresses(), GetNInterfaces(), GetWeakEsModel(), NS_LOG_FUNCTION, and NS_LOG_LOGIC().

+ Here is the call graph for this function:

◆ IsForwarding()

bool ns3::Ipv4L3Protocol::IsForwarding ( uint32_t  interface) const
virtual
Parameters
interfaceInterface number of Ipv4 interface
Returns
true if IP forwarding enabled for input datagrams on this device

Implements ns3::Ipv4.

Definition at line 1371 of file ipv4-l3-protocol.cc.

References NS_LOG_FUNCTION, and NS_LOG_LOGIC().

+ Here is the call graph for this function:

◆ IsUnicast() [1/2]

bool ns3::Ipv4L3Protocol::IsUnicast ( Ipv4Address  ad) const

Check if an IPv4 address is unicast according to the node.

This function checks all the node's interfaces and the respective subnet masks. An address is considered unicast if it's not broadcast, subnet-broadcast or multicast.

Parameters
adaddress
Returns
true if the address is unicast

Definition at line 691 of file ipv4-l3-protocol.cc.

References GetAddress(), ns3::Ipv4InterfaceAddress::GetBroadcast(), GetNAddresses(), GetNInterfaces(), ns3::Ipv4Address::IsBroadcast(), ns3::Ipv4Address::IsMulticast(), NS_LOG_FUNCTION, and NS_LOG_LOGIC().

+ Here is the call graph for this function:

◆ IsUnicast() [2/2]

bool ns3::Ipv4L3Protocol::IsUnicast ( Ipv4Address  ad,
Ipv4Mask  interfaceMask 
) const
private

Check if an IPv4 address is unicast.

Parameters
adaddress
interfaceMaskthe network mask
Returns
true if the address is unicast

Definition at line 720 of file ipv4-l3-protocol.cc.

References ns3::Ipv4Address::IsMulticast(), ns3::Ipv4Address::IsSubnetDirectedBroadcast(), and NS_LOG_FUNCTION.

+ Here is the call graph for this function:

◆ IsUp()

bool ns3::Ipv4L3Protocol::IsUp ( uint32_t  interface) const
virtual
Parameters
interfaceInterface number of Ipv4 interface
Returns
true if the underlying interface is in the "up" state, false otherwise.

Implements ns3::Ipv4.

Definition at line 1325 of file ipv4-l3-protocol.cc.

References ns3::Ipv4Interface::IsUp(), and NS_LOG_FUNCTION.

+ Here is the call graph for this function:

◆ LocalDeliver()

◆ NotifyNewAggregate()

void ns3::Ipv4L3Protocol::NotifyNewAggregate ( void  )
protectedvirtual

This function will notify other components connected to the node that a new stack member is now connected This will be used to notify Layer 3 protocol of layer 4 protocol stack to connect them together.

Reimplemented from ns3::Object.

Definition at line 269 of file ipv4-l3-protocol.cc.

References m_node, ns3::Object::NotifyNewAggregate(), NS_LOG_FUNCTION, and SetNode().

+ Here is the call graph for this function:

◆ operator=()

Ipv4L3Protocol& ns3::Ipv4L3Protocol::operator= ( const Ipv4L3Protocol )
private

Copy constructor.

Defined but not implemented to avoid misuse

Returns
the copied object

◆ ProcessFragment()

bool ns3::Ipv4L3Protocol::ProcessFragment ( Ptr< Packet > &  packet,
Ipv4Header ipHeader,
uint32_t  iif 
)
private

◆ Receive()

void ns3::Ipv4L3Protocol::Receive ( Ptr< NetDevice device,
Ptr< const Packet p,
uint16_t  protocol,
const Address from,
const Address to,
NetDevice::PacketType  packetType 
)

Lower layer calls this method after calling L3Demux::Lookup The ARP subclass needs to know from which NetDevice this packet is coming to:

  • implement a per-NetDevice ARP cache
  • send back arp replies on the right device
    Parameters
    devicenetwork device
    pthe packet
    protocolprotocol value
    fromaddress of the correspondent
    toaddress of the destination
    packetTypetype of the packet

Definition at line 569 of file ipv4-l3-protocol.cc.

References ns3::Node::ChecksumEnabled(), ns3::Packet::Copy(), DROP_BAD_CHECKSUM, DROP_DUPLICATE, DROP_INTERFACE_DOWN, DROP_NO_ROUTE, ns3::Ipv4Header::EnableChecksum(), ns3::Ipv4RawSocketImpl::ForwardUp(), ns3::Ipv4Interface::GetArpCache(), ns3::Ipv4Header::GetDestination(), ns3::Node::GetId(), ns3::Object::GetObject(), ns3::Ipv4Header::GetPayloadSize(), ns3::Packet::GetSize(), ns3::Ipv4Header::GetSource(), IpForward(), IpMulticastForward(), ns3::ArpCache::Entry::IsAlive(), ns3::Ipv4Header::IsChecksumOk(), ns3::Ipv4Address::IsMulticast(), ns3::Ipv4Interface::IsUp(), LocalDeliver(), ns3::ArpCache::Lookup(), ns3::ArpCache::LookupInverse(), m_dropTrace, m_enableDpd, m_interfaces, m_node, m_routingProtocol, m_rxTrace, m_sockets, ns3::MakeCallback(), NS_ASSERT_MSG(), NS_LOG_FUNCTION, NS_LOG_LOGIC(), NS_LOG_WARN, ns3::Packet::RemoveAtEnd(), ns3::Packet::RemoveHeader(), RouteInputError(), UpdateDuplicate(), and ns3::ArpCache::Entry::UpdateSeen().

Referenced by AddInterface(), and SetupLoopback().

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

◆ Remove() [1/2]

void ns3::Ipv4L3Protocol::Remove ( Ptr< IpL4Protocol protocol)
virtual
Parameters
protocolprotocol to remove from this demux.

The input value to this method should be the value returned from the Ipv4L4Protocol::Insert method.

Implements ns3::Ipv4.

Definition at line 163 of file ipv4-l3-protocol.cc.

References ns3::IpL4Protocol::GetProtocolNumber(), m_protocols, NS_LOG_FUNCTION, and NS_LOG_WARN.

+ Here is the call graph for this function:

◆ Remove() [2/2]

void ns3::Ipv4L3Protocol::Remove ( Ptr< IpL4Protocol protocol,
uint32_t  interfaceIndex 
)
virtual

Remove a L4 protocol from a specific interface.

Parameters
protocolL4 protocol to remove.
interfaceIndexinterface index.

Implements ns3::Ipv4.

Definition at line 180 of file ipv4-l3-protocol.cc.

References ns3::IpL4Protocol::GetProtocolNumber(), m_protocols, NS_LOG_FUNCTION, and NS_LOG_WARN.

+ Here is the call graph for this function:

◆ RemoveAddress() [1/2]

bool ns3::Ipv4L3Protocol::RemoveAddress ( uint32_t  interface,
uint32_t  addressIndex 
)
virtual

Remove the address at addressIndex on named interface.

The addressIndex for all higher indices will decrement by one after this method is called; so, for example, to remove 5 addresses from an interface i, one could call RemoveAddress (i, 0); 5 times.

Parameters
interfaceInterface number of an Ipv4 interface
addressIndexindex of Ipv4InterfaceAddress to remove
Returns
true if the operation succeeded

Implements ns3::Ipv4.

Definition at line 1181 of file ipv4-l3-protocol.cc.

References first::address, m_routingProtocol, and NS_LOG_FUNCTION.

◆ RemoveAddress() [2/2]

bool ns3::Ipv4L3Protocol::RemoveAddress ( uint32_t  interface,
Ipv4Address  address 
)
virtual

Remove the given address on named Ipv4 interface.

Parameters
interfaceInterface number of an Ipv4 interface
addressThe address to remove
Returns
true if the operation succeeded

Implements ns3::Ipv4.

Definition at line 1198 of file ipv4-l3-protocol.cc.

References first::address, ns3::Ipv4Address::GetLoopback(), m_routingProtocol, NS_LOG_FUNCTION, and NS_LOG_WARN.

+ Here is the call graph for this function:

◆ RemoveDuplicates()

void ns3::Ipv4L3Protocol::RemoveDuplicates ( void  )
private

Remove duplicate packet entry.

Parameters
[in]iterIterator into duplicate map to remove

Definition at line 1803 of file ipv4-l3-protocol.cc.

References ns3::Time::IsStrictlyPositive(), m_cleanDpd, m_dups, m_purge, sample-rng-plot::n, ns3::Simulator::Now(), NS_LOG_DEBUG, NS_LOG_FUNCTION, NS_LOG_LOGIC(), and ns3::Simulator::Schedule().

Referenced by UpdateDuplicate().

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

◆ RouteInputError()

void ns3::Ipv4L3Protocol::RouteInputError ( Ptr< const Packet p,
const Ipv4Header ipHeader,
Socket::SocketErrno  sockErrno 
)
private

Fallback when no route is found.

Parameters
ppacket
ipHeaderIPv4 header
sockErrnoerror number

Definition at line 1427 of file ipv4-l3-protocol.cc.

References DROP_ROUTE_ERROR, ns3::Object::GetObject(), m_dropTrace, m_node, NS_LOG_FUNCTION, and NS_LOG_LOGIC().

Referenced by Receive().

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

◆ SelectSourceAddress()

Ipv4Address ns3::Ipv4L3Protocol::SelectSourceAddress ( Ptr< const NetDevice device,
Ipv4Address  dst,
Ipv4InterfaceAddress::InterfaceAddressScope_e  scope 
)
virtual

Return the first primary source address with scope less than or equal to the requested scope, to use in sending a packet to destination dst out of the specified device.

This method mirrors the behavior of Linux inet_select_addr() and is provided because interfaces may have multiple IP addresses configured on them with different scopes, and with a primary and secondary status. Secondary addresses are never returned.

See also
Ipv4InterfaceAddress

If a non-zero device pointer is provided, the method first tries to return a primary address that is configured on that device, and whose subnet matches that of dst and whose scope is less than or equal to the requested scope. If a primary address does not match the subnet of dst but otherwise matches the scope, it is returned. If no such address on the device is found, the other devices are searched in order of their interface index, but not considering dst as a factor in the search. Because a loopback interface is typically the first one configured on a node, it will be the first alternate device to be tried. Addresses scoped at LINK scope are not returned in this phase.

If no device pointer is provided, the same logic as above applies, only that there is no preferred device that is consulted first. This means that if the device pointer is null, input parameter dst will be ignored.

If there are no possible addresses to return, a warning log message is issued and the all-zeroes address is returned.

Parameters
deviceoutput NetDevice (optionally provided, only to constrain the search)
dstDestination address to match, if device is provided
scopeScope of returned address must be less than or equal to this
Returns
the first primary Ipv4Address that meets the search criteria

Implements ns3::Ipv4.

Definition at line 1248 of file ipv4-l3-protocol.cc.

References ns3::Ipv4Address::CombineMask(), GetAddress(), GetInterfaceForDevice(), ns3::Ipv4InterfaceAddress::GetLocal(), ns3::Ipv4InterfaceAddress::GetMask(), GetNAddresses(), GetNInterfaces(), ns3::Ipv4InterfaceAddress::GetScope(), ns3::Ipv4InterfaceAddress::IsSecondary(), ns3::Ipv4InterfaceAddress::LINK, NS_ASSERT_MSG(), NS_LOG_FUNCTION, and NS_LOG_WARN.

+ Here is the call graph for this function:

◆ Send()

void ns3::Ipv4L3Protocol::Send ( Ptr< Packet packet,
Ipv4Address  source,
Ipv4Address  destination,
uint8_t  protocol,
Ptr< Ipv4Route route 
)
virtual

◆ SendRealOut()

void ns3::Ipv4L3Protocol::SendRealOut ( Ptr< Ipv4Route route,
Ptr< Packet packet,
Ipv4Header const &  ipHeader 
)
private

◆ SendWithHeader()

void ns3::Ipv4L3Protocol::SendWithHeader ( Ptr< Packet packet,
Ipv4Header  ipHeader,
Ptr< Ipv4Route route 
)
virtual
Parameters
packetpacket to send
ipHeaderIP Header
routeroute entry

Higher-level layers call this method to send a packet with IPv4 Header (Intend to be used with IpHeaderInclude attribute.)

Implements ns3::Ipv4.

Definition at line 727 of file ipv4-l3-protocol.cc.

References ns3::Node::ChecksumEnabled(), ns3::Ipv4Header::EnableChecksum(), NS_LOG_FUNCTION, and SendRealOut().

+ Here is the call graph for this function:

◆ SetDefaultTtl()

void ns3::Ipv4L3Protocol::SetDefaultTtl ( uint8_t  ttl)
Parameters
ttldefault ttl to use

When we need to send an ipv4 packet, we use this default ttl value.

Definition at line 383 of file ipv4-l3-protocol.cc.

References m_defaultTtl, and NS_LOG_FUNCTION.

◆ SetDown()

void ns3::Ipv4L3Protocol::SetDown ( uint32_t  interface)
virtual
Parameters
interfaceInterface number of Ipv4 interface

Set the interface into the "down" state. In this state, it is ignored during Ipv4 forwarding.

Implements ns3::Ipv4.

Definition at line 1358 of file ipv4-l3-protocol.cc.

References m_routingProtocol, NS_LOG_FUNCTION, and ns3::Ipv4Interface::SetDown().

+ Here is the call graph for this function:

◆ SetForwarding()

void ns3::Ipv4L3Protocol::SetForwarding ( uint32_t  interface,
bool  val 
)
virtual
Parameters
interfaceInterface number of Ipv4 interface
valValue to set the forwarding flag

If set to true, IP forwarding is enabled for input datagrams on this device

Implements ns3::Ipv4.

Definition at line 1380 of file ipv4-l3-protocol.cc.

References NS_LOG_FUNCTION, and ns3::Ipv4Interface::SetForwarding().

+ Here is the call graph for this function:

◆ SetIpForward()

void ns3::Ipv4L3Protocol::SetIpForward ( bool  forward)
privatevirtual

Set or unset the IP forwarding state.

Parameters
forwardthe forwarding state

Implements ns3::Ipv4.

Definition at line 1395 of file ipv4-l3-protocol.cc.

References m_interfaces, m_ipForward, and NS_LOG_FUNCTION.

◆ SetMetric()

void ns3::Ipv4L3Protocol::SetMetric ( uint32_t  interface,
uint16_t  metric 
)
virtual
Parameters
interfaceThe interface number of an Ipv4 interface
metricrouting metric (cost) associated to the underlying Ipv4 interface

Implements ns3::Ipv4.

Definition at line 1301 of file ipv4-l3-protocol.cc.

References NS_LOG_FUNCTION, and ns3::Ipv4Interface::SetMetric().

+ Here is the call graph for this function:

◆ SetNode()

void ns3::Ipv4L3Protocol::SetNode ( Ptr< Node node)

Set node associated with this stack.

Parameters
nodenode to set

Definition at line 233 of file ipv4-l3-protocol.cc.

References m_node, NS_LOG_FUNCTION, and SetupLoopback().

Referenced by NotifyNewAggregate().

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

◆ SetRoutingProtocol()

void ns3::Ipv4L3Protocol::SetRoutingProtocol ( Ptr< Ipv4RoutingProtocol routingProtocol)
virtual

Register a new routing protocol to be used by this Ipv4 stack.

This call will replace any routing protocol that has been previously registered. If you want to add multiple routing protocols, you must add them to a Ipv4ListRoutingProtocol directly.

Parameters
routingProtocolsmart pointer to Ipv4RoutingProtocol object

Implements ns3::Ipv4.

Definition at line 286 of file ipv4-l3-protocol.cc.

References m_routingProtocol, and NS_LOG_FUNCTION.

Referenced by CreateDualStackNode(), and TcpTestCase::CreateInternetNode().

+ Here is the caller graph for this function:

◆ SetUp()

void ns3::Ipv4L3Protocol::SetUp ( uint32_t  interface)
virtual
Parameters
interfaceInterface number of Ipv4 interface

Set the interface into the "up" state. In this state, it is considered valid during Ipv4 forwarding.

Implements ns3::Ipv4.

Definition at line 1333 of file ipv4-l3-protocol.cc.

References m_routingProtocol, NS_LOG_FUNCTION, NS_LOG_LOGIC(), and ns3::Ipv4Interface::SetUp().

+ Here is the call graph for this function:

◆ SetupLoopback()

void ns3::Ipv4L3Protocol::SetupLoopback ( void  )
private

◆ SetWeakEsModel()

void ns3::Ipv4L3Protocol::SetWeakEsModel ( bool  model)
privatevirtual

Set or unset the Weak Es Model.

RFC1122 term for whether host accepts datagram with a dest. address on another interface

Parameters
modeltrue for Weak Es Model

Implements ns3::Ipv4.

Definition at line 1413 of file ipv4-l3-protocol.cc.

References m_weakEsModel, and NS_LOG_FUNCTION.

◆ SourceAddressSelection()

Ipv4Address ns3::Ipv4L3Protocol::SourceAddressSelection ( uint32_t  interface,
Ipv4Address  dest 
)
virtual

Choose the source address to use with destination address.

Parameters
interfaceinterface index
destIPv4 destination address
Returns
IPv4 source address to use

Implements ns3::Ipv4.

Definition at line 1221 of file ipv4-l3-protocol.cc.

References GetAddress(), ns3::Ipv4InterfaceAddress::GetLocal(), GetNAddresses(), and NS_LOG_FUNCTION.

+ Here is the call graph for this function:

◆ UpdateDuplicate()

bool ns3::Ipv4L3Protocol::UpdateDuplicate ( Ptr< const Packet p,
const Ipv4Header header 
)
private

Friends And Related Function Documentation

◆ ::Ipv4L3ProtocolTestCase

friend class ::Ipv4L3ProtocolTestCase
friend

Ipv4L3ProtocolTestCase test case.

Definition at line 277 of file ipv4-l3-protocol.h.

Member Data Documentation

◆ m_cleanDpd

EventId ns3::Ipv4L3Protocol::m_cleanDpd
private

event to cleanup expired duplicate entries

Definition at line 583 of file ipv4-l3-protocol.h.

Referenced by DoDispose(), RemoveDuplicates(), and UpdateDuplicate().

◆ m_defaultTtl

uint8_t ns3::Ipv4L3Protocol::m_defaultTtl
private

Default TTL.

Definition at line 466 of file ipv4-l3-protocol.h.

Referenced by GetTypeId(), Send(), and SetDefaultTtl().

◆ m_dropTrace

TracedCallback<const Ipv4Header &, Ptr<const Packet>, DropReason, Ptr<Ipv4>, uint32_t> ns3::Ipv4L3Protocol::m_dropTrace
private

Trace of dropped packets.

Deprecated:
The non-const Ptr<Ipv4> argument is deprecated and will be changed to Ptr<const Ipv4> in a future release.

Definition at line 490 of file ipv4-l3-protocol.h.

Referenced by GetTypeId(), HandleFragmentsTimeout(), IpForward(), IpMulticastForward(), Receive(), RouteInputError(), Send(), and SendRealOut().

◆ m_dups

DupMap_t ns3::Ipv4L3Protocol::m_dups
private

map of packet duplicate tuples to expiry event

Definition at line 580 of file ipv4-l3-protocol.h.

Referenced by DoDispose(), RemoveDuplicates(), and UpdateDuplicate().

◆ m_enableDpd

bool ns3::Ipv4L3Protocol::m_enableDpd
private

Enable multicast duplicate packet detection.

Definition at line 579 of file ipv4-l3-protocol.h.

Referenced by GetTypeId(), and Receive().

◆ m_expire

Time ns3::Ipv4L3Protocol::m_expire
private

duplicate entry expiration delay

Definition at line 581 of file ipv4-l3-protocol.h.

Referenced by GetTypeId(), and UpdateDuplicate().

◆ m_fragmentExpirationTimeout

Time ns3::Ipv4L3Protocol::m_fragmentExpirationTimeout
private

Expiration timeout.

Definition at line 557 of file ipv4-l3-protocol.h.

Referenced by GetTypeId(), and ProcessFragment().

◆ m_fragments

◆ m_fragmentsTimers

MapFragmentsTimers_t ns3::Ipv4L3Protocol::m_fragmentsTimers
private

Expiration events.

Definition at line 558 of file ipv4-l3-protocol.h.

Referenced by DoDispose(), HandleFragmentsTimeout(), and ProcessFragment().

◆ m_identification

std::map<std::pair<uint64_t, uint8_t>, uint16_t> ns3::Ipv4L3Protocol::m_identification
private

Identification (for each {src, dst, proto} tuple)

Definition at line 467 of file ipv4-l3-protocol.h.

Referenced by BuildHeader().

◆ m_interfaces

Ipv4InterfaceList ns3::Ipv4L3Protocol::m_interfaces
private

◆ m_ipForward

bool ns3::Ipv4L3Protocol::m_ipForward
private

Forwarding packets (i.e.

router mode) state.

Definition at line 461 of file ipv4-l3-protocol.h.

Referenced by AddInterface(), GetIpForward(), and SetIpForward().

◆ m_localDeliverTrace

TracedCallback<const Ipv4Header &, Ptr<const Packet>, uint32_t> ns3::Ipv4L3Protocol::m_localDeliverTrace
private

Trace of locally delivered packets.

Definition at line 475 of file ipv4-l3-protocol.h.

Referenced by GetTypeId(), and LocalDeliver().

◆ m_node

◆ m_protocols

L4List_t ns3::Ipv4L3Protocol::m_protocols
private

List of transport protocol.

Definition at line 463 of file ipv4-l3-protocol.h.

Referenced by DoDispose(), GetProtocol(), Insert(), and Remove().

◆ m_purge

Time ns3::Ipv4L3Protocol::m_purge
private

time between purging expired duplicate entries

Definition at line 582 of file ipv4-l3-protocol.h.

Referenced by GetTypeId(), RemoveDuplicates(), and UpdateDuplicate().

◆ m_reverseInterfacesContainer

Ipv4InterfaceReverseContainer ns3::Ipv4L3Protocol::m_reverseInterfacesContainer
private

Container of NetDevice / Interface index associations.

Definition at line 465 of file ipv4-l3-protocol.h.

Referenced by AddIpv4Interface(), DoDispose(), and GetInterfaceForDevice().

◆ m_routingProtocol

Ptr<Ipv4RoutingProtocol> ns3::Ipv4L3Protocol::m_routingProtocol
private

Routing protocol associated with the stack.

Definition at line 492 of file ipv4-l3-protocol.h.

Referenced by AddAddress(), DoDispose(), GetRoutingProtocol(), Receive(), RemoveAddress(), Send(), SetDown(), SetRoutingProtocol(), SetUp(), and SetupLoopback().

◆ m_rxTrace

TracedCallback<Ptr<const Packet>, Ptr<Ipv4>, uint32_t> ns3::Ipv4L3Protocol::m_rxTrace
private

Trace of received packets.

Deprecated:
The non-const Ptr<Ipv4> argument is deprecated and will be changed to Ptr<const Ipv4> in a future release.

Definition at line 485 of file ipv4-l3-protocol.h.

Referenced by GetTypeId(), and Receive().

◆ m_sendOutgoingTrace

TracedCallback<const Ipv4Header &, Ptr<const Packet>, uint32_t> ns3::Ipv4L3Protocol::m_sendOutgoingTrace
private

Trace of sent packets.

Definition at line 471 of file ipv4-l3-protocol.h.

Referenced by GetTypeId(), and Send().

◆ m_sockets

SocketList ns3::Ipv4L3Protocol::m_sockets
private

List of IPv4 raw sockets.

Definition at line 494 of file ipv4-l3-protocol.h.

Referenced by CreateRawSocket(), DeleteRawSocket(), DoDispose(), and Receive().

◆ m_txTrace

TracedCallback<Ptr<const Packet>, Ptr<Ipv4>, uint32_t> ns3::Ipv4L3Protocol::m_txTrace
private

Trace of transmitted packets.

Deprecated:
The non-const Ptr<Ipv4> argument is deprecated and will be changed to Ptr<const Ipv4> in a future release.

Definition at line 481 of file ipv4-l3-protocol.h.

Referenced by CallTxTrace(), and GetTypeId().

◆ m_unicastForwardTrace

TracedCallback<const Ipv4Header &, Ptr<const Packet>, uint32_t> ns3::Ipv4L3Protocol::m_unicastForwardTrace
private

Trace of unicast forwarded packets.

Definition at line 473 of file ipv4-l3-protocol.h.

Referenced by GetTypeId(), and IpForward().

◆ m_weakEsModel

bool ns3::Ipv4L3Protocol::m_weakEsModel
private

Weak ES model state.

Definition at line 462 of file ipv4-l3-protocol.h.

Referenced by GetWeakEsModel(), and SetWeakEsModel().

◆ PROT_NUMBER


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