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

TCP socket creation and multiplexing/demultiplexing. More...

#include "tcp-l4-protocol.h"

+ Inheritance diagram for ns3::TcpL4Protocol:
+ Collaboration diagram for ns3::TcpL4Protocol:

Public Member Functions

 TcpL4Protocol ()
 
 TcpL4Protocol (const TcpL4Protocol &)=delete
 
 ~TcpL4Protocol () override
 
void AddSocket (Ptr< TcpSocketBase > socket)
 Make a socket fully operational.
 
Ipv4EndPointAllocate ()
 Allocate an IPv4 Endpoint.
 
Ipv4EndPointAllocate (Ipv4Address address)
 Allocate an IPv4 Endpoint.
 
Ipv4EndPointAllocate (Ptr< NetDevice > boundNetDevice, Ipv4Address address, uint16_t port)
 Allocate an IPv4 Endpoint.
 
Ipv4EndPointAllocate (Ptr< NetDevice > boundNetDevice, Ipv4Address localAddress, uint16_t localPort, Ipv4Address peerAddress, uint16_t peerPort)
 Allocate an IPv4 Endpoint.
 
Ipv4EndPointAllocate (Ptr< NetDevice > boundNetDevice, uint16_t port)
 Allocate an IPv4 Endpoint.
 
Ipv6EndPointAllocate6 ()
 Allocate an IPv6 Endpoint.
 
Ipv6EndPointAllocate6 (Ipv6Address address)
 Allocate an IPv6 Endpoint.
 
Ipv6EndPointAllocate6 (Ptr< NetDevice > boundNetDevice, Ipv6Address address, uint16_t port)
 Allocate an IPv6 Endpoint.
 
Ipv6EndPointAllocate6 (Ptr< NetDevice > boundNetDevice, Ipv6Address localAddress, uint16_t localPort, Ipv6Address peerAddress, uint16_t peerPort)
 Allocate an IPv6 Endpoint.
 
Ipv6EndPointAllocate6 (Ptr< NetDevice > boundNetDevice, uint16_t port)
 Allocate an IPv6 Endpoint.
 
Ptr< SocketCreateSocket ()
 Create a TCP socket using the TypeId set by SocketType attribute.
 
Ptr< SocketCreateSocket (TypeId congestionTypeId)
 Create a TCP socket using the specified congestion control algorithm.
 
Ptr< SocketCreateSocket (TypeId congestionTypeId, TypeId recoveryTypeId)
 Create a TCP socket using the specified congestion control algorithm TypeId.
 
void DeAllocate (Ipv4EndPoint *endPoint)
 Remove an IPv4 Endpoint.
 
void DeAllocate (Ipv6EndPoint *endPoint)
 Remove an IPv6 Endpoint.
 
IpL4Protocol::DownTargetCallback GetDownTarget () const override
 This method allows a caller to get the current down target callback set for this L4 protocol (IPv4 case)
 
IpL4Protocol::DownTargetCallback6 GetDownTarget6 () const override
 This method allows a caller to get the current down target callback set for this L4 protocol (IPv6 case)
 
int GetProtocolNumber () const override
 Returns the protocol number of this protocol.
 
TcpL4Protocoloperator= (const TcpL4Protocol &)=delete
 
IpL4Protocol::RxStatus Receive (Ptr< Packet > p, const Ipv4Header &incomingIpHeader, Ptr< Ipv4Interface > incomingInterface) override
 Called from lower-level layers to send the packet up in the stack.
 
IpL4Protocol::RxStatus Receive (Ptr< Packet > p, const Ipv6Header &incomingIpHeader, Ptr< Ipv6Interface > incomingInterface) override
 Called from lower-level layers to send the packet up in the stack.
 
void ReceiveIcmp (Ipv4Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo, Ipv4Address payloadSource, Ipv4Address payloadDestination, const uint8_t payload[8]) override
 Called from lower-level layers to send the ICMP packet up in the stack.
 
void ReceiveIcmp (Ipv6Address icmpSource, uint8_t icmpTtl, uint8_t icmpType, uint8_t icmpCode, uint32_t icmpInfo, Ipv6Address payloadSource, Ipv6Address payloadDestination, const uint8_t payload[8]) override
 Called from lower-level layers to send the ICMPv6 packet up in the stack.
 
bool RemoveSocket (Ptr< TcpSocketBase > socket)
 Remove a socket from the internal list.
 
void SendPacket (Ptr< Packet > pkt, const TcpHeader &outgoing, const Address &saddr, const Address &daddr, Ptr< NetDevice > oif=nullptr) const
 Send a packet via TCP (IP-agnostic)
 
void SetDownTarget (IpL4Protocol::DownTargetCallback cb) override
 This method allows a caller to set the current down target callback set for this L4 protocol (IPv4 case)
 
void SetDownTarget6 (IpL4Protocol::DownTargetCallback6 cb) override
 This method allows a caller to set the current down target callback set for this L4 protocol (IPv6 case)
 
void SetNode (Ptr< Node > node)
 Set node associated with this stack.
 
- Public Member Functions inherited from ns3::IpL4Protocol
 ~IpL4Protocol () override
 
- Public Member Functions inherited from ns3::Object
 Object ()
 Constructor.
 
 ~Object () override
 Destructor.
 
void AggregateObject (Ptr< Object > other)
 Aggregate two Objects together.
 
void Dispose ()
 Dispose of this Object.
 
AggregateIterator GetAggregateIterator () const
 Get an iterator to the Objects aggregated to this one.
 
TypeId GetInstanceTypeId () const override
 Get the most derived TypeId for this Object.
 
template<typename T >
Ptr< T > GetObject () const
 Get a pointer to the requested aggregated Object.
 
template<>
Ptr< ObjectGetObject () const
 Specialization of () for objects of type ns3::Object.
 
template<typename T >
Ptr< T > GetObject (TypeId tid) const
 Get a pointer to the requested aggregated Object by TypeId.
 
template<>
Ptr< ObjectGetObject (TypeId tid) const
 Specialization of (TypeId tid) for objects of type ns3::Object.
 
void Initialize ()
 Invoke DoInitialize on all Objects aggregated to this one.
 
bool IsInitialized () const
 Check if the object has been initialized.
 
void UnidirectionalAggregateObject (Ptr< Object > other)
 Aggregate an Object to another Object.
 
- Public Member Functions inherited from ns3::SimpleRefCount< Object, ObjectBase, ObjectDeleter >
 SimpleRefCount ()
 Default constructor.
 
 SimpleRefCount (const SimpleRefCount &o)
 Copy constructor.
 
uint32_t GetReferenceCount () const
 Get the reference count of the object.
 
SimpleRefCountoperator= (const SimpleRefCount &o)
 Assignment operator.
 
void Ref () const
 Increment the reference count.
 
void Unref () const
 Decrement the reference count.
 
- 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::IpL4Protocol
static TypeId GetTypeId ()
 Get the type ID.
 
- Static Public Member Functions inherited from ns3::Object
static TypeId GetTypeId ()
 Register this type.
 
- Static Public Member Functions inherited from ns3::ObjectBase
static TypeId GetTypeId ()
 Get the type ID.
 

Static Public Attributes

static const uint8_t PROT_NUMBER = 6
 protocol number (0x6)
 

Protected Member Functions

void DoDispose () override
 Destructor implementation.
 
void NoEndPointsFound (const TcpHeader &incomingHeader, const Address &incomingSAddr, const Address &incomingDAddr)
 Check if RST packet should be sent, and in case, send it.
 
void NotifyNewAggregate () override
 Setup socket factory and callbacks when aggregated to a node.
 
IpL4Protocol::RxStatus PacketReceived (Ptr< Packet > packet, TcpHeader &incomingTcpHeader, const Address &source, const Address &destination)
 Get the tcp header of the incoming packet and checks its checksum if needed.
 
- Protected Member Functions inherited from ns3::Object
 Object (const Object &o)
 Copy an Object.
 
virtual void DoInitialize ()
 Initialize() implementation.
 
- 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.
 

Private Member Functions

void SendPacketV4 (Ptr< Packet > pkt, const TcpHeader &outgoing, const Ipv4Address &saddr, const Ipv4Address &daddr, Ptr< NetDevice > oif=nullptr) const
 Send a packet via TCP (IPv4)
 
void SendPacketV6 (Ptr< Packet > pkt, const TcpHeader &outgoing, const Ipv6Address &saddr, const Ipv6Address &daddr, Ptr< NetDevice > oif=nullptr) const
 Send a packet via TCP (IPv6)
 

Private Attributes

TypeId m_congestionTypeId
 The socket TypeId.
 
IpL4Protocol::DownTargetCallback m_downTarget
 Callback to send packets over IPv4.
 
IpL4Protocol::DownTargetCallback6 m_downTarget6
 Callback to send packets over IPv6.
 
Ipv4EndPointDemuxm_endPoints
 A list of IPv4 end points.
 
Ipv6EndPointDemuxm_endPoints6
 A list of IPv6 end points.
 
Ptr< Nodem_node
 the node this stack is associated with
 
TypeId m_recoveryTypeId
 The recovery TypeId.
 
TypeId m_rttTypeId
 The RTT Estimator TypeId.
 
uint64_t m_socketIndex {0}
 index of the next socket to be created
 
std::unordered_map< uint64_t, Ptr< TcpSocketBase > > m_sockets
 Unordered map of socket IDs and corresponding sockets.
 

Additional Inherited Members

- Public Types inherited from ns3::IpL4Protocol
typedef Callback< void, Ptr< Packet >, Ipv4Address, Ipv4Address, uint8_t, Ptr< Ipv4Route > > DownTargetCallback
 callback to send packets over IPv4
 
typedef Callback< void, Ptr< Packet >, Ipv6Address, Ipv6Address, uint8_t, Ptr< Ipv6Route > > DownTargetCallback6
 callback to send packets over IPv6
 
enum  RxStatus { RX_OK , RX_CSUM_FAILED , RX_ENDPOINT_CLOSED , RX_ENDPOINT_UNREACH }
 Rx status codes. More...
 

Detailed Description

TCP socket creation and multiplexing/demultiplexing.

A single instance of this class is held by one instance of class Node.

The creation of TcpSocket are handled in the method CreateSocket, which is called by TcpSocketFactory. Upon creation, this class is responsible to the socket initialization and handle multiplexing/demultiplexing of data between node's TCP sockets. Demultiplexing is done by receiving packets from IP, and forwards them up to the right socket. Multiplexing is done through the SendPacket function, which sends the packet down the stack.

Moreover, this class allocates "endpoint" objects (ns3::Ipv4EndPoint) for TCP, and SHOULD checksum packets its receives from the socket layer going down the stack, but currently checksumming is disabled.

See also
CreateSocket
NotifyNewAggregate
SendPacket

Config Paths

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

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

Attributes

Attributes defined in parent class ns3::IpL4Protocol

  • ProtocolNumber: The IP protocol number.
    • Set with class: ns3::IntegerValue
    • Underlying type: int32_t 0:255
    • Flags: read
    • Support level: SUPPORTED

No TraceSources are defined for this type.
Group: Internet

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

Definition at line 69 of file tcp-l4-protocol.h.

Constructor & Destructor Documentation

◆ TcpL4Protocol() [1/2]

ns3::TcpL4Protocol::TcpL4Protocol ( )

Definition at line 95 of file tcp-l4-protocol.cc.

References NS_LOG_FUNCTION.

◆ ~TcpL4Protocol()

ns3::TcpL4Protocol::~TcpL4Protocol ( )
override

Definition at line 102 of file tcp-l4-protocol.cc.

References NS_LOG_FUNCTION.

◆ TcpL4Protocol() [2/2]

ns3::TcpL4Protocol::TcpL4Protocol ( const TcpL4Protocol & )
delete

Member Function Documentation

◆ AddSocket()

void ns3::TcpL4Protocol::AddSocket ( Ptr< TcpSocketBase > socket)

Make a socket fully operational.

Called after a socket has been bound, it is inserted in an internal vector.

Parameters
socketSocket to be added

Definition at line 740 of file tcp-l4-protocol.cc.

References m_socketIndex, m_sockets, and NS_LOG_FUNCTION.

◆ Allocate() [1/5]

Ipv4EndPoint * ns3::TcpL4Protocol::Allocate ( )

Allocate an IPv4 Endpoint.

Returns
the Endpoint

Definition at line 220 of file tcp-l4-protocol.cc.

References ns3::Ipv4EndPointDemux::Allocate(), m_endPoints, and NS_LOG_FUNCTION.

+ Here is the call graph for this function:

◆ Allocate() [2/5]

Ipv4EndPoint * ns3::TcpL4Protocol::Allocate ( Ipv4Address address)

Allocate an IPv4 Endpoint.

Parameters
addressaddress to use
Returns
the Endpoint

Definition at line 227 of file tcp-l4-protocol.cc.

References ns3::Ipv4EndPointDemux::Allocate(), m_endPoints, and NS_LOG_FUNCTION.

+ Here is the call graph for this function:

◆ Allocate() [3/5]

Ipv4EndPoint * ns3::TcpL4Protocol::Allocate ( Ptr< NetDevice > boundNetDevice,
Ipv4Address address,
uint16_t port )

Allocate an IPv4 Endpoint.

Parameters
boundNetDeviceBound NetDevice (if any)
addressaddress to use
portport to use
Returns
the Endpoint

Definition at line 241 of file tcp-l4-protocol.cc.

References ns3::Ipv4EndPointDemux::Allocate(), m_endPoints, NS_LOG_FUNCTION, and port.

+ Here is the call graph for this function:

◆ Allocate() [4/5]

Ipv4EndPoint * ns3::TcpL4Protocol::Allocate ( Ptr< NetDevice > boundNetDevice,
Ipv4Address localAddress,
uint16_t localPort,
Ipv4Address peerAddress,
uint16_t peerPort )

Allocate an IPv4 Endpoint.

Parameters
boundNetDeviceBound NetDevice (if any)
localAddresslocal address to use
localPortlocal port to use
peerAddressremote address to use
peerPortremote port to use
Returns
the Endpoint

Definition at line 248 of file tcp-l4-protocol.cc.

References ns3::Ipv4EndPointDemux::Allocate(), m_endPoints, and NS_LOG_FUNCTION.

+ Here is the call graph for this function:

◆ Allocate() [5/5]

Ipv4EndPoint * ns3::TcpL4Protocol::Allocate ( Ptr< NetDevice > boundNetDevice,
uint16_t port )

Allocate an IPv4 Endpoint.

Parameters
boundNetDeviceBound NetDevice (if any)
portport to use
Returns
the Endpoint

Definition at line 234 of file tcp-l4-protocol.cc.

References ns3::Ipv4EndPointDemux::Allocate(), m_endPoints, NS_LOG_FUNCTION, and port.

+ Here is the call graph for this function:

◆ Allocate6() [1/5]

Ipv6EndPoint * ns3::TcpL4Protocol::Allocate6 ( )

Allocate an IPv6 Endpoint.

Returns
the Endpoint

Definition at line 266 of file tcp-l4-protocol.cc.

References ns3::Ipv6EndPointDemux::Allocate(), m_endPoints6, and NS_LOG_FUNCTION.

+ Here is the call graph for this function:

◆ Allocate6() [2/5]

Ipv6EndPoint * ns3::TcpL4Protocol::Allocate6 ( Ipv6Address address)

Allocate an IPv6 Endpoint.

Parameters
addressaddress to use
Returns
the Endpoint

Definition at line 273 of file tcp-l4-protocol.cc.

References ns3::Ipv6EndPointDemux::Allocate(), m_endPoints6, and NS_LOG_FUNCTION.

+ Here is the call graph for this function:

◆ Allocate6() [3/5]

Ipv6EndPoint * ns3::TcpL4Protocol::Allocate6 ( Ptr< NetDevice > boundNetDevice,
Ipv6Address address,
uint16_t port )

Allocate an IPv6 Endpoint.

Parameters
boundNetDeviceBound NetDevice (if any)
addressaddress to use
portport to use
Returns
the Endpoint

Definition at line 287 of file tcp-l4-protocol.cc.

References ns3::Ipv6EndPointDemux::Allocate(), m_endPoints6, NS_LOG_FUNCTION, and port.

+ Here is the call graph for this function:

◆ Allocate6() [4/5]

Ipv6EndPoint * ns3::TcpL4Protocol::Allocate6 ( Ptr< NetDevice > boundNetDevice,
Ipv6Address localAddress,
uint16_t localPort,
Ipv6Address peerAddress,
uint16_t peerPort )

Allocate an IPv6 Endpoint.

Parameters
boundNetDeviceBound NetDevice (if any)
localAddresslocal address to use
localPortlocal port to use
peerAddressremote address to use
peerPortremote port to use
Returns
the Endpoint

Definition at line 294 of file tcp-l4-protocol.cc.

References ns3::Ipv6EndPointDemux::Allocate(), m_endPoints6, and NS_LOG_FUNCTION.

+ Here is the call graph for this function:

◆ Allocate6() [5/5]

Ipv6EndPoint * ns3::TcpL4Protocol::Allocate6 ( Ptr< NetDevice > boundNetDevice,
uint16_t port )

Allocate an IPv6 Endpoint.

Parameters
boundNetDeviceBound NetDevice (if any)
portport to use
Returns
the Endpoint

Definition at line 280 of file tcp-l4-protocol.cc.

References ns3::Ipv6EndPointDemux::Allocate(), m_endPoints6, NS_LOG_FUNCTION, and port.

+ Here is the call graph for this function:

◆ CreateSocket() [1/3]

Ptr< Socket > ns3::TcpL4Protocol::CreateSocket ( )

Create a TCP socket using the TypeId set by SocketType attribute.

Returns
A smart Socket pointer to a TcpSocket allocated by this instance of the TCP protocol

Definition at line 214 of file tcp-l4-protocol.cc.

References CreateSocket(), m_congestionTypeId, and m_recoveryTypeId.

Referenced by CreateSocket(), and CreateSocket().

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

◆ CreateSocket() [2/3]

Ptr< Socket > ns3::TcpL4Protocol::CreateSocket ( TypeId congestionTypeId)

Create a TCP socket using the specified congestion control algorithm.

Returns
A smart Socket pointer to a TcpSocket allocated by this instance of the TCP protocol
Parameters
congestionTypeIdthe congestion control algorithm TypeId

Definition at line 182 of file tcp-l4-protocol.cc.

References CreateSocket(), and m_recoveryTypeId.

+ Here is the call graph for this function:

◆ CreateSocket() [3/3]

Ptr< Socket > ns3::TcpL4Protocol::CreateSocket ( TypeId congestionTypeId,
TypeId recoveryTypeId )

Create a TCP socket using the specified congestion control algorithm TypeId.

Returns
A smart Socket pointer to a TcpSocket allocated by this instance of the TCP protocol
Warning
using a congestionTypeId other than TCP is a bad idea.
Parameters
congestionTypeIdthe congestion control algorithm TypeId
recoveryTypeIdthe recovery algorithm TypeId

Definition at line 188 of file tcp-l4-protocol.cc.

References ns3::ObjectFactory::Create(), ns3::CreateObject(), ns3::TypeId::GetName(), m_node, m_rttTypeId, m_socketIndex, m_sockets, NS_LOG_FUNCTION, and ns3::ObjectFactory::SetTypeId().

+ Here is the call graph for this function:

◆ DeAllocate() [1/2]

void ns3::TcpL4Protocol::DeAllocate ( Ipv4EndPoint * endPoint)

Remove an IPv4 Endpoint.

Parameters
endPointthe end point to remove

Definition at line 259 of file tcp-l4-protocol.cc.

References ns3::Ipv4EndPointDemux::DeAllocate(), m_endPoints, and NS_LOG_FUNCTION.

+ Here is the call graph for this function:

◆ DeAllocate() [2/2]

void ns3::TcpL4Protocol::DeAllocate ( Ipv6EndPoint * endPoint)

Remove an IPv6 Endpoint.

Parameters
endPointthe end point to remove

Definition at line 305 of file tcp-l4-protocol.cc.

References ns3::Ipv6EndPointDemux::DeAllocate(), m_endPoints6, and NS_LOG_FUNCTION.

+ Here is the call graph for this function:

◆ DoDispose()

void ns3::TcpL4Protocol::DoDispose ( )
overrideprotectedvirtual

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 158 of file tcp-l4-protocol.cc.

References ns3::Object::DoDispose(), m_downTarget, m_downTarget6, m_endPoints, m_endPoints6, m_node, m_sockets, NS_LOG_FUNCTION, and ns3::Callback< R, UArgs >::Nullify().

+ Here is the call graph for this function:

◆ GetDownTarget()

IpL4Protocol::DownTargetCallback ns3::TcpL4Protocol::GetDownTarget ( ) const
overridevirtual

This method allows a caller to get the current down target callback set for this L4 protocol (IPv4 case)

Returns
current Callback for the L4 protocol

Implements ns3::IpL4Protocol.

Definition at line 779 of file tcp-l4-protocol.cc.

References m_downTarget.

◆ GetDownTarget6()

IpL4Protocol::DownTargetCallback6 ns3::TcpL4Protocol::GetDownTarget6 ( ) const
overridevirtual

This method allows a caller to get the current down target callback set for this L4 protocol (IPv6 case)

Returns
current Callback for the L4 protocol

Implements ns3::IpL4Protocol.

Definition at line 791 of file tcp-l4-protocol.cc.

References m_downTarget6.

◆ GetProtocolNumber()

int ns3::TcpL4Protocol::GetProtocolNumber ( ) const
overridevirtual

Returns the protocol number of this protocol.

Returns
the protocol number.

Implements ns3::IpL4Protocol.

Definition at line 152 of file tcp-l4-protocol.cc.

References PROT_NUMBER.

◆ GetTypeId()

TypeId ns3::TcpL4Protocol::GetTypeId ( )
static

Get the type ID.

Returns
the object TypeId

Definition at line 63 of file tcp-l4-protocol.cc.

References ns3::RttMeanDeviation::GetTypeId(), ns3::TcpCubic::GetTypeId(), ns3::TcpPrrRecovery::GetTypeId(), m_congestionTypeId, m_recoveryTypeId, m_rttTypeId, m_sockets, ns3::MakeObjectMapAccessor(), ns3::MakeObjectMapChecker(), ns3::MakeTypeIdAccessor(), ns3::MakeTypeIdChecker(), and ns3::TypeId::SetParent().

+ Here is the call graph for this function:

◆ NoEndPointsFound()

void ns3::TcpL4Protocol::NoEndPointsFound ( const TcpHeader & incomingHeader,
const Address & incomingSAddr,
const Address & incomingDAddr )
protected

Check if RST packet should be sent, and in case, send it.

The function is called when no endpoint is found for the received packet. So TcpL4Protocol do not know to who the packet should be given to. An RST packet is sent out as reply unless the received packet has the RST flag set.

Parameters
incomingHeaderTCP header of the incoming packet
incomingSAddrSource address of the incoming packet
incomingDAddrDestination address of the incoming packet

Definition at line 408 of file tcp-l4-protocol.cc.

References ns3::TcpHeader::ACK, ns3::Create(), ns3::TcpHeader::GetAckNumber(), ns3::TcpHeader::GetDestinationPort(), ns3::TcpHeader::GetFlags(), ns3::TcpHeader::GetSequenceNumber(), ns3::TcpHeader::GetSourcePort(), NS_LOG_FUNCTION, ns3::TcpHeader::RST, SendPacket(), ns3::TcpHeader::SetAckNumber(), ns3::TcpHeader::SetDestinationPort(), ns3::TcpHeader::SetFlags(), ns3::TcpHeader::SetSequenceNumber(), and ns3::TcpHeader::SetSourcePort().

Referenced by Receive(), and Receive().

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

◆ NotifyNewAggregate()

void ns3::TcpL4Protocol::NotifyNewAggregate ( )
overrideprotectedvirtual

Setup socket factory and callbacks when aggregated to a node.

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. The aggregation is completed by setting the node in the TCP stack, link it to the ipv4 or ipv6 stack and adding TCP socket factory to the node.

Reimplemented from ns3::Object.

Definition at line 115 of file tcp-l4-protocol.cc.

References ns3::CreateObject(), ns3::Object::GetObject(), ns3::Callback< R, UArgs >::IsNull(), m_downTarget, m_downTarget6, m_node, ns3::MakeCallback(), ns3::Object::NotifyNewAggregate(), NS_LOG_FUNCTION, ns3::Ipv4::Send(), ns3::Ipv6::Send(), SetDownTarget(), SetDownTarget6(), and SetNode().

+ Here is the call graph for this function:

◆ operator=()

TcpL4Protocol & ns3::TcpL4Protocol::operator= ( const TcpL4Protocol & )
delete

◆ PacketReceived()

IpL4Protocol::RxStatus ns3::TcpL4Protocol::PacketReceived ( Ptr< Packet > packet,
TcpHeader & incomingTcpHeader,
const Address & source,
const Address & destination )
protected

Get the tcp header of the incoming packet and checks its checksum if needed.

Parameters
packetReceived packet
incomingTcpHeaderOverwritten with the tcp header of the packet
sourceSource address (an underlying Ipv4Address or Ipv6Address)
destinationDestination address (an underlying Ipv4Address or Ipv6Address)
Returns
RX_CSUM_FAILED if the checksum check fails, RX_OK otherwise

Definition at line 377 of file tcp-l4-protocol.cc.

References ns3::Node::ChecksumEnabled(), ns3::TcpHeader::EnableChecksums(), ns3::TcpHeader::FlagsToString(), ns3::TcpHeader::GetAckNumber(), ns3::TcpHeader::GetFlags(), ns3::TcpHeader::GetSequenceNumber(), ns3::TcpHeader::InitializeChecksum(), ns3::TcpHeader::IsChecksumOk(), NS_LOG_FUNCTION, NS_LOG_INFO, NS_LOG_LOGIC, PROT_NUMBER, ns3::IpL4Protocol::RX_CSUM_FAILED, and ns3::IpL4Protocol::RX_OK.

Referenced by Receive(), and Receive().

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

◆ Receive() [1/2]

IpL4Protocol::RxStatus ns3::TcpL4Protocol::Receive ( Ptr< Packet > p,
const Ipv4Header & header,
Ptr< Ipv4Interface > incomingInterface )
overridevirtual

Called from lower-level layers to send the packet up in the stack.

Parameters
ppacket to forward up
headerIPv4 Header information
incomingInterfacethe Ipv4Interface on which the packet arrived
Returns
Rx status code

Implements ns3::IpL4Protocol.

Definition at line 445 of file tcp-l4-protocol.cc.

References ns3::Ipv4Header::GetDestination(), ns3::TcpHeader::GetDestinationPort(), ns3::Object::GetObject(), ns3::Ipv4Header::GetSource(), ns3::TcpHeader::GetSourcePort(), ns3::Ipv4EndPointDemux::Lookup(), m_endPoints, ns3::Ipv6Address::MakeIpv4MappedAddress(), NoEndPointsFound(), NS_ASSERT_MSG, NS_LOG_FUNCTION, NS_LOG_LOGIC, PacketReceived(), Receive(), ns3::IpL4Protocol::RX_ENDPOINT_CLOSED, ns3::IpL4Protocol::RX_OK, ns3::Ipv6Header::SetDestination(), and ns3::Ipv6Header::SetSource().

Referenced by Receive().

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

◆ Receive() [2/2]

IpL4Protocol::RxStatus ns3::TcpL4Protocol::Receive ( Ptr< Packet > p,
const Ipv6Header & header,
Ptr< Ipv6Interface > incomingInterface )
overridevirtual

Called from lower-level layers to send the packet up in the stack.

Parameters
ppacket to forward up
headerIPv6 Header information
incomingInterfacethe Ipv6Interface on which the packet arrived
Returns
Rx status code

Implements ns3::IpL4Protocol.

Definition at line 516 of file tcp-l4-protocol.cc.

References ns3::Ipv6Header::GetDestination(), ns3::TcpHeader::GetDestinationPort(), ns3::Ipv6Header::GetSource(), ns3::TcpHeader::GetSourcePort(), ns3::Ipv6EndPointDemux::Lookup(), m_endPoints6, NoEndPointsFound(), NS_ASSERT_MSG, NS_LOG_FUNCTION, NS_LOG_LOGIC, PacketReceived(), ns3::IpL4Protocol::RX_ENDPOINT_CLOSED, and ns3::IpL4Protocol::RX_OK.

+ Here is the call graph for this function:

◆ ReceiveIcmp() [1/2]

void ns3::TcpL4Protocol::ReceiveIcmp ( Ipv4Address icmpSource,
uint8_t icmpTtl,
uint8_t icmpType,
uint8_t icmpCode,
uint32_t icmpInfo,
Ipv4Address payloadSource,
Ipv4Address payloadDestination,
const uint8_t payload[8] )
overridevirtual

Called from lower-level layers to send the ICMP packet up in the stack.

Parameters
icmpSourcethe source address of the icmp message
icmpTtlthe ttl of the icmp message
icmpTypethe 'type' field of the icmp message
icmpCodethe 'code' field of the icmp message
icmpInfoextra information dependent on the icmp message generated by Icmpv4L4Protocol
payloadSourcethe source address of the packet which triggered the icmp message
payloadDestinationthe destination address of the packet which triggered the icmp message.
payloadthe first 8 bytes of the packet payload which triggered the icmp message.

Reimplemented from ns3::IpL4Protocol.

Definition at line 312 of file tcp-l4-protocol.cc.

References ns3::Ipv4EndPoint::ForwardIcmp(), m_endPoints, NS_LOG_DEBUG, NS_LOG_FUNCTION, and ns3::Ipv4EndPointDemux::SimpleLookup().

+ Here is the call graph for this function:

◆ ReceiveIcmp() [2/2]

void ns3::TcpL4Protocol::ReceiveIcmp ( Ipv6Address icmpSource,
uint8_t icmpTtl,
uint8_t icmpType,
uint8_t icmpCode,
uint32_t icmpInfo,
Ipv6Address payloadSource,
Ipv6Address payloadDestination,
const uint8_t payload[8] )
overridevirtual

Called from lower-level layers to send the ICMPv6 packet up in the stack.

Parameters
icmpSourcethe source address of the icmp message
icmpTtlthe ttl of the icmp message
icmpTypethe 'type' field of the icmp message
icmpCodethe 'code' field of the icmp message
icmpInfoextra information dependent on the icmp message generated by Icmpv6L4Protocol
payloadSourcethe source address of the packet which triggered the icmp message
payloadDestinationthe destination address of the packet which triggered the icmp message.
payloadthe first 8 bytes of the packet payload which triggered the icmp message.

Reimplemented from ns3::IpL4Protocol.

Definition at line 344 of file tcp-l4-protocol.cc.

References ns3::Ipv6EndPoint::ForwardIcmp(), m_endPoints6, NS_LOG_DEBUG, NS_LOG_FUNCTION, and ns3::Ipv6EndPointDemux::SimpleLookup().

+ Here is the call graph for this function:

◆ RemoveSocket()

bool ns3::TcpL4Protocol::RemoveSocket ( Ptr< TcpSocketBase > socket)

Remove a socket from the internal list.

Parameters
socketsocket to Remove
Returns
true if the socket has been removed

Definition at line 755 of file tcp-l4-protocol.cc.

References m_sockets, and NS_LOG_FUNCTION.

◆ SendPacket()

void ns3::TcpL4Protocol::SendPacket ( Ptr< Packet > pkt,
const TcpHeader & outgoing,
const Address & saddr,
const Address & daddr,
Ptr< NetDevice > oif = nullptr ) const

Send a packet via TCP (IP-agnostic)

Parameters
pktThe packet to send
outgoingThe packet header
saddrThe source Ipv4Address
daddrThe destination Ipv4Address
oifThe output interface bound. Defaults to null (unspecified).

Definition at line 686 of file tcp-l4-protocol.cc.

References ns3::Inet6SocketAddress::ConvertFrom(), ns3::InetSocketAddress::ConvertFrom(), ns3::Ipv4Address::ConvertFrom(), ns3::Ipv6Address::ConvertFrom(), ns3::InetSocketAddress::GetIpv4(), ns3::Inet6SocketAddress::GetIpv6(), ns3::Inet6SocketAddress::IsMatchingType(), ns3::InetSocketAddress::IsMatchingType(), ns3::Ipv4Address::IsMatchingType(), ns3::Ipv6Address::IsMatchingType(), NS_ASSERT, NS_FATAL_ERROR, NS_LOG_FUNCTION, SendPacketV4(), and SendPacketV6().

Referenced by NoEndPointsFound(), and SendPacketV6().

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

◆ SendPacketV4()

void ns3::TcpL4Protocol::SendPacketV4 ( Ptr< Packet > pkt,
const TcpHeader & outgoing,
const Ipv4Address & saddr,
const Ipv4Address & daddr,
Ptr< NetDevice > oif = nullptr ) const
private

Send a packet via TCP (IPv4)

Parameters
pktThe packet to send
outgoingThe packet header
saddrThe source Ipv4Address
daddrThe destination Ipv4Address
oifThe output interface bound. Defaults to null (unspecified).
Todo
UrgentPointer

Definition at line 576 of file tcp-l4-protocol.cc.

References ns3::Node::ChecksumEnabled(), ns3::TcpHeader::EnableChecksums(), ns3::TcpHeader::FlagsToString(), ns3::TcpHeader::GetAckNumber(), ns3::TcpHeader::GetFlags(), ns3::Object::GetObject(), ns3::TcpHeader::GetSequenceNumber(), ns3::TcpHeader::InitializeChecksum(), m_downTarget, m_node, NS_FATAL_ERROR, NS_LOG_ERROR, NS_LOG_FUNCTION, NS_LOG_LOGIC, PROT_NUMBER, ns3::Ipv4Header::SetDestination(), ns3::Ipv4Header::SetProtocol(), and ns3::Ipv4Header::SetSource().

Referenced by SendPacket().

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

◆ SendPacketV6()

void ns3::TcpL4Protocol::SendPacketV6 ( Ptr< Packet > pkt,
const TcpHeader & outgoing,
const Ipv6Address & saddr,
const Ipv6Address & daddr,
Ptr< NetDevice > oif = nullptr ) const
private

Send a packet via TCP (IPv6)

Parameters
pktThe packet to send
outgoingThe packet header
saddrThe source Ipv4Address
daddrThe destination Ipv4Address
oifThe output interface bound. Defaults to null (unspecified).
Todo
UrgentPointer

Definition at line 627 of file tcp-l4-protocol.cc.

References ns3::Node::ChecksumEnabled(), ns3::TcpHeader::EnableChecksums(), ns3::TcpHeader::FlagsToString(), ns3::TcpHeader::GetAckNumber(), ns3::TcpHeader::GetFlags(), ns3::Ipv6Address::GetIpv4MappedAddress(), ns3::Object::GetObject(), ns3::TcpHeader::GetSequenceNumber(), ns3::TcpHeader::InitializeChecksum(), ns3::Ipv6Address::IsIpv4MappedAddress(), m_downTarget6, m_node, NS_FATAL_ERROR, NS_LOG_ERROR, NS_LOG_FUNCTION, NS_LOG_LOGIC, PROT_NUMBER, SendPacket(), ns3::Ipv6Header::SetDestination(), ns3::Ipv6Header::SetNextHeader(), and ns3::Ipv6Header::SetSource().

Referenced by SendPacket().

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

◆ SetDownTarget()

void ns3::TcpL4Protocol::SetDownTarget ( IpL4Protocol::DownTargetCallback cb)
overridevirtual

This method allows a caller to set the current down target callback set for this L4 protocol (IPv4 case)

Parameters
cbcurrent Callback for the L4 protocol

Implements ns3::IpL4Protocol.

Definition at line 773 of file tcp-l4-protocol.cc.

References m_downTarget.

Referenced by NotifyNewAggregate().

+ Here is the caller graph for this function:

◆ SetDownTarget6()

void ns3::TcpL4Protocol::SetDownTarget6 ( IpL4Protocol::DownTargetCallback6 cb)
overridevirtual

This method allows a caller to set the current down target callback set for this L4 protocol (IPv6 case)

Parameters
cbcurrent Callback for the L4 protocol

Implements ns3::IpL4Protocol.

Definition at line 785 of file tcp-l4-protocol.cc.

References m_downTarget6.

Referenced by NotifyNewAggregate().

+ Here is the caller graph for this function:

◆ SetNode()

void ns3::TcpL4Protocol::SetNode ( Ptr< Node > node)

Set node associated with this stack.

Parameters
nodethe node

Definition at line 108 of file tcp-l4-protocol.cc.

References m_node, and NS_LOG_FUNCTION.

Referenced by NotifyNewAggregate().

+ Here is the caller graph for this function:

Member Data Documentation

◆ m_congestionTypeId

TypeId ns3::TcpL4Protocol::m_congestionTypeId
private

The socket TypeId.

Definition at line 331 of file tcp-l4-protocol.h.

Referenced by CreateSocket(), and GetTypeId().

◆ m_downTarget

IpL4Protocol::DownTargetCallback ns3::TcpL4Protocol::m_downTarget
private

Callback to send packets over IPv4.

Definition at line 336 of file tcp-l4-protocol.h.

Referenced by DoDispose(), GetDownTarget(), NotifyNewAggregate(), SendPacketV4(), and SetDownTarget().

◆ m_downTarget6

IpL4Protocol::DownTargetCallback6 ns3::TcpL4Protocol::m_downTarget6
private

Callback to send packets over IPv6.

Definition at line 337 of file tcp-l4-protocol.h.

Referenced by DoDispose(), GetDownTarget6(), NotifyNewAggregate(), SendPacketV6(), and SetDownTarget6().

◆ m_endPoints

Ipv4EndPointDemux* ns3::TcpL4Protocol::m_endPoints
private

A list of IPv4 end points.

Definition at line 328 of file tcp-l4-protocol.h.

Referenced by Allocate(), Allocate(), Allocate(), Allocate(), Allocate(), DeAllocate(), DoDispose(), Receive(), and ReceiveIcmp().

◆ m_endPoints6

Ipv6EndPointDemux* ns3::TcpL4Protocol::m_endPoints6
private

A list of IPv6 end points.

Definition at line 329 of file tcp-l4-protocol.h.

Referenced by Allocate6(), Allocate6(), Allocate6(), Allocate6(), Allocate6(), DeAllocate(), DoDispose(), Receive(), and ReceiveIcmp().

◆ m_node

Ptr<Node> ns3::TcpL4Protocol::m_node
private

the node this stack is associated with

Definition at line 327 of file tcp-l4-protocol.h.

Referenced by CreateSocket(), DoDispose(), NotifyNewAggregate(), SendPacketV4(), SendPacketV6(), and SetNode().

◆ m_recoveryTypeId

TypeId ns3::TcpL4Protocol::m_recoveryTypeId
private

The recovery TypeId.

Definition at line 332 of file tcp-l4-protocol.h.

Referenced by CreateSocket(), CreateSocket(), and GetTypeId().

◆ m_rttTypeId

TypeId ns3::TcpL4Protocol::m_rttTypeId
private

The RTT Estimator TypeId.

Definition at line 330 of file tcp-l4-protocol.h.

Referenced by CreateSocket(), and GetTypeId().

◆ m_socketIndex

uint64_t ns3::TcpL4Protocol::m_socketIndex {0}
private

index of the next socket to be created

Definition at line 335 of file tcp-l4-protocol.h.

Referenced by AddSocket(), and CreateSocket().

◆ m_sockets

std::unordered_map<uint64_t, Ptr<TcpSocketBase> > ns3::TcpL4Protocol::m_sockets
private

Unordered map of socket IDs and corresponding sockets.

Definition at line 334 of file tcp-l4-protocol.h.

Referenced by AddSocket(), CreateSocket(), DoDispose(), GetTypeId(), and RemoveSocket().

◆ PROT_NUMBER

const uint8_t ns3::TcpL4Protocol::PROT_NUMBER = 6
static

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