A Discrete-Event Network Simulator
API
tcp-pkts-acked-test.cc
Go to the documentation of this file.
1 /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2016 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  */
19 
20 #include "tcp-general-test.h"
21 #include "ns3/node.h"
22 #include "ns3/log.h"
23 
24 namespace ns3 {
25 
26 NS_LOG_COMPONENT_DEFINE ("TcpPktsAckedTestSuite");
27 
41 class DummyCongControl;
42 
44 {
45 public:
46  TcpPktsAckedOpenTest (const std::string &desc);
47 
48  void PktsAckedCalled (uint32_t segmentsAcked);
49 
50 protected:
52  virtual void Rx (const Ptr<const Packet> p, const TcpHeader&h, SocketWho who);
53 
54  virtual void ConfigureEnvironment ();
55 
56  void FinalChecks ();
57 
58 private:
59  uint32_t m_segmentsAcked;
60  uint32_t m_segmentsReceived;
61 
63 };
64 
70 {
71 public:
72  static TypeId GetTypeId (void);
74  {
75  }
77  {
78  m_test = test;
79  }
80 
81  void PktsAcked (Ptr<TcpSocketState> tcb, uint32_t segmentsAcked,
82  const Time& rtt)
83  {
84  m_test (segmentsAcked);
85  }
86 
87 private:
89 };
90 
91 TypeId
93 {
94  static TypeId tid = TypeId ("ns3::DummyCongControl")
96  .AddConstructor<DummyCongControl> ()
97  .SetGroupName ("Internet")
98  ;
99  return tid;
100 }
101 
103  : TcpGeneralTest (desc),
104  m_segmentsAcked (0),
105  m_segmentsReceived (0)
106 {
107 }
108 
109 void
111 {
113  SetAppPktCount (20);
114  SetMTU (500);
115 }
116 
119 {
121  m_congCtl = CreateObject<DummyCongControl> ();
123  s->SetCongestionControlAlgorithm (m_congCtl);
124 
125  return s;
126 }
127 
128 void
130 {
131  m_segmentsAcked += segmentsAcked;
132 }
133 
134 void
136 {
137  if (who == SENDER && (!(h.GetFlags () & TcpHeader::SYN)))
138  {
140  }
141 }
142 
143 void
145 {
147  "Not all acked segments have been passed to PktsAcked method");
148 }
149 
150 //-----------------------------------------------------------------------------
151 
152 static class TcpPktsAckedTestSuite : public TestSuite
153 {
154 public:
155  TcpPktsAckedTestSuite () : TestSuite ("tcp-pkts-acked-test", UNIT)
156  {
157  AddTestCase (new TcpPktsAckedOpenTest ("PktsAcked check while in OPEN state"),
159  // Add DISORDER, RECOVERY and LOSS state check
160  }
162 
163 } // namespace ns3
void PktsAcked(Ptr< TcpSocketState > tcb, uint32_t segmentsAcked, const Time &rtt)
Timing information on received ACK.
Callback< void, uint32_t > m_test
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:102
TcpPktsAckedOpenTest(const std::string &desc)
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:73
uint32_t GetSegSize(SocketWho who)
Get the segment size of the node specified.
NUMERIC_TYPE GetValue() const
Extracts the numeric value of the sequence number.
uint8_t GetFlags() const
Get the flags.
Definition: tcp-header.cc:173
uint32_t m_segmentsReceived
Contains the number of times PktsAcked is called.
virtual Ptr< TcpSocketMsgBase > CreateSenderSocket(Ptr< Node > node)
Create and install the socket to install on the sender.
Fast test.
Definition: test.h:1152
A suite of tests to run.
Definition: test.h:1333
SequenceNumber32 GetAckNumber() const
Get the ACK number.
Definition: tcp-header.cc:149
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:201
The NewReno implementation.
This test suite implements a Unit Test.
Definition: test.h:1343
void PktsAckedCalled(uint32_t segmentsAcked)
void FinalChecks()
Performs the (eventual) final checks through test asserts.
Ptr< DummyCongControl > m_congCtl
Contains the ack number received.
void AddTestCase(TestCase *testCase, enum TestDuration duration)
Add an individual child TestCase to this test suite.
Definition: test.cc:298
void SetMTU(uint32_t mtu)
MTU of the bottleneck link.
#define NS_TEST_ASSERT_MSG_EQ(actual, limit, msg)
Test that an actual and expected (limit) value are equal and report and abort if not.
Definition: test.h:161
Callback< R > MakeCallback(R(T::*memPtr)(void), OBJ objPtr)
Definition: callback.h:1489
static TypeId GetTypeId(void)
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Header for the Transmission Control Protocol.
Definition: tcp-header.h:44
void SetCallback(Callback< void, uint32_t > test)
void SetAppPktCount(uint32_t pktCount)
Set app packet count.
virtual Ptr< TcpSocketMsgBase > CreateSenderSocket(Ptr< Node > node)
Create and install the socket to install on the sender.
virtual void Rx(const Ptr< const Packet > p, const TcpHeader &h, SocketWho who)
Packet received from IP layer.
ns3::TcpPktsAckedTestSuite g_TcpPktsAckedTestSuite
SocketWho
Used as parameter of methods, specifies on what node the caller is interested (e.g.
virtual void ConfigureEnvironment()
Change the configuration of the evironment.
General infrastructure for TCP testing.
virtual void ConfigureEnvironment(void)
Change the configuration of the evironment.
Behaves as NewReno, except that each time PktsAcked is called, a notification is sent to TcpPktsAcked...
a unique identifier for an interface.
Definition: type-id.h:58
TypeId SetParent(TypeId tid)
Set the parent TypeId.
Definition: type-id.cc:904
void test(void)
Example use of ns3::SystemThread.