A Discrete-Event Network Simulator
API
tcp-socket-state.h
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2018 Natale Patriciello <natale.patriciello@gmail.com>
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 #ifndef TCP_SOCKET_STATE_H
19 #define TCP_SOCKET_STATE_H
20 
21 #include "ns3/object.h"
22 #include "ns3/data-rate.h"
23 #include "ns3/traced-value.h"
24 #include "ns3/sequence-number.h"
25 #include "tcp-rx-buffer.h"
26 
27 namespace ns3 {
28 
41 class TcpSocketState : public Object
42 {
43 public:
49  static TypeId GetTypeId (void);
50 
54  TcpSocketState () : Object () { }
55 
60  TcpSocketState (const TcpSocketState &other);
61 
76  typedef enum
77  {
89 
90  // Note: "not triggered" events are currently not triggered by the code.
91  typedef enum
92  {
101  } TcpCAEvent_t;
102 
109  typedef enum
110  {
111  Off = 0,
112  On = 1,
114  } UseEcn_t;
115 
119  typedef enum
120  {
121  NotECT = 0,
122  Ect1 = 1,
123  Ect0 = 2,
124  CongExp = 3,
125  } EcnCodePoint_t;
126 
130  typedef enum
131  {
134  } EcnMode_t;
135 
140  typedef enum
141  {
149  } EcnState_t;
150 
155 
159  static const char* const EcnStateName[TcpSocketState::ECN_CWR_SENT + 1];
160 
161  // Congestion control
165  uint32_t m_initialCWnd {0};
166  uint32_t m_initialSsThresh {0};
167 
168  // Segment
169  uint32_t m_segmentSize {0};
171 
173 
175 
178 
179  uint32_t m_rcvTimestampValue {0};
180  uint32_t m_rcvTimestampEchoReply {0};
181 
182  // Pacing related variables
183  bool m_pacing {false};
186 
188 
191 
193 
196 
198 
204  uint32_t GetCwndInSegments () const
205  {
206  return m_cWnd / m_segmentSize;
207  }
208 
214  uint32_t GetSsThreshInSegments () const
215  {
216  return m_ssThresh / m_segmentSize;
217  }
218 
220 };
221 
222 namespace TracedValueCallback {
223 
231  typedef void (* TcpCongState)(const TcpSocketState::TcpCongState_t oldValue,
232  const TcpSocketState::TcpCongState_t newValue);
233 
241  typedef void (* EcnState)(const TcpSocketState::EcnState_t oldValue,
242  const TcpSocketState::EcnState_t newValue);
243 
244 } // namespace TracedValueCallback
245 
246 } //namespace ns3
247 
248 #endif /* TCP_SOCKET_STATE_H */
uint32_t m_rcvTimestampValue
Receiver Timestamp value.
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:102
UseEcn_t
Parameter value related to ECN enable/disable functionality similar to sysctl for tcp_ecn...
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:73
DataRate m_currentPacingRate
Current Pacing rate.
Last ACK received had ECE bit set in TCP header.
Normal state, no dubious events.
CWND was reduced, we are fast-retransmitting.
In all the respects it is "Open", but requires a bit more attention.
bool m_pacing
Pacing status.
uint32_t m_initialSsThresh
Initial Slow Start Threshold value.
uint32_t m_rcvTimestampEchoReply
Sender Timestamp echoed by the receiver.
static const char *const EcnStateName[TcpSocketState::ECN_CWR_SENT+1]
Literal names of ECN states for use in log messages.
static const char *const TcpCongStateName[TcpSocketState::CA_LAST_STATE]
Literal names of TCP states for use in log messages.
TracedValue< EcnState_t > m_ecnState
Current ECN State, represented as combination of EcnState values.
uint32_t m_segmentSize
Segment size.
TcpSocketState()
TcpSocketState Constructor.
uint32_t m_initialCWnd
Initial cWnd value.
Ptr< TcpRxBuffer > m_rxBuffer
Rx buffer (reordering buffer)
Data structure that records the congestion state of a connection.
Receiver sends an ACK with ECE bit set in TCP header.
Class for representing data rates.
Definition: data-rate.h:88
Last packet received had CE bit set in IP header.
static Time Max()
Maximum representable Time.
Definition: nstime.h:279
Callback< void, uint8_t > m_sendEmptyPacketCallback
TracedValue< uint32_t > m_cWndInfl
Inflated congestion window trace (used only for backward compatibility purpose)
cWnd was reduced due to some Congestion Notification event.
EcnMode_t m_ecnMode
ECN mode.
SequenceNumber32 m_lastAckedSeq
Last sequence ACKed.
ECN is enabled but currently there is no action pertaining to ECE or CWR to be taken.
UseEcn_t m_useEcn
Socket ECN capability.
TracedValue< uint32_t > m_bytesInFlight
Bytes in flight.
TracedValue< uint32_t > m_ssThresh
Slow start threshold.
TcpCongState_t
Definition of the Congestion state machine.
ECN functionality as described in RFC 8257.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Used only in debug messages.
TracedValue< TcpCongState_t > m_congState
State in the Congestion state machine.
void(* EcnState)(const TcpSocketState::EcnState_t oldValue, const TcpSocketState::EcnState_t newValue)
TracedValue Callback signature for EcnState_t.
uint32_t GetSsThreshInSegments() const
Get slow start thresh in segments rather than bytes.
static TypeId GetTypeId(void)
Get the type ID.
TracedValue< uint32_t > m_cWnd
Congestion window.
EcnCodePoint_t m_ectCodePoint
ECT code point to use.
Sender has reduced the congestion window, and sent a packet with CWR bit set in TCP header...
EcnCodePoint_t
ECN code points.
TracedValue< Time > m_lastRtt
Last RTT sample collected.
CWND was reduced due to RTO timeout or SACK reneging.
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition: nstime.h:1062
Time m_minRtt
Minimum RTT observed throughout the connection.
Enable only when the peer endpoint is ECN capable.
TracedValue< SequenceNumber32 > m_highTxMark
Highest seqno ever sent, regardless of ReTx.
first transmit when no packets in flight
void(* TcpCongState)(const TcpSocketState::TcpCongState_t oldValue, const TcpSocketState::TcpCongState_t newValue)
TracedValue Callback signature for TcpCongState_t.
A base class which provides memory management and object aggregation.
Definition: object.h:87
DataRate m_maxPacingRate
Max Pacing rate.
received CE marked IP packet.
a unique identifier for an interface.
Definition: type-id.h:58
ECN functionality as described in RFC 3168.
uint32_t GetCwndInSegments() const
Get cwnd in segments rather than bytes.
TracedValue< SequenceNumber32 > m_nextTxSequence
Next seqnum to be sent (SND.NXT), ReTx pushes it back.
EcnState_t
Definition of the Ecn state machine.
ECT set, but not CE marked.