LEFT | RIGHT |
1 /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */ | 1 /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */ |
2 /* | 2 /* |
3 * Copyright (c) 2010 Adrian Sai-wah Tam | 3 * Copyright (c) 2010 Adrian Sai-wah Tam |
4 * | 4 * |
5 * This program is free software; you can redistribute it and/or modify | 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 | 6 * it under the terms of the GNU General Public License version 2 as |
7 * published by the Free Software Foundation; | 7 * published by the Free Software Foundation; |
8 * | 8 * |
9 * This program is distributed in the hope that it will be useful, | 9 * This program is distributed in the hope that it will be useful, |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
12 * GNU General Public License for more details. | 12 * GNU General Public License for more details. |
13 * | 13 * |
14 * You should have received a copy of the GNU General Public License | 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 | 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 | 16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
17 * | 17 * |
18 * Author: Adrian Sai-wah Tam <adrian.sw.tam@gmail.com> | 18 * Author: Adrian Sai-wah Tam <adrian.sw.tam@gmail.com> |
19 */ | 19 */ |
20 | 20 |
21 #ifndef TCP_NEWRENO_H | 21 #ifndef TCP_NEWRENO_H |
22 #define TCP_NEWRENO_H | 22 #define TCP_NEWRENO_H |
23 | 23 |
24 #include "tcp-reno.h" | 24 #include "tcp-socket-base.h" |
25 | 25 |
26 namespace ns3 { | 26 namespace ns3 { |
27 | 27 |
28 /** | 28 /** |
29 * \ingroup socket | 29 * \ingroup socket |
30 * \ingroup tcp | 30 * \ingroup tcp |
31 * | 31 * |
32 * \brief An implementation of a stream socket using TCP. | 32 * \brief An implementation of a stream socket using TCP. |
33 * | 33 * |
34 * This class contains the NewReno implementation of TCP, as of RFC2582. | 34 * This class contains the NewReno implementation of TCP, as of RFC2582. |
35 */ | 35 */ |
36 class TcpNewReno : public TcpReno | 36 class TcpNewReno : public TcpSocketBase |
37 { | 37 { |
38 public: | 38 public: |
39 static TypeId GetTypeId (void); | 39 static TypeId GetTypeId (void); |
40 /** | 40 /** |
41 * Create an unbound tcp socket. | 41 * Create an unbound tcp socket. |
42 */ | 42 */ |
43 TcpNewReno (void); | 43 TcpNewReno (void); |
44 TcpNewReno (const TcpNewReno& sock); | 44 TcpNewReno (const TcpNewReno& sock); |
45 virtual ~TcpNewReno (void); | 45 virtual ~TcpNewReno (void); |
46 | 46 |
| 47 // Set associated Node, TcpL4Protocol, RttEstimator to this socket |
| 48 virtual void SetNode (Ptr<Node> node); |
| 49 |
47 protected: | 50 protected: |
48 virtual Ptr<TcpSocketBase> Fork (); // Call CopyObject<TcpNewReno> to clone me | 51 virtual uint32_t Window (void); // Return the max possible number of unacked b
ytes |
| 52 virtual Ptr<TcpSocketBase> Fork (void); // Call CopyObject<TcpNewReno> to clon
e me |
49 virtual void NewAck (SequenceNumber32 const& seq); // Inc cwnd and call NewAck
() of parent | 53 virtual void NewAck (SequenceNumber32 const& seq); // Inc cwnd and call NewAck
() of parent |
50 virtual void DupAck (const TcpHeader& t, uint32_t count); // Halving cwnd and
reset nextTxSequence | 54 virtual void DupAck (const TcpHeader& t, uint32_t count); // Halving cwnd and
reset nextTxSequence |
| 55 virtual void Retransmit (void); // Exit fast recovery upon retransmit timeout |
51 | 56 |
52 SequenceNumber32 m_recover; // Previous highest Tx seqnum for fast recovery | 57 // Implementing ns3::TcpSocket -- Attribute get/set |
53 bool m_inFastRec; // currently in fast recovery | 58 virtual void SetSegSize (uint32_t size); |
| 59 virtual void SetSSThresh (uint32_t threshold); |
| 60 virtual uint32_t GetSSThresh (void) const; |
| 61 virtual void SetInitialCwnd (uint32_t cwnd); |
| 62 virtual uint32_t GetInitialCwnd (void) const; |
| 63 |
| 64 protected: |
| 65 TracedValue<uint32_t> m_cWnd; //< Congestion window |
| 66 uint32_t m_ssThresh; //< Slow Start Threshold |
| 67 uint32_t m_initialCWnd; //< Initial cWnd value |
| 68 SequenceNumber32 m_recover; //< Previous highest Tx seqnum for fast
recovery |
| 69 bool m_inFastRec; //< currently in fast recovery |
54 }; | 70 }; |
55 | 71 |
56 } // namespace ns3 | 72 } // namespace ns3 |
57 | 73 |
58 #endif /* TCP_NEWRENO_H */ | 74 #endif /* TCP_NEWRENO_H */ |
LEFT | RIGHT |