A Discrete-Event Network Simulator
API
tcp-westwood.h
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2013 ResiliNets, ITTC, University of Kansas
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  * Authors: Siddharth Gangadhar <siddharth@ittc.ku.edu>, Truc Anh N. Nguyen <annguyen@ittc.ku.edu>,
19  * and Greeshma Umapathi
20  *
21  * James P.G. Sterbenz <jpgs@ittc.ku.edu>, director
22  * ResiliNets Research Group http://wiki.ittc.ku.edu/resilinets
23  * Information and Telecommunication Technology Center (ITTC)
24  * and Department of Electrical Engineering and Computer Science
25  * The University of Kansas Lawrence, KS USA.
26  *
27  * Work supported in part by NSF FIND (Future Internet Design) Program
28  * under grant CNS-0626918 (Postmodern Internet Architecture),
29  * NSF grant CNS-1050226 (Multilayer Network Resilience Analysis and Experimentation on GENI),
30  * US Department of Defense (DoD), and ITTC at The University of Kansas.
31  */
32 
33 #ifndef TCP_WESTWOOD_H
34 #define TCP_WESTWOOD_H
35 
36 #include "tcp-congestion-ops.h"
37 #include "ns3/sequence-number.h"
38 #include "ns3/traced-value.h"
39 
40 namespace ns3 {
41 
42 class Packet;
43 class TcpHeader;
44 class Time;
45 class EventId;
46 
65 class TcpWestwood : public TcpNewReno
66 {
67 public:
72  static TypeId GetTypeId (void);
73 
74  TcpWestwood (void);
79  TcpWestwood (const TcpWestwood& sock);
80  virtual ~TcpWestwood (void);
81 
86  {
89  };
90 
94  enum FilterType
95  {
98  };
99 
100  virtual uint32_t GetSsThresh (Ptr<const TcpSocketState> tcb,
101  uint32_t bytesInFlight);
102 
103  virtual void PktsAcked (Ptr<TcpSocketState> tcb, uint32_t packetsAcked,
104  const Time& rtt);
105 
106  virtual Ptr<TcpCongestionOps> Fork ();
107 
108 private:
114  void UpdateAckedSegments (int acked);
115 
122  void EstimateBW (const Time& rtt, Ptr<TcpSocketState> tcb);
123 
124 protected:
126  double m_lastSampleBW;
127  double m_lastBW;
131 
133  bool m_IsCount;
135 
136 };
137 
138 } // namespace ns3
139 
140 #endif /* TCP_WESTWOOD_H */
EventId m_bwEstimateEvent
The BW estimation event for Westwood+.
Definition: tcp-westwood.h:134
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:102
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:73
double m_lastBW
Last bandwidth sample after being filtered.
Definition: tcp-westwood.h:127
void(* Time)(Time oldValue, Time newValue)
TracedValue callback signature for Time.
Definition: nstime.h:719
The NewReno implementation.
FilterType
Filter type (None or Tustin)
Definition: tcp-westwood.h:94
virtual void PktsAcked(Ptr< TcpSocketState > tcb, uint32_t packetsAcked, const Time &rtt)
Timing information on received ACK.
Definition: tcp-westwood.cc:98
enum FilterType m_fType
0 for none, 1 for Tustin
Definition: tcp-westwood.h:130
void UpdateAckedSegments(int acked)
Update the total number of acknowledged packets during the current RTT.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
ProtocolType
Protocol variant (Westwood or Westwood+)
Definition: tcp-westwood.h:85
static TypeId GetTypeId(void)
Get the type ID.
Definition: tcp-westwood.cc:47
virtual uint32_t GetSsThresh(Ptr< const TcpSocketState > tcb, uint32_t bytesInFlight)
Get the slow start threshold after a loss event.
virtual ~TcpWestwood(void)
Definition: tcp-westwood.cc:93
int m_ackedSegments
The number of segments ACKed between RTTs.
Definition: tcp-westwood.h:132
An identifier for simulation events.
Definition: event-id.h:53
virtual Ptr< TcpCongestionOps > Fork()
Copy the congestion control algorithm across socket.
double m_lastSampleBW
Last bandwidth sample.
Definition: tcp-westwood.h:126
void EstimateBW(const Time &rtt, Ptr< TcpSocketState > tcb)
Estimate the network's bandwidth.
TracedValue< double > m_currentBW
Current value of the estimated BW.
Definition: tcp-westwood.h:125
bool m_IsCount
Start keeping track of m_ackedSegments for Westwood+ if TRUE.
Definition: tcp-westwood.h:133
Time m_minRtt
Minimum RTT.
Definition: tcp-westwood.h:128
a unique identifier for an interface.
Definition: type-id.h:58
An implementation of TCP Westwood and Westwood+.
Definition: tcp-westwood.h:65
enum ProtocolType m_pType
0 for Westwood, 1 for Westwood+
Definition: tcp-westwood.h:129