This documentation is not the Latest Release.
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 
68 class TcpWestwood : public TcpNewReno
69 {
70 public:
75  static TypeId GetTypeId (void);
76 
77  TcpWestwood (void);
82  TcpWestwood (const TcpWestwood& sock);
83  virtual ~TcpWestwood (void);
84 
89  {
92  };
93 
97  enum FilterType
98  {
101  };
102 
103  virtual uint32_t GetSsThresh (Ptr<const TcpSocketState> tcb,
104  uint32_t bytesInFlight);
105 
106  virtual void PktsAcked (Ptr<TcpSocketState> tcb, uint32_t packetsAcked,
107  const Time& rtt);
108 
109  virtual Ptr<TcpCongestionOps> Fork ();
110 
111 private:
117  void UpdateAckedSegments (int acked);
118 
125  void EstimateBW (const Time& rtt, Ptr<TcpSocketState> tcb);
126 
127 protected:
129  double m_lastSampleBW;
130  double m_lastBW;
134 
136  bool m_IsCount;
138 
139 };
140 
141 } // namespace ns3
142 
143 #endif /* TCP_WESTWOOD_H */
EventId m_bwEstimateEvent
The BW estimation event for Westwood+.
Definition: tcp-westwood.h:137
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:102
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:73
FilterType
Filter type (None or Tustin)
Definition: tcp-westwood.h:97
double m_lastBW
Last bandwidth sample after being filtered.
Definition: tcp-westwood.h:130
void(* Time)(Time oldValue, Time newValue)
TracedValue callback signature for Time.
Definition: nstime.h:719
The NewReno implementation.
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:133
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.
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:135
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:129
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:128
bool m_IsCount
Start keeping track of m_ackedSegments for Westwood+ if TRUE.
Definition: tcp-westwood.h:136
ProtocolType
Protocol variant (Westwood or Westwood+)
Definition: tcp-westwood.h:88
Time m_minRtt
Minimum RTT.
Definition: tcp-westwood.h:131
a unique identifier for an interface.
Definition: type-id.h:58
An implementation of a stream socket using TCP.
Definition: tcp-westwood.h:68
enum ProtocolType m_pType
0 for Westwood, 1 for Westwood+
Definition: tcp-westwood.h:132