|
Lines 388-414
UdpSocketTest::RunTests (void)
|
Link Here
|
|---|
|
| 388 |
|
388 |
|
| 389 |
// Receiver Node |
389 |
// Receiver Node |
| 390 |
Ptr<Node> rxNode = CreateObject<InternetNode> (); |
390 |
Ptr<Node> rxNode = CreateObject<InternetNode> (); |
| 391 |
Ptr<PointToPointNetDevice> rxDev = CreateObject<PointToPointNetDevice> (rxNode); |
391 |
Ptr<PointToPointNetDevice> rxDev1, rxDev2; |
| 392 |
rxDev->AddQueue(CreateObject<DropTailQueue> ()); |
392 |
{ // first interface |
| 393 |
Ptr<Ipv4> ipv4 = rxNode->GetObject<Ipv4> (); |
393 |
rxDev1 = CreateObject<PointToPointNetDevice> (rxNode); |
| 394 |
uint32_t netdev_idx = ipv4->AddInterface (rxDev); |
394 |
rxDev1->AddQueue(CreateObject<DropTailQueue> ()); |
| 395 |
ipv4->SetAddress (netdev_idx, Ipv4Address ("10.0.0.1")); |
395 |
Ptr<Ipv4> ipv4 = rxNode->GetObject<Ipv4> (); |
| 396 |
ipv4->SetNetworkMask (netdev_idx, Ipv4Mask (0xffff0000U)); |
396 |
uint32_t netdev_idx = ipv4->AddInterface (rxDev1); |
| 397 |
ipv4->SetUp (netdev_idx); |
397 |
ipv4->SetAddress (netdev_idx, Ipv4Address ("10.0.0.1")); |
|
|
398 |
ipv4->SetNetworkMask (netdev_idx, Ipv4Mask (0xffff0000U)); |
| 399 |
ipv4->SetUp (netdev_idx); |
| 400 |
} |
| 398 |
|
401 |
|
|
|
402 |
{ // second interface |
| 403 |
rxDev2 = CreateObject<PointToPointNetDevice> (rxNode); |
| 404 |
rxDev2->AddQueue(CreateObject<DropTailQueue> ()); |
| 405 |
Ptr<Ipv4> ipv4 = rxNode->GetObject<Ipv4> (); |
| 406 |
uint32_t netdev_idx = ipv4->AddInterface (rxDev2); |
| 407 |
ipv4->SetAddress (netdev_idx, Ipv4Address ("10.0.1.1")); |
| 408 |
ipv4->SetNetworkMask (netdev_idx, Ipv4Mask (0xffff0000U)); |
| 409 |
ipv4->SetUp (netdev_idx); |
| 410 |
} |
| 411 |
|
| 399 |
// Sender Node |
412 |
// Sender Node |
| 400 |
Ptr<Node> txNode = CreateObject<InternetNode> (); |
413 |
Ptr<Node> txNode = CreateObject<InternetNode> (); |
| 401 |
Ptr<PointToPointNetDevice> txDev = CreateObject<PointToPointNetDevice> (txNode); |
414 |
Ptr<PointToPointNetDevice> txDev; |
| 402 |
txDev->AddQueue(CreateObject<DropTailQueue> ()); |
415 |
{ |
| 403 |
ipv4 = txNode->GetObject<Ipv4> (); |
416 |
txDev = CreateObject<PointToPointNetDevice> (txNode); |
| 404 |
netdev_idx = ipv4->AddInterface (txDev); |
417 |
txDev->AddQueue(CreateObject<DropTailQueue> ()); |
| 405 |
ipv4->SetAddress (netdev_idx, Ipv4Address ("10.0.0.2")); |
418 |
Ptr<Ipv4> ipv4 = txNode->GetObject<Ipv4> (); |
| 406 |
ipv4->SetNetworkMask (netdev_idx, Ipv4Mask (0xffff0000U)); |
419 |
uint32_t netdev_idx = ipv4->AddInterface (txDev); |
| 407 |
ipv4->SetUp (netdev_idx); |
420 |
ipv4->SetAddress (netdev_idx, Ipv4Address ("10.0.0.2")); |
|
|
421 |
ipv4->SetNetworkMask (netdev_idx, Ipv4Mask (0xffff0000U)); |
| 422 |
ipv4->SetUp (netdev_idx); |
| 423 |
} |
| 408 |
|
424 |
|
| 409 |
// link the two nodes |
425 |
// link the two nodes |
| 410 |
Ptr<PointToPointChannel> channel = CreateObject<PointToPointChannel> (); |
426 |
Ptr<PointToPointChannel> channel = CreateObject<PointToPointChannel> (); |
| 411 |
rxDev->Attach (channel); |
427 |
rxDev1->Attach (channel); |
| 412 |
txDev->Attach (channel); |
428 |
txDev->Attach (channel); |
| 413 |
|
429 |
|
| 414 |
|
430 |
|
|
Lines 417-422
UdpSocketTest::RunTests (void)
|
Link Here
|
|---|
|
| 417 |
Ptr<Socket> rxSocket = rxSocketFactory->CreateSocket (); |
433 |
Ptr<Socket> rxSocket = rxSocketFactory->CreateSocket (); |
| 418 |
NS_TEST_ASSERT_EQUAL (rxSocket->Bind (InetSocketAddress (Ipv4Address ("10.0.0.2"), 1234)), 0); |
434 |
NS_TEST_ASSERT_EQUAL (rxSocket->Bind (InetSocketAddress (Ipv4Address ("10.0.0.2"), 1234)), 0); |
| 419 |
rxSocket->SetRecvCallback (MakeCallback (&UdpSocketTest::ReceivePacket, this)); |
435 |
rxSocket->SetRecvCallback (MakeCallback (&UdpSocketTest::ReceivePacket, this)); |
|
|
436 |
|
| 437 |
Ptr<Socket> rxSocket2 = rxSocketFactory->CreateSocket (); |
| 438 |
rxSocket2->SetRecvCallback (MakeCallback (&UdpSocketTest::ReceivePacket2, this)); |
| 439 |
NS_TEST_ASSERT_EQUAL (rxSocket2->Bind (InetSocketAddress (Ipv4Address ("10.0.1.1"), 1234)), 0); |
| 420 |
|
440 |
|
| 421 |
Ptr<SocketFactory> txSocketFactory = txNode->GetObject<Udp> (); |
441 |
Ptr<SocketFactory> txSocketFactory = txNode->GetObject<Udp> (); |
| 422 |
Ptr<Socket> txSocket = txSocketFactory->CreateSocket (); |
442 |
Ptr<Socket> txSocket = txSocketFactory->CreateSocket (); |
|
Lines 425-450
UdpSocketTest::RunTests (void)
|
Link Here
|
|---|
|
| 425 |
|
445 |
|
| 426 |
// Unicast test |
446 |
// Unicast test |
| 427 |
m_receivedPacket = Create<Packet> (); |
447 |
m_receivedPacket = Create<Packet> (); |
|
|
448 |
m_receivedPacket2 = Create<Packet> (); |
| 428 |
NS_TEST_ASSERT_EQUAL (txSocket->SendTo (InetSocketAddress (Ipv4Address("10.0.0.1"), 1234), |
449 |
NS_TEST_ASSERT_EQUAL (txSocket->SendTo (InetSocketAddress (Ipv4Address("10.0.0.1"), 1234), |
| 429 |
Create<Packet> (123)), 0); |
450 |
Create<Packet> (123)), 0); |
| 430 |
Simulator::Run (); |
451 |
Simulator::Run (); |
| 431 |
NS_TEST_ASSERT_EQUAL (m_receivedPacket->GetSize (), 123); |
452 |
NS_TEST_ASSERT_EQUAL (m_receivedPacket->GetSize (), 123); |
|
|
453 |
NS_TEST_ASSERT_EQUAL (m_receivedPacket2->GetSize (), 0); // second interface should receive it |
| 432 |
|
454 |
|
| 433 |
|
455 |
|
| 434 |
// Simple broadcast test |
456 |
// Simple broadcast test |
| 435 |
|
457 |
|
| 436 |
m_receivedPacket = Create<Packet> (); |
458 |
m_receivedPacket = Create<Packet> (); |
|
|
459 |
m_receivedPacket2 = Create<Packet> (); |
| 437 |
NS_TEST_ASSERT_EQUAL (txSocket->SendTo (InetSocketAddress (Ipv4Address("255.255.255.255"), 1234), |
460 |
NS_TEST_ASSERT_EQUAL (txSocket->SendTo (InetSocketAddress (Ipv4Address("255.255.255.255"), 1234), |
| 438 |
Create<Packet> (123)), 0); |
461 |
Create<Packet> (123)), 0); |
| 439 |
Simulator::Run (); |
462 |
Simulator::Run (); |
| 440 |
NS_TEST_ASSERT_EQUAL (m_receivedPacket->GetSize (), 123); |
463 |
NS_TEST_ASSERT_EQUAL (m_receivedPacket->GetSize (), 123); |
|
|
464 |
// second socket should not receive it (it is bound specifically to the second interface's address |
| 465 |
NS_TEST_ASSERT_EQUAL (m_receivedPacket2->GetSize (), 0); |
| 441 |
|
466 |
|
| 442 |
|
467 |
|
| 443 |
// Broadcast test with multiple receiving sockets |
468 |
// Broadcast test with multiple receiving sockets |
| 444 |
|
469 |
|
| 445 |
// When receiving broadcast packets, all sockets sockets bound to |
470 |
// When receiving broadcast packets, all sockets sockets bound to |
| 446 |
// the address/port should receive a copy of the same packet. |
471 |
// the address/port should receive a copy of the same packet -- if |
| 447 |
Ptr<Socket> rxSocket2 = rxSocketFactory->CreateSocket (); |
472 |
// the socket address matches. |
|
|
473 |
rxSocket2->Dispose (); |
| 474 |
rxSocket2 = rxSocketFactory->CreateSocket (); |
| 448 |
rxSocket2->SetRecvCallback (MakeCallback (&UdpSocketTest::ReceivePacket2, this)); |
475 |
rxSocket2->SetRecvCallback (MakeCallback (&UdpSocketTest::ReceivePacket2, this)); |
| 449 |
NS_TEST_ASSERT_EQUAL (rxSocket2->Bind (InetSocketAddress (Ipv4Address ("0.0.0.0"), 1234)), 0); |
476 |
NS_TEST_ASSERT_EQUAL (rxSocket2->Bind (InetSocketAddress (Ipv4Address ("0.0.0.0"), 1234)), 0); |
| 450 |
|
477 |
|