/usr/include/ns3.27/ns3/tcp-westwood.h is in libns3-dev 3.27+dfsg-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 | /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2013 ResiliNets, ITTC, University of Kansas
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation;
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Authors: Siddharth Gangadhar <siddharth@ittc.ku.edu>, Truc Anh N. Nguyen <annguyen@ittc.ku.edu>,
* and Greeshma Umapathi
*
* James P.G. Sterbenz <jpgs@ittc.ku.edu>, director
* ResiliNets Research Group http://wiki.ittc.ku.edu/resilinets
* Information and Telecommunication Technology Center (ITTC)
* and Department of Electrical Engineering and Computer Science
* The University of Kansas Lawrence, KS USA.
*
* Work supported in part by NSF FIND (Future Internet Design) Program
* under grant CNS-0626918 (Postmodern Internet Architecture),
* NSF grant CNS-1050226 (Multilayer Network Resilience Analysis and Experimentation on GENI),
* US Department of Defense (DoD), and ITTC at The University of Kansas.
*/
#ifndef TCP_WESTWOOD_H
#define TCP_WESTWOOD_H
#include "tcp-congestion-ops.h"
#include "ns3/sequence-number.h"
#include "ns3/traced-value.h"
namespace ns3 {
class Packet;
class TcpHeader;
class Time;
class EventId;
/**
* \ingroup congestionOps
*
* \brief An implementation of TCP Westwood and Westwood+.
*
* Westwood and Westwood+ employ the AIAD (Additive Increase/Adaptive Decrease)
* congestion control paradigm. When a congestion episode happens,
* instead of halving the cwnd, these protocols try to estimate the network's
* bandwidth and use the estimated value to adjust the cwnd.
* While Westwood performs the bandwidth sampling every ACK reception,
* Westwood+ samples the bandwidth every RTT.
*
* The two main methods in the implementation are the CountAck (const TCPHeader&)
* and the EstimateBW (int, const, Time). The CountAck method calculates
* the number of acknowledged segments on the receipt of an ACK.
* The EstimateBW estimates the bandwidth based on the value returned by CountAck
* and the sampling interval (last ACK inter-arrival time for Westwood and last RTT for Westwood+).
*/
class TcpWestwood : public TcpNewReno
{
public:
/**
* \brief Get the type ID.
* \return the object TypeId
*/
static TypeId GetTypeId (void);
TcpWestwood (void);
/**
* \brief Copy constructor
* \param sock the object to copy
*/
TcpWestwood (const TcpWestwood& sock);
virtual ~TcpWestwood (void);
/**
* \brief Protocol variant (Westwood or Westwood+)
*/
enum ProtocolType
{
WESTWOOD,
WESTWOODPLUS
};
/**
* \brief Filter type (None or Tustin)
*/
enum FilterType
{
NONE,
TUSTIN
};
virtual uint32_t GetSsThresh (Ptr<const TcpSocketState> tcb,
uint32_t bytesInFlight);
virtual void PktsAcked (Ptr<TcpSocketState> tcb, uint32_t packetsAcked,
const Time& rtt);
virtual Ptr<TcpCongestionOps> Fork ();
private:
/**
* Update the total number of acknowledged packets during the current RTT
*
* \param [in] acked the number of packets the currently received ACK acknowledges
*/
void UpdateAckedSegments (int acked);
/**
* Estimate the network's bandwidth
*
* \param [in] rtt the RTT estimation.
* \param [in] tcb the socket state.
*/
void EstimateBW (const Time& rtt, Ptr<TcpSocketState> tcb);
protected:
TracedValue<double> m_currentBW; //!< Current value of the estimated BW
double m_lastSampleBW; //!< Last bandwidth sample
double m_lastBW; //!< Last bandwidth sample after being filtered
Time m_minRtt; //!< Minimum RTT
enum ProtocolType m_pType; //!< 0 for Westwood, 1 for Westwood+
enum FilterType m_fType; //!< 0 for none, 1 for Tustin
int m_ackedSegments; //!< The number of segments ACKed between RTTs
bool m_IsCount; //!< Start keeping track of m_ackedSegments for Westwood+ if TRUE
EventId m_bwEstimateEvent; //!< The BW estimation event for Westwood+
};
} // namespace ns3
#endif /* TCP_WESTWOOD_H */
|