A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
tcp-test.cc
Go to the documentation of this file.
1/*
2 * Copyright (c) 2007 Georgia Tech Research Corporation
3 * Copyright (c) 2009 INRIA
4 *
5 * SPDX-License-Identifier: GPL-2.0-only
6 *
7 * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
8 * Raj Bhattacharjea <raj.b@gatech.edu>
9 */
10
11#include "ns3/arp-l3-protocol.h"
12#include "ns3/config.h"
13#include "ns3/icmpv4-l4-protocol.h"
14#include "ns3/icmpv6-l4-protocol.h"
15#include "ns3/inet-socket-address.h"
16#include "ns3/inet6-socket-address.h"
17#include "ns3/ipv4-l3-protocol.h"
18#include "ns3/ipv4-list-routing.h"
19#include "ns3/ipv4-static-routing.h"
20#include "ns3/ipv6-l3-protocol.h"
21#include "ns3/ipv6-list-routing.h"
22#include "ns3/ipv6-static-routing.h"
23#include "ns3/log.h"
24#include "ns3/node.h"
25#include "ns3/simple-channel.h"
26#include "ns3/simple-net-device.h"
27#include "ns3/simulator.h"
28#include "ns3/socket-factory.h"
29#include "ns3/tcp-l4-protocol.h"
30#include "ns3/tcp-socket-factory.h"
31#include "ns3/test.h"
32#include "ns3/traffic-control-layer.h"
33#include "ns3/udp-l4-protocol.h"
34#include "ns3/uinteger.h"
35
36#include <string>
37
38using namespace ns3;
39
40NS_LOG_COMPONENT_DEFINE("TcpTestSuite");
41
42/**
43 * \ingroup internet-test
44 *
45 * \brief TCP Test - send string data from client to server and back.
46 */
47class TcpTestCase : public TestCase
48{
49 public:
50 /**
51 * \brief Constructor.
52 * \param totalStreamSize Total stream size (in bytes).
53 * \param sourceWriteSize Client data size when sending.
54 * \param sourceReadSize Client data size when receiving.
55 * \param serverWriteSize Server data size when sending.
56 * \param serverReadSize Server data size when receiving.
57 * \param useIpv6 Use IPv6 instead of IPv4.
58 */
59 TcpTestCase(uint32_t totalStreamSize,
60 uint32_t sourceWriteSize,
61 uint32_t sourceReadSize,
62 uint32_t serverWriteSize,
63 uint32_t serverReadSize,
64 bool useIpv6);
65
66 private:
67 void DoRun() override;
68 void DoTeardown() override;
69
70 /**
71 * \brief Setup the test (IPv4 version).
72 */
73 void SetupDefaultSim();
74 /**
75 * \brief Setup the test (IPv6 version).
76 */
77 void SetupDefaultSim6();
78
79 /**
80 * \brief Create a node with the Internet stack (IPv4 version).
81 * \returns The new node.
82 */
84 /**
85 * \brief Create a node with the Internet stack (IPv6 version).
86 * \returns The new node.
87 */
89
90 /**
91 * \brief Add a SimpleNetDevice to a node (IPv4 version).
92 * \param node The target node.
93 * \param ipaddr the SimpleNetDevice IPv4 address.
94 * \param netmask the SimpleNetDevice IPv4 address netmask.
95 * \returns The new SimpleNetDevice.
96 */
98 const char* ipaddr,
99 const char* netmask);
100 /**
101 * \brief Add a SimpleNetDevice to a node (IPv6 version).
102 * \param node The target node.
103 * \param ipaddr the SimpleNetDevice IPv6 address.
104 * \param prefix the SimpleNetDevice IP6 address prefix.
105 * \returns The new SimpleNetDevice.
106 */
108
109 /**
110 * \brief Server: Handle connection created.
111 * \param s The socket.
112 * \param addr The other party address.
113 */
115 /**
116 * \brief Server: Receive data.
117 * \param sock The socket.
118 */
119 void ServerHandleRecv(Ptr<Socket> sock);
120 /**
121 * \brief Server: Send data.
122 * \param sock The socket.
123 * \param available Unused in the test.
124 */
125 void ServerHandleSend(Ptr<Socket> sock, uint32_t available);
126 /**
127 * \brief Client: Send data.
128 * \param sock The socket.
129 * \param available Unused in the test.
130 */
131 void SourceHandleSend(Ptr<Socket> sock, uint32_t available);
132 /**
133 * \brief Client: Receive data.
134 * \param sock The socket.
135 */
136 void SourceHandleRecv(Ptr<Socket> sock);
137
138 uint32_t m_totalBytes; //!< Total stream size (in bytes).
139 uint32_t m_sourceWriteSize; //!< Client data size when sending.
140 uint32_t m_sourceReadSize; //!< Client data size when receiving.
141 uint32_t m_serverWriteSize; //!< Server data size when sending.
142 uint32_t m_serverReadSize; //!< Server data size when receiving.
143 uint32_t m_currentSourceTxBytes; //!< Client Tx bytes.
144 uint32_t m_currentSourceRxBytes; //!< Client Rx bytes.
145 uint32_t m_currentServerRxBytes; //!< Server Tx bytes.
146 uint32_t m_currentServerTxBytes; //!< Server Rx bytes.
147 uint8_t* m_sourceTxPayload; //!< Client Tx payload.
148 uint8_t* m_sourceRxPayload; //!< Client Rx payload.
149 uint8_t* m_serverRxPayload; //!< Server Rx payload.
150
151 bool m_useIpv6; //!< Use IPv6 instead of IPv4.
152};
153
154static std::string
155Name(std::string str,
156 uint32_t totalStreamSize,
157 uint32_t sourceWriteSize,
158 uint32_t serverReadSize,
159 uint32_t serverWriteSize,
160 uint32_t sourceReadSize,
161 bool useIpv6)
162{
163 std::ostringstream oss;
164 oss << str << " total=" << totalStreamSize << " sourceWrite=" << sourceWriteSize
165 << " sourceRead=" << sourceReadSize << " serverRead=" << serverReadSize
166 << " serverWrite=" << serverWriteSize << " useIpv6=" << useIpv6;
167 return oss.str();
168}
169
170static inline std::string
172{
173 std::ostringstream oss;
174 p->CopyData(&oss, p->GetSize());
175 return oss.str();
176}
177
179 uint32_t sourceWriteSize,
180 uint32_t sourceReadSize,
181 uint32_t serverWriteSize,
182 uint32_t serverReadSize,
183 bool useIpv6)
184 : TestCase(Name("Send string data from client to server and back",
185 totalStreamSize,
186 sourceWriteSize,
187 serverReadSize,
188 serverWriteSize,
189 sourceReadSize,
190 useIpv6)),
191 m_totalBytes(totalStreamSize),
192 m_sourceWriteSize(sourceWriteSize),
193 m_sourceReadSize(sourceReadSize),
194 m_serverWriteSize(serverWriteSize),
195 m_serverReadSize(serverReadSize),
196 m_useIpv6(useIpv6)
197{
198}
199
200void
202{
207 m_sourceTxPayload = new uint8_t[m_totalBytes];
208 m_sourceRxPayload = new uint8_t[m_totalBytes];
209 m_serverRxPayload = new uint8_t[m_totalBytes];
210 for (uint32_t i = 0; i < m_totalBytes; ++i)
211 {
212 auto m = (uint8_t)(97 + (i % 26));
213 m_sourceTxPayload[i] = m;
214 }
217
218 if (m_useIpv6)
219 {
221 }
222 else
223 {
225 }
226
228
230 NS_TEST_EXPECT_MSG_EQ(m_currentServerRxBytes, m_totalBytes, "Server received all bytes");
231 NS_TEST_EXPECT_MSG_EQ(m_currentSourceRxBytes, m_totalBytes, "Source received all bytes");
233 0,
234 "Server received expected data buffers");
236 0,
237 "Source received back expected data buffers");
238}
239
240void
242{
243 delete[] m_sourceTxPayload;
244 delete[] m_sourceRxPayload;
245 delete[] m_serverRxPayload;
247}
248
249void
251{
252 s->SetRecvCallback(MakeCallback(&TcpTestCase::ServerHandleRecv, this));
253 s->SetSendCallback(MakeCallback(&TcpTestCase::ServerHandleSend, this));
254}
255
256void
258{
259 while (sock->GetRxAvailable() > 0)
260 {
261 uint32_t toRead = std::min(m_serverReadSize, sock->GetRxAvailable());
262 Ptr<Packet> p = sock->Recv(toRead, 0);
263 if (!p && sock->GetErrno() != Socket::ERROR_NOTERROR)
264 {
265 NS_FATAL_ERROR("Server could not read stream at byte " << m_currentServerRxBytes);
266 }
268 true,
269 "Server received too many bytes");
270 NS_LOG_DEBUG("Server recv data=\"" << GetString(p) << "\"");
271 p->CopyData(&m_serverRxPayload[m_currentServerRxBytes], p->GetSize());
272 m_currentServerRxBytes += p->GetSize();
273 ServerHandleSend(sock, sock->GetTxAvailable());
274 }
275}
276
277void
279{
280 while (sock->GetTxAvailable() > 0 && m_currentServerTxBytes < m_currentServerRxBytes)
281 {
283 uint32_t toSend = std::min(left, sock->GetTxAvailable());
284 toSend = std::min(toSend, m_serverWriteSize);
286 NS_LOG_DEBUG("Server send data=\"" << GetString(p) << "\"");
287 int sent = sock->Send(p);
288 NS_TEST_EXPECT_MSG_EQ((sent != -1), true, "Server error during send ?");
290 }
292 {
293 sock->Close();
294 }
295}
296
297void
299{
300 while (sock->GetTxAvailable() > 0 && m_currentSourceTxBytes < m_totalBytes)
301 {
303 uint32_t toSend = std::min(left, sock->GetTxAvailable());
304 toSend = std::min(toSend, m_sourceWriteSize);
306 NS_LOG_DEBUG("Source send data=\"" << GetString(p) << "\"");
307 int sent = sock->Send(p);
308 NS_TEST_EXPECT_MSG_EQ((sent != -1), true, "Error during send ?");
310 }
311}
312
313void
315{
316 while (sock->GetRxAvailable() > 0 && m_currentSourceRxBytes < m_totalBytes)
317 {
318 uint32_t toRead = std::min(m_sourceReadSize, sock->GetRxAvailable());
319 Ptr<Packet> p = sock->Recv(toRead, 0);
320 if (!p && sock->GetErrno() != Socket::ERROR_NOTERROR)
321 {
322 NS_FATAL_ERROR("Source could not read stream at byte " << m_currentSourceRxBytes);
323 }
325 true,
326 "Source received too many bytes");
327 NS_LOG_DEBUG("Source recv data=\"" << GetString(p) << "\"");
328 p->CopyData(&m_sourceRxPayload[m_currentSourceRxBytes], p->GetSize());
329 m_currentSourceRxBytes += p->GetSize();
330 }
332 {
333 sock->Close();
334 }
335}
336
339{
341 // Traffic Control
343 node->AggregateObject(tc);
344 // ARP
346 node->AggregateObject(arp);
347 arp->SetTrafficControl(tc);
348 // IPV4
350 // Routing for Ipv4
352 ipv4->SetRoutingProtocol(ipv4Routing);
354 ipv4Routing->AddRoutingProtocol(ipv4staticRouting, 0);
355 node->AggregateObject(ipv4);
356 // ICMP
358 node->AggregateObject(icmp);
359 // UDP
361 node->AggregateObject(udp);
362 // TCP
364 node->AggregateObject(tcp);
365 return node;
366}
367
369TcpTestCase::AddSimpleNetDevice(Ptr<Node> node, const char* ipaddr, const char* netmask)
370{
373 node->AddDevice(dev);
374 Ptr<Ipv4> ipv4 = node->GetObject<Ipv4>();
375 uint32_t ndid = ipv4->AddInterface(dev);
377 ipv4->AddAddress(ndid, ipv4Addr);
378 ipv4->SetUp(ndid);
379 return dev;
380}
381
382void
384{
385 const char* netmask = "255.255.255.0";
386 const char* ipaddr0 = "192.168.1.1";
387 const char* ipaddr1 = "192.168.1.2";
390 Ptr<SimpleNetDevice> dev0 = AddSimpleNetDevice(node0, ipaddr0, netmask);
391 Ptr<SimpleNetDevice> dev1 = AddSimpleNetDevice(node1, ipaddr1, netmask);
392
394 dev0->SetChannel(channel);
395 dev1->SetChannel(channel);
396
397 Ptr<SocketFactory> sockFactory0 = node0->GetObject<TcpSocketFactory>();
398 Ptr<SocketFactory> sockFactory1 = node1->GetObject<TcpSocketFactory>();
399
400 Ptr<Socket> server = sockFactory0->CreateSocket();
401 Ptr<Socket> source = sockFactory1->CreateSocket();
402
403 uint16_t port = 50000;
404 InetSocketAddress serverlocaladdr(Ipv4Address::GetAny(), port);
405 InetSocketAddress serverremoteaddr(Ipv4Address(ipaddr0), port);
406
407 server->Bind(serverlocaladdr);
408 server->Listen();
409 server->SetAcceptCallback(MakeNullCallback<bool, Ptr<Socket>, const Address&>(),
411
412 source->SetRecvCallback(MakeCallback(&TcpTestCase::SourceHandleRecv, this));
413 source->SetSendCallback(MakeCallback(&TcpTestCase::SourceHandleSend, this));
414
415 Address peerAddress;
416 int err = source->GetPeerName(peerAddress);
417 NS_TEST_EXPECT_MSG_EQ(err, -1, "socket GetPeerName() should fail when socket is not connected");
418 NS_TEST_EXPECT_MSG_EQ(source->GetErrno(),
420 "socket error code should be ERROR_NOTCONN");
421
422 err = source->Connect(serverremoteaddr);
423 NS_TEST_EXPECT_MSG_EQ(err, 0, "socket Connect() should succeed");
424
425 err = source->GetPeerName(peerAddress);
426 NS_TEST_EXPECT_MSG_EQ(err, 0, "socket GetPeerName() should succeed when socket is connected");
427 NS_TEST_EXPECT_MSG_EQ(peerAddress,
428 serverremoteaddr,
429 "address from socket GetPeerName() should equal the connected address");
430}
431
432void
434{
435 Ipv6Prefix prefix = Ipv6Prefix(64);
436 Ipv6Address ipaddr0 = Ipv6Address("2001:0100:f00d:cafe::1");
437 Ipv6Address ipaddr1 = Ipv6Address("2001:0100:f00d:cafe::2");
440 Ptr<SimpleNetDevice> dev0 = AddSimpleNetDevice6(node0, ipaddr0, prefix);
441 Ptr<SimpleNetDevice> dev1 = AddSimpleNetDevice6(node1, ipaddr1, prefix);
442
444 dev0->SetChannel(channel);
445 dev1->SetChannel(channel);
446
447 Ptr<SocketFactory> sockFactory0 = node0->GetObject<TcpSocketFactory>();
448 Ptr<SocketFactory> sockFactory1 = node1->GetObject<TcpSocketFactory>();
449
450 Ptr<Socket> server = sockFactory0->CreateSocket();
451 Ptr<Socket> source = sockFactory1->CreateSocket();
452
453 uint16_t port = 50000;
454 Inet6SocketAddress serverlocaladdr(Ipv6Address::GetAny(), port);
455 Inet6SocketAddress serverremoteaddr(ipaddr0, port);
456
457 server->Bind(serverlocaladdr);
458 server->Listen();
459 server->SetAcceptCallback(MakeNullCallback<bool, Ptr<Socket>, const Address&>(),
461
462 source->SetRecvCallback(MakeCallback(&TcpTestCase::SourceHandleRecv, this));
463 source->SetSendCallback(MakeCallback(&TcpTestCase::SourceHandleSend, this));
464
465 Address peerAddress;
466 int err = source->GetPeerName(peerAddress);
467 NS_TEST_EXPECT_MSG_EQ(err, -1, "socket GetPeerName() should fail when socket is not connected");
468 NS_TEST_EXPECT_MSG_EQ(source->GetErrno(),
470 "socket error code should be ERROR_NOTCONN");
471
472 err = source->Connect(serverremoteaddr);
473 NS_TEST_EXPECT_MSG_EQ(err, 0, "socket Connect() should succeed");
474
475 err = source->GetPeerName(peerAddress);
476 NS_TEST_EXPECT_MSG_EQ(err, 0, "socket GetPeerName() should succeed when socket is connected");
477 NS_TEST_EXPECT_MSG_EQ(peerAddress,
478 serverremoteaddr,
479 "address from socket GetPeerName() should equal the connected address");
480}
481
484{
486 // IPV6
488 // Routing for Ipv6
490 ipv6->SetRoutingProtocol(ipv6Routing);
492 ipv6Routing->AddRoutingProtocol(ipv6staticRouting, 0);
493 node->AggregateObject(ipv6);
494 // ICMP
496 node->AggregateObject(icmp);
497 // Ipv6 Extensions
498 ipv6->RegisterExtensions();
499 ipv6->RegisterOptions();
500 // UDP
502 node->AggregateObject(udp);
503 // TCP
505 node->AggregateObject(tcp);
506 // Traffic Control
508 node->AggregateObject(tc);
509 return node;
510}
511
514{
517 node->AddDevice(dev);
518 Ptr<Ipv6> ipv6 = node->GetObject<Ipv6>();
519 uint32_t ndid = ipv6->AddInterface(dev);
520 Ipv6InterfaceAddress ipv6Addr = Ipv6InterfaceAddress(ipaddr, prefix);
521 ipv6->AddAddress(ndid, ipv6Addr);
522 ipv6->SetUp(ndid);
523 return dev;
524}
525
526/**
527 * \ingroup internet-test
528 *
529 * \brief TCP TestSuite - send string data from client to server and back.
530 */
532{
533 public:
535 : TestSuite("tcp", Type::UNIT)
536 {
537 // Arguments to these test cases are 1) totalStreamSize,
538 // 2) source write size, 3) source read size
539 // 4) server write size, and 5) server read size
540 // with units of bytes
541 AddTestCase(new TcpTestCase(13, 200, 200, 200, 200, false), TestCase::Duration::QUICK);
542 AddTestCase(new TcpTestCase(13, 1, 1, 1, 1, false), TestCase::Duration::QUICK);
543 AddTestCase(new TcpTestCase(100000, 100, 50, 100, 20, false), TestCase::Duration::QUICK);
544
545 AddTestCase(new TcpTestCase(13, 200, 200, 200, 200, true), TestCase::Duration::QUICK);
546 AddTestCase(new TcpTestCase(13, 1, 1, 1, 1, true), TestCase::Duration::QUICK);
547 AddTestCase(new TcpTestCase(100000, 100, 50, 100, 20, true), TestCase::Duration::QUICK);
548 }
549};
550
551static TcpTestSuite g_tcpTestSuite; //!< Static variable for test initialization
TCP Test - send string data from client to server and back.
Definition tcp-test.cc:48
uint32_t m_serverReadSize
Server data size when receiving.
Definition tcp-test.cc:142
uint8_t * m_sourceTxPayload
Client Tx payload.
Definition tcp-test.cc:147
Ptr< SimpleNetDevice > AddSimpleNetDevice(Ptr< Node > node, const char *ipaddr, const char *netmask)
Add a SimpleNetDevice to a node (IPv4 version).
Definition tcp-test.cc:369
bool m_useIpv6
Use IPv6 instead of IPv4.
Definition tcp-test.cc:151
void ServerHandleSend(Ptr< Socket > sock, uint32_t available)
Server: Send data.
Definition tcp-test.cc:278
uint32_t m_currentServerTxBytes
Server Rx bytes.
Definition tcp-test.cc:146
void DoRun() override
Implementation to actually run this TestCase.
Definition tcp-test.cc:201
uint32_t m_currentSourceTxBytes
Client Tx bytes.
Definition tcp-test.cc:143
void ServerHandleRecv(Ptr< Socket > sock)
Server: Receive data.
Definition tcp-test.cc:257
Ptr< SimpleNetDevice > AddSimpleNetDevice6(Ptr< Node > node, Ipv6Address ipaddr, Ipv6Prefix prefix)
Add a SimpleNetDevice to a node (IPv6 version).
Definition tcp-test.cc:513
Ptr< Node > CreateInternetNode()
Create a node with the Internet stack (IPv4 version).
Definition tcp-test.cc:338
Ptr< Node > CreateInternetNode6()
Create a node with the Internet stack (IPv6 version).
Definition tcp-test.cc:483
void SourceHandleRecv(Ptr< Socket > sock)
Client: Receive data.
Definition tcp-test.cc:314
void ServerHandleConnectionCreated(Ptr< Socket > s, const Address &addr)
Server: Handle connection created.
Definition tcp-test.cc:250
TcpTestCase(uint32_t totalStreamSize, uint32_t sourceWriteSize, uint32_t sourceReadSize, uint32_t serverWriteSize, uint32_t serverReadSize, bool useIpv6)
Constructor.
Definition tcp-test.cc:178
uint32_t m_currentSourceRxBytes
Client Rx bytes.
Definition tcp-test.cc:144
uint32_t m_totalBytes
Total stream size (in bytes).
Definition tcp-test.cc:138
uint32_t m_sourceReadSize
Client data size when receiving.
Definition tcp-test.cc:140
void SetupDefaultSim6()
Setup the test (IPv6 version).
Definition tcp-test.cc:433
uint8_t * m_sourceRxPayload
Client Rx payload.
Definition tcp-test.cc:148
uint32_t m_serverWriteSize
Server data size when sending.
Definition tcp-test.cc:141
void SourceHandleSend(Ptr< Socket > sock, uint32_t available)
Client: Send data.
Definition tcp-test.cc:298
void SetupDefaultSim()
Setup the test (IPv4 version).
Definition tcp-test.cc:383
uint32_t m_currentServerRxBytes
Server Tx bytes.
Definition tcp-test.cc:145
uint8_t * m_serverRxPayload
Server Rx payload.
Definition tcp-test.cc:149
uint32_t m_sourceWriteSize
Client data size when sending.
Definition tcp-test.cc:139
void DoTeardown() override
Implementation to do any local setup required for this TestCase.
Definition tcp-test.cc:241
TCP TestSuite - send string data from client to server and back.
Definition tcp-test.cc:532
a polymophic address class
Definition address.h:90
An Inet6 address class.
an Inet address class
Ipv4 addresses are stored in host order in this class.
static Ipv4Address GetAny()
Access to the IPv4 forwarding table, interfaces, and configuration.
Definition ipv4.h:69
a class to store IPv4 address information on an interface
a class to represent an Ipv4 address mask
Describes an IPv6 address.
static Ipv6Address GetAny()
Get the "any" (::) Ipv6Address.
Access to the IPv6 forwarding table, interfaces, and configuration.
Definition ipv6.h:71
IPv6 address associated with an interface.
Describes an IPv6 prefix.
static Mac48Address ConvertFrom(const Address &address)
static Mac48Address Allocate()
Allocate a new Mac48Address.
Smart pointer class similar to boost::intrusive_ptr.
static void Destroy()
Execute the events scheduled with ScheduleDestroy().
Definition simulator.cc:131
static void Run()
Run the simulation.
Definition simulator.cc:167
@ ERROR_NOTERROR
Definition socket.h:74
@ ERROR_NOTCONN
Definition socket.h:76
API to create TCP socket instances.
encapsulates test code
Definition test.h:1050
void AddTestCase(TestCase *testCase, Duration duration=Duration::QUICK)
Add an individual child TestCase to this test suite.
Definition test.cc:292
A suite of tests to run.
Definition test.h:1267
Type
Type of test.
Definition test.h:1274
static constexpr auto UNIT
Definition test.h:1291
uint16_t port
Definition dsdv-manet.cc:33
Callback< R, Args... > MakeNullCallback()
Definition callback.h:727
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition log.h:191
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
Definition log.h:257
Ptr< T > CreateObject(Args &&... args)
Create an object by type, with varying number of constructor parameters.
Definition object.h:619
Ptr< T > Create(Ts &&... args)
Create class instances by constructors with varying numbers of arguments and return them by Ptr.
Definition ptr.h:436
#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:241
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Callback< R, Args... > MakeCallback(R(T::*memPtr)(Args...), OBJ objPtr)
Build Callbacks for class method members which take varying numbers of arguments and potentially retu...
Definition callback.h:684
static TcpTestSuite g_tcpTestSuite
Static variable for test initialization.
Definition tcp-test.cc:551
static std::string Name(std::string str, uint32_t totalStreamSize, uint32_t sourceWriteSize, uint32_t serverReadSize, uint32_t serverWriteSize, uint32_t sourceReadSize, bool useIpv6)
Definition tcp-test.cc:155
static std::string GetString(Ptr< Packet > p)
Definition tcp-test.cc:171