|
Lines 350-355
TcpAdvertisedWindowTest::InvalidAwndCb (uint16_t oldAwnd, uint16_t newAwnd)
|
Link Here
|
|---|
|
| 350 |
NS_TEST_ASSERT_MSG_EQ (oldAwnd, newAwnd, |
350 |
NS_TEST_ASSERT_MSG_EQ (oldAwnd, newAwnd, |
| 351 |
"Old and new AWND calculations do not match."); |
351 |
"Old and new AWND calculations do not match."); |
| 352 |
} |
352 |
} |
|
|
353 |
//----------------------------------------------------------------------------- |
| 354 |
|
| 355 |
class TcpAdvWindowOnLossTest : public TcpGeneralTest |
| 356 |
{ |
| 357 |
public: |
| 358 |
/** |
| 359 |
* \brief Constructor |
| 360 |
* \param desc description |
| 361 |
* \param size segment size |
| 362 |
* \param packets number of packets to send |
| 363 |
* \param lossRatio error ratio |
| 364 |
*/ |
| 365 |
TcpAdvWindowOnLossTest (const std::string &desc, uint32_t size, uint32_t packets, |
| 366 |
std::vector<uint32_t> &toDrop); |
| 367 |
|
| 368 |
protected: |
| 369 |
virtual void ConfigureEnvironment (); |
| 370 |
virtual Ptr<TcpSocketMsgBase> CreateReceiverSocket (Ptr<Node> node); |
| 371 |
virtual Ptr<TcpSocketMsgBase> CreateSenderSocket (Ptr<Node> node); |
| 372 |
virtual Ptr<ErrorModel> CreateReceiverErrorModel (); |
| 373 |
|
| 374 |
private: |
| 375 |
/** \brief Callback called for the update of the awnd |
| 376 |
* \param oldAwnd Old advertised window |
| 377 |
* \param newAwnd new value |
| 378 |
*/ |
| 379 |
void InvalidAwndCb (uint16_t oldAwnd, uint16_t newAwnd); |
| 380 |
uint32_t m_pktSize; //!< Packet size |
| 381 |
uint32_t m_pktCount; //!< Pkt count |
| 382 |
std::vector<uint32_t> m_toDrop; //!< Sequences to drop |
| 383 |
}; |
| 384 |
|
| 385 |
TcpAdvWindowOnLossTest::TcpAdvWindowOnLossTest (const std::string &desc, |
| 386 |
uint32_t size, uint32_t packets, |
| 387 |
std::vector<uint32_t> &toDrop) |
| 388 |
: TcpGeneralTest (desc), |
| 389 |
m_pktSize (size), |
| 390 |
m_pktCount (packets), |
| 391 |
m_toDrop (toDrop) |
| 392 |
{ |
| 393 |
} |
| 394 |
|
| 395 |
void |
| 396 |
TcpAdvWindowOnLossTest::ConfigureEnvironment () |
| 397 |
{ |
| 398 |
TcpGeneralTest::ConfigureEnvironment (); |
| 399 |
SetAppPktCount (m_pktCount); |
| 400 |
SetPropagationDelay (MilliSeconds (50)); |
| 401 |
SetTransmitStart (Seconds (2.0)); |
| 402 |
SetAppPktSize (m_pktSize); |
| 403 |
} |
| 404 |
|
| 405 |
Ptr<TcpSocketMsgBase> |
| 406 |
TcpAdvWindowOnLossTest::CreateReceiverSocket (Ptr<Node> node) |
| 407 |
{ |
| 408 |
NS_LOG_FUNCTION (this); |
| 409 |
|
| 410 |
Ptr<TcpSocketMsgBase> sock = CreateSocket (node, TcpSocketAdvertisedWindowProxy::GetTypeId (), m_congControlTypeId); |
| 411 |
DynamicCast<TcpSocketAdvertisedWindowProxy> (sock)->SetExpectedSegmentSize (500); |
| 412 |
DynamicCast<TcpSocketAdvertisedWindowProxy> (sock)->SetInvalidAwndCb ( |
| 413 |
MakeCallback (&TcpAdvWindowOnLossTest::InvalidAwndCb, this)); |
| 414 |
|
| 415 |
return sock; |
| 416 |
} |
| 417 |
|
| 418 |
Ptr<TcpSocketMsgBase> |
| 419 |
TcpAdvWindowOnLossTest::CreateSenderSocket (Ptr<Node> node) |
| 420 |
{ |
| 421 |
auto socket = TcpGeneralTest::CreateSenderSocket (node); |
| 422 |
socket->SetAttribute("InitialCwnd", UintegerValue (10*m_pktSize)); |
| 423 |
|
| 424 |
return socket; |
| 425 |
} |
| 426 |
|
| 427 |
Ptr<ErrorModel> |
| 428 |
TcpAdvWindowOnLossTest::CreateReceiverErrorModel () |
| 429 |
{ |
| 430 |
Ptr<TcpSeqErrorModel> m_errorModel = CreateObject<TcpSeqErrorModel> (); |
| 431 |
for (std::vector<uint32_t>::iterator it = m_toDrop.begin (); it != m_toDrop.end (); ++it) |
| 432 |
{ |
| 433 |
m_errorModel->AddSeqToKill (SequenceNumber32 (*it)); |
| 434 |
} |
| 435 |
|
| 436 |
return m_errorModel; |
| 437 |
} |
| 438 |
|
| 439 |
void |
| 440 |
TcpAdvWindowOnLossTest::InvalidAwndCb (uint16_t oldAwnd, uint16_t newAwnd) |
| 441 |
{ |
| 442 |
NS_TEST_ASSERT_MSG_EQ (oldAwnd, newAwnd, |
| 443 |
"Old and new AWND calculations do not match."); |
| 444 |
} |
| 353 |
|
445 |
|
| 354 |
//----------------------------------------------------------------------------- |
446 |
//----------------------------------------------------------------------------- |
| 355 |
|
447 |
|
|
|
| 376 |
TestCase::QUICK); |
468 |
TestCase::QUICK); |
| 377 |
AddTestCase (new TcpAdvertisedWindowTest ("TCP advertised window size, complete loss", 1000, 100, 1.0), |
469 |
AddTestCase (new TcpAdvertisedWindowTest ("TCP advertised window size, complete loss", 1000, 100, 1.0), |
| 378 |
TestCase::QUICK); |
470 |
TestCase::QUICK); |
|
|
471 |
|
| 472 |
std::vector<uint32_t> toDrop; |
| 473 |
toDrop.push_back(8001); |
| 474 |
toDrop.push_back(9001); |
| 475 |
AddTestCase (new TcpAdvWindowOnLossTest ("TCP advertised window size, after FIN loss", 1000, 10, toDrop)); |
| 379 |
} |
476 |
} |
| 380 |
}; |
477 |
}; |
| 381 |
|
478 |
|