View | Details | Raw Unified | Return to bug 136
Collapse All | Expand All

(-)a/src/internet-node/udp-socket.cc (-17 / +44 lines)
 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

Return to bug 136