A Discrete-Event Network Simulator
API
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 ()
 
virtual ~TcpL4Protocol ()
 
void AddSocket (Ptr< TcpSocketBase > socket)
 Make a socket fully operational. More...
 
Ipv4EndPointAllocate (void)
 Allocate an IPv4 Endpoint. More...
 
Ipv4EndPointAllocate (Ipv4Address address)
 Allocate an IPv4 Endpoint. More...
 
Ipv4EndPointAllocate (Ptr< NetDevice > boundNetDevice, uint16_t port)
 Allocate an IPv4 Endpoint. More...
 
Ipv4EndPointAllocate (Ptr< NetDevice > boundNetDevice, Ipv4Address address, uint16_t port)
 Allocate an IPv4 Endpoint. More...
 
Ipv4EndPointAllocate (Ptr< NetDevice > boundNetDevice, Ipv4Address localAddress, uint16_t localPort, Ipv4Address peerAddress, uint16_t peerPort)
 Allocate an IPv4 Endpoint. More...
 
Ipv6EndPointAllocate6 (void)
 Allocate an IPv6 Endpoint. More...
 
Ipv6EndPointAllocate6 (Ipv6Address address)
 Allocate an IPv6 Endpoint. More...
 
Ipv6EndPointAllocate6 (Ptr< NetDevice > boundNetDevice, uint16_t port)
 Allocate an IPv6 Endpoint. More...
 
Ipv6EndPointAllocate6 (Ptr< NetDevice > boundNetDevice, Ipv6Address address, uint16_t port)
 Allocate an IPv6 Endpoint. More...
 
Ipv6EndPointAllocate6 (Ptr< NetDevice > boundNetDevice, Ipv6Address localAddress, uint16_t localPort, Ipv6Address peerAddress, uint16_t peerPort)
 Allocate an IPv6 Endpoint. More...
 
Ptr< SocketCreateSocket (void)
 Create a TCP socket using the TypeId set by SocketType attribute. More...
 
Ptr< SocketCreateSocket (TypeId congestionTypeId, TypeId recoveryTypeId)
 Create a TCP socket using the specified congestion control algorithm TypeId. More...
 
Ptr< SocketCreateSocket (TypeId congestionTypeId)
 Create a TCP socket using the specified congestion control algorithm. More...
 
void DeAllocate (Ipv4EndPoint *endPoint)
 Remove an IPv4 Endpoint. More...
 
void DeAllocate (Ipv6EndPoint *endPoint)
 Remove an IPv6 Endpoint. More...
 
virtual IpL4Protocol::DownTargetCallback GetDownTarget (void) const
 This method allows a caller to get the current down target callback set for this L4 protocol (IPv4 case) More...
 
virtual IpL4Protocol::DownTargetCallback6 GetDownTarget6 (void) const
 This method allows a caller to get the current down target callback set for this L4 protocol (IPv6 case) More...
 
virtual int GetProtocolNumber (void) const
 Returns the protocol number of this protocol. More...
 
virtual enum IpL4Protocol::RxStatus Receive (Ptr< Packet > p, Ipv4Header const &incomingIpHeader, Ptr< Ipv4Interface > incomingInterface)
 Called from lower-level layers to send the packet up in the stack. More...
 
virtual enum IpL4Protocol::RxStatus Receive (Ptr< Packet > p, Ipv6Header const &incomingIpHeader, Ptr< Ipv6Interface > incomingInterface)
 Called from lower-level layers to send the packet up in the stack. More...
 
virtual 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])
 Called from lower-level layers to send the ICMP packet up in the stack. More...
 
virtual 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])
 Called from lower-level layers to send the ICMPv6 packet up in the stack. More...
 
bool RemoveSocket (Ptr< TcpSocketBase > socket)
 Remove a socket from the internal list. More...
 
void SendPacket (Ptr< Packet > pkt, const TcpHeader &outgoing, const Address &saddr, const Address &daddr, Ptr< NetDevice > oif=0) const
 Send a packet via TCP (IP-agnostic) More...
 
virtual void SetDownTarget (IpL4Protocol::DownTargetCallback cb)
 This method allows a caller to set the current down target callback set for this L4 protocol (IPv4 case) More...
 
virtual void SetDownTarget6 (IpL4Protocol::DownTargetCallback6 cb)
 This method allows a caller to set the current down target callback set for this L4 protocol (IPv6 case) More...
 
void SetNode (Ptr< Node > node)
 Set node associated with this stack. More...
 
- Public Member Functions inherited from ns3::IpL4Protocol
virtual ~IpL4Protocol ()
 
- 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...
 
template<>
Ptr< ObjectGetObject () const
 
template<>
Ptr< ObjectGetObject (TypeId tid) const
 
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::IpL4Protocol
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 uint8_t PROT_NUMBER = 6
 protocol number (0x6) More...
 

Protected Member Functions

virtual void DoDispose (void)
 Destructor implementation. More...
 
void NoEndPointsFound (const TcpHeader &incomingHeader, const Address &incomingSAddr, const Address &incomingDAddr)
 Check if RST packet should be sent, and in case, send it. More...
 
virtual void NotifyNewAggregate ()
 Setup socket factory and callbacks when aggregated to a node. More...
 
enum 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. 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 Member Functions

 TcpL4Protocol (const TcpL4Protocol &)
 Copy constructor. More...
 
TcpL4Protocoloperator= (const TcpL4Protocol &)
 Copy constructor. More...
 
void SendPacketV4 (Ptr< Packet > pkt, const TcpHeader &outgoing, const Ipv4Address &saddr, const Ipv4Address &daddr, Ptr< NetDevice > oif=0) const
 Send a packet via TCP (IPv4) More...
 
void SendPacketV6 (Ptr< Packet > pkt, const TcpHeader &outgoing, const Ipv6Address &saddr, const Ipv6Address &daddr, Ptr< NetDevice > oif=0) const
 Send a packet via TCP (IPv6) More...
 

Private Attributes

TypeId m_congestionTypeId
 The socket TypeId. More...
 
IpL4Protocol::DownTargetCallback m_downTarget
 Callback to send packets over IPv4. More...
 
IpL4Protocol::DownTargetCallback6 m_downTarget6
 Callback to send packets over IPv6. More...
 
Ipv4EndPointDemuxm_endPoints
 A list of IPv4 end points. More...
 
Ipv6EndPointDemuxm_endPoints6
 A list of IPv6 end points. More...
 
Ptr< Nodem_node
 the node this stack is associated with More...
 
TypeId m_recoveryTypeId
 The recovery TypeId. More...
 
TypeId m_rttTypeId
 The RTT Estimator TypeId. More...
 
std::vector< Ptr< TcpSocketBase > > m_sockets
 list of sockets More...
 

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 More...
 
typedef Callback< void, Ptr< Packet >, Ipv6Address, Ipv6Address, uint8_t, Ptr< Ipv6Route > > DownTargetCallback6
 callback to send packets over IPv6 More...
 
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.

No TraceSources are defined for this type.
Size of this type is 104 bytes (on a 64-bit architecture).

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

Constructor & Destructor Documentation

◆ TcpL4Protocol() [1/2]

ns3::TcpL4Protocol::TcpL4Protocol ( )

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

References NS_LOG_FUNCTION.

◆ ~TcpL4Protocol()

ns3::TcpL4Protocol::~TcpL4Protocol ( )
virtual

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

References NS_LOG_FUNCTION.

◆ TcpL4Protocol() [2/2]

ns3::TcpL4Protocol::TcpL4Protocol ( const TcpL4Protocol )
private

Copy constructor.

Defined and not implemented to avoid misuse

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

References m_sockets, and NS_LOG_FUNCTION.

◆ Allocate() [1/5]

Ipv4EndPoint * ns3::TcpL4Protocol::Allocate ( void  )

Allocate an IPv4 Endpoint.

Returns
the Endpoint

Definition at line 222 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 229 of file tcp-l4-protocol.cc.

References first::address, 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,
uint16_t  port 
)

Allocate an IPv4 Endpoint.

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

Definition at line 236 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  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 243 of file tcp-l4-protocol.cc.

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

+ Here is the call graph for this function:

◆ Allocate() [5/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 250 of file tcp-l4-protocol.cc.

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

+ Here is the call graph for this function:

◆ Allocate6() [1/5]

Ipv6EndPoint * ns3::TcpL4Protocol::Allocate6 ( void  )

Allocate an IPv6 Endpoint.

Returns
the Endpoint

Definition at line 268 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 275 of file tcp-l4-protocol.cc.

References first::address, 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,
uint16_t  port 
)

Allocate an IPv6 Endpoint.

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

Definition at line 282 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  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 289 of file tcp-l4-protocol.cc.

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

+ Here is the call graph for this function:

◆ Allocate6() [5/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 296 of file tcp-l4-protocol.cc.

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

+ Here is the call graph for this function:

◆ CreateSocket() [1/3]

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

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

References m_congestionTypeId, and m_recoveryTypeId.

Referenced by CreateSocket().

+ Here is the caller graph for this function:

◆ CreateSocket() [2/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 190 of file tcp-l4-protocol.cc.

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

+ Here is the call graph for this function:

◆ CreateSocket() [3/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 184 of file tcp-l4-protocol.cc.

References CreateSocket(), and m_recoveryTypeId.

+ 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 261 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 307 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 ( 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 160 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, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::Nullify().

+ Here is the call graph for this function:

◆ GetDownTarget()

IpL4Protocol::DownTargetCallback ns3::TcpL4Protocol::GetDownTarget ( void  ) const
virtual

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

References m_downTarget.

◆ GetDownTarget6()

IpL4Protocol::DownTargetCallback6 ns3::TcpL4Protocol::GetDownTarget6 ( void  ) const
virtual

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

References m_downTarget6.

◆ GetProtocolNumber()

int ns3::TcpL4Protocol::GetProtocolNumber ( void  ) const
virtual

Returns the protocol number of this protocol.

Returns
the protocol number.

Implements ns3::IpL4Protocol.

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

References PROT_NUMBER.

◆ GetTypeId()

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

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

References ns3::TcpHeader::ACK, ns3::TcpHeader::GetAckNumber(), ns3::TcpHeader::GetDestinationPort(), ns3::TcpHeader::GetFlags(), ns3::TcpHeader::GetSequenceNumber(), ns3::TcpHeader::GetSourcePort(), NS_LOG_FUNCTION, ns3::TcpHeader::RST, SendPacket(), and ns3::TcpHeader::SetFlags().

Referenced by Receive().

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

◆ NotifyNewAggregate()

void ns3::TcpL4Protocol::NotifyNewAggregate ( void  )
protectedvirtual

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

References ns3::Object::AggregateObject(), ns3::Object::GetObject(), ns3::Callback< R, T1, T2, T3, T4, T5, T6, T7, T8, T9 >::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 )
private

Copy constructor.

Defined and not implemented to avoid misuse

Returns

◆ PacketReceived()

enum 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 368 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::Packet::GetSize(), ns3::TcpHeader::InitializeChecksum(), ns3::TcpHeader::IsChecksumOk(), NS_LOG_FUNCTION, NS_LOG_INFO, NS_LOG_LOGIC(), ns3::Packet::PeekHeader(), PROT_NUMBER, ns3::IpL4Protocol::RX_CSUM_FAILED, and ns3::IpL4Protocol::RX_OK.

Referenced by Receive().

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

◆ Receive() [1/2]

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

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

References ns3::Ipv4Header::GetDestination(), ns3::TcpHeader::GetDestinationPort(), 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(), ns3::IpL4Protocol::RX_ENDPOINT_CLOSED, ns3::IpL4Protocol::RX_OK, ns3::Ipv6Header::SetDestinationAddress(), and ns3::Ipv6Header::SetSourceAddress().

+ Here is the call graph for this function:

◆ Receive() [2/2]

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

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

References ns3::Ipv6Header::GetDestinationAddress(), ns3::Ipv6Header::GetSourceAddress(), 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] 
)
virtual

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 314 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] 
)
virtual

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 341 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 725 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 = 0 
) 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 660 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 = 0 
) 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 555 of file tcp-l4-protocol.cc.

References ns3::Packet::AddHeader(), ns3::Node::ChecksumEnabled(), ns3::TcpHeader::EnableChecksums(), ns3::TcpHeader::FlagsToString(), ns3::TcpHeader::GetAckNumber(), ns3::TcpHeader::GetFlags(), ns3::Object::GetObject(), ns3::TcpHeader::GetSequenceNumber(), ns3::Packet::GetSize(), 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 = 0 
) const
private

◆ SetDownTarget()

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

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 745 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)
virtual

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 757 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 110 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 321 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 324 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 325 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 318 of file tcp-l4-protocol.h.

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

◆ m_endPoints6

Ipv6EndPointDemux* ns3::TcpL4Protocol::m_endPoints6
private

A list of IPv6 end points.

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

Referenced by 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 317 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 322 of file tcp-l4-protocol.h.

Referenced by CreateSocket(), and GetTypeId().

◆ m_rttTypeId

TypeId ns3::TcpL4Protocol::m_rttTypeId
private

The RTT Estimator TypeId.

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

Referenced by CreateSocket(), and GetTypeId().

◆ m_sockets

std::vector<Ptr<TcpSocketBase> > ns3::TcpL4Protocol::m_sockets
private

list of sockets

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