A Discrete-Event Network Simulator
API
tcp-socket.cc
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2007 INRIA
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
19  */
20 
21 #include "ns3/object.h"
22 #include "ns3/log.h"
23 #include "ns3/uinteger.h"
24 #include "ns3/double.h"
25 #include "ns3/boolean.h"
26 #include "ns3/trace-source-accessor.h"
27 #include "ns3/nstime.h"
28 #include "tcp-socket.h"
29 
30 namespace ns3 {
31 
32 NS_LOG_COMPONENT_DEFINE ("TcpSocket");
33 
34 NS_OBJECT_ENSURE_REGISTERED (TcpSocket);
35 
36 const char* const TcpSocket::TcpStateName[LAST_STATE] = { "CLOSED", "LISTEN", "SYN_SENT", "SYN_RCVD", "ESTABLISHED", "CLOSE_WAIT", "LAST_ACK", "FIN_WAIT_1", "FIN_WAIT_2", "CLOSING", "TIME_WAIT" };
37 
38 TypeId
40 {
41  static TypeId tid = TypeId ("ns3::TcpSocket")
42  .SetParent<Socket> ()
43  .AddAttribute ("SndBufSize",
44  "TcpSocket maximum transmit buffer size (bytes)",
45  UintegerValue (131072), // 128k
48  MakeUintegerChecker<uint32_t> ())
49  .AddAttribute ("RcvBufSize",
50  "TcpSocket maximum receive buffer size (bytes)",
51  UintegerValue (131072),
54  MakeUintegerChecker<uint32_t> ())
55  .AddAttribute ("SegmentSize",
56  "TCP maximum segment size in bytes (may be adjusted based on MTU discovery)",
57  UintegerValue (536),
60  MakeUintegerChecker<uint32_t> ())
61  .AddAttribute ("InitialSlowStartThreshold",
62  "TCP initial slow start threshold (bytes)",
63  UintegerValue (0xffff),
66  MakeUintegerChecker<uint32_t> ())
67  .AddAttribute ("InitialCwnd",
68  "TCP initial congestion window size (segments)",
69  UintegerValue (1),
72  MakeUintegerChecker<uint32_t> ())
73  .AddAttribute ("ConnTimeout",
74  "TCP retransmission timeout when opening connection (seconds)",
75  TimeValue (Seconds (3)),
78  MakeTimeChecker ())
79  .AddAttribute ("ConnCount",
80  "Number of connection attempts (SYN retransmissions) before returning failure",
81  UintegerValue (6),
84  MakeUintegerChecker<uint32_t> ())
85  .AddAttribute ("DelAckTimeout",
86  "Timeout value for TCP delayed acks, in seconds",
87  TimeValue (Seconds (0.2)),
90  MakeTimeChecker ())
91  .AddAttribute ("DelAckCount",
92  "Number of packets to wait before sending a TCP ack",
93  UintegerValue (2),
96  MakeUintegerChecker<uint32_t> ())
97  .AddAttribute ("TcpNoDelay", "Set to true to disable Nagle's algorithm",
98  BooleanValue (true),
102  .AddAttribute ("PersistTimeout",
103  "Persist timeout to probe for rx window",
104  TimeValue (Seconds (6)),
107  MakeTimeChecker ())
108  ;
109  return tid;
110 }
111 
113 {
115 }
116 
118 {
120 }
121 
122 } // namespace ns3
virtual void SetSndBufSize(uint32_t size)=0
Set the send buffer size.
AttributeValue implementation for Boolean.
Definition: boolean.h:34
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
Definition: object-base.h:44
Ptr< const AttributeAccessor > MakeBooleanAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
Definition: boolean.h:81
virtual ~TcpSocket(void)
Definition: tcp-socket.cc:117
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:201
#define NS_LOG_FUNCTION_NOARGS()
Output the name of the function.
virtual void SetInitialCwnd(uint32_t cwnd)=0
Set the initial Congestion Window.
virtual void SetRcvBufSize(uint32_t size)=0
Set the receive buffer size.
Ptr< const AttributeChecker > MakeTimeChecker(const Time min, const Time max)
Helper to make a Time checker with bounded range.
Definition: time.cc:439
virtual void SetInitialSSThresh(uint32_t threshold)=0
Set the initial Slow Start Threshold.
virtual void SetPersistTimeout(Time timeout)=0
Set the timout for persistent connection.
A low-level Socket API based loosely on the BSD Socket API.
Definition: socket.h:66
static TypeId GetTypeId(void)
Get the type ID.
Definition: tcp-socket.cc:39
static const char *const TcpStateName[LAST_STATE]
Literal names of TCP states for use in log messages.
Definition: tcp-socket.h:93
AttributeValue implementation for Time.
Definition: nstime.h:921
Hold an unsigned integer type.
Definition: uinteger.h:44
virtual uint32_t GetSndBufSize(void) const =0
Get the send buffer size.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
virtual void SetDelAckMaxCount(uint32_t count)=0
Set the number of packet to fire an ACK before delay timeout.
Ptr< const AttributeChecker > MakeBooleanChecker(void)
Definition: boolean.cc:121
virtual void SetTcpNoDelay(bool noDelay)=0
Enable/Disable Nagle's algorithm.
Ptr< const AttributeAccessor > MakeTimeAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
Definition: nstime.h:922
virtual uint32_t GetRcvBufSize(void) const =0
Get the receive buffer size.
virtual void SetDelAckTimeout(Time timeout)=0
Set the time to delay an ACK.
virtual void SetConnCount(uint32_t count)=0
Set the number of connection retries before giving up.
virtual uint32_t GetSegSize(void) const =0
Get the segment size.
virtual Time GetDelAckTimeout(void) const =0
Get the time to delay an ACK.
virtual bool GetTcpNoDelay(void) const =0
Check if Nagle's algorithm is enabled or not.
virtual void SetConnTimeout(Time timeout)=0
Set the connection timeout.
virtual uint32_t GetDelAckMaxCount(void) const =0
Get the number of packet to fire an ACK before delay timeout.
virtual Time GetConnTimeout(void) const =0
Get the connection timeout.
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition: nstime.h:859
virtual void SetSegSize(uint32_t size)=0
Set the segment size.
Ptr< const AttributeAccessor > MakeUintegerAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
Definition: uinteger.h:45
a unique identifier for an interface.
Definition: type-id.h:51
virtual uint32_t GetInitialCwnd(void) const =0
Get the initial Congestion Window.
TypeId SetParent(TypeId tid)
Definition: type-id.cc:631
virtual uint32_t GetInitialSSThresh(void) const =0
Get the initial Slow Start Threshold.
virtual Time GetPersistTimeout(void) const =0
Get the timout for persistent connection.
virtual uint32_t GetConnCount(void) const =0
Get the number of connection retries before giving up.