A Discrete-Event Network Simulator
API
ns3tcp-loss-test-suite.cc
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2010 University of Washington
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 #include <iomanip>
20 
21 #include "ns3/log.h"
22 #include "ns3/abort.h"
23 #include "ns3/test.h"
24 #include "ns3/pcap-file.h"
25 #include "ns3/config.h"
26 #include "ns3/string.h"
27 #include "ns3/uinteger.h"
28 #include "ns3/data-rate.h"
29 #include "ns3/inet-socket-address.h"
30 #include "ns3/point-to-point-helper.h"
31 #include "ns3/internet-stack-helper.h"
32 #include "ns3/ipv4-global-routing-helper.h"
33 #include "ns3/ipv4-address-helper.h"
34 #include "ns3/packet-sink-helper.h"
35 #include "ns3/tcp-socket-factory.h"
36 #include "ns3/node-container.h"
37 #include "ns3/simulator.h"
38 #include "ns3/error-model.h"
39 #include "ns3/pointer.h"
40 #include "ns3tcp-socket-writer.h"
41 #include "ns3/tcp-westwood.h"
42 
43 using namespace ns3;
44 
45 NS_LOG_COMPONENT_DEFINE ("Ns3TcpLossTest");
46 
47 const bool WRITE_VECTORS = false; // set to true to write response vectors
48 const bool WRITE_LOGGING = false; // set to true to write logging
49 const uint32_t PCAP_LINK_TYPE = 1187373557; // Some large random number -- we use to verify data was written by this program
50 const uint32_t PCAP_SNAPLEN = 64; // Don't bother to save much data
51 
52 // ===========================================================================
53 // Tests of TCP implementation loss behavior
54 // ===========================================================================
55 //
56 
58 {
59 public:
61  Ns3TcpLossTestCase (std::string tcpModel, uint32_t testCase);
62  virtual ~Ns3TcpLossTestCase () {}
63 
64 private:
65  virtual void DoSetup (void);
66  virtual void DoRun (void);
67  virtual void DoTeardown (void);
68 
70  std::string m_pcapFilename;
72  uint32_t m_testCase;
73  uint32_t m_totalTxBytes;
74  uint32_t m_currentTxBytes;
79  std::string m_tcpModel;
80 
81  void Ipv4L3Tx (std::string context, Ptr<const Packet> packet, Ptr<Ipv4> ipv4, uint32_t interface);
82  void CwndTracer (uint32_t oldval, uint32_t newval);
83  void WriteUntilBufferFull (Ptr<Socket> localSocket, uint32_t txSpace);
84  void StartFlow (Ptr<Socket> localSocket,
85  Ipv4Address servAddress,
86  uint16_t servPort);
87 
88 };
89 
91  : TestCase ("Check the operation of the TCP state machine for several cases"),
92  m_testCase (0),
93  m_totalTxBytes (200000),
94  m_currentTxBytes (0),
95  m_writeVectors (WRITE_VECTORS),
96  m_writeResults (false),
97  m_writeLogging (WRITE_LOGGING),
98  m_needToClose (true),
99  m_tcpModel ("ns3::TcpWestwood")
100 {
101 }
102 
103 Ns3TcpLossTestCase::Ns3TcpLossTestCase (std::string tcpModel, uint32_t testCase)
104  : TestCase ("Check the behaviour of TCP upon packet losses"),
105  m_testCase (testCase),
106  m_totalTxBytes (200000),
107  m_currentTxBytes (0),
108  m_writeVectors (WRITE_VECTORS),
109  m_writeResults (false),
110  m_writeLogging (WRITE_LOGGING),
111  m_needToClose (true),
112  m_tcpModel (tcpModel)
113 {
114 }
115 
116 void
118 {
119  //
120  // We expect there to be a file called ns3tcp-state-response-vectors.pcap in
121  // the data directory
122  //
123  std::ostringstream oss;
124  oss << "ns3tcp-loss-" << m_tcpModel << m_testCase << "-response-vectors.pcap";
126 
127  if (m_writeVectors)
128  {
129  m_pcapFile.Open (m_pcapFilename, std::ios::out|std::ios::binary);
131  }
132  else
133  {
134  m_pcapFile.Open (m_pcapFilename, std::ios::in|std::ios::binary);
136  "Wrong response vectors in directory: opening " <<
138  }
139 }
140 
141 void
143 {
144  m_pcapFile.Close ();
145 }
146 
147 void
148 Ns3TcpLossTestCase::Ipv4L3Tx (std::string context, Ptr<const Packet> packet, Ptr<Ipv4> ipv4, uint32_t interface)
149 {
150  //
151  // We're not testing IP so remove and toss the header. In order to do this,
152  // though, we need to copy the packet since we have a const version.
153  //
154  Ptr<Packet> p = packet->Copy ();
155  Ipv4Header ipHeader;
156  p->RemoveHeader (ipHeader);
157 
158  //
159  // What is left is the TCP header and any data that may be sent. We aren't
160  // sending any TCP data, so we expect what remains is only TCP header, which
161  // is a small thing to save.
162  //
163  if (m_writeVectors)
164  {
165  //
166  // Save the TCP under test response for later testing.
167  //
168  Time tNow = Simulator::Now ();
169  int64_t tMicroSeconds = tNow.GetMicroSeconds ();
170 
171 
172  m_pcapFile.Write (uint32_t (tMicroSeconds / 1000000),
173  uint32_t (tMicroSeconds % 1000000),
174  p
175  );
176  }
177  else
178  {
179  //
180  // Read the TCP under test expected response from the expected vector
181  // file and see if it still does the right thing.
182  //
183  uint8_t expected[PCAP_SNAPLEN];
184  uint32_t tsSec, tsUsec, inclLen, origLen, readLen;
185  m_pcapFile.Read (expected, sizeof(expected), tsSec, tsUsec, inclLen, origLen, readLen);
186 
187  NS_LOG_DEBUG ("read " << readLen);
188 
189  uint8_t *actual = new uint8_t[readLen];
190  p->CopyData (actual, readLen);
191 
192  int result = memcmp (actual, expected, readLen);
193 
194  delete [] actual;
195 
196  //
197  // Avoid streams of errors -- only report the first.
198  //
199  if (IsStatusSuccess ())
200  {
201  NS_TEST_EXPECT_MSG_EQ (result, 0, "Expected data comparison error: " << m_tcpModel << "-" << m_testCase);
202  }
203  }
204 }
205 
206 void
207 Ns3TcpLossTestCase::CwndTracer (uint32_t oldval, uint32_t newval)
208 {
209  if (m_writeLogging)
210  {
211  *(m_osw->GetStream ()) << "Moving cwnd from " << oldval << " to " << newval
212  << " at time " << Simulator::Now ().GetSeconds ()
213  << " seconds" << std::endl;
214  }
215 }
216 
218 // Implementing an "application" to send bytes over a TCP connection
219 void
221 {
223  {
224  uint32_t left = m_totalTxBytes - m_currentTxBytes;
225  uint32_t dataOffset = m_currentTxBytes % 1040;
226  uint32_t toWrite = 1040 - dataOffset;
227  uint32_t txAvail = localSocket->GetTxAvailable ();
228  toWrite = std::min (toWrite, left);
229  toWrite = std::min (toWrite, txAvail);
230  if (txAvail == 0)
231  {
232  return;
233  };
234  if (m_writeLogging)
235  {
236  std::clog << "Submitting " << toWrite
237  << " bytes to TCP socket" << std::endl;
238  }
239  int amountSent = localSocket->Send (0, toWrite, 0);
240  NS_ASSERT (amountSent > 0); // Given GetTxAvailable() non-zero, amountSent should not be zero
241  m_currentTxBytes += amountSent;
242  }
243  if (m_needToClose)
244  {
245  if (m_writeLogging)
246  {
247  std::clog << "Close socket at "
248  << Simulator::Now ().GetSeconds () << std::endl;
249  }
250  localSocket->Close ();
251  m_needToClose = false;
252  }
253 }
254 
255 void
257  Ipv4Address servAddress,
258  uint16_t servPort)
259 {
260  if (m_writeLogging)
261  {
262  std::clog << "Starting flow at time "
263  << Simulator::Now ().GetSeconds () << std::endl;
264  }
265  localSocket->Connect (InetSocketAddress (servAddress, servPort)); // connect
266 
267  // tell the tcp implementation to call WriteUntilBufferFull again
268  // if we blocked and new tx buffer space becomes available
269  localSocket->SetSendCallback (MakeCallback
271  this));
272  WriteUntilBufferFull (localSocket, localSocket->GetTxAvailable ());
273 }
274 
275 void
277 {
278  // Network topology
279  //
280  // 8Mb/s, 0.1ms 0.8Mb/s, 100ms
281  // s1-----------------r1-----------------k1
282  //
283  // Example corresponding to simulations in the paper "Simulation-based
284  // Comparisons of Tahoe, Reno, and SACK TCP
285 
286  std::ostringstream tcpModel;
287  tcpModel << "ns3::Tcp" << m_tcpModel;
288  if (m_tcpModel.compare("WestwoodPlus") == 0)
289  {
290  Config::SetDefault("ns3::TcpL4Protocol::SocketType",
291  TypeIdValue (TcpWestwood::GetTypeId()));
292  Config::SetDefault("ns3::TcpWestwood::ProtocolType",
293  EnumValue(TcpWestwood::WESTWOODPLUS));
294  }
295  else
296  {
297  Config::SetDefault ("ns3::TcpL4Protocol::SocketType",
298  StringValue (tcpModel.str ()));
299  }
300 
301  Config::SetDefault ("ns3::TcpSocket::SegmentSize", UintegerValue (1000));
302  Config::SetDefault ("ns3::TcpSocket::DelAckCount", UintegerValue (1));
303  Config::SetDefault ("ns3::TcpSocketBase::Timestamp", BooleanValue (false));
304 
305  if (m_writeLogging)
306  {
308  LogComponentEnable ("Ns3TcpLossTest", LOG_LEVEL_ALL);
309  LogComponentEnable ("ErrorModel", LOG_LEVEL_DEBUG);
310  LogComponentEnable ("TcpWestwood", LOG_LEVEL_ALL);
311  LogComponentEnable ("TcpNewReno", LOG_LEVEL_INFO);
312  LogComponentEnable ("TcpReno", LOG_LEVEL_INFO);
313  LogComponentEnable ("TcpTahoe", LOG_LEVEL_INFO);
314  LogComponentEnable ("TcpSocketBase", LOG_LEVEL_INFO);
315  }
316 
318  // Topology construction
319  //
320 
321  // Create three nodes: s1, r1, and k1
322  NodeContainer s1r1;
323  s1r1.Create (2);
324 
325  NodeContainer r1k1;
326  r1k1.Add (s1r1.Get (1));
327  r1k1.Create (1);
328 
329  // Set up TCP/IP stack to all nodes (and create loopback device at device 0)
330  InternetStackHelper internet;
331  internet.InstallAll ();
332 
333  // Connect the nodes
334  PointToPointHelper p2p;
335  p2p.SetDeviceAttribute ("DataRate", DataRateValue (DataRate (8000000)));
336  p2p.SetChannelAttribute ("Delay", TimeValue (Seconds (0.0001)));
337  NetDeviceContainer dev0 = p2p.Install (s1r1);
338  p2p.SetDeviceAttribute ("DataRate", DataRateValue (DataRate (800000)));
339  p2p.SetChannelAttribute ("Delay", TimeValue (Seconds (0.1)));
340  NetDeviceContainer dev1 = p2p.Install (r1k1);
341 
342  // Add IP addresses to each network interfaces
343  Ipv4AddressHelper ipv4;
344  ipv4.SetBase ("10.1.3.0", "255.255.255.0");
345  ipv4.Assign (dev0);
346  ipv4.SetBase ("10.1.2.0", "255.255.255.0");
347  Ipv4InterfaceContainer ipInterfs = ipv4.Assign (dev1);
348 
349  // Set up routes to all nodes
350  Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
351 
353  // Send 20000 (totalTxBytes) bytes from node s1 to node k1
354  //
355 
356  // Create a packet sink to receive packets on node k1
357  uint16_t servPort = 50000; // Destination port number
358  PacketSinkHelper sink ("ns3::TcpSocketFactory",
359  InetSocketAddress (Ipv4Address::GetAny (), servPort));
360  ApplicationContainer apps = sink.Install (r1k1.Get (1));
361  apps.Start (Seconds (0.0));
362  apps.Stop (Seconds (100.0));
363 
364  // Create a data source to send packets on node s0.
365  // Instead of full application, here use the socket directly by
366  // registering callbacks in function StarFlow().
367  Ptr<Socket> localSocket = Socket::CreateSocket (s1r1.Get (0), TcpSocketFactory::GetTypeId ());
368  localSocket->Bind ();
369  Simulator::ScheduleNow (&Ns3TcpLossTestCase::StartFlow,
370  this,
371  localSocket,
372  ipInterfs.GetAddress (1),
373  servPort);
374 
375  Config::Connect ("/NodeList/0/$ns3::Ipv4L3Protocol/Tx",
377 
379  ("/NodeList/0/$ns3::TcpL4Protocol/SocketList/0/CongestionWindow",
381 
383  // Set up loss model at node k1
384  //
385  std::list<uint32_t> sampleList;
386  switch (m_testCase)
387  {
388  case 0:
389  break;
390  case 1:
391  // Force a loss for 15th data packet. TCP cwnd will be at 14 segments
392  // (14000 bytes) when duplicate acknowledgments start to come.
393  sampleList.push_back (16);
394  break;
395  case 2:
396  sampleList.push_back (16);
397  sampleList.push_back (17);
398  break;
399  case 3:
400  sampleList.push_back (16);
401  sampleList.push_back (17);
402  sampleList.push_back (18);
403  break;
404  case 4:
405  sampleList.push_back (16);
406  sampleList.push_back (17);
407  sampleList.push_back (18);
408  sampleList.push_back (19);
409  break;
410  default:
411  NS_FATAL_ERROR ("Program fatal error: loss value " << m_testCase << " not supported.");
412  break;
413  }
414 
415  Ptr<ReceiveListErrorModel> pem = CreateObject<ReceiveListErrorModel> ();
416  pem->SetList (sampleList);
417  dev1.Get (1)->SetAttribute ("ReceiveErrorModel", PointerValue (pem));
418 
419  // One can toggle the comment for the following line on or off to see the
420  // effects of finite send buffer modelling. One can also change the size of
421  // that buffer.
422  // localSocket->SetAttribute("SndBufSize", UintegerValue(4096));
423 
424  std::ostringstream oss;
425  oss << "tcp-loss-" << m_tcpModel << m_testCase << "-test-case";
426  if (m_writeResults)
427  {
428  p2p.EnablePcapAll (oss.str ());
429  p2p.EnableAsciiAll (oss.str ());
430  }
431 
432  std::ostringstream oss2;
433  oss2 << "src/test/ns3tcp/Tcp" << m_tcpModel << "." << m_testCase << ".log";
434  AsciiTraceHelper ascii;
435  if (m_writeLogging)
436  {
437  m_osw = ascii.CreateFileStream (oss2.str ());
438  *(m_osw->GetStream ()) << std::setprecision (9) << std::fixed;
439  p2p.EnableAsciiAll (m_osw);
440  }
441 
442  // Finally, set up the simulator to run. The 1000 second hard limit is a
443  // failsafe in case some change above causes the simulation to never end
444  Simulator::Stop (Seconds (1000));
445  Simulator::Run ();
446  Simulator::Destroy ();
447 }
448 
450 {
451 public:
453 };
454 
456  : TestSuite ("ns3-tcp-loss", SYSTEM)
457 {
458  // We can't use NS_TEST_SOURCEDIR variable here because we use subdirectories
459  SetDataDir ("src/test/ns3tcp/response-vectors");
460  Packet::EnablePrinting (); // Enable packet metadata for all test cases
461 
462  AddTestCase (new Ns3TcpLossTestCase ("Tahoe", 0), TestCase::QUICK);
463  AddTestCase (new Ns3TcpLossTestCase ("Tahoe", 1), TestCase::QUICK);
464  AddTestCase (new Ns3TcpLossTestCase ("Tahoe", 2), TestCase::QUICK);
465  AddTestCase (new Ns3TcpLossTestCase ("Tahoe", 3), TestCase::QUICK);
466  AddTestCase (new Ns3TcpLossTestCase ("Tahoe", 4), TestCase::QUICK);
467 
468  AddTestCase (new Ns3TcpLossTestCase ("Reno", 0), TestCase::QUICK);
469  AddTestCase (new Ns3TcpLossTestCase ("Reno", 1), TestCase::QUICK);
470  AddTestCase (new Ns3TcpLossTestCase ("Reno", 2), TestCase::QUICK);
471  AddTestCase (new Ns3TcpLossTestCase ("Reno", 3), TestCase::QUICK);
472  AddTestCase (new Ns3TcpLossTestCase ("Reno", 4), TestCase::QUICK);
473 
474  AddTestCase (new Ns3TcpLossTestCase ("NewReno", 0), TestCase::QUICK);
475  AddTestCase (new Ns3TcpLossTestCase ("NewReno", 1), TestCase::QUICK);
476  AddTestCase (new Ns3TcpLossTestCase ("NewReno", 2), TestCase::QUICK);
477  AddTestCase (new Ns3TcpLossTestCase ("NewReno", 3), TestCase::QUICK);
478  AddTestCase (new Ns3TcpLossTestCase ("NewReno", 4), TestCase::QUICK);
479 
480  AddTestCase (new Ns3TcpLossTestCase ("Westwood", 0), TestCase::QUICK);
481  AddTestCase (new Ns3TcpLossTestCase ("Westwood", 1), TestCase::QUICK);
482  AddTestCase (new Ns3TcpLossTestCase ("Westwood", 2), TestCase::QUICK);
483  AddTestCase (new Ns3TcpLossTestCase ("Westwood", 3), TestCase::QUICK);
484  AddTestCase (new Ns3TcpLossTestCase ("Westwood", 4), TestCase::QUICK);
485 
486  AddTestCase (new Ns3TcpLossTestCase ("WestwoodPlus", 0), TestCase::QUICK);
487  AddTestCase (new Ns3TcpLossTestCase ("WestwoodPlus", 1), TestCase::QUICK);
488  AddTestCase (new Ns3TcpLossTestCase ("WestwoodPlus", 2), TestCase::QUICK);
489  AddTestCase (new Ns3TcpLossTestCase ("WestwoodPlus", 3), TestCase::QUICK);
490  AddTestCase (new Ns3TcpLossTestCase ("WestwoodPlus", 4), TestCase::QUICK);
491 
492 }
493 
495 
uint32_t RemoveHeader(Header &header)
Deserialize and remove the header from the internal buffer.
Definition: packet.cc:266
holds a vector of ns3::Application pointers.
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:102
Manage ASCII trace files for device models.
Definition: trace-helper.h:155
an Inet address class
AttributeValue implementation for Boolean.
Definition: boolean.h:34
holds a vector of std::pair of Ptr and interface index.
void Ipv4L3Tx(std::string context, Ptr< const Packet > packet, Ptr< Ipv4 > ipv4, uint32_t interface)
Hold variables of type string.
Definition: string.h:41
Ptr< NetDevice > Get(uint32_t i) const
Get the Ptr stored in this container at a given index.
NetDeviceContainer Install(NodeContainer c)
A suite of tests to run.
Definition: test.h:1333
void StartFlow(Ptr< Socket > localSocket, Ipv4Address servAddress, uint16_t servPort)
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file...
Definition: assert.h:67
virtual void DoTeardown(void)
Implementation to do any local setup required for this TestCase.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:201
aggregate IP/TCP/UDP functionality to existing Nodes.
#define NS_TEST_EXPECT_MSG_EQ(actual, limit, msg)
Test that an actual and expected (limit) value are equal and report if not.
Definition: test.h:278
LOG_INFO and above.
Definition: log.h:103
const bool WRITE_VECTORS
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
Definition: fatal-error.h:145
A helper to make it easier to instantiate an ns3::PacketSinkApplication on a set of nodes...
Ptr< OutputStreamWrapper > CreateFileStream(std::string filename, std::ios::openmode filemode=std::ios::out)
Create and initialize an output stream object we'll use to write the traced bits. ...
Build a set of PointToPointNetDevice objects.
encapsulates test code
Definition: test.h:1147
void SetDeviceAttribute(std::string name, const AttributeValue &value)
Set an attribute value to be propagated to each NetDevice created by the helper.
void StartFlow(Ptr< Socket >, Ipv4Address, uint16_t)
Class for representing data rates.
Definition: data-rate.h:88
Packet header for IPv4.
Definition: ipv4-header.h:31
double GetSeconds(void) const
Get an approximation of the time stored in this instance in the indicated unit.
Definition: nstime.h:341
virtual void DoRun(void)
Implementation to actually run this TestCase.
void LogComponentEnable(char const *name, enum LogLevel level)
Enable the logging output associated with that log component.
Definition: log.cc:351
void EnablePcapAll(std::string prefix, bool promiscuous=false)
Enable pcap output on each device (which is of the appropriate type) in the set of all nodes created ...
Hold variables of type enum.
Definition: enum.h:54
static void CwndTracer(uint32_t oldval, uint32_t newval)
void CwndTracer(uint32_t oldval, uint32_t newval)
int64_t GetMicroSeconds(void) const
Get an approximation of the time stored in this instance in the indicated unit.
Definition: nstime.h:349
void InstallAll(void) const
Aggregate IPv4, IPv6, UDP, and TCP stacks to all nodes in the simulation.
void AddTestCase(TestCase *testCase, enum TestDuration duration)
Add an individual child TestCase to this test suite.
Definition: test.cc:297
AttributeValue implementation for Time.
Definition: nstime.h:957
A class representing a pcap file.
Definition: pcap-file.h:42
void Read(uint8_t *const data, uint32_t maxBytes, uint32_t &tsSec, uint32_t &tsUsec, uint32_t &inclLen, uint32_t &origLen, uint32_t &readLen)
Read next packet from file.
Definition: pcap-file.cc:441
Hold an unsigned integer type.
Definition: uinteger.h:44
Ptr< OutputStreamWrapper > m_osw
static Ns3TcpLossTestSuite ns3TcpLossTestSuite
holds a vector of ns3::NetDevice pointers
AttributeValue implementation for TypeId.
Definition: type-id.h:548
Callback< R > MakeCallback(R(T::*memPtr)(void), OBJ objPtr)
Definition: callback.h:1480
void ConnectWithoutContext(std::string path, const CallbackBase &cb)
Definition: config.cc:824
const bool WRITE_LOGGING
void Start(Time start)
Arrange for all of the Applications in this container to Start() at the Time given as a parameter...
void Connect(std::string path, const CallbackBase &cb)
Definition: config.cc:835
virtual int Connect(const Address &address)=0
Initiate a connection to a remote host.
const uint32_t PCAP_LINK_TYPE
Ptr< Packet > Copy(void) const
performs a COW copy of the packet.
Definition: packet.cc:122
LOG_DEBUG and above.
Definition: log.h:100
void LogComponentEnableAll(enum LogLevel level)
Enable the logging output for all registered log components.
Definition: log.cc:375
virtual void DoSetup(void)
Implementation to do any local setup required for this TestCase.
virtual int Bind(const Address &address)=0
Allocate a local endpoint for this socket.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
void WriteUntilBufferFull(Ptr< Socket > localSocket, uint32_t txSpace)
keep track of a set of node pointers.
Hold objects of type Ptr.
Definition: pointer.h:36
std::string CreateDataDirFilename(std::string filename)
Construct the full path to a file in the data directory.
Definition: test.cc:410
void WriteUntilBufferFull(Ptr< Socket >, uint32_t)
Prefix all trace prints with function.
Definition: log.h:114
void SetList(const std::list< uint32_t > &packetlist)
Definition: error-model.cc:520
void Init(uint32_t dataLinkType, uint32_t snapLen=SNAPLEN_DEFAULT, int32_t timeZoneCorrection=ZONE_DEFAULT, bool swapMode=false)
Initialize the pcap file associated with this object.
Definition: pcap-file.cc:330
void Close(void)
Close the underlying file.
Definition: pcap-file.cc:87
void SetSendCallback(Callback< void, Ptr< Socket >, uint32_t > sendCb)
Notify application when space in transmit buffer is added.
Definition: socket.cc:121
bool IsStatusSuccess(void) const
Check if all tests passed.
Definition: test.cc:456
void Open(std::string const &filename, std::ios::openmode mode)
Create a new pcap file or open an existing pcap file.
Definition: pcap-file.cc:311
void SetChannelAttribute(std::string name, const AttributeValue &value)
Set an attribute value to be propagated to each Channel created by the helper.
Ipv4 addresses are stored in host order in this class.
Definition: ipv4-address.h:40
void Stop(Time stop)
Arrange for all of the Applications in this container to Stop() at the Time given as a parameter...
Ipv4InterfaceContainer Assign(const NetDeviceContainer &c)
Assign IP addresses to the net devices specified in the container based on the current network prefix...
void Add(NodeContainer other)
Append the contents of another NodeContainer to the end of this container.
#define NS_ABORT_MSG_UNLESS(cond, msg)
Abnormal program termination if a condition is false, with a message.
Definition: abort.h:144
AttributeValue implementation for DataRate.
Definition: data-rate.h:241
Ptr< Node > Get(uint32_t i) const
Get the Ptr stored in this container at a given index.
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
Definition: log.h:236
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition: nstime.h:895
void SetDefault(std::string name, const AttributeValue &value)
Definition: config.cc:774
void SetDataDir(std::string directory)
Set the data directory where reference trace files can be found.
Definition: test.cc:463
Print everything.
Definition: log.h:112
uint32_t CopyData(uint8_t *buffer, uint32_t size) const
Copy the packet contents to a byte buffer.
Definition: packet.cc:354
ApplicationContainer Install(NodeContainer c) const
Install an ns3::PacketSinkApplication on each node of the input container configured with all the att...
A helper class to make life easier while doing simple IPv4 address assignment in scripts.
Time Now(void)
create an ns3::Time instance which contains the current simulation time.
Definition: simulator.cc:330
void EnableAsciiAll(std::string prefix)
Enable ascii trace output on each device (which is of the appropriate type) in the set of all nodes c...
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
uint32_t GetDataLinkType(void)
Returns the data link type field of the pcap file as defined by the network field in the pcap global ...
Definition: pcap-file.cc:136
void Write(uint32_t tsSec, uint32_t tsUsec, uint8_t const *const data, uint32_t totalLen)
Write next packet to file.
Definition: pcap-file.cc:406
virtual int Send(Ptr< Packet > p, uint32_t flags)=0
Send data (or dummy data) to the remote host.
virtual int Close(void)=0
Close a socket.
const uint32_t PCAP_SNAPLEN
virtual uint32_t GetTxAvailable(void) const =0
Returns the number of bytes which can be sent in a single call to Send.
std::ostream * GetStream(void)
Return a pointer to an ostream previously set in the wrapper.
void SetBase(Ipv4Address network, Ipv4Mask mask, Ipv4Address base="0.0.0.1")
Set the base network number, network mask and base address.
Ipv4Address GetAddress(uint32_t i, uint32_t j=0) const